From ec54d9d3e24c6bd1a1188bd832ab32fe80697386 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Tue, 26 Jul 2022 21:08:51 +0100 Subject: [PATCH 01/44] Added new @iiif/parser/strict for converting P3 --- .gitignore | 1 + .../strict-upgrade.test.ts | 615 ++++++++++++++++++ package.json | 5 + rollup.config.js | 18 + src/presentation-2/upgrader.ts | 18 +- src/presentation-3/strict-upgrade.ts | 387 +++++++++++ src/shared/ensure-array.ts | 6 + src/shared/remove-undefined-properties.ts | 8 + 8 files changed, 1042 insertions(+), 16 deletions(-) create mode 100644 __tests__/presentation-3-parser/strict-upgrade.test.ts create mode 100644 src/presentation-3/strict-upgrade.ts create mode 100644 src/shared/ensure-array.ts create mode 100644 src/shared/remove-undefined-properties.ts diff --git a/.gitignore b/.gitignore index 0f9086b..0fa8ed9 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ dist .build .idea node_modules +coverage diff --git a/__tests__/presentation-3-parser/strict-upgrade.test.ts b/__tests__/presentation-3-parser/strict-upgrade.test.ts new file mode 100644 index 0000000..fc793dd --- /dev/null +++ b/__tests__/presentation-3-parser/strict-upgrade.test.ts @@ -0,0 +1,615 @@ +import { presentation3StrictUpgrade } from '../../src/presentation-3/strict-upgrade'; +import { Manifest } from '@iiif/presentation-3'; + +function getBaseManifest(): Manifest { + return { + '@context': 'http://iiif.io/api/presentation/3/context.json', + id: 'https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json', + type: 'Manifest', + label: { + en: ['Image 1'], + }, + items: [ + { + id: 'https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1', + type: 'Canvas', + height: 1800, + width: 1200, + items: [ + { + id: 'https://iiif.io/api/cookbook/recipe/0001-mvm-image/page/p1/1', + type: 'AnnotationPage', + items: [ + { + id: 'https://iiif.io/api/cookbook/recipe/0001-mvm-image/annotation/p0001-image', + type: 'Annotation', + motivation: 'painting', + body: { + id: 'http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png', + type: 'Image', + format: 'image/png', + height: 1800, + width: 1200, + }, + target: 'https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1', + }, + ], + }, + ], + }, + ], + }; +} + +describe('Strict upgrade', () => { + test('Label as string', () => { + const manifest = { + id: 'https://example.org', + type: 'Manifest', + label: 'Wrong label', + }; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + expect(upgraded.label).toEqual({ none: ['Wrong label'] }); + expect(state.warnings).toContain('"label" should be a language map instead found a string'); + }); + test('Label without language', () => { + const manifest = { + id: 'https://example.org', + type: 'Manifest', + label: ['Wrong label'], + }; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + expect(upgraded.label).toEqual({ none: ['Wrong label'] }); + expect(state.warnings).toContain('"label" should be a language map instead found a string'); + }); + test('Label missing array values', () => { + const manifest = { + id: 'https://example.org', + type: 'Manifest', + label: { en: 'Wrong label' }, + }; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + expect(upgraded.label).toEqual({ en: ['Wrong label'] }); + expect(state.warnings).toContain( + '"label" values inside a language map should be an Array of strings, found a string' + ); + }); + test('Label empty array', () => { + const manifest = { + id: 'https://example.org', + type: 'Manifest', + label: [], + }; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + expect(upgraded.label).toEqual({ none: [''] }); + expect(state.warnings).toContain('"label" should be a language map instead found an unknown value'); + }); + test('Label invalid values', () => { + const manifest = { + id: 'https://example.org', + type: 'Manifest', + label: { + en: { INVALID: 'this is not valid' }, + }, + }; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + expect(upgraded.label).toEqual({ none: [''] }); + expect(state.warnings).toContain( + '"label" values inside a language map should be an Array of strings, found an unknown value' + ); + }); + test('Label invalid values (object)', () => { + const manifest = { + id: 'https://example.org', + type: 'Manifest', + label: { + de: [{ INVALID: 'this is not valid' }], + }, + }; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + expect(upgraded.label).toEqual({ none: [''] }); + expect(state.warnings).toContain( + '"label" values inside a language map should be an Array of strings, found an unknown value' + ); + }); + test('Incorrect format', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.items[0].items[0].items[0].body.format = ['image/png']; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.items[0].items[0].items[0].body.format).toEqual('image/png'); + expect(state.warnings).toContain('"format" should be a single string'); + }); + test('Invalid format', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.items[0].items[0].items[0].body.format = [{ type: 'image/png' }]; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.items[0].items[0].items[0].body.format).toBeUndefined(); + expect(state.warnings).toContain('"format" should be a single string'); + }); + test('Invalid behavior', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.behavior = 'paged'; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.behavior).toEqual(['paged']); + expect(state.warnings).toContain('"behavior" should be Array of values'); + }); + test('Invalid height/width (float)', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.items[0].height += 0.5; + // @ts-ignore + manifest.items[0].width += 0.5; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.items[0].height).toEqual(1800); + // @ts-ignore + expect(upgraded.items[0].width).toEqual(1200); + expect(state.warnings).toContain('"width" expected value to be a Integer, instead found a Float'); + expect(state.warnings).toContain('"height" expected value to be a Integer, instead found a Float'); + }); + test('Invalid height/width (string)', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.items[0].height = `${manifest.items[0].height}`; + // @ts-ignore + manifest.items[0].width = `${manifest.items[0].width}`; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.items[0].height).toEqual(1800); + // @ts-ignore + expect(upgraded.items[0].width).toEqual(1200); + expect(state.warnings).toContain('"width" expected value to be a Integer, instead found a string'); + expect(state.warnings).toContain('"height" expected value to be a Integer, instead found a string'); + }); + test('Invalid height/width (NaN)', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.items[0].height = `abc`; + // @ts-ignore + manifest.items[0].width = `abc`; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.items[0].height).toBeUndefined(); + // @ts-ignore + expect(upgraded.items[0].width).toBeUndefined(); + expect(state.warnings).toContain('"width" expected value to be a Integer, instead found an invalid value'); + expect(state.warnings).toContain('"height" expected value to be a Integer, instead found an invalid value'); + }); + test('Invalid duration (string)', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.items[0].duration = `12.34`; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.items[0].duration).toEqual(12.34); + expect(state.warnings).toContain('"duration" expected value to be a Number, instead found a string'); + }); + test('Invalid duration (NaN)', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.items[0].duration = `NOT A NUMBER`; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.items[0].duration).toBeUndefined(); + expect(state.warnings).toContain('"duration" expected value to be a Number, instead found an invalid value'); + }); + test('Invalid summary', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.items[0].summary = `This is invalid`; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.items[0].summary).toEqual({ none: ['This is invalid'] }); + expect(state.warnings).toContain('"summary" should be a language map instead found a string'); + }); + + test('Invalid required statement (just string)', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.items[0].requiredStatement = 'This is a required statement'; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.items[0].requiredStatement).toEqual({ + label: { none: ['Required statement'] }, + value: { none: ['This is a required statement'] }, + }); + expect(state.warnings).toContain('"requiredStatement" should be a {label, value} set of Language maps'); + }); + test('Invalid required statement (just value)', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.items[0].requiredStatement = { value: 'This is a required statement' }; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.items[0].requiredStatement).toEqual({ + label: { none: ['Required statement'] }, + value: { none: ['This is a required statement'] }, + }); + expect(state.warnings).toContain('"requiredStatement" should have both a label and a value'); + expect(state.warnings).toContain('"requiredStatement.value" should be a language map instead found a string'); + }); + test('Invalid metadata (just string)', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.items[0].metadata = 'This is some metadata'; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.items[0].metadata).toEqual([]); + expect(state.warnings).toContain('"metadata" should be an array of {label, value} Language maps'); + }); + test('Invalid metadata (just value)', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.items[0].metadata = { value: 'This is some metadata' }; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.items[0].metadata).toEqual([]); + expect(state.warnings).toContain('"metadata" should be an array of {label, value} Language maps'); + }); + test('Invalid metadata (single, only value)', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.items[0].metadata = [{ value: 'This is some metadata' }]; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.items[0].metadata).toEqual([ + { + label: { none: [''] }, + value: { none: ['This is some metadata'] }, + }, + ]); + expect(state.warnings).toContain('"metadata.0" should have both a label and a value'); + expect(state.warnings).toContain('"metadata.0.value" should be a language map instead found a string'); + }); + test('Invalid rights statement (https)', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.rights = 'https://creativecommons.org/licenses/by/4.0/'; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.rights).toEqual('http://creativecommons.org/licenses/by/4.0/'); + expect(state.warnings).toMatchInlineSnapshot(` + Array [ + "\\"rights\\" is an informative property and should contain the http variation of the rights statement", + ] + `); + }); + test('Invalid rights statement (array + https)', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.rights = ['https://creativecommons.org/licenses/by/4.0/']; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.rights).toEqual('http://creativecommons.org/licenses/by/4.0/'); + expect(state.warnings).toMatchInlineSnapshot(` + Array [ + "\\"rights\\" should only contain a single string", + "\\"rights\\" is an informative property and should contain the http variation of the rights statement", + ] + `); + }); + test('Invalid rights statement (invalid)', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.rights = 'This is not valid'; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.rights).toEqual('This is not valid'); + expect(state.warnings).toMatchInlineSnapshot(` + Array [ + "\\"rights\\" should be a valid URI", + ] + `); + }); + test('Invalid navDate (invalid)', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.navDate = '2020:01:02'; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.navDate).toBeUndefined(); + expect(state.warnings).toMatchInlineSnapshot(` + Array [ + "\\"navDate\\" should be a valid XSD dateTime literal", + ] + `); + }); + test('Valid navDate', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.navDate = '2010-01-01T00:00:00Z'; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.navDate).toEqual('2010-01-01T00:00:00Z'); + expect(state.warnings).toHaveLength(0); + }); + test('Invalid navDate (whitespace)', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.navDate = ' 2010-01-01T00:00:00Z '; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.navDate).toEqual('2010-01-01T00:00:00Z'); + expect(state.warnings).toMatchInlineSnapshot(` + Array [ + "\\"navDate\\" should not contain extra whitespace", + ] + `); + }); + test('Invalid language (string)', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.language = 'en'; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(manifest.language).toEqual(['en']); + expect(state.warnings).toMatchInlineSnapshot(` + Array [ + "\\"language\\" should be Array of values", + ] + `); + }); + test('Invalid language (other)', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.language = { lang: 'en' }; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.language).toEqual([]); + expect(state.warnings).toMatchInlineSnapshot(` + Array [ + "\\"language\\" should be Array of values", + "'\\"language\\" expected array of strings", + ] + `); + }); + test('Valid language', () => { + const manifest = getBaseManifest(); + + // @ts-ignore + manifest.language = ['en', 'fr']; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.language).toEqual(['en', 'fr']); + expect(state.warnings).toHaveLength(0); + }); + + describe('Accompanying canvas', () => { + function getAccCanvas() { + return { + '@context': 'http://iiif.io/api/presentation/3/context.json', + id: 'https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json', + type: 'Manifest', + label: { + en: ["Partial audio recording of Gustav Mahler's _Symphony No. 3_"], + }, + items: [ + { + id: 'https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1', + type: 'Canvas', + label: { + en: ['Gustav Mahler, Symphony No. 3, CD 1'], + }, + duration: 1985.024, + accompanyingCanvas: { + id: 'https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying', + type: 'Canvas', + label: { + en: ['First page of score for Gustav Mahler, Symphony No. 3'], + }, + height: 998, + width: 772, + items: [ + { + id: 'https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page', + type: 'AnnotationPage', + items: [ + { + id: 'https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image', + type: 'Annotation', + motivation: 'painting', + body: { + id: 'https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg', + type: 'Image', + format: 'image/jpeg', + height: 998, + width: 772, + service: [ + { + id: 'https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0', + type: 'ImageService3', + profile: 'level1', + }, + ], + }, + target: 'https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying', + }, + ], + }, + ], + }, + items: [ + { + id: 'https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1', + type: 'AnnotationPage', + items: [ + { + id: 'https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio', + type: 'Annotation', + motivation: 'painting', + body: { + id: 'https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4', + type: 'Sound', + duration: 1985.024, + format: 'video/mp4', + }, + target: 'https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1', + }, + ], + }, + ], + }, + ], + }; + } + + test('valid case', () => { + const manifest = getAccCanvas(); + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(state.warnings).toHaveLength(0); + }); + test('invalid case', () => { + const manifest = getAccCanvas(); + const manifestCorrect = getAccCanvas(); + + // @ts-ignore + manifest.items[0].accompanyingCanvas = [manifest.items[0].accompanyingCanvas]; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(upgraded.items[0].accompanyingCanvas).toEqual(manifestCorrect.items[0].accompanyingCanvas); + expect(state.warnings).toMatchInlineSnapshot(` + Array [ + "\\"accompanyingCanvas\\" should only contain a single value", + ] + `); + }); + test('not type Canvas', () => { + const manifest = getAccCanvas(); + + // @ts-ignore + manifest.items[0].accompanyingCanvas.type = 'NotCanvas'; + + const state = { warnings: [] as string[] }; + const upgraded = presentation3StrictUpgrade(manifest as any, state); + + // @ts-ignore + expect(state.warnings).toMatchInlineSnapshot(` + Array [ + "\\"accompanyingCanvas\\" should be a Canvas", + ] + `); + }); + }); +}); diff --git a/package.json b/package.json index 4ca01d6..f9dde69 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,11 @@ "import": "./dist/esm/index.mjs", "default": "./dist/index.umd.js" }, + "./strict": { + "require": "./dist/strict/cjs/index.js", + "import": "./dist/strict/esm/index.mjs", + "default": "./dist/strict/index.umd.js" + }, "./upgrader": "./dist/upgrader/index.umd.js" }, "typesVersions": { diff --git a/rollup.config.js b/rollup.config.js index cc99a14..8c6e446 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -14,6 +14,10 @@ export default [ source: './.build/types/presentation-2/index.d.ts', dist: './dist/presentation-2/index.d.ts', }), + createTypeConfig({ + source: './.build/types/presentation-3/strict-upgrade.d.ts', + dist: './dist/strict/index.d.ts', + }), createTypeConfig({ source: './.build/types/upgrader.d.ts', dist: './dist/upgrader/index.d.ts', @@ -58,6 +62,20 @@ export default [ distPreset: 'cjs', }), + // import {} from '@iiif/parser/strict'; + createRollupConfig({ + ...baseConfig, + dist: 'dist/strict', + input: './src/presentation-3/strict-upgrade.ts', + distPreset: 'esm', + }), + createRollupConfig({ + ...baseConfig, + dist: 'dist/strict', + input: './src/presentation-3/strict-upgrade.ts', + distPreset: 'cjs', + }), + // Standalone upgrader createRollupConfig({ ...baseConfig, diff --git a/src/presentation-2/upgrader.ts b/src/presentation-2/upgrader.ts index d16862e..8971b8c 100644 --- a/src/presentation-2/upgrader.ts +++ b/src/presentation-2/upgrader.ts @@ -2,6 +2,8 @@ import * as Presentation3 from '@iiif/presentation-3'; import * as Presentation2 from '@iiif/presentation-2'; import { imageServiceProfiles, level1Support } from '../shared/image-api-profiles'; import { Traverse } from './traverse'; +import { ensureArray } from '../shared/ensure-array'; +import { removeUndefinedProperties } from "../shared/remove-undefined-properties"; const configuration = { attributionLabel: 'Attribution', @@ -119,13 +121,6 @@ function getTypeFromProfile(inputProfile: string): string | undefined { return undefined; } -function ensureArray(maybeArray: T | T[]): T[] { - if (Array.isArray(maybeArray)) { - return maybeArray; - } - return [maybeArray]; -} - function removePrefix(str: string) { for (const prefix of ['sc', 'oa', 'dcterms', 'dctypes', 'iiif']) { if (str.startsWith(`${prefix}:`)) { @@ -328,15 +323,6 @@ function convertMetadata( }); } -function removeUndefinedProperties(obj: any) { - for (const prop in obj) { - if (typeof obj[prop] === 'undefined' || obj[prop] === null) { - delete obj[prop]; - } - } - return obj; -} - let mintedIdCounter = 0; function mintNewIdFromResource( diff --git a/src/presentation-3/strict-upgrade.ts b/src/presentation-3/strict-upgrade.ts new file mode 100644 index 0000000..a120f2f --- /dev/null +++ b/src/presentation-3/strict-upgrade.ts @@ -0,0 +1,387 @@ +import * as Presentation3 from '@iiif/presentation-3'; +import { Traverse } from './traverse'; +import { removeUndefinedProperties } from '../shared/remove-undefined-properties'; + +const validNavDate = + /-?([1-9]\d{3,}|0\d{3})-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])T(([01]\d|2[0-3]):[0-5]\d:[0-5]\d(\.\d+)?|(24:00:00(\.0+)?))(Z|(\+|-)((0\d|1[0-3]):[0-5]\d|14:00))?/; + +interface InternalLogging { + warnings: string[]; +} + +const globalWarnings = { warnings: [] }; + +function technicalProperties( + item: Partial, + logging: InternalLogging = globalWarnings +): Partial { + if (item.behavior) { + item.behavior = ensureArrayWarning(item.behavior, 'behavior', logging); + } + + item.width = ensureValidNumber(item.width, 'width', false, logging); + item.height = ensureValidNumber(item.height, 'height', false, logging); + item.duration = ensureValidNumber(item.duration, 'duration', true, logging); + + if (item.format && typeof item.format !== 'string') { + logging.warnings.push(`"format" should be a single string`); + if (Array.isArray(item.format) && typeof item.format[0] === 'string') { + item.format = item.format[0]; + } else { + item.format = undefined; + } + } + + return item; +} + +function ensureArrayMatches( + values: Array | undefined, + isValid: (value: any) => string | undefined, + logging: InternalLogging = globalWarnings +) { + if (values && Array.isArray(values)) { + return values.filter((value) => { + const message = isValid(value); + if (message && logging.warnings.indexOf(message) === -1) { + logging.warnings.push(message); + } + return !message; + }); + } + return values; +} + +function ensureArrayWarning(value: any, propName: string, logging: InternalLogging = globalWarnings) { + if (Array.isArray(value)) { + return value; + } + logging.warnings.push(`"${propName}" should be Array of values`); + return [value]; +} + +function ensureNotArrayWarning(value: any, propName: string, logging: InternalLogging = globalWarnings) { + if (Array.isArray(value)) { + logging.warnings.push(`"${propName}" should only contain a single value`); + if (value.length === 0) { + return undefined; + } + return value[0]; + } + return value; +} + +function ensureValidNumber( + value: undefined | string | number, + propName: string, + isFloat = false, + logging: InternalLogging = globalWarnings +): number | undefined { + if (typeof value === 'undefined') { + return undefined; + } + + if (typeof value === 'string') { + const newValue = isFloat ? parseFloat(value) : Math.abs(Number(value)); + if (Number.isNaN(newValue) || newValue <= 0) { + logging.warnings.push( + `"${propName}" expected value to be a ${isFloat ? 'Number' : 'Integer'}, instead found an invalid value` + ); + return undefined; + } + logging.warnings.push( + `"${propName}" expected value to be a ${isFloat ? 'Number' : 'Integer'}, instead found a string` + ); + return newValue; + } + + if (!isFloat && value % 1 !== 0) { + logging.warnings.push(`"${propName}" expected value to be a Integer, instead found a Float`); + return Math.floor(value); + } + + return value; +} + +function ensureValidLanguageMap( + str: Presentation3.InternationalString, + propName: string, + logging: InternalLogging = globalWarnings +): Presentation3.InternationalString { + // Handle {"label": ["an array of strings"]} + if (Array.isArray(str)) { + if (typeof str[0] === 'string') { + logging.warnings.push(`"${propName}" should be a language map instead found a string`); + return { none: str }; + } + logging.warnings.push(`"${propName}" should be a language map instead found an unknown value`); + return { none: [''] }; + } + + if (typeof str === 'string') { + logging.warnings.push(`"${propName}" should be a language map instead found a string`); + return { none: [str] }; + } + + // Handle {"label": {"en": "some value"} + const keys = Object.keys(str); + const fixed: Presentation3.InternationalString = {}; + let didFix = false; + for (const key of keys) { + const values = str[key] as unknown; + const fixedItem = []; + if (typeof values === 'string') { + didFix = true; + logging.warnings.push(`"${propName}" values inside a language map should be an Array of strings, found a string`); + fixedItem.push(values); + } else if (Array.isArray(values)) { + for (const str of values) { + if (!(typeof str === 'string')) { + didFix = true; + logging.warnings.push( + `"${propName}" values inside a language map should be an Array of strings, found an unknown value` + ); + // Nothing to do here? - but mark as needing fixed. + } else { + fixedItem.push(str); + } + } + } else { + didFix = true; + logging.warnings.push( + `"${propName}" values inside a language map should be an Array of strings, found an unknown value` + ); + } + if (fixedItem.length > 0) { + fixed[key] = fixedItem; + } + } + + if (didFix) { + if (Object.keys(fixed).length === 0) { + return { none: [''] }; + } + + return fixed; + } + + return str; +} + +function validMetadataValue( + input: Presentation3.MetadataItem, + propName: string, + defaultLabel = '', + logging: InternalLogging = globalWarnings +): Presentation3.MetadataItem { + if (typeof input === 'string') { + logging.warnings.push(`"${propName}" should be a {label, value} set of Language maps`); + return { + label: { none: [defaultLabel] }, + value: { none: [input] }, + }; + } else { + if ((!input.label && input.value) || (input.label && !input.value)) { + logging.warnings.push(`"${propName}" should have both a label and a value`); + } + if (input.label) { + input.label = ensureValidLanguageMap(input.label, `${propName}.label`, logging); + } else { + input.label = { none: [defaultLabel] }; + } + if (input.value) { + input.value = ensureValidLanguageMap(input.value, `${propName}.value`, logging); + } else { + input.value = { none: [''] }; + } + } + + return input; +} + +function descriptiveProperties( + item: Partial, + logging: InternalLogging = globalWarnings +): Partial { + if (item.label) { + item.label = ensureValidLanguageMap(item.label, 'label', logging); + } + if (item.summary) { + item.summary = ensureValidLanguageMap(item.summary, 'summary', logging); + } + + if (item.requiredStatement) { + item.requiredStatement = validMetadataValue( + item.requiredStatement, + 'requiredStatement', + 'Required statement', + logging + ); + } + + if (item.metadata) { + if (Array.isArray(item.metadata)) { + for (let i = 0; i < item.metadata.length; i++) { + item.metadata[i] = validMetadataValue(item.metadata[i], `metadata.${i}`, '', logging); + } + } else { + logging.warnings.push(`"metadata" should be an array of {label, value} Language maps`); + item.metadata = []; + } + } + + if (item.rights) { + if (Array.isArray(item.rights)) { + logging.warnings.push(`"rights" should only contain a single string`); + item.rights = typeof item.rights[0] === 'string' ? item.rights[0] : ''; + } + if (typeof item.rights === 'string' && !item.rights.startsWith('http')) { + logging.warnings.push(`"rights" should be a valid URI`); + } else if (typeof item.rights === 'string' && item.rights.startsWith('https')) { + logging.warnings.push( + `"rights" is an informative property and should contain the http variation of the rights statement` + ); + item.rights = `http${item.rights.slice(5)}`; + } + } + + if (item.navDate) { + const trimmedNavDate = typeof item.navDate === 'string' ? item.navDate.trim() : undefined; + if (trimmedNavDate !== item.navDate) { + logging.warnings.push(`"navDate" should not contain extra whitespace`); + item.navDate = trimmedNavDate; + } + if (typeof item.navDate !== 'string' || !item.navDate.match(validNavDate)) { + logging.warnings.push(`"navDate" should be a valid XSD dateTime literal`); + item.navDate = undefined; + } + } + + if (item.language) { + item.language = ensureArrayWarning(item.language, 'language', logging); + item.language = ensureArrayMatches( + item.language, + (value) => (typeof value === 'string' ? undefined : `'"language" expected array of strings`), + logging + ); + } + if (item.accompanyingCanvas) { + item.accompanyingCanvas = ensureNotArrayWarning(item.accompanyingCanvas, 'accompanyingCanvas', logging); + if (item.accompanyingCanvas?.type !== 'Canvas') { + logging.warnings.push(`"accompanyingCanvas" should be a Canvas`); + } + } + if (item.placeholderCanvas) { + item.placeholderCanvas = ensureNotArrayWarning(item.placeholderCanvas, 'placeholderCanvas', logging); + if (item.placeholderCanvas?.type !== 'Canvas') { + logging.warnings.push(`"placeholderCanvas" should be a Canvas`); + } + } + if (item.thumbnail) { + item.thumbnail = ensureArrayWarning(item.thumbnail, 'thumbnail', logging); + } + return item; +} + +const validItemMapping: any = { + Manifest: 'Canvas', + Canvas: 'AnnotationPage', + AnnotationPage: 'Annotation', +}; + +function structuralProperties(resource: any, logging: InternalLogging = globalWarnings) { + const type = resource.type; + switch (type) { + case 'Canvas': + case 'AnnotationPage': + case 'Manifest': { + if (resource && resource.items) { + resource.items = ensureArrayMatches( + resource.items, + (item) => + item.type === validItemMapping[type] + ? undefined + : `"${resource.type}.items" should contain only type ${validItemMapping[type]}, found ${item.type}`, + logging + ); + } + } + } + + return resource; +} + +function linkingProperties( + item: Partial, + logging: InternalLogging = globalWarnings +): Partial { + if (item.logo) { + item.logo = ensureArrayWarning(item.logo, 'logo', logging); + } + if (item.service) { + item.service = ensureArrayWarning(item.service, 'service', logging); + } + + if (item.seeAlso) { + item.seeAlso = ensureArrayWarning(item.seeAlso, 'seeAlso', logging); + } + + if (item.rendering) { + item.rendering = ensureArrayWarning(item.rendering, 'rendering', logging); + } + + if (item.partOf) { + item.partOf = ensureArrayWarning(item.partOf, 'partOf', logging); + } + + if (item.homepage) { + item.homepage = ensureArrayWarning(item.homepage, 'homepage', logging); + } + + if (item.services) { + item.services = ensureArrayWarning(item.services, 'services', logging); + } + + if (item.supplementary) { + item.supplementary = ensureArrayWarning(item.supplementary, 'supplementary', logging); + } + + if (item.start) { + item.start = ensureNotArrayWarning(item.start, 'start', logging); + } + + return item; +} + +function upgradeResource(state: InternalLogging) { + return (resource: any) => { + if (!resource) { + return undefined; + } + + if (typeof resource === 'string') { + return resource; + } + + if (Array.isArray(resource)) { + return resource; + } + + return removeUndefinedProperties({ + ...resource, + ...technicalProperties(resource, state), + ...descriptiveProperties(resource, state), + ...linkingProperties(resource, state), + ...structuralProperties(resource, state), + }); + }; +} + +export function presentation3StrictUpgrade( + p3: Presentation3.Manifest, + state: InternalLogging = globalWarnings +): Presentation3.Manifest { + const traverse = Traverse.all(upgradeResource(state)); + + return traverse.traverseManifest(p3); +} diff --git a/src/shared/ensure-array.ts b/src/shared/ensure-array.ts new file mode 100644 index 0000000..5edffba --- /dev/null +++ b/src/shared/ensure-array.ts @@ -0,0 +1,6 @@ +export function ensureArray(maybeArray: T | T[]): T[] { + if (Array.isArray(maybeArray)) { + return maybeArray; + } + return [maybeArray]; +} diff --git a/src/shared/remove-undefined-properties.ts b/src/shared/remove-undefined-properties.ts new file mode 100644 index 0000000..e9dc1b2 --- /dev/null +++ b/src/shared/remove-undefined-properties.ts @@ -0,0 +1,8 @@ +export function removeUndefinedProperties(obj: any) { + for (const prop in obj) { + if (typeof obj[prop] === 'undefined' || obj[prop] === null) { + delete obj[prop]; + } + } + return obj; +} From d361a76d734b6e2bbf8fd046e148203adce48f06 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Tue, 26 Jul 2022 21:25:44 +0100 Subject: [PATCH 02/44] Initial normalisation of specific resources [Expect failing tests] --- .../__snapshots__/normalize-test.ts.snap | 8 +- .../presentation-3-parser/normalize-test.ts | 55 ++++++++++++- src/presentation-2/upgrader.ts | 8 +- src/presentation-3/normalize.ts | 80 +++++++++++++++++++ .../serialize-presentation-2.ts | 33 +++++++- src/presentation-3/traverse.ts | 25 +++++- 6 files changed, 200 insertions(+), 9 deletions(-) diff --git a/__tests__/presentation-3-parser/__snapshots__/normalize-test.ts.snap b/__tests__/presentation-3-parser/__snapshots__/normalize-test.ts.snap index a44c364..2b90a0a 100644 --- a/__tests__/presentation-3-parser/__snapshots__/normalize-test.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/normalize-test.ts.snap @@ -489,8 +489,12 @@ Object { }, ], "start": Object { - "id": "https://example.org/iiif/book1/canvas/p2", - "type": "Canvas", + "selector": undefined, + "source": Object { + "id": "https://example.org/iiif/book1/canvas/p2", + "type": "Canvas", + }, + "type": "SpecificResource", }, "structures": Array [ Object { diff --git a/__tests__/presentation-3-parser/normalize-test.ts b/__tests__/presentation-3-parser/normalize-test.ts index 8808c9a..bf9107d 100644 --- a/__tests__/presentation-3-parser/normalize-test.ts +++ b/__tests__/presentation-3-parser/normalize-test.ts @@ -1,6 +1,9 @@ import { normalize } from '../../src/presentation-3'; - +import { convertPresentation2 } from '../../src/presentation-2'; import manifestFixture from '../../fixtures/2-to-3-converted/manifests/iiif.io__api__presentation__2.1__example__fixtures__1__manifest.json'; +import blManifestWithRanges from '../../fixtures/presentation-3/bl-ranges.json'; +import p2ManifestWithStart from '../../fixtures/presentation-2/bl-manifest.json'; +import { Manifest } from '@iiif/presentation-3'; describe('normalize', () => { test('normalize simple manifest', () => { @@ -289,4 +292,54 @@ describe('normalize', () => { type: 'Manifest', }); }); + + test('normalize with ranges', () => { + const result = normalize(blManifestWithRanges); + + expect(result.resource).toEqual({ + id: 'https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/manifest.json', + type: 'Manifest', + }); + + const range = (result.entities.Range as any)[ + 'https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002e' + ]; + + expect(range.type).toEqual('Range'); + expect(range.items[0].type).toEqual('SpecificResource'); + expect(range.items[0]).toMatchInlineSnapshot(` + Object { + "selector": Object { + "type": "FragmentSelector", + "value": "t=0,1398.84", + }, + "source": Object { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b", + "type": "Canvas", + }, + "type": "SpecificResource", + } + `); + }); + + test('upgrade + normalize start property', () => { + const p3manifest = convertPresentation2(p2ManifestWithStart) as Manifest; + expect(p3manifest).toBeDefined(); + expect(p3manifest.start).toEqual({ + id: 'https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100022545254.0x000002', + type: 'Canvas', + }); + + const result = normalize(p3manifest); + expect(((result.entities.Manifest as any)[p3manifest.id] as Manifest).start).toMatchInlineSnapshot(` + Object { + "selector": undefined, + "source": Object { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100022545254.0x000002", + "type": "Canvas", + }, + "type": "SpecificResource", + } + `); + }); }); diff --git a/src/presentation-2/upgrader.ts b/src/presentation-2/upgrader.ts index d16862e..22ff621 100644 --- a/src/presentation-2/upgrader.ts +++ b/src/presentation-2/upgrader.ts @@ -498,6 +498,7 @@ function flattenArray(array: T[][]): T[] { function upgradeManifest(manifest: Presentation2.Manifest): Presentation3.Manifest { const allCanvases = []; const behavior = []; + let start = undefined; for (const sequence of manifest.sequences || []) { if (sequence.canvases.length) { allCanvases.push(...sequence.canvases); @@ -505,6 +506,9 @@ function upgradeManifest(manifest: Presentation2.Manifest): Presentation3.Manife if (sequence.behavior) { behavior.push(...sequence.behavior); } + if (sequence.startCanvas) { + start = sequence.startCanvas; + } } // This comes from the sequence. @@ -521,6 +525,7 @@ function upgradeManifest(manifest: Presentation2.Manifest): Presentation3.Manife ...technical, ...descriptiveProperties(manifest), ...linkingProperties(manifest), + start: start, items: allCanvases, structures: manifest.structures as any, }); @@ -557,6 +562,7 @@ function upgradeAnnotationList(annotationPage: Presentation2.AnnotationList): Pr function upgradeSequence(sequence: Presentation2.Sequence): { canvases: Presentation3.Canvas[]; behavior?: string[]; + startCanvas?: Presentation3.Reference<'Canvas'> | undefined; } { /* rng = {"id": s.get('@id', self.mint_uri()), "type": "Range"} @@ -582,11 +588,11 @@ function upgradeSequence(sequence: Presentation2.Sequence): { behavior: [], }; } - // @todo possibly return some ranges too. return { canvases: sequence.canvases as any[], behavior: sequence.viewingHint ? [sequence.viewingHint] : [], + startCanvas: sequence.startCanvas as any, }; } diff --git a/src/presentation-3/normalize.ts b/src/presentation-3/normalize.ts index f4ec747..33ae95c 100644 --- a/src/presentation-3/normalize.ts +++ b/src/presentation-3/normalize.ts @@ -13,6 +13,8 @@ import { Range, RangeNormalized, Reference, + Selector, + SpecificResource, } from '@iiif/presentation-3'; import { emptyAgent, @@ -179,6 +181,81 @@ function ensureArrayOnAnnotation(annotation: Annotation): Annotation { return annotation; } +function isSpecificResource(resource: unknown): resource is SpecificResource { + return (resource as any).type === 'SpecificResource'; +} + +function toSpecificResource( + target: string | Reference | SpecificResource, + { typeHint, partOfTypeHint }: { typeHint?: string; partOfTypeHint?: string } = {} +): SpecificResource { + if (typeof target === 'string') { + target = { id: target, type: typeHint || 'unknown' }; + } + + if (isSpecificResource(target)) { + if (target.source.type === 'Canvas' && target.source.partOf && typeof target.source.partOf === 'string') { + target.source.partOf = [ + { + id: target.source.partOf, + type: partOfTypeHint || 'Manifest', // Most common is manifest. + }, + ]; + } + + return target; + } + + let selector: Selector | undefined; + if (target.id.indexOf('#') !== -1) { + const [id, fragment] = target.id.split('#'); + target.id = id; + if (fragment) { + selector = { + type: 'FragmentSelector', + value: fragment, + }; + } + } + + return { + type: 'SpecificResource', + source: target, + selector, + }; +} + +function rangeItemToSpecificResource(range: Range): Range { + const _range = Object.assign({}, range); + if (range && range.items) { + _range.items = range.items.map((rangeItem) => { + if (typeof rangeItem === 'string' || rangeItem.type === 'Canvas') { + return toSpecificResource(rangeItem); + } + return rangeItem; + }); + } + return _range; +} + +function startCanvasToSpecificResource(manifest: Manifest): Manifest { + const _manifest = Object.assign({}, manifest); + if (_manifest.start) { + _manifest.start = toSpecificResource(_manifest.start, { typeHint: 'Canvas' }) as any; + return _manifest; + } + return manifest; +} + +function annotationTargetToSpecificResource(manifest: Annotation): Annotation { + const _annotation = Object.assign({}, annotation); + if (_annotation.target) { + _annotation.start = toSpecificResource(_annotation.start, { typeHint: 'Canvas' }) as any; + return _annotation; + } + return annotation; +} + export function normalize(unknownEntity: unknown) { const entity = convertPresentation2(unknownEntity); const entities = getDefaultEntities(); @@ -194,6 +271,7 @@ export function normalize(unknownEntity: unknown) { ], manifest: [ ensureDefaultFields(emptyManifest), + startCanvasToSpecificResource, addToMapping('Manifest'), addToEntities('Manifest'), ], @@ -213,6 +291,7 @@ export function normalize(unknownEntity: unknown) { // It will be normalized through selectors and pattern matching. addMissingIdToContentResource('Annotation'), ensureArrayOnAnnotation, + annotationTargetToSpecificResource, addToMapping('Annotation'), addToEntities('Annotation'), ], @@ -226,6 +305,7 @@ export function normalize(unknownEntity: unknown) { range: [ // This will add a LOT to the state, maybe this will be configurable down the line. ensureDefaultFields(emptyRange), + rangeItemToSpecificResource, addToMapping('Range', 'Canvas'), addToEntities('Range', 'Canvas'), ], diff --git a/src/presentation-3/serialize-presentation-2.ts b/src/presentation-3/serialize-presentation-2.ts index c176175..50db8a8 100644 --- a/src/presentation-3/serialize-presentation-2.ts +++ b/src/presentation-3/serialize-presentation-2.ts @@ -1,8 +1,12 @@ import { SerializeConfig } from './serialize'; import { DescriptiveNormalized, + FragmentSelector, InternationalString, LinkingNormalized, + Reference, + Selector, + SpecificResource, TechnicalProperties, } from '@iiif/presentation-3'; import * as Presentation2 from '@iiif/presentation-2'; @@ -149,6 +153,30 @@ function* linkingProperties(prop: Partial) { ]; } +function isSpecificResource(resource: unknown): resource is SpecificResource { + return (resource as any).type === 'SpecificResource'; +} +function isFragmentSelector(resource: unknown): resource is FragmentSelector { + return (resource as any) && (resource as any).type === 'FragmentSelector'; +} + +function specificResourceToString(resource: Reference | SpecificResource) { + if (isSpecificResource(resource)) { + let id = resource.id; + const selector: Selector | undefined = resource.selector + ? Array.isArray(resource.selector) + ? resource.selector[0] + : resource.selector + : undefined; + + if (isFragmentSelector(selector)) { + id += '#' + selector.value; + } + return id; + } + return resource.id; +} + export const serializeConfigPresentation2: SerializeConfig = { Manifest: function* (entity) { return [ @@ -245,10 +273,11 @@ export const serializeConfigPresentation2: SerializeConfig = { const canvases = []; if (entity.items) { - for (const item of entity.items) { + for (const _item of entity.items) { + const item = _item.type === 'SpecificResource' ? _item.source : _item; const canvas = yield item; members.push({ - '@id': item.id, + '@id': specificResourceToString(_item), '@type': item.type, label: canvas ? canvas.label : undefined, within: entity.id, diff --git a/src/presentation-3/traverse.ts b/src/presentation-3/traverse.ts index ae73b11..c7a19fd 100644 --- a/src/presentation-3/traverse.ts +++ b/src/presentation-3/traverse.ts @@ -1,5 +1,4 @@ import { - Agent, Annotation, AnnotationCollection, AnnotationPage, @@ -16,6 +15,7 @@ import { RangeItems, Required, Service, + SpecificResource, } from '@iiif/presentation-3'; import { ResourceProvider } from '@iiif/presentation-3/resources/provider'; @@ -47,6 +47,7 @@ export type TraversalMap = { range?: Array>; service?: Array>; agent?: Array>; + specificResource?: Array>; }; export type TraverseOptions = { @@ -96,6 +97,7 @@ export class Traverse { range: [], service: [], agent: [], + specificResource: [], ...traversals, }; this.options = { @@ -364,12 +366,25 @@ export class Traverse { ); } + traverseSpecificResource(specificResource: SpecificResource, typeHint?: string): SpecificResource { + return this.traverseType( + { + ...specificResource, + source: this.traverseUnknown(specificResource.source, typeHint), + }, + this.traversals.specificResource + ); + } + traverseRangeRanges(range: Range): Range { if (range.items) { range.items = range.items.map((rangeOrManifest: RangeItems) => { if (typeof rangeOrManifest === 'string') { return this.traverseCanvas({ id: rangeOrManifest, type: 'Canvas' }); } + if (rangeOrManifest.type === 'SpecificResource') { + return this.traverseSpecificResource(rangeOrManifest as SpecificResource, 'Canvas'); + } if (rangeOrManifest.type === 'Manifest') { return this.traverseManifest(rangeOrManifest as Manifest); } @@ -408,7 +423,7 @@ export class Traverse { return this.traverseType(service, this.traversals.service); } - traverseUnknown(resource: any) { + traverseUnknown(resource: any, typeHint?: string) { const type = identifyResource(resource); switch (type) { @@ -430,8 +445,12 @@ export class Traverse { return this.traverseService(resource as Service); case 'Agent': return this.traverseAgent(resource as ResourceProvider); - default: + default: { + if (typeHint) { + return typeHint; + } throw new Error(`Unknown or unsupported resource type of ${type}`); + } } } } From f342a6add6a92ca65acd5901efe456d63696265b Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Tue, 26 Jul 2022 21:59:19 +0100 Subject: [PATCH 03/44] Fixed serialisation and added annotation targets --- .../__snapshots__/normalize-test.ts.snap | 8 +- src/presentation-3/normalize.ts | 5 +- .../serialize-presentation-2.ts | 12 +- .../serialize-presentation-3.ts | 20 +++- src/shared/compress-specific-resource.ts | 29 +++++ src/shared/expand-target.ts | 109 ++++++++++++++++++ 6 files changed, 175 insertions(+), 8 deletions(-) create mode 100644 src/shared/compress-specific-resource.ts create mode 100644 src/shared/expand-target.ts diff --git a/__tests__/presentation-3-parser/__snapshots__/normalize-test.ts.snap b/__tests__/presentation-3-parser/__snapshots__/normalize-test.ts.snap index 2b90a0a..81d3358 100644 --- a/__tests__/presentation-3-parser/__snapshots__/normalize-test.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/normalize-test.ts.snap @@ -15,7 +15,13 @@ Object { "motivation": Array [ "painting", ], - "target": "https://example.org/iiif/book1/canvas/p1", + "target": Object { + "source": Object { + "id": "https://example.org/iiif/book1/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, "type": "Annotation", }, }, diff --git a/src/presentation-3/normalize.ts b/src/presentation-3/normalize.ts index 33ae95c..9b5b132 100644 --- a/src/presentation-3/normalize.ts +++ b/src/presentation-3/normalize.ts @@ -27,6 +27,7 @@ import { import { convertPresentation2 } from '../presentation-2'; import { NormalizedEntity } from './serialize'; import { ResourceProvider, ResourceProviderNormalized } from '@iiif/presentation-3/resources/provider'; +import { expandTargetToSpecificResource } from '../shared/expand-target'; export const defaultEntities = { Collection: {}, @@ -247,10 +248,10 @@ function startCanvasToSpecificResource(manifest: Manifest): Manifest { return manifest; } -function annotationTargetToSpecificResource(manifest: Annotation): Annotation { +function annotationTargetToSpecificResource(annotation: Annotation): Annotation { const _annotation = Object.assign({}, annotation); if (_annotation.target) { - _annotation.start = toSpecificResource(_annotation.start, { typeHint: 'Canvas' }) as any; + _annotation.target = expandTargetToSpecificResource(_annotation.target as any, { typeHint: 'Canvas' }) as any; return _annotation; } return annotation; diff --git a/src/presentation-3/serialize-presentation-2.ts b/src/presentation-3/serialize-presentation-2.ts index 50db8a8..2e13506 100644 --- a/src/presentation-3/serialize-presentation-2.ts +++ b/src/presentation-3/serialize-presentation-2.ts @@ -10,6 +10,7 @@ import { TechnicalProperties, } from '@iiif/presentation-3'; import * as Presentation2 from '@iiif/presentation-2'; +import { compressSpecificResource } from '../shared/compress-specific-resource'; export function languageString2to3( value: InternationalString | null | undefined @@ -141,6 +142,11 @@ function* descriptiveProperties(prop: Partial): Generator } function* linkingProperties(prop: Partial) { + const startProp = + prop.start && prop.start.type && (prop.start as any).type === 'SpecificResource' + ? compressSpecificResource(prop.start as any) + : prop.start; + return [ ['seeAlso', unNestArray(yield prop.seeAlso)], // @todo support more services (like auth) @@ -149,7 +155,7 @@ function* linkingProperties(prop: Partial) { // @todo part of to within // ['within', unNestArray(yield prop.partOf)], // @todo this may not work completely. - ['startCanvas', prop.start ? prop.start.id : undefined], + ['startCanvas', startProp ? startProp.id : undefined], ]; } @@ -161,7 +167,7 @@ function isFragmentSelector(resource: unknown): resource is FragmentSelector { } function specificResourceToString(resource: Reference | SpecificResource) { - if (isSpecificResource(resource)) { + if (resource && isSpecificResource(resource)) { let id = resource.id; const selector: Selector | undefined = resource.selector ? Array.isArray(resource.selector) @@ -174,7 +180,7 @@ function specificResourceToString(resource: Reference | SpecificResource) { } return id; } - return resource.id; + return resource?.id; } export const serializeConfigPresentation2: SerializeConfig = { diff --git a/src/presentation-3/serialize-presentation-3.ts b/src/presentation-3/serialize-presentation-3.ts index de31b1e..5d8170e 100644 --- a/src/presentation-3/serialize-presentation-3.ts +++ b/src/presentation-3/serialize-presentation-3.ts @@ -4,8 +4,10 @@ import { ImageService2, ImageService3, LinkingNormalized, + SpecificResource, TechnicalProperties, } from '@iiif/presentation-3'; +import { compressSpecificResource } from '../shared/compress-specific-resource'; function technicalProperties(entity: Partial): Array<[keyof TechnicalProperties, any]> { return [ @@ -88,7 +90,13 @@ function* linkingProperties( // Don't yield these, they are references. ['partOf', filterEmpty(yield entity.partOf)], - ['start', entity.start], + [ + 'start', + // @todo remove once types updated. + entity.start && (entity.start as any).type === 'SpecificResource' + ? compressSpecificResource(entity.start as any as SpecificResource) + : entity.start, + ], ]; } @@ -164,6 +172,10 @@ export const serializeConfigPresentation3: SerializeConfig = { return [key, Array.isArray(item) ? item[0] : item]; } + if (key === 'target') { + return [key, compressSpecificResource(item, true)]; + } + return [key, Array.isArray(item) ? filterEmpty(item as any) : item]; }) .filter(([key]) => { @@ -218,7 +230,11 @@ export const serializeConfigPresentation3: SerializeConfig = { } else { // Just push the reference. // @todo could also push in the label of the item? - rangeItems.push(item); + if (item && item.type === 'SpecificResource') { + rangeItems.push(compressSpecificResource(item)); + } else { + rangeItems.push(item); + } } } diff --git a/src/shared/compress-specific-resource.ts b/src/shared/compress-specific-resource.ts new file mode 100644 index 0000000..f27bfc9 --- /dev/null +++ b/src/shared/compress-specific-resource.ts @@ -0,0 +1,29 @@ +import { SpecificResource } from '../../../presentation-3-types'; + +export function compressSpecificResource(target: undefined | SpecificResource, allowString = false): any { + if (target) { + if (target.source && target.source.partOf) { + // Ignore if we have a partOf + return target; + } + const keys = Object.keys(target); + if ( + (keys.length === 2 && target.type && target.source) || + (keys.length === 3 && target.type && target.source && keys.indexOf('selector') !== -1 && !target.selector) + ) { + // If all we have is the wrapped source, just return the ID. + return allowString ? target.source.id : target.source; + } + if (target.selector) { + if ( + !Array.isArray(target.selector) && + typeof target.selector !== 'string' && + target.selector.type === 'FragmentSelector' + ) { + const newId = `${target.source.id}#${target.selector.value}`; + return allowString ? newId : { id: newId, type: target.source.type }; + } + } + } + return target; +} diff --git a/src/shared/expand-target.ts b/src/shared/expand-target.ts new file mode 100644 index 0000000..861fbc5 --- /dev/null +++ b/src/shared/expand-target.ts @@ -0,0 +1,109 @@ +import { ExternalWebResource, SpecificResource, W3CAnnotationTarget } from '@iiif/presentation-3'; + +export function expandTargetToSpecificResource( + target: W3CAnnotationTarget | W3CAnnotationTarget[], + options: { + typeMap?: Record; + typeHint?: string; + } = {} +): SpecificResource { + if (Array.isArray(target)) { + // Don't support multiple targets for now. + return expandTargetToSpecificResource(target[0]); + } + + if (typeof target === 'string') { + const [id, fragment] = target.split('#'); + + if (!fragment) { + // This is an unknown selector. + return { + type: 'SpecificResource', + source: { id, type: (options.typeMap && (options.typeMap[id] as any)) || options.typeHint || 'Unknown' }, + }; + } + + return { + type: 'SpecificResource', + source: { id, type: options.typeHint || 'Unknown' }, + selector: { + type: 'FragmentSelector', + value: fragment, + }, + }; + } + + // @todo, how do we want to support choices for targets. + if ( + target.type === 'Choice' || + target.type === 'List' || + target.type === 'Composite' || + target.type === 'Independents' + ) { + // we also don't support these, just choose the first. + return expandTargetToSpecificResource(target.items[0]); + } + + if (target.type === 'SpecificResource') { + if (target.source.type === 'Canvas' && target.source.partOf && typeof target.source.partOf === 'string') { + target.source.partOf = [ + { + id: target.source.partOf, + type: 'Manifest', + }, + ]; + } + + if (target.selector) { + return { + type: 'SpecificResource', + source: target.source, + selector: target.selector, + }; + } + return { + type: 'SpecificResource', + source: target.source, + }; + } + + if (target.id) { + if ((target as any).type === 'Canvas' && (target as any).partOf && typeof (target as any).partOf === 'string') { + (target as any).partOf = [ + { + id: (target as any).partOf, + type: 'Manifest', + }, + ]; + } + + const [id, fragment] = target.id.split('#'); + if (!fragment) { + // This is an unknown selector. + return { + type: 'SpecificResource', + source: { + ...(target as any), + id, + }, + }; + } + + return { + type: 'SpecificResource', + source: { + ...(target as any), + id, + }, + selector: { + type: 'FragmentSelector', + value: fragment, + }, + }; + } + + return { + type: 'SpecificResource', + source: target as ExternalWebResource, + }; +} From eebb8e83f8cfcc6ad2dce7a799bab2053a09848b Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Wed, 27 Jul 2022 21:43:16 +0100 Subject: [PATCH 04/44] Version 2 ### Added - Support for `navPlace` and `textGranularity` - Fragment selectors in SpecificResources, strings and `{id,type}` References are now normalised, reducing the need to parse IDs to grab the ID/Type - Added expand target helper, used internally for normalization (possibly useful for content state). - New sub-package `@iiif/parser/strict` for fixing common mistakes in Presentation 3, with detailed feedback for implementors. - Test coverage across every [IIIF Cookbook](https://iiif.io/api/cookbook) recipe, testing: - Parsing / Traversing the IIIF - Normalizing the IIIF correctly - Re-serializing the IIIF back to identical JSON - New traversal option for `SpecificResource` - New traversal option for `GeoJson` (e.g. from the `navPlace` extension) - ### Fixed - `[presentation-2]` `startCanvas` property on Sequences are now added to the Manifest when converting - Fixed handling Specific resources where the `source` is only string (inferring the correct type from the context) - Serializing Presentation 2 resources without items - Bug where AV canvases would have height and width of `0` when serializing - Bug where custom `@context` on Manifest was not retained during serialization - Bug where Content Resources did not keep extra properties when serializing (e.g. `value` or `geometry`) - ### Removed - `posterCanvas` - hangover from pre-3.0, this will be ignored - `logo` on non-provider resources - hangover from pre-3.0, these will be ignored - `motivation` field on non-Annotation resources (bug) - `Traverse.traversePosterCanvas()` is removed (now `Traverse.traverseLinkedCanvases()`) - ### Changed - `range.items[]` is now normalised to either `Reference<'Range'>` or `SpecificResource>` - `manifest.start` is now normalised to a `SpecificResource>` --- .eslintrc.json | 1 + CHANGELOG.md | 56 + .../__snapshots__/cookbook.tests.ts.snap | 21929 ++++++++++++++++ .../__snapshots__/normalize-test.ts.snap | 22 - .../presentation-3-parser/cookbook.tests.ts | 48 + .../presentation-3-parser/normalize-test.ts | 2 +- .../presentation-3-parser/serializer-test.ts | 7 +- .../presentation-3-parser/utilities.test.ts | 54 + fixtures/cookbook/0001-mvm-image.json | 39 + fixtures/cookbook/0002-mvm-audio.json | 37 + fixtures/cookbook/0003-mvm-video.json | 41 + fixtures/cookbook/0004-canvas-size.json | 39 + fixtures/cookbook/0005-image-service.json | 51 + fixtures/cookbook/0006-text-language.json | 107 + fixtures/cookbook/0007-string-formats.json | 78 + fixtures/cookbook/0008-rights.json | 64 + fixtures/cookbook/0009-book-1.json | 210 + .../0010-book-2-viewing-direction-.json | 174 + ...0010-book-2-viewing-direction-manifest-rtl | 213 + ...book-2-viewing-direction-manifest-rtl.json | 213 + ...0010-book-2-viewing-direction-manifest-ttb | 174 + ...book-2-viewing-direction-manifest-ttb.json | 174 + fixtures/cookbook/0011-book-3-behavior-.json | 171 + .../0011-book-3-behavior-manifest-continuous | 171 + ...1-book-3-behavior-manifest-continuous.json | 171 + .../0011-book-3-behavior-manifest-individuals | 171 + ...-book-3-behavior-manifest-individuals.json | 171 + fixtures/cookbook/0013-placeholderCanvas.json | 68 + .../cookbook/0014-accompanyingcanvas.json | 81 + fixtures/cookbook/0015-start.json | 59 + fixtures/cookbook/0017-transcription-av.json | 53 + fixtures/cookbook/0021-tagging.json | 66 + fixtures/cookbook/0024-book-4-toc.json | 327 + fixtures/cookbook/0026-toc-opera.json | 113 + fixtures/cookbook/0029-metadata-anywhere.json | 180 + fixtures/cookbook/0030-multi-volume-.json | 211 + .../cookbook/0030-multi-volume-collection | 33 + .../0030-multi-volume-collection.json | 33 + .../cookbook/0030-multi-volume-manifest_v1 | 211 + .../0030-multi-volume-manifest_v1.json | 211 + .../cookbook/0030-multi-volume-manifest_v2 | 211 + .../0030-multi-volume-manifest_v2.json | 211 + fixtures/cookbook/0031-bound-multivolume.json | 316 + fixtures/cookbook/0033-choice.json | 75 + fixtures/cookbook/0035-foldouts.json | 369 + ...0036-composition-from-multiple-images.json | 76 + .../0040-image-rotation-service-.json | 59 + .../0040-image-rotation-service-manifest-css | 59 + ...0-image-rotation-service-manifest-css.json | 59 + ...40-image-rotation-service-manifest-service | 60 + ...age-rotation-service-manifest-service.json | 60 + fixtures/cookbook/0046-rendering.json | 225 + fixtures/cookbook/0053-seeAlso.json | 226 + fixtures/cookbook/0064-opera-one-canvas.json | 159 + .../0065-opera-multiple-canvases.json | 190 + .../0074-multiple-language-captions.json | 98 + .../cookbook/0117-add-image-thumbnail.json | 94 + fixtures/cookbook/0118_multivalue.json | 61 + .../0139-geolocate-canvas-fragment.json | 117 + fixtures/cookbook/0154-geo-extension.json | 81 + fixtures/cookbook/0202-start-canvas.json | 211 + .../cookbook/0219-using-caption-file.json | 70 + fixtures/cookbook/0230-navdate-.json | 52 + .../cookbook/0230-navdate-navdate-collection | 48 + .../0230-navdate-navdate-collection.json | 48 + .../0230-navdate-navdate_map_1-manifest | 52 + .../0230-navdate-navdate_map_1-manifest.json | 52 + .../0230-navdate-navdate_map_2-manifest | 52 + .../0230-navdate-navdate_map_2-manifest.json | 52 + fixtures/cookbook/0234-provider.json | 124 + .../0258-tagging-external-resource.json | 72 + .../0261-non-rectangular-commenting.json | 73 + .../cookbook/0266-full-canvas-annotation.json | 66 + ...69-embedded-or-referenced-annotations.json | 52 + fixtures/cookbook/_index.json | 198 + package.json | 16 +- scripts/update-cookbook.mjs | 93 + src/presentation-2/upgrader.ts | 2 +- src/presentation-3/empty-types.ts | 19 +- src/presentation-3/normalize.ts | 37 +- .../serialize-presentation-2.ts | 23 +- .../serialize-presentation-3.ts | 63 +- src/presentation-3/serialize.ts | 9 +- src/presentation-3/traverse.ts | 61 +- src/shared/compress-specific-resource.ts | 21 +- src/shared/is-specific-resource.ts | 5 + yarn.lock | 388 +- 87 files changed, 30851 insertions(+), 148 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 __tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap create mode 100644 __tests__/presentation-3-parser/cookbook.tests.ts create mode 100644 __tests__/presentation-3-parser/utilities.test.ts create mode 100644 fixtures/cookbook/0001-mvm-image.json create mode 100644 fixtures/cookbook/0002-mvm-audio.json create mode 100644 fixtures/cookbook/0003-mvm-video.json create mode 100644 fixtures/cookbook/0004-canvas-size.json create mode 100644 fixtures/cookbook/0005-image-service.json create mode 100644 fixtures/cookbook/0006-text-language.json create mode 100644 fixtures/cookbook/0007-string-formats.json create mode 100644 fixtures/cookbook/0008-rights.json create mode 100644 fixtures/cookbook/0009-book-1.json create mode 100644 fixtures/cookbook/0010-book-2-viewing-direction-.json create mode 100644 fixtures/cookbook/0010-book-2-viewing-direction-manifest-rtl create mode 100644 fixtures/cookbook/0010-book-2-viewing-direction-manifest-rtl.json create mode 100644 fixtures/cookbook/0010-book-2-viewing-direction-manifest-ttb create mode 100644 fixtures/cookbook/0010-book-2-viewing-direction-manifest-ttb.json create mode 100644 fixtures/cookbook/0011-book-3-behavior-.json create mode 100644 fixtures/cookbook/0011-book-3-behavior-manifest-continuous create mode 100644 fixtures/cookbook/0011-book-3-behavior-manifest-continuous.json create mode 100644 fixtures/cookbook/0011-book-3-behavior-manifest-individuals create mode 100644 fixtures/cookbook/0011-book-3-behavior-manifest-individuals.json create mode 100644 fixtures/cookbook/0013-placeholderCanvas.json create mode 100644 fixtures/cookbook/0014-accompanyingcanvas.json create mode 100644 fixtures/cookbook/0015-start.json create mode 100644 fixtures/cookbook/0017-transcription-av.json create mode 100644 fixtures/cookbook/0021-tagging.json create mode 100644 fixtures/cookbook/0024-book-4-toc.json create mode 100644 fixtures/cookbook/0026-toc-opera.json create mode 100644 fixtures/cookbook/0029-metadata-anywhere.json create mode 100644 fixtures/cookbook/0030-multi-volume-.json create mode 100644 fixtures/cookbook/0030-multi-volume-collection create mode 100644 fixtures/cookbook/0030-multi-volume-collection.json create mode 100644 fixtures/cookbook/0030-multi-volume-manifest_v1 create mode 100644 fixtures/cookbook/0030-multi-volume-manifest_v1.json create mode 100644 fixtures/cookbook/0030-multi-volume-manifest_v2 create mode 100644 fixtures/cookbook/0030-multi-volume-manifest_v2.json create mode 100644 fixtures/cookbook/0031-bound-multivolume.json create mode 100644 fixtures/cookbook/0033-choice.json create mode 100644 fixtures/cookbook/0035-foldouts.json create mode 100644 fixtures/cookbook/0036-composition-from-multiple-images.json create mode 100644 fixtures/cookbook/0040-image-rotation-service-.json create mode 100644 fixtures/cookbook/0040-image-rotation-service-manifest-css create mode 100644 fixtures/cookbook/0040-image-rotation-service-manifest-css.json create mode 100644 fixtures/cookbook/0040-image-rotation-service-manifest-service create mode 100644 fixtures/cookbook/0040-image-rotation-service-manifest-service.json create mode 100644 fixtures/cookbook/0046-rendering.json create mode 100644 fixtures/cookbook/0053-seeAlso.json create mode 100644 fixtures/cookbook/0064-opera-one-canvas.json create mode 100644 fixtures/cookbook/0065-opera-multiple-canvases.json create mode 100644 fixtures/cookbook/0074-multiple-language-captions.json create mode 100644 fixtures/cookbook/0117-add-image-thumbnail.json create mode 100644 fixtures/cookbook/0118_multivalue.json create mode 100644 fixtures/cookbook/0139-geolocate-canvas-fragment.json create mode 100644 fixtures/cookbook/0154-geo-extension.json create mode 100644 fixtures/cookbook/0202-start-canvas.json create mode 100644 fixtures/cookbook/0219-using-caption-file.json create mode 100644 fixtures/cookbook/0230-navdate-.json create mode 100644 fixtures/cookbook/0230-navdate-navdate-collection create mode 100644 fixtures/cookbook/0230-navdate-navdate-collection.json create mode 100644 fixtures/cookbook/0230-navdate-navdate_map_1-manifest create mode 100644 fixtures/cookbook/0230-navdate-navdate_map_1-manifest.json create mode 100644 fixtures/cookbook/0230-navdate-navdate_map_2-manifest create mode 100644 fixtures/cookbook/0230-navdate-navdate_map_2-manifest.json create mode 100644 fixtures/cookbook/0234-provider.json create mode 100644 fixtures/cookbook/0258-tagging-external-resource.json create mode 100644 fixtures/cookbook/0261-non-rectangular-commenting.json create mode 100644 fixtures/cookbook/0266-full-canvas-annotation.json create mode 100644 fixtures/cookbook/0269-embedded-or-referenced-annotations.json create mode 100644 fixtures/cookbook/_index.json create mode 100644 scripts/update-cookbook.mjs create mode 100644 src/shared/is-specific-resource.ts diff --git a/.eslintrc.json b/.eslintrc.json index 1b9ef10..ab0b962 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -21,6 +21,7 @@ "@typescript-eslint/naming-convention": "off", "@typescript-eslint/explicit-module-boundary-types": "off", "@typescript-eslint/semi": "warn", + "@typescript-eslint/ban-ts-comment": "warn", "@typescript-eslint/no-unused-vars": "off", "@typescript-eslint/no-explicit-any": "off", "require-yield": "off", diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..03824a0 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,56 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased](https://github.com/iiif-commons/parser/compare/v1.0.10...main) + + + +### Added +- Support for `navPlace` and `textGranularity` +- Fragment selectors in SpecificResources, strings and `{id,type}` References are now normalised, reducing the need to parse IDs to grab the ID/Type +- Added expand target helper, used internally for normalization (possibly useful for content state). +- New sub-package `@iiif/parser/strict` for fixing common mistakes in Presentation 3, with detailed feedback for implementors. +- Test coverage across every [IIIF Cookbook](https://iiif.io/api/cookbook) recipe, testing: + - Parsing / Traversing the IIIF + - Normalizing the IIIF correctly + - Re-serializing the IIIF back to identical JSON +- New traversal option for `SpecificResource` +- New traversal option for `GeoJson` (e.g. from the `navPlace` extension) +- + +### Fixed +- `[presentation-2]` `startCanvas` property on Sequences are now added to the Manifest when converting +- Fixed handling Specific resources where the `source` is only string (inferring the correct type from the context) +- Serializing Presentation 2 resources without items +- Bug where AV canvases would have height and width of `0` when serializing +- Bug where custom `@context` on Manifest was not retained during serialization +- Bug where Content Resources did not keep extra properties when serializing (e.g. `value` or `geometry`) +- + +### Removed +- `posterCanvas` - hangover from pre-3.0, this will be ignored +- `logo` on non-provider resources - hangover from pre-3.0, these will be ignored[^3] +- `motivation` field on non-Annotation resources (bug) +- `Traverse.traversePosterCanvas()` is removed (now `Traverse.traverseLinkedCanvases()`) +- + +### Changed +- `range.items[]` is now normalised to either `Reference<'Range'>`[^1] or `SpecificResource>`[^2] +- `manifest.start` is now normalised to a `SpecificResource>` + + + +[^1]: A `Reference` has the shape: `{ id: string, type: T }` and is usually narrowed to one or more types + +[^2]: SpecificResource is defined by the W3C Annotation specification, but in short you can access the original reference by accessing `specificResource.source` + +[^3]: These properties were added to the specification pre-3.0 and then later removed. diff --git a/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap b/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap new file mode 100644 index 0000000..265e615 --- /dev/null +++ b/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap @@ -0,0 +1,21929 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Cookbook Testing normalize "0001-mvm-image" ("https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0001-mvm-image/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0001-mvm-image/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 1800, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 1200, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png": Object { + "format": "image/png", + "height": 1800, + "id": "http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png", + "type": "Image", + "width": 1200, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Image 1", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0001-mvm-image/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0001-mvm-image/page/p1/1": "AnnotationPage", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0001-mvm-image" ("https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json", + "items": Array [ + Object { + "height": 1800, + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/png", + "height": 1800, + "id": "http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png", + "type": "Image", + "width": 1200, + }, + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 1200, + }, + ], + "label": Object { + "en": Array [ + "Image 1", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0002-mvm-audio" ("https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page/annotation": Object { + "body": Array [ + Object { + "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page/annotation", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page/annotation", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 1985.024, + "height": 0, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 0, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4": Object { + "duration": 1985.024, + "format": "audio/mp4", + "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", + "type": "Sound", + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Simplest Audio Example 1", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas": "Canvas", + "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page/annotation": "Annotation", + "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json": "Manifest", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0002-mvm-audio" ("https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json", + "items": Array [ + Object { + "duration": 1985.024, + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page", + "items": Array [ + Object { + "body": Object { + "duration": 1985.024, + "format": "audio/mp4", + "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", + "type": "Sound", + }, + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page/annotation", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Simplest Audio Example 1", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0003-mvm-video" ("https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page/annotation": Object { + "body": Array [ + Object { + "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page/annotation", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page/annotation", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 572.034, + "height": 360, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 640, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4": Object { + "duration": 572.034, + "format": "video/mp4", + "height": 360, + "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4", + "type": "Video", + "width": 480, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Video Example 3", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas": "Canvas", + "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page/annotation": "Annotation", + "https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json": "Manifest", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0003-mvm-video" ("https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json", + "items": Array [ + Object { + "duration": 572.034, + "height": 360, + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page", + "items": Array [ + Object { + "body": Object { + "duration": 572.034, + "format": "video/mp4", + "height": 360, + "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4", + "type": "Video", + "width": 480, + }, + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page/annotation", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 640, + }, + ], + "label": Object { + "en": Array [ + "Video Example 3", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0004-canvas-size" ("https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0004-canvas-size/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0004-canvas-size/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0004-canvas-size/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 1080, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 1920, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": Object { + "format": "image/png", + "height": 360, + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "type": "Image", + "width": 640, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/canvas/p1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Still image from an opera performance at Indiana University", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0004-canvas-size/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0004-canvas-size/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0004-canvas-size/page/p1/1": "AnnotationPage", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0004-canvas-size" ("https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json", + "items": Array [ + Object { + "height": 1080, + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/png", + "height": 360, + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "type": "Image", + "width": 640, + }, + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 1920, + }, + ], + "label": Object { + "en": Array [ + "Still image from an opera performance at Indiana University", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0005-image-service" ("https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 3024, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Canvas with a single IIIF image", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 4032, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0005-image-service" ("https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", + "items": Array [ + Object { + "height": 3024, + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Canvas with a single IIIF image", + ], + }, + "type": "Canvas", + "width": 4032, + }, + ], + "label": Object { + "en": Array [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0006-text-language" ("https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0006-text-language/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0006-text-language/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0006-text-language/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 991, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 1114, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 991, + "id": "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1114, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/canvas/p1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Whistler's Mother", + ], + "fr": Array [ + "La Mère de Whistler", + ], + }, + "metadata": Array [ + Object { + "label": Object { + "en": Array [ + "Creator", + ], + "fr": Array [ + "Auteur", + ], + }, + "value": Object { + "none": Array [ + "Whistler, James Abbott McNeill", + ], + }, + }, + Object { + "label": Object { + "en": Array [ + "Subject", + ], + "fr": Array [ + "Sujet", + ], + }, + "value": Object { + "en": Array [ + "McNeill Anna Matilda, mother of Whistler (1804-1881)", + ], + "fr": Array [ + "McNeill Anna Matilda, mère de Whistler (1804-1881)", + ], + }, + }, + ], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": Object { + "label": Object { + "en": Array [ + "Held By", + ], + "fr": Array [ + "Détenu par", + ], + }, + "value": Object { + "none": Array [ + "Musée d'Orsay, Paris, France", + ], + }, + }, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": Object { + "en": Array [ + "Arrangement in Grey and Black No. 1, also called Portrait of the Artist's Mother.", + ], + "fr": Array [ + "Arrangement en gris et noir n°1, also called Portrait de la mère de l'artiste.", + ], + }, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0006-text-language/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0006-text-language/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0006-text-language/page/p1/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0006-text-language" ("https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json", + "items": Array [ + Object { + "height": 991, + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 991, + "id": "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1114, + }, + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0006-text-language/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 1114, + }, + ], + "label": Object { + "en": Array [ + "Whistler's Mother", + ], + "fr": Array [ + "La Mère de Whistler", + ], + }, + "metadata": Array [ + Object { + "label": Object { + "en": Array [ + "Creator", + ], + "fr": Array [ + "Auteur", + ], + }, + "value": Object { + "none": Array [ + "Whistler, James Abbott McNeill", + ], + }, + }, + Object { + "label": Object { + "en": Array [ + "Subject", + ], + "fr": Array [ + "Sujet", + ], + }, + "value": Object { + "en": Array [ + "McNeill Anna Matilda, mother of Whistler (1804-1881)", + ], + "fr": Array [ + "McNeill Anna Matilda, mère de Whistler (1804-1881)", + ], + }, + }, + ], + "requiredStatement": Object { + "label": Object { + "en": Array [ + "Held By", + ], + "fr": Array [ + "Détenu par", + ], + }, + "value": Object { + "none": Array [ + "Musée d'Orsay, Paris, France", + ], + }, + }, + "summary": Object { + "en": Array [ + "Arrangement in Grey and Black No. 1, also called Portrait of the Artist's Mother.", + ], + "fr": Array [ + "Arrangement en gris et noir n°1, also called Portrait de la mère de l'artiste.", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0007-string-formats" ("https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0007-string-formats/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0007-string-formats/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0007-string-formats/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 3024, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 4032, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/canvas/p1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "metadata": Array [ + Object { + "label": Object { + "en": Array [ + "Author", + ], + }, + "value": Object { + "none": Array [ + "Glen Robson", + ], + }, + }, + ], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": Object { + "label": Object { + "en": Array [ + "Attribution", + ], + }, + "value": Object { + "en": Array [ + "Glen Robson, IIIF Technical Coordinator. CC BY-SA 3.0 ", + ], + }, + }, + "rights": "http://creativecommons.org/licenses/by-sa/3.0/", + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": Object { + "en": Array [ + "

Picture taken by the IIIF Technical Coordinator

", + ], + }, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0007-string-formats/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0007-string-formats/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0007-string-formats/page/p1/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0007-string-formats" ("https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json", + "items": Array [ + Object { + "height": 3024, + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0007-string-formats/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 4032, + }, + ], + "label": Object { + "en": Array [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "metadata": Array [ + Object { + "label": Object { + "en": Array [ + "Author", + ], + }, + "value": Object { + "none": Array [ + "Glen Robson", + ], + }, + }, + ], + "requiredStatement": Object { + "label": Object { + "en": Array [ + "Attribution", + ], + }, + "value": Object { + "en": Array [ + "Glen Robson, IIIF Technical Coordinator. CC BY-SA 3.0 ", + ], + }, + }, + "rights": "http://creativecommons.org/licenses/by-sa/3.0/", + "summary": Object { + "en": Array [ + "

Picture taken by the IIIF Technical Coordinator

", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0008-rights" ("https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0008-rights/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0008-rights/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0008-rights/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 3024, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 4032, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/canvas/p1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": Object { + "label": Object { + "en": Array [ + "Attribution", + ], + }, + "value": Object { + "en": Array [ + "Glen Robson, IIIF Technical Coordinator. CC BY-SA 3.0 ", + ], + }, + }, + "rights": "http://creativecommons.org/licenses/by-sa/3.0/", + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": Object { + "en": Array [ + "

Picture taken by the IIIF Technical Coordinator

", + ], + }, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0008-rights/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0008-rights/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0008-rights/page/p1/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0008-rights" ("https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json", + "items": Array [ + Object { + "height": 3024, + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0008-rights/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 4032, + }, + ], + "label": Object { + "en": Array [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "requiredStatement": Object { + "label": Object { + "en": Array [ + "Attribution", + ], + }, + "value": Object { + "en": Array [ + "Glen Robson, IIIF Technical Coordinator. CC BY-SA 3.0 ", + ], + }, + }, + "rights": "http://creativecommons.org/licenses/by-sa/3.0/", + "summary": Object { + "en": Array [ + "

Picture taken by the IIIF Technical Coordinator

", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0009-book-1" ("https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0002-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0002-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0003-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0003-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p3", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0004-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0004-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p4", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0005-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0005-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p5", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p2/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p2/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0002-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p3/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p3/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0003-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p4/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p4/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0004-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p5/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p5/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0005-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4613, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Blank page", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3204, + }, + "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4612, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p2/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Frontispiece", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3186, + }, + "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4613, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p3/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Title page", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3204, + }, + "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p4": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4578, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p4/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Blank page", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3174, + }, + "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p5": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4632, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p5/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Bookplate", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3198, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4613, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3204, + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4612, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3186, + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4613, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3204, + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4578, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3174, + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4632, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3198, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [ + "paged", + ], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p1", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p2", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p3", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p4", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p5", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Simple Manifest - Book", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0002-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0003-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0004-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0005-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p2": "Canvas", + "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p3": "Canvas", + "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p4": "Canvas", + "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p5": "Canvas", + "https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p2/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p3/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p4/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p5/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0009-book-1" ("https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "behavior": Array [ + "paged", + ], + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json", + "items": Array [ + Object { + "height": 4613, + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4613, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3204, + }, + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Blank page", + ], + }, + "type": "Canvas", + "width": 3204, + }, + Object { + "height": 4612, + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p2/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4612, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3186, + }, + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0002-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p2", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Frontispiece", + ], + }, + "type": "Canvas", + "width": 3186, + }, + Object { + "height": 4613, + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p3/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4613, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3204, + }, + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0003-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p3", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Title page", + ], + }, + "type": "Canvas", + "width": 3204, + }, + Object { + "height": 4578, + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p4/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4578, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3174, + }, + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0004-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p4", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Blank page", + ], + }, + "type": "Canvas", + "width": 3174, + }, + Object { + "height": 4632, + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p5/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4632, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3198, + }, + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0005-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p5", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Bookplate", + ], + }, + "type": "Canvas", + "width": 3198, + }, + ], + "label": Object { + "en": Array [ + "Simple Manifest - Book", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0010-book-2-viewing-direction-manifest-rtl" ("https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0002-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0002-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0003-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0003-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0004-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0004-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0005-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0005-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p2/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p2/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0002-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p3/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p3/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0003-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p4/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p4/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0004-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p5/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p5/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0005-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4823, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "front cover", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3497, + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4804, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p2/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "pages 1–2", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 6062, + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4776, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p3/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "pages 3–4", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 6127, + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4751, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p4/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "pages 5–6", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 6124, + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4808, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p5/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "back cover", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3510, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4823, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3497, + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4804, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 6062, + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4776, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 6127, + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4751, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 6124, + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4808, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3510, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Book with Right-to-Left Viewing Direction", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": Object { + "en": Array [ + "Playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", + ], + }, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "right-to-left", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0002-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0003-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0004-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0005-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2": "Canvas", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3": "Canvas", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4": "Canvas", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5": "Canvas", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p2/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p3/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p4/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p5/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0010-book-2-viewing-direction-manifest-rtl" ("https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json", + "items": Array [ + Object { + "height": 4823, + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4823, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3497, + }, + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "front cover", + ], + }, + "type": "Canvas", + "width": 3497, + }, + Object { + "height": 4804, + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p2/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4804, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 6062, + }, + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0002-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "pages 1–2", + ], + }, + "type": "Canvas", + "width": 6062, + }, + Object { + "height": 4776, + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p3/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4776, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 6127, + }, + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0003-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "pages 3–4", + ], + }, + "type": "Canvas", + "width": 6127, + }, + Object { + "height": 4751, + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p4/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4751, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 6124, + }, + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0004-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "pages 5–6", + ], + }, + "type": "Canvas", + "width": 6124, + }, + Object { + "height": 4808, + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p5/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4808, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3510, + }, + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0005-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "back cover", + ], + }, + "type": "Canvas", + "width": 3510, + }, + ], + "label": Object { + "en": Array [ + "Book with Right-to-Left Viewing Direction", + ], + }, + "summary": Object { + "en": Array [ + "Playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", + ], + }, + "type": "Manifest", + "viewingDirection": "right-to-left", +} +`; + +exports[`Cookbook Testing normalize "0010-book-2-viewing-direction-manifest-ttb" ("https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0002-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0002-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0003-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0003-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0004-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0004-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v2/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v2/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0002-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v3/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v3/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0003-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v4/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v4/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0004-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 3152, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "image 1", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 2251, + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 3135, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v2/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "image 2", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 2268, + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 3135, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v3/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "image 3", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 2274, + }, + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 3135, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v4/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "image 4", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 2268, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 3152, + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2251, + }, + "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 3135, + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2268, + }, + "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 3135, + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2274, + }, + "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 3135, + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2268, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Diary with Top-to-Bottom Viewing Direction", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": Object { + "en": Array [ + "William Lewis Sachtleben was an American long-distance cyclist who rode across Asia from Istanbul to Peking in 1891 to 1892 with Thomas Gaskell Allen Jr., his classmate from Washington University. This was part of a longer journey that began the day after they had graduated from college, when they travelled to New York and on to Liverpool; in all they travelled 15,044 miles by bicycle, 'the longest continuous land journey ever made around the world' as reported in their book Across Asia on a bicycle (1895). Sachtleben documented his travels with photographs and diaries, the latter of which he numbered sequentially. The diary of notebook 'No. 10' covers a portion of their journey through the Armenian area of Turkey from April 12 to May 9 (there is a 2-page reading list at the end). During this time they rode from Ankara (Angora in the diary) to Sivas, where they stayed for ten days while Allen had a bout of typhoid fever, and the first half of a ten-day excursion to Merzifon (Mersovan in the diary), taken by Sachtleben to give Allen additional time to recover.", + ], + }, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "top-to-bottom", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0002-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0003-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0004-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2": "Canvas", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3": "Canvas", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4": "Canvas", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v2/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v3/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v4/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0010-book-2-viewing-direction-manifest-ttb" ("https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json", + "items": Array [ + Object { + "height": 3152, + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 3152, + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2251, + }, + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "image 1", + ], + }, + "type": "Canvas", + "width": 2251, + }, + Object { + "height": 3135, + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v2/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 3135, + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2268, + }, + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0002-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "image 2", + ], + }, + "type": "Canvas", + "width": 2268, + }, + Object { + "height": 3135, + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v3/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 3135, + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2274, + }, + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0003-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "image 3", + ], + }, + "type": "Canvas", + "width": 2274, + }, + Object { + "height": 3135, + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v4/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 3135, + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2268, + }, + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0004-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "image 4", + ], + }, + "type": "Canvas", + "width": 2268, + }, + ], + "label": Object { + "en": Array [ + "Diary with Top-to-Bottom Viewing Direction", + ], + }, + "summary": Object { + "en": Array [ + "William Lewis Sachtleben was an American long-distance cyclist who rode across Asia from Istanbul to Peking in 1891 to 1892 with Thomas Gaskell Allen Jr., his classmate from Washington University. This was part of a longer journey that began the day after they had graduated from college, when they travelled to New York and on to Liverpool; in all they travelled 15,044 miles by bicycle, 'the longest continuous land journey ever made around the world' as reported in their book Across Asia on a bicycle (1895). Sachtleben documented his travels with photographs and diaries, the latter of which he numbered sequentially. The diary of notebook 'No. 10' covers a portion of their journey through the Armenian area of Turkey from April 12 to May 9 (there is a 2-page reading list at the end). During this time they rode from Ankara (Angora in the diary) to Sivas, where they stayed for ten days while Allen had a bout of typhoid fever, and the first half of a ten-day excursion to Merzifon (Mersovan in the diary), taken by Sachtleben to give Allen additional time to recover.", + ], + }, + "type": "Manifest", + "viewingDirection": "top-to-bottom", +} +`; + +exports[`Cookbook Testing normalize "0011-book-3-behavior-manifest-continuous" ("https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0002-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0002-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0003-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0003-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0004-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0004-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s2/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s2/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0002-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s3/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s3/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0003-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s4/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s4/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0004-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 1592, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Section 1 [Recto]", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 11368, + }, + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 1536, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s2/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Section 2 [Recto]", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 11608, + }, + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 1504, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s3/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Section 3 [Recto]", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 10576, + }, + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 1464, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s4/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Section 4 [Recto]", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 2488, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 1592, + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 11368, + }, + "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 1536, + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 11608, + }, + "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 1504, + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 10576, + }, + "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 1464, + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2488, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [ + "continuous", + ], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4", + "type": "Canvas", + }, + ], + "label": Object { + "gez": Array [ + "Ms. 21 Māzemurā Dāwit, Asmat [መዝሙረ ዳዊት]", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0002-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0003-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0004-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2": "Canvas", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3": "Canvas", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4": "Canvas", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s2/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s3/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s4/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0011-book-3-behavior-manifest-continuous" ("https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "behavior": Array [ + "continuous", + ], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json", + "items": Array [ + Object { + "height": 1592, + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 1592, + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 11368, + }, + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Section 1 [Recto]", + ], + }, + "type": "Canvas", + "width": 11368, + }, + Object { + "height": 1536, + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s2/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 1536, + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 11608, + }, + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0002-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Section 2 [Recto]", + ], + }, + "type": "Canvas", + "width": 11608, + }, + Object { + "height": 1504, + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s3/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 1504, + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 10576, + }, + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0003-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Section 3 [Recto]", + ], + }, + "type": "Canvas", + "width": 10576, + }, + Object { + "height": 1464, + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s4/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 1464, + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2488, + }, + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0004-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Section 4 [Recto]", + ], + }, + "type": "Canvas", + "width": 2488, + }, + ], + "label": Object { + "gez": Array [ + "Ms. 21 Māzemurā Dāwit, Asmat [መዝሙረ ዳዊት]", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0011-book-3-behavior-manifest-individuals" ("https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0002-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0002-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0003-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0003-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0004-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0004-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v2/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v2/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0002-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v3/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v3/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0003-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v4/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v4/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0004-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 2250, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "inside cover; 1r", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3375, + }, + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 2250, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v2/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "2v, 3r", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3375, + }, + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 2250, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v3/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "3v, 4r", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3375, + }, + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 2250, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v4/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "4v, 5r", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3375, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 2250, + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3375, + }, + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 2250, + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3375, + }, + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 2250, + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3375, + }, + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 2250, + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3375, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [ + "individuals", + ], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4", + "type": "Canvas", + }, + ], + "label": Object { + "ca": Array [ + "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466.", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0002-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0003-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0004-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2": "Canvas", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3": "Canvas", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4": "Canvas", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v2/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v3/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v4/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0011-book-3-behavior-manifest-individuals" ("https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "behavior": Array [ + "individuals", + ], + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json", + "items": Array [ + Object { + "height": 2250, + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 2250, + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3375, + }, + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "inside cover; 1r", + ], + }, + "type": "Canvas", + "width": 3375, + }, + Object { + "height": 2250, + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v2/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 2250, + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3375, + }, + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0002-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "2v, 3r", + ], + }, + "type": "Canvas", + "width": 3375, + }, + Object { + "height": 2250, + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v3/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 2250, + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3375, + }, + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0003-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "3v, 4r", + ], + }, + "type": "Canvas", + "width": 3375, + }, + Object { + "height": 2250, + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v4/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 2250, + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3375, + }, + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0004-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "4v, 5r", + ], + }, + "type": "Canvas", + "width": 3375, + }, + ], + "label": Object { + "ca": Array [ + "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466.", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0013-placeholderCanvas" ("https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1-image": Object { + "body": Array [ + Object { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1-video": Object { + "body": Array [ + Object { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1-video", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1-video", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 7278.466, + "height": 360, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": Object { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder", + "type": "Canvas", + }, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 640, + }, + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 360, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 640, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": Object { + "format": "image/png", + "height": 360, + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "type": "Image", + "width": 640, + }, + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4": Object { + "duration": 7278.466, + "format": "video/mp4", + "height": 360, + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4", + "type": "Video", + "width": 640, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Video recording of Donizetti's _The Elixer of Love_", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": "ContentResource", + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti": "Canvas", + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder": "Canvas", + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1-video": "Annotation", + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json": "Manifest", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0013-placeholderCanvas" ("https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json", + "items": Array [ + Object { + "duration": 7278.466, + "height": 360, + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1", + "items": Array [ + Object { + "body": Object { + "duration": 7278.466, + "format": "video/mp4", + "height": 360, + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4", + "type": "Video", + "width": 640, + }, + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1-video", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "placeholderCanvas": Object { + "height": 360, + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1", + "items": Array [ + Object { + "body": Object { + "format": "image/png", + "height": 360, + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "type": "Image", + "width": 640, + }, + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 640, + }, + "type": "Canvas", + "width": 640, + }, + ], + "label": Object { + "en": Array [ + "Video recording of Donizetti's _The Elixer of Love_", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0014-accompanyingcanvas" ("https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio": Object { + "body": Array [ + Object { + "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 998, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "First page of score for Gustav Mahler, Symphony No. 3", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 772, + }, + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1": Object { + "accompanyingCanvas": Object { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying", + "type": "Canvas", + }, + "annotations": Array [], + "behavior": Array [], + "duration": 1985.024, + "height": 0, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Gustav Mahler, Symphony No. 3, CD 1", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 0, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4": Object { + "duration": 1985.024, + "format": "video/mp4", + "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", + "type": "Sound", + }, + "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg": Object { + "format": "image/jpeg", + "height": 998, + "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 772, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Partial audio recording of Gustav Mahler's _Symphony No. 3_", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying": "Canvas", + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio": "Annotation", + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json": "Manifest", + "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0014-accompanyingcanvas" ("https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json", + "items": Array [ + Object { + "accompanyingCanvas": Object { + "height": 998, + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 998, + "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 772, + }, + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "First page of score for Gustav Mahler, Symphony No. 3", + ], + }, + "type": "Canvas", + "width": 772, + }, + "duration": 1985.024, + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", + "items": Array [ + Object { + "body": Object { + "duration": 1985.024, + "format": "video/mp4", + "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", + "type": "Sound", + }, + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Gustav Mahler, Symphony No. 3, CD 1", + ], + }, + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Partial audio recording of Gustav Mahler's _Symphony No. 3_", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0015-start" ("https://iiif.io/api/cookbook/recipe/0015-start/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1-video": Object { + "body": Array [ + Object { + "id": "https://fixtures.iiif.io/video/indiana/30-minute-clock/medium/30-minute-clock.mp4", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1-video", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1/page": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1/page", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1-video", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 1801.055, + "height": 0, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1/page", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 0, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://fixtures.iiif.io/video/indiana/30-minute-clock/medium/30-minute-clock.mp4": Object { + "duration": 1801.055, + "format": "video/mp4", + "id": "https://fixtures.iiif.io/video/indiana/30-minute-clock/medium/30-minute-clock.mp4", + "type": "Video", + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0015-start/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0015-start/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Video of a 30-minute digital clock", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": Object { + "label": Object { + "en": Array [ + "Attribution", + ], + }, + "value": Object { + "en": Array [ + "The video was created by DrLex1 and was released using a Creative Commons Attribution license", + ], + }, + }, + "rights": "http://creativecommons.org/licenses/by/3.0/", + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": Object { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas-start/segment1", + "selector": Object { + "t": 120.5, + "type": "PointSelector", + }, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://fixtures.iiif.io/video/indiana/30-minute-clock/medium/30-minute-clock.mp4": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1-video": "Annotation", + "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1/page": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0015-start/manifest.json": "Manifest", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0015-start" ("https://iiif.io/api/cookbook/recipe/0015-start/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0015-start/manifest.json", + "items": Array [ + Object { + "duration": 1801.055, + "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1/page", + "items": Array [ + Object { + "body": Object { + "duration": 1801.055, + "format": "video/mp4", + "id": "https://fixtures.iiif.io/video/indiana/30-minute-clock/medium/30-minute-clock.mp4", + "type": "Video", + }, + "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1-video", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Video of a 30-minute digital clock", + ], + }, + "requiredStatement": Object { + "label": Object { + "en": Array [ + "Attribution", + ], + }, + "value": Object { + "en": Array [ + "The video was created by DrLex1 and was released using a Creative Commons Attribution license", + ], + }, + }, + "rights": "http://creativecommons.org/licenses/by/3.0/", + "start": Object { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas-start/segment1", + "selector": Object { + "t": 120.5, + "type": "PointSelector", + }, + "source": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", + "type": "SpecificResource", + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0017-transcription-av" ("https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page/annotation": Object { + "body": Array [ + Object { + "id": "https://fixtures.iiif.io/video/indiana/volleyball/high/volleyball-for-boys.mp4", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page/annotation", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page/annotation", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 662.037, + "height": 1080, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [ + Object { + "id": "https://fixtures.iiif.io/video/indiana/volleyball/volleyball.txt", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 1920, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://fixtures.iiif.io/video/indiana/volleyball/high/volleyball-for-boys.mp4": Object { + "duration": 662.037, + "format": "video/mp4", + "height": 1080, + "id": "https://fixtures.iiif.io/video/indiana/volleyball/high/volleyball-for-boys.mp4", + "type": "Video", + "width": 1920, + }, + "https://fixtures.iiif.io/video/indiana/volleyball/volleyball.txt": Object { + "format": "text/txt", + "id": "https://fixtures.iiif.io/video/indiana/volleyball/volleyball.txt", + "label": Object { + "en": Array [ + "Transcript", + ], + }, + "type": "Text", + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Volleyball for Boys", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://fixtures.iiif.io/video/indiana/volleyball/high/volleyball-for-boys.mp4": "ContentResource", + "https://fixtures.iiif.io/video/indiana/volleyball/volleyball.txt": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas": "Canvas", + "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page/annotation": "Annotation", + "https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json": "Manifest", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0017-transcription-av" ("https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json", + "items": Array [ + Object { + "duration": 662.037, + "height": 1080, + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page", + "items": Array [ + Object { + "body": Object { + "duration": 662.037, + "format": "video/mp4", + "height": 1080, + "id": "https://fixtures.iiif.io/video/indiana/volleyball/high/volleyball-for-boys.mp4", + "type": "Video", + "width": 1920, + }, + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page/annotation", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "rendering": Array [ + Object { + "format": "text/txt", + "id": "https://fixtures.iiif.io/video/indiana/volleyball/volleyball.txt", + "label": Object { + "en": Array [ + "Transcript", + ], + }, + "type": "Text", + }, + ], + "type": "Canvas", + "width": 1920, + }, + ], + "label": Object { + "en": Array [ + "Volleyball for Boys", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0021-tagging" ("https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag": Object { + "body": Array [ + Object { + "id": "vault://605b9d93", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", + "motivation": Array [ + "tagging", + ], + "target": Object { + "selector": Object { + "type": "FragmentSelector", + "value": "xywh=265,661,1260,1239", + }, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1", + "type": "AnnotationPage", + }, + ], + "behavior": Array [], + "duration": 0, + "height": 3024, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 4032, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "vault://605b9d93": Object { + "format": "text/plain", + "id": "vault://605b9d93", + "language": "de", + "type": "TextualBody", + "value": "Gänseliesel-Brunnen", + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag": "Annotation", + "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", + "vault://605b9d93": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0021-tagging" ("https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", + "items": Array [ + Object { + "annotations": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1", + "items": Array [ + Object { + "body": Object { + "format": "text/plain", + "language": "de", + "type": "TextualBody", + "value": "Gänseliesel-Brunnen", + }, + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", + "motivation": "tagging", + "target": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1#xywh=265,661,1260,1239", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "height": 3024, + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 4032, + }, + ], + "label": Object { + "en": Array [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0024-book-4-toc" ("https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p6/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p6/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 2504, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "f. 1r", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 1768, + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 2512, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "f. 1v", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 1792, + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 2456, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "f. 2r", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 1792, + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 2440, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "f. 2v", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 1760, + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 2416, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "f. 3r", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 1776, + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 2416, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p6/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "f. 3v", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 1776, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 2504, + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1768, + }, + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 2512, + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1792, + }, + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 2456, + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1792, + }, + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 2440, + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1760, + }, + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 2416, + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1776, + }, + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 2416, + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1776, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Ethiopic Ms 10", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r0", + "type": "Range", + }, + ], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r0": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r0", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r1", + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2", + "type": "Range", + }, + ], + "label": Object { + "en": Array [ + "Table of Contents", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r1", + "items": Array [ + Object { + "selector": undefined, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + Object { + "selector": undefined, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": Object { + "gez": Array [ + "Tabiba Tabiban [ጠቢበ ጠቢባን]", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/1", + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/2", + "type": "Range", + }, + ], + "label": Object { + "gez": Array [ + "Arede'et [አርድዕት]", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/1", + "items": Array [ + Object { + "selector": undefined, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + Object { + "selector": undefined, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": Object { + "en": Array [ + "Monday", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/2", + "items": Array [ + Object { + "selector": undefined, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + Object { + "selector": undefined, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": Object { + "en": Array [ + "Tuesday", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + }, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2": "Canvas", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3": "Canvas", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4": "Canvas", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5": "Canvas", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6": "Canvas", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p6/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r0": "Range", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r1": "Range", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2": "Range", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/1": "Range", + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/2": "Range", + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0024-book-4-toc" ("https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json", + "items": Array [ + Object { + "height": 2504, + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 2504, + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1768, + }, + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "f. 1r", + ], + }, + "type": "Canvas", + "width": 1768, + }, + Object { + "height": 2512, + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 2512, + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1792, + }, + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "f. 1v", + ], + }, + "type": "Canvas", + "width": 1792, + }, + Object { + "height": 2456, + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 2456, + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1792, + }, + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "f. 2r", + ], + }, + "type": "Canvas", + "width": 1792, + }, + Object { + "height": 2440, + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 2440, + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1760, + }, + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "f. 2v", + ], + }, + "type": "Canvas", + "width": 1760, + }, + Object { + "height": 2416, + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 2416, + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1776, + }, + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "f. 3r", + ], + }, + "type": "Canvas", + "width": 1776, + }, + Object { + "height": 2416, + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p6/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 2416, + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1776, + }, + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "f. 3v", + ], + }, + "type": "Canvas", + "width": 1776, + }, + ], + "label": Object { + "en": Array [ + "Ethiopic Ms 10", + ], + }, + "structures": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r0", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", + "type": "Canvas", + }, + ], + "label": Object { + "gez": Array [ + "Tabiba Tabiban [ጠቢበ ጠቢባን]", + ], + }, + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Monday", + ], + }, + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Tuesday", + ], + }, + "type": "Range", + }, + ], + "label": Object { + "gez": Array [ + "Arede'et [አርድዕት]", + ], + }, + "type": "Range", + }, + ], + "label": Object { + "en": Array [ + "Table of Contents", + ], + }, + "type": "Range", + }, + ], + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0026-toc-opera" ("https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1/annotation/1": Object { + "body": Array [ + Object { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1/annotation/1", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1/annotation/1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 7278.422, + "height": 1080, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 1920, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4": Object { + "duration": 7278.422, + "format": "video/mp4", + "height": 1080, + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4", + "type": "Video", + "width": 1920, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "The Elixir of Love", + ], + "it": Array [ + "L'Elisir D'Amore", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/1", + "type": "Range", + }, + ], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object { + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=0,302.05": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=0,302.05", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=302.05,3971.24": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=302.05,3971.24", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=3971.24": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=3971.24", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/2", + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/5", + "type": "Range", + }, + ], + "label": Object { + "it": Array [ + "Gaetano Donizetti, L'Elisir D'Amore", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/3", + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/4", + "type": "Range", + }, + ], + "label": Object { + "it": Array [ + "Atto Primo", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/3", + "items": Array [ + Object { + "selector": Object { + "type": "FragmentSelector", + "value": "t=0,302.05", + }, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": Object { + "it": Array [ + "Preludio e Coro d'introduzione – Bel conforto al mietitore", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/4": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/4", + "items": Array [ + Object { + "selector": Object { + "type": "FragmentSelector", + "value": "t=302.05,3971.24", + }, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": Object { + "en": Array [ + "Remainder of Atto Primo", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/5": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/5", + "items": Array [ + Object { + "selector": Object { + "type": "FragmentSelector", + "value": "t=3971.24", + }, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": Object { + "it": Array [ + "Atto Secondo", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + }, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=0,302.05": "Canvas", + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=302.05,3971.24": "Canvas", + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=3971.24": "Canvas", + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1/annotation/1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/1": "Range", + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/2": "Range", + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/3": "Range", + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/4": "Range", + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/5": "Range", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0026-toc-opera" ("https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json", + "items": Array [ + Object { + "duration": 7278.422, + "height": 1080, + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1", + "items": Array [ + Object { + "body": Object { + "duration": 7278.422, + "format": "video/mp4", + "height": 1080, + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4", + "type": "Video", + "width": 1920, + }, + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1/annotation/1", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 1920, + }, + ], + "label": Object { + "en": Array [ + "The Elixir of Love", + ], + "it": Array [ + "L'Elisir D'Amore", + ], + }, + "structures": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=0,302.05", + "type": "Canvas", + }, + ], + "label": Object { + "it": Array [ + "Preludio e Coro d'introduzione – Bel conforto al mietitore", + ], + }, + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=302.05,3971.24", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Remainder of Atto Primo", + ], + }, + "type": "Range", + }, + ], + "label": Object { + "it": Array [ + "Atto Primo", + ], + }, + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=3971.24", + "type": "Canvas", + }, + ], + "label": Object { + "it": Array [ + "Atto Secondo", + ], + }, + "type": "Range", + }, + ], + "label": Object { + "it": Array [ + "Gaetano Donizetti, L'Elisir D'Amore", + ], + }, + "type": "Range", + }, + ], + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0029-metadata-anywhere" ("https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0002-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0002-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p2/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p2/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0002-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 1271, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Painting under natural light", + ], + }, + "metadata": Array [ + Object { + "label": Object { + "en": Array [ + "Description", + ], + }, + "value": Object { + "en": Array [ + "The scene is the house at Mortlake of Dr John Dee (1527-1608). At the court of Queen Elizabeth I, Dee was revered for the range of his scientific knowledge, which embraced the fields of mathematics, navigation, geography, alchemy/chemistry, medicine and optics. In the painting he is showing the effect of combining two elements, either to cause combustion or to extinguish it. Behind him is his assistant Edward Kelly, wearing a long skullcap to conceal the fact that his ears had been cropped as a punishment for forgery.", + ], + }, + }, + ], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 2000, + }, + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 1271, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p2/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "X-ray view of painting", + ], + }, + "metadata": Array [ + Object { + "label": Object { + "en": Array [ + "Description", + ], + }, + "value": Object { + "en": Array [ + "The painting originally showed Dee standing in a circle of skulls on the floor, stretching from the floor area in front of the Queen (on the left) to the floor near Edward Kelly (on the right). The skulls were at an early stage painted over, but have since become visible. Another pentimento is visible in the tapestry on the right: shelves containing monstrous animals are visible behind it. The pentimenti were clarified when the painting was X-rayed in 2015.", + ], + }, + }, + ], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 2000, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 1271, + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2000, + }, + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 1271, + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2000, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p1", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p2", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "John Dee performing an experiment before Queen Elizabeth I.", + ], + }, + "metadata": Array [ + Object { + "label": Object { + "en": Array [ + "Creator", + ], + }, + "value": Object { + "en": Array [ + "Glindoni, Henry Gillard, 1852-1913", + ], + }, + }, + Object { + "label": Object { + "en": Array [ + "Date", + ], + }, + "value": Object { + "en": Array [ + "1800-1899", + ], + }, + }, + Object { + "label": Object { + "en": Array [ + "Physical Description", + ], + }, + "value": Object { + "en": Array [ + "1 painting : oil on canvas ; canvas 152 x 244.4 cm", + ], + }, + }, + Object { + "label": Object { + "en": Array [ + "Reference", + ], + }, + "value": Object { + "en": Array [ + "Wellcome Library no. 47369i", + ], + }, + }, + ], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": Object { + "label": Object { + "en": Array [ + "Attribution", + ], + }, + "value": Object { + "en": Array [ + "Wellcome Collection. Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)", + ], + }, + }, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0002-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p2": "Canvas", + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p2/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0029-metadata-anywhere" ("https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json", + "items": Array [ + Object { + "height": 1271, + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 1271, + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2000, + }, + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Painting under natural light", + ], + }, + "metadata": Array [ + Object { + "label": Object { + "en": Array [ + "Description", + ], + }, + "value": Object { + "en": Array [ + "The scene is the house at Mortlake of Dr John Dee (1527-1608). At the court of Queen Elizabeth I, Dee was revered for the range of his scientific knowledge, which embraced the fields of mathematics, navigation, geography, alchemy/chemistry, medicine and optics. In the painting he is showing the effect of combining two elements, either to cause combustion or to extinguish it. Behind him is his assistant Edward Kelly, wearing a long skullcap to conceal the fact that his ears had been cropped as a punishment for forgery.", + ], + }, + }, + ], + "type": "Canvas", + "width": 2000, + }, + Object { + "height": 1271, + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p2/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 1271, + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2000, + }, + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0002-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p2", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "X-ray view of painting", + ], + }, + "metadata": Array [ + Object { + "label": Object { + "en": Array [ + "Description", + ], + }, + "value": Object { + "en": Array [ + "The painting originally showed Dee standing in a circle of skulls on the floor, stretching from the floor area in front of the Queen (on the left) to the floor near Edward Kelly (on the right). The skulls were at an early stage painted over, but have since become visible. Another pentimento is visible in the tapestry on the right: shelves containing monstrous animals are visible behind it. The pentimenti were clarified when the painting was X-rayed in 2015.", + ], + }, + }, + ], + "type": "Canvas", + "width": 2000, + }, + ], + "label": Object { + "en": Array [ + "John Dee performing an experiment before Queen Elizabeth I.", + ], + }, + "metadata": Array [ + Object { + "label": Object { + "en": Array [ + "Creator", + ], + }, + "value": Object { + "en": Array [ + "Glindoni, Henry Gillard, 1852-1913", + ], + }, + }, + Object { + "label": Object { + "en": Array [ + "Date", + ], + }, + "value": Object { + "en": Array [ + "1800-1899", + ], + }, + }, + Object { + "label": Object { + "en": Array [ + "Physical Description", + ], + }, + "value": Object { + "en": Array [ + "1 painting : oil on canvas ; canvas 152 x 244.4 cm", + ], + }, + }, + Object { + "label": Object { + "en": Array [ + "Reference", + ], + }, + "value": Object { + "en": Array [ + "Wellcome Library no. 47369i", + ], + }, + }, + ], + "requiredStatement": Object { + "label": Object { + "en": Array [ + "Attribution", + ], + }, + "value": Object { + "en": Array [ + "Wellcome Collection. Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)", + ], + }, + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0030-multi-volume-collection" ("https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object {}, + "AnnotationCollection": Object {}, + "AnnotationPage": Object {}, + "Canvas": Object {}, + "Collection": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [ + "multi-part", + ], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", + "label": Object { + "jp": Array [ + "巻 1 [Vol. 1]", + ], + }, + "type": "Manifest", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", + "label": Object { + "jp": Array [ + "巻 2 [Vol. 2]", + ], + }, + "type": "Manifest", + }, + ], + "label": Object { + "jp": Array [ + "青楼絵本年中行事 [Seirō ehon nenjū gyōji]", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Collection", + "viewingDirection": "left-to-right", + }, + }, + "ContentResource": Object {}, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", + "items": Array [], + "label": Object { + "jp": Array [ + "巻 1 [Vol. 1]", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", + "items": Array [], + "label": Object { + "jp": Array [ + "巻 2 [Vol. 2]", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json": "Collection", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json": "Manifest", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json", + "type": "Collection", + }, +} +`; + +exports[`Cookbook Testing normalize "0030-multi-volume-collection" ("https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "behavior": Array [ + "multi-part", + ], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", + "label": Object { + "jp": Array [ + "巻 1 [Vol. 1]", + ], + }, + "type": "Manifest", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", + "label": Object { + "jp": Array [ + "巻 2 [Vol. 2]", + ], + }, + "type": "Manifest", + }, + ], + "label": Object { + "jp": Array [ + "青楼絵本年中行事 [Seirō ehon nenjū gyōji]", + ], + }, + "type": "Collection", +} +`; + +exports[`Cookbook Testing normalize "0030-multi-volume-manifest_v1" ("https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 5730, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Front cover", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 4301, + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 5702, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Page spread 1", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 7451, + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 5702, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Page spread 2", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 7451, + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 5702, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Page spread 3", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 7451, + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 5702, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Page spread 4", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 7451, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 5730, + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4301, + }, + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 5702, + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 7451, + }, + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 5702, + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 7451, + }, + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 5702, + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 7451, + }, + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 5702, + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 7451, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [ + "individuals", + ], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Seirō ehon nenjū gyōji : kan 1 | 青楼絵本年中行事 : 巻 1", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "right-to-left", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2": "Canvas", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3": "Canvas", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4": "Canvas", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5": "Canvas", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0030-multi-volume-manifest_v1" ("https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "behavior": Array [ + "individuals", + ], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", + "items": Array [ + Object { + "height": 5730, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 5730, + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4301, + }, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Front cover", + ], + }, + "type": "Canvas", + "width": 4301, + }, + Object { + "height": 5702, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 5702, + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 7451, + }, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Page spread 1", + ], + }, + "type": "Canvas", + "width": 7451, + }, + Object { + "height": 5702, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 5702, + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 7451, + }, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Page spread 2", + ], + }, + "type": "Canvas", + "width": 7451, + }, + Object { + "height": 5702, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 5702, + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 7451, + }, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Page spread 3", + ], + }, + "type": "Canvas", + "width": 7451, + }, + Object { + "height": 5702, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 5702, + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 7451, + }, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Page spread 4", + ], + }, + "type": "Canvas", + "width": 7451, + }, + ], + "label": Object { + "en": Array [ + "Seirō ehon nenjū gyōji : kan 1 | 青楼絵本年中行事 : 巻 1", + ], + }, + "type": "Manifest", + "viewingDirection": "right-to-left", +} +`; + +exports[`Cookbook Testing normalize "0030-multi-volume-manifest_v2" ("https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 5745, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Front cover", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 4114, + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 5745, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Page spread 1", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 7253, + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 5745, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Page spread 2", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 7253, + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 5745, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Page spread 3", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 7253, + }, + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 5745, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Page spread 4", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 7253, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 5745, + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4114, + }, + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 5745, + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 7253, + }, + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 5745, + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 7253, + }, + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 5745, + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 7253, + }, + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 5745, + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 7253, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [ + "individuals", + ], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Seirō ehon nenjū gyōji : kan 2 | 青楼絵本年中行事 : 巻 2", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "right-to-left", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2": "Canvas", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3": "Canvas", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4": "Canvas", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5": "Canvas", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0030-multi-volume-manifest_v2" ("https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "behavior": Array [ + "individuals", + ], + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", + "items": Array [ + Object { + "height": 5745, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 5745, + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4114, + }, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Front cover", + ], + }, + "type": "Canvas", + "width": 4114, + }, + Object { + "height": 5745, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 5745, + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 7253, + }, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Page spread 1", + ], + }, + "type": "Canvas", + "width": 7253, + }, + Object { + "height": 5745, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 5745, + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 7253, + }, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Page spread 2", + ], + }, + "type": "Canvas", + "width": 7253, + }, + Object { + "height": 5745, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 5745, + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 7253, + }, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Page spread 3", + ], + }, + "type": "Canvas", + "width": 7253, + }, + Object { + "height": 5745, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 5745, + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 7253, + }, + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Page spread 4", + ], + }, + "type": "Canvas", + "width": 7253, + }, + ], + "label": Object { + "en": Array [ + "Seirō ehon nenjū gyōji : kan 2 | 青楼絵本年中行事 : 巻 2", + ], + }, + "type": "Manifest", + "viewingDirection": "right-to-left", +} +`; + +exports[`Cookbook Testing normalize "0031-bound-multivolume" ("https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0002-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0002-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0003-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0003-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0004-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0004-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0005-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2/max/full/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0005-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0006-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso/max/full/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0006-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p2/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p2/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0002-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p3/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p3/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0003-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p4/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p4/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0004-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p5/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p5/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0005-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p6/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p6/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0006-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 7230, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Front cover", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 5428, + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 7230, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p2/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Inside front cover", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 5428, + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 7230, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p3/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Vol. 1 title page", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 5428, + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 7230, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p4/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Vol. 1 title page (verso)", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 5428, + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 7230, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p5/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Vol. 2 title page", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 5428, + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 7230, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p6/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Vol. 2 title page (verso)", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 5428, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 7230, + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 5428, + }, + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 7230, + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 5428, + }, + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 7230, + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 5428, + }, + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 7230, + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 5428, + }, + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2/max/full/0/default.jpg": Object { + "format": "image/jpeg", + "height": 7230, + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2/max/full/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 5428, + }, + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso/max/full/0/default.jpg": Object { + "format": "image/jpeg", + "height": 7230, + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso/max/full/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 5428, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", + "type": "Canvas", + }, + ], + "label": Object { + "de": Array [ + "Gottesdienstliche Ceremonien, Oder H. Kirchen-Gebräuche Und Religions-Pflichten Der Christen", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r0", + "type": "Range", + }, + ], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r0": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r0", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r1", + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r2", + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r3", + "type": "Range", + }, + ], + "label": Object { + "de": Array [ + "Gottesdienstliche Ceremonien, Oder H. Kirchen-Gebräuche Und Religions-Pflichten Der Christen", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r1", + "items": Array [ + Object { + "selector": undefined, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + Object { + "selector": undefined, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": Object { + "en": Array [ + "Front Matter", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r2", + "items": Array [ + Object { + "selector": undefined, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + Object { + "selector": undefined, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": Object { + "de": Array [ + "Erste Ausgabe. Begreift die Ceremonien der Lutheraner von der Augspurgischen Confession, der Reformirten, der Holländischen u. a. Kirchen", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r3", + "items": Array [ + Object { + "selector": undefined, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + Object { + "selector": undefined, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": Object { + "de": Array [ + "Zweyte Ausgabe. Begreift die Ceremonien der Engl. hohen Kirche : Der Quacker, der Anabaptisten, der Adamiten, der Flagellanten, der Frey-Maurer, der Rhinsbürger...", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + }, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0002-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0003-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0004-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0005-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0006-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2": "Canvas", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3": "Canvas", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4": "Canvas", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5": "Canvas", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6": "Canvas", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p2/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p3/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p4/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p5/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p6/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r0": "Range", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r1": "Range", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r2": "Range", + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r3": "Range", + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2/max/full/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso/max/full/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0031-bound-multivolume" ("https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json", + "items": Array [ + Object { + "height": 7230, + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 7230, + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 5428, + }, + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Front cover", + ], + }, + "type": "Canvas", + "width": 5428, + }, + Object { + "height": 7230, + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p2/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 7230, + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 5428, + }, + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0002-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Inside front cover", + ], + }, + "type": "Canvas", + "width": 5428, + }, + Object { + "height": 7230, + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p3/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 7230, + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 5428, + }, + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0003-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Vol. 1 title page", + ], + }, + "type": "Canvas", + "width": 5428, + }, + Object { + "height": 7230, + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p4/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 7230, + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 5428, + }, + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0004-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Vol. 1 title page (verso)", + ], + }, + "type": "Canvas", + "width": 5428, + }, + Object { + "height": 7230, + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p5/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 7230, + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2/max/full/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 5428, + }, + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0005-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Vol. 2 title page", + ], + }, + "type": "Canvas", + "width": 5428, + }, + Object { + "height": 7230, + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p6/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 7230, + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso/max/full/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 5428, + }, + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0006-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Vol. 2 title page (verso)", + ], + }, + "type": "Canvas", + "width": 5428, + }, + ], + "label": Object { + "de": Array [ + "Gottesdienstliche Ceremonien, Oder H. Kirchen-Gebräuche Und Religions-Pflichten Der Christen", + ], + }, + "structures": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r0", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Front Matter", + ], + }, + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", + "type": "Canvas", + }, + ], + "label": Object { + "de": Array [ + "Erste Ausgabe. Begreift die Ceremonien der Lutheraner von der Augspurgischen Confession, der Reformirten, der Holländischen u. a. Kirchen", + ], + }, + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", + "type": "Canvas", + }, + ], + "label": Object { + "de": Array [ + "Zweyte Ausgabe. Begreift die Ceremonien der Engl. hohen Kirche : Der Quacker, der Anabaptisten, der Adamiten, der Flagellanten, der Frey-Maurer, der Rhinsbürger...", + ], + }, + "type": "Range", + }, + ], + "label": Object { + "de": Array [ + "Gottesdienstliche Ceremonien, Oder H. Kirchen-Gebräuche Und Religions-Pflichten Der Christen", + ], + }, + "type": "Range", + }, + ], + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0033-choice" ("https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0033-choice/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "vault://04f77c53", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0033-choice/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0033-choice/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 1271, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 2000, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 1271, + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", + "label": Object { + "en": Array [ + "Natural Light", + ], + }, + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2000, + }, + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 1271, + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg", + "label": Object { + "en": Array [ + "X-Ray", + ], + }, + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2000, + }, + "vault://04f77c53": Object { + "id": "vault://04f77c53", + "items": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", + "type": "ContentResource", + }, + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Choice", + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/canvas/p1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "John Dee performing an experiment before Queen Elizabeth I.", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0033-choice/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0033-choice/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0033-choice/page/p1/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg": "ContentResource", + "vault://04f77c53": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0033-choice" ("https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json", + "items": Array [ + Object { + "height": 1271, + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/page/p1/1", + "items": Array [ + Object { + "body": Object { + "items": Array [ + Object { + "format": "image/jpeg", + "height": 1271, + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", + "label": Object { + "en": Array [ + "Natural Light", + ], + }, + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2000, + }, + Object { + "format": "image/jpeg", + "height": 1271, + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg", + "label": Object { + "en": Array [ + "X-Ray", + ], + }, + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2000, + }, + ], + "type": "Choice", + }, + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0033-choice/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 2000, + }, + ], + "label": Object { + "en": Array [ + "John Dee performing an experiment before Queen Elizabeth I.", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0035-foldouts" ("https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0002-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0002-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0003-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0003-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/3", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0004-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0004-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/4", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0005-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0005-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/5", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0006-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0006-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/6", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0007-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0007-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/7", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0008-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0008-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/8", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0009-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0009-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/9", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/2/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/2/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0002-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/3/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/3/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0003-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/4/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/4/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0004-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/5/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/5/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0005-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/6/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/6/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0006-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/7/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/7/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0007-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/8/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/8/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0008-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/9/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/9/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0009-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4429, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Front cover", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 2533, + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4315, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/2/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Inside front cover", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 2490, + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4278, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/3/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Foldout, folded", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 2197, + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/4": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [ + "non-paged", + ], + "duration": 0, + "height": 1968, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/4/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Foldout, unfolded", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3688, + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/5": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 1968, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/5/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Foldout, folded (recto)", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3688, + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/6": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4315, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/6", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/6/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Title page", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 2490, + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/7": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4315, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/7", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/7/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Back of title page", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 2490, + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/8": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4315, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/8", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/8/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Inside back cover", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 2490, + }, + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/9": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4315, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/9", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/9/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Back cover", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 2490, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4429, + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2533, + }, + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4315, + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2490, + }, + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4278, + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2197, + }, + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 1968, + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3688, + }, + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 1968, + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3688, + }, + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4315, + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2490, + }, + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4315, + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2490, + }, + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4315, + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2490, + }, + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4315, + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2490, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [ + "paged", + ], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/1", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/2", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/3", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/4", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/5", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/6", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/7", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/8", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/9", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Outlines of geology being the substance of a course of lectures delivered in the Theatre of the Royal Institution in the year 1816", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0002-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0003-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0004-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0005-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0006-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0007-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0008-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0009-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/2": "Canvas", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/3": "Canvas", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/4": "Canvas", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/5": "Canvas", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/6": "Canvas", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/7": "Canvas", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/8": "Canvas", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/9": "Canvas", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/2/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/3/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/4/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/5/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/6/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/7/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/8/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/9/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0035-foldouts" ("https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "behavior": Array [ + "paged", + ], + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json", + "items": Array [ + Object { + "height": 4429, + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4429, + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2533, + }, + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Front cover", + ], + }, + "type": "Canvas", + "width": 2533, + }, + Object { + "height": 4315, + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/2/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4315, + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2490, + }, + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0002-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/2", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Inside front cover", + ], + }, + "type": "Canvas", + "width": 2490, + }, + Object { + "height": 4278, + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/3/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4278, + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2197, + }, + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0003-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/3", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Foldout, folded", + ], + }, + "type": "Canvas", + "width": 2197, + }, + Object { + "behavior": Array [ + "non-paged", + ], + "height": 1968, + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/4/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 1968, + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3688, + }, + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0004-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/4", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Foldout, unfolded", + ], + }, + "type": "Canvas", + "width": 3688, + }, + Object { + "height": 1968, + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/5/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 1968, + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3688, + }, + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0005-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/5", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Foldout, folded (recto)", + ], + }, + "type": "Canvas", + "width": 3688, + }, + Object { + "height": 4315, + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/6", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/6/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4315, + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2490, + }, + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0006-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/6", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Title page", + ], + }, + "type": "Canvas", + "width": 2490, + }, + Object { + "height": 4315, + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/7", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/7/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4315, + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2490, + }, + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0007-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/7", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Back of title page", + ], + }, + "type": "Canvas", + "width": 2490, + }, + Object { + "height": 4315, + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/8", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/8/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4315, + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2490, + }, + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0008-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/8", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Inside back cover", + ], + }, + "type": "Canvas", + "width": 2490, + }, + Object { + "height": 4315, + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/9", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/9/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4315, + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2490, + }, + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0009-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/9", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Back cover", + ], + }, + "type": "Canvas", + "width": 2490, + }, + ], + "label": Object { + "en": Array [ + "Outlines of geology being the substance of a course of lectures delivered in the Theatre of the Royal Institution in the year 1816", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0036-composition-from-multiple-images" ("https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0002-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature/full/max/0/native.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0002-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "selector": Object { + "type": "FragmentSelector", + "value": "xywh=3949,994,1091,1232", + }, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0001-image", + "type": "Annotation", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0002-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 5412, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "none": Array [ + "f. 033v-034r [Chilpéric Ier tue Galswinthe, se remarie et est assassiné]", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 7216, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 5412, + "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 7216, + }, + "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature/full/max/0/native.jpg": Object { + "format": "image/jpeg", + "height": 2414, + "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature/full/max/0/native.jpg", + "label": Object { + "fr": Array [ + "Miniature [Chilpéric Ier tue Galswinthe, se remarie et est assassiné]", + ], + }, + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature", + "profile": "level2", + "type": "ImageService1", + }, + ], + "type": "Image", + "width": 2138, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Folio from Grandes Chroniques de France, ca. 1460", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0002-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/page/p1/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature/full/max/0/native.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0036-composition-from-multiple-images" ("https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json", + "items": Array [ + Object { + "height": 5412, + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 5412, + "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 7216, + }, + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1", + "type": "Annotation", + }, + Object { + "body": Object { + "format": "image/jpeg", + "height": 2414, + "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature/full/max/0/native.jpg", + "label": Object { + "fr": Array [ + "Miniature [Chilpéric Ier tue Galswinthe, se remarie et est assassiné]", + ], + }, + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature", + "profile": "level2", + "type": "ImageService1", + }, + ], + "type": "Image", + "width": 2138, + }, + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0002-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1#xywh=3949,994,1091,1232", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "none": Array [ + "f. 033v-034r [Chilpéric Ier tue Galswinthe, se remarie et est assassiné]", + ], + }, + "type": "Canvas", + "width": 7216, + }, + ], + "label": Object { + "en": Array [ + "Folio from Grandes Chroniques de France, ca. 1460", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0040-image-rotation-service-manifest-css" ("https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", + "motivation": Array [ + "painting", + ], + "stylesheet": Object { + "type": "CssStylesheet", + "value": ".rotated { transform-origin: center; transform: rotate(90deg); }", + }, + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 1523, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "inside cover; 1r", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 2105, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1": Object { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1", + "source": Object { + "format": "image/jpeg", + "height": 2105, + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "width": 1523, + }, + "styleClass": "rotated", + "type": "SpecificResource", + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", + "type": "Canvas", + }, + ], + "label": Object { + "ca": Array [ + "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466.", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1": "AnnotationPage", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0040-image-rotation-service-manifest-css" ("https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json", + "items": Array [ + Object { + "height": 1523, + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", + "items": Array [ + Object { + "body": Object { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1", + "source": Object { + "format": "image/jpeg", + "height": 2105, + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "width": 1523, + }, + "styleClass": "rotated", + "type": "SpecificResource", + }, + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", + "motivation": "painting", + "stylesheet": Object { + "type": "CssStylesheet", + "value": ".rotated { transform-origin: center; transform: rotate(90deg); }", + }, + "target": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "inside cover; 1r", + ], + }, + "type": "Canvas", + "width": 2105, + }, + ], + "label": Object { + "ca": Array [ + "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466.", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0040-image-rotation-service-manifest-service" ("https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 1523, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "inside cover; 1r", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 2105, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image": Object { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image", + "selector": Object { + "@context": "http://iiif.io/api/annex/openannotation/context.json", + "rotation": "90", + "type": "iiif:ImageApiSelector", + }, + "source": Object { + "format": "image/jpeg", + "height": 2105, + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1523, + }, + "type": "SpecificResource", + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", + "type": "Canvas", + }, + ], + "label": Object { + "ca": Array [ + "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466.", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ": "Manifest", + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1": "AnnotationPage", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0040-image-rotation-service-manifest-service" ("https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ", + "items": Array [ + Object { + "height": 1523, + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", + "items": Array [ + Object { + "body": Object { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image", + "selector": Object { + "@context": "http://iiif.io/api/annex/openannotation/context.json", + "rotation": "90", + "type": "iiif:ImageApiSelector", + }, + "source": Object { + "format": "image/jpeg", + "height": 2105, + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1523, + }, + "type": "SpecificResource", + }, + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "inside cover; 1r", + ], + }, + "type": "Canvas", + "width": 2105, + }, + ], + "label": Object { + "ca": Array [ + "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466.", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0046-rendering" ("https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0002-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0002-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0003-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0003-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p3", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0004-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0004-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p4", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0005-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0005-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p5", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p2/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p2/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0002-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p3/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p3/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0003-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p4/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p4/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0004-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p5/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p5/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0005-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4823, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "front cover", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3497, + }, + "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4804, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p2/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "pages 1–2", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 6062, + }, + "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4776, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p3/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "pages 3–4", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 6127, + }, + "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p4": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4751, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p4/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "pages 5–6", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 6124, + }, + "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p5": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4808, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p5/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "back cover", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3510, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://fixtures.iiif.io/other/UCLA/kabuki_ezukushi_rtl.pdf": Object { + "format": "application/pdf", + "id": "https://fixtures.iiif.io/other/UCLA/kabuki_ezukushi_rtl.pdf", + "label": Object { + "en": Array [ + "PDF version", + ], + }, + "type": "Text", + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4823, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3497, + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4804, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 6062, + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4776, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 6127, + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4751, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 6124, + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4808, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3510, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p1", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p2", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p3", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p4", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p5", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Alternative Representations Through Rendering", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [ + Object { + "id": "https://fixtures.iiif.io/other/UCLA/kabuki_ezukushi_rtl.pdf", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": Object { + "en": Array [ + "Playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", + ], + }, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "right-to-left", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://fixtures.iiif.io/other/UCLA/kabuki_ezukushi_rtl.pdf": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0002-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0003-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0004-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0005-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p2": "Canvas", + "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p3": "Canvas", + "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p4": "Canvas", + "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p5": "Canvas", + "https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p2/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p3/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p4/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p5/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0046-rendering" ("https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json", + "items": Array [ + Object { + "height": 4823, + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4823, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3497, + }, + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "front cover", + ], + }, + "type": "Canvas", + "width": 3497, + }, + Object { + "height": 4804, + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p2/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4804, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 6062, + }, + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0002-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p2", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "pages 1–2", + ], + }, + "type": "Canvas", + "width": 6062, + }, + Object { + "height": 4776, + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p3/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4776, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 6127, + }, + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0003-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p3", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "pages 3–4", + ], + }, + "type": "Canvas", + "width": 6127, + }, + Object { + "height": 4751, + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p4/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4751, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 6124, + }, + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0004-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p4", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "pages 5–6", + ], + }, + "type": "Canvas", + "width": 6124, + }, + Object { + "height": 4808, + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p5/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4808, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3510, + }, + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0005-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p5", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "back cover", + ], + }, + "type": "Canvas", + "width": 3510, + }, + ], + "label": Object { + "en": Array [ + "Alternative Representations Through Rendering", + ], + }, + "rendering": Array [ + Object { + "format": "application/pdf", + "id": "https://fixtures.iiif.io/other/UCLA/kabuki_ezukushi_rtl.pdf", + "label": Object { + "en": Array [ + "PDF version", + ], + }, + "type": "Text", + }, + ], + "summary": Object { + "en": Array [ + "Playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", + ], + }, + "type": "Manifest", + "viewingDirection": "right-to-left", +} +`; + +exports[`Cookbook Testing normalize "0053-seeAlso" ("https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0002-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0002-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0003-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0003-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p3", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0004-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0004-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p4", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0005-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0005-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p5", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p2/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p2/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0002-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p3/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p3/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0003-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p4/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p4/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0004-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p5/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p5/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0005-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4823, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "front cover", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3497, + }, + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4804, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p2/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "pages 1–2", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 6062, + }, + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4776, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p3/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "pages 3–4", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 6127, + }, + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p4": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4751, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p4/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "pages 5–6", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 6124, + }, + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p5": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4808, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p5/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "back cover", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3510, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://fixtures.iiif.io/other/UCLA/ezukushi_mods.xml": Object { + "format": "text/xml", + "id": "https://fixtures.iiif.io/other/UCLA/ezukushi_mods.xml", + "label": Object { + "en": Array [ + "MODS metadata", + ], + }, + "profile": "http://www.loc.gov/mods/v3", + "type": "Dataset", + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4823, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3497, + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4804, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 6062, + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4776, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 6127, + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4751, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 6124, + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4808, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3510, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p1", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p2", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p3", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p4", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p5", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Linking to Structured Metadata", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [ + Object { + "id": "https://fixtures.iiif.io/other/UCLA/ezukushi_mods.xml", + "type": "ContentResource", + }, + ], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": Object { + "en": Array [ + "Playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", + ], + }, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "right-to-left", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://fixtures.iiif.io/other/UCLA/ezukushi_mods.xml": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0002-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0003-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0004-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0005-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p2": "Canvas", + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p3": "Canvas", + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p4": "Canvas", + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p5": "Canvas", + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p2/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p3/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p4/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p5/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0053-seeAlso" ("https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json", + "items": Array [ + Object { + "height": 4823, + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4823, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3497, + }, + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "front cover", + ], + }, + "type": "Canvas", + "width": 3497, + }, + Object { + "height": 4804, + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p2/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4804, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 6062, + }, + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0002-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p2", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "pages 1–2", + ], + }, + "type": "Canvas", + "width": 6062, + }, + Object { + "height": 4776, + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p3/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4776, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 6127, + }, + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0003-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p3", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "pages 3–4", + ], + }, + "type": "Canvas", + "width": 6127, + }, + Object { + "height": 4751, + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p4/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4751, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 6124, + }, + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0004-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p4", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "pages 5–6", + ], + }, + "type": "Canvas", + "width": 6124, + }, + Object { + "height": 4808, + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p5/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4808, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3510, + }, + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0005-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p5", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "back cover", + ], + }, + "type": "Canvas", + "width": 3510, + }, + ], + "label": Object { + "en": Array [ + "Linking to Structured Metadata", + ], + }, + "seeAlso": Array [ + Object { + "format": "text/xml", + "id": "https://fixtures.iiif.io/other/UCLA/ezukushi_mods.xml", + "label": Object { + "en": Array [ + "MODS metadata", + ], + }, + "profile": "http://www.loc.gov/mods/v3", + "type": "Dataset", + }, + ], + "summary": Object { + "en": Array [ + "Playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", + ], + }, + "type": "Manifest", + "viewingDirection": "right-to-left", +} +`; + +exports[`Cookbook Testing normalize "0064-opera-one-canvas" ("https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/1": Object { + "body": Array [ + Object { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/1", + "motivation": Array [ + "painting", + ], + "target": Object { + "selector": Object { + "type": "FragmentSelector", + "value": "t=0,3971.24", + }, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/2": Object { + "body": Array [ + Object { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/2", + "motivation": Array [ + "painting", + ], + "target": Object { + "selector": Object { + "type": "FragmentSelector", + "value": "t=3971.24", + }, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/1", + "type": "Annotation", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/2", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 7278.422, + "height": 1080, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [ + Object { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 1920, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": Object { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "type": "Image", + }, + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4": Object { + "duration": 3971.24, + "format": "video/mp4", + "height": 1080, + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4", + "type": "Video", + "width": 1920, + }, + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4": Object { + "duration": 3307.22, + "format": "video/mp4", + "height": 1080, + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4", + "type": "Video", + "width": 1920, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "The Elixir of Love", + ], + "it": Array [ + "L'Elisir D'Amore", + ], + }, + "metadata": Array [ + Object { + "label": Object { + "en": Array [ + "Date Issued", + ], + }, + "value": Object { + "en": Array [ + "2019", + ], + }, + }, + Object { + "label": Object { + "en": Array [ + "Publisher", + ], + }, + "value": Object { + "en": Array [ + "Indiana University Jacobs School of Music", + ], + }, + }, + ], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/1", + "type": "Range", + }, + ], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object { + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=0,302.05": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=0,302.05", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=302.05,3971.24": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=302.05,3971.24", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=3971.24,7278.422": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=3971.24,7278.422", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/2", + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/5", + "type": "Range", + }, + ], + "label": Object { + "it": Array [ + "Gaetano Donizetti, L'Elisir D'Amore", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/3", + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/4", + "type": "Range", + }, + ], + "label": Object { + "it": Array [ + "Atto Primo", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/3", + "items": Array [ + Object { + "selector": Object { + "type": "FragmentSelector", + "value": "t=0,302.05", + }, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": Object { + "it": Array [ + "Preludio e Coro d'introduzione – Bel conforto al mietitore", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/4": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/4", + "items": Array [ + Object { + "selector": Object { + "type": "FragmentSelector", + "value": "t=302.05,3971.24", + }, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": Object { + "en": Array [ + "Remainder of Atto Primo", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/5": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/5", + "items": Array [ + Object { + "selector": Object { + "type": "FragmentSelector", + "value": "t=3971.24,7278.422", + }, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": Object { + "it": Array [ + "Atto Secondo", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + }, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": "ContentResource", + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4": "ContentResource", + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=0,302.05": "Canvas", + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=302.05,3971.24": "Canvas", + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=3971.24,7278.422": "Canvas", + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/2": "Annotation", + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/1": "Range", + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/2": "Range", + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/3": "Range", + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/4": "Range", + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/5": "Range", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0064-opera-one-canvas" ("https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json", + "items": Array [ + Object { + "duration": 7278.422, + "height": 1080, + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1", + "items": Array [ + Object { + "body": Object { + "duration": 3971.24, + "format": "video/mp4", + "height": 1080, + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4", + "type": "Video", + "width": 1920, + }, + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/1", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=0,3971.24", + "type": "Annotation", + }, + Object { + "body": Object { + "duration": 3307.22, + "format": "video/mp4", + "height": 1080, + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4", + "type": "Video", + "width": 1920, + }, + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/2", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=3971.24", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "thumbnail": Array [ + Object { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "type": "Image", + }, + ], + "type": "Canvas", + "width": 1920, + }, + ], + "label": Object { + "en": Array [ + "The Elixir of Love", + ], + "it": Array [ + "L'Elisir D'Amore", + ], + }, + "metadata": Array [ + Object { + "label": Object { + "en": Array [ + "Date Issued", + ], + }, + "value": Object { + "en": Array [ + "2019", + ], + }, + }, + Object { + "label": Object { + "en": Array [ + "Publisher", + ], + }, + "value": Object { + "en": Array [ + "Indiana University Jacobs School of Music", + ], + }, + }, + ], + "structures": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=0,302.05", + "type": "Canvas", + }, + ], + "label": Object { + "it": Array [ + "Preludio e Coro d'introduzione – Bel conforto al mietitore", + ], + }, + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=302.05,3971.24", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Remainder of Atto Primo", + ], + }, + "type": "Range", + }, + ], + "label": Object { + "it": Array [ + "Atto Primo", + ], + }, + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=3971.24,7278.422", + "type": "Canvas", + }, + ], + "label": Object { + "it": Array [ + "Atto Secondo", + ], + }, + "type": "Range", + }, + ], + "label": Object { + "it": Array [ + "Gaetano Donizetti, L'Elisir D'Amore", + ], + }, + "type": "Range", + }, + ], + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0065-opera-multiple-canvases" ("https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1/annotation/1": Object { + "body": Array [ + Object { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1/annotation/1", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1/annotation/1": Object { + "body": Array [ + Object { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1/annotation/1", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1/annotation/1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1/annotation/1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 3971.24, + "height": 1080, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Atto Primo", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [ + Object { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 1920, + }, + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 3307.22, + "height": 1080, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Atto Secondo", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [ + Object { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act2-thumbnail.png", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 1920, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": Object { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "type": "Image", + }, + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act2-thumbnail.png": Object { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act2-thumbnail.png", + "type": "Image", + }, + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4": Object { + "duration": 3971.24, + "format": "video/mp4", + "height": 1080, + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4", + "type": "Video", + "width": 1920, + }, + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4": Object { + "duration": 3307.22, + "format": "video/mp4", + "height": 1080, + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4", + "type": "Video", + "width": 1920, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "The Elixir of Love", + ], + "it": Array [ + "L'Elisir D'Amore", + ], + }, + "metadata": Array [ + Object { + "label": Object { + "en": Array [ + "Date Issued", + ], + }, + "value": Object { + "en": Array [ + "2019", + ], + }, + }, + Object { + "label": Object { + "en": Array [ + "Publisher", + ], + }, + "value": Object { + "en": Array [ + "Indiana University Jacobs School of Music", + ], + }, + }, + ], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/1", + "type": "Range", + }, + ], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=0,302.05": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=0,302.05", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=302.05,3971.24": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=302.05,3971.24", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2#t=0,3307.22": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2#t=0,3307.22", + "items": Array [], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/2", + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/5", + "type": "Range", + }, + ], + "label": Object { + "it": Array [ + "Gaetano Donizetti, L'Elisir D'Amore", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/3", + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/4", + "type": "Range", + }, + ], + "label": Object { + "en": Array [ + "Atto Primo", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/3", + "items": Array [ + Object { + "selector": Object { + "type": "FragmentSelector", + "value": "t=0,302.05", + }, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": Object { + "it": Array [ + "Preludio e Coro d'introduzione – Bel conforto al mietitore", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/4": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/4", + "items": Array [ + Object { + "selector": Object { + "type": "FragmentSelector", + "value": "t=302.05,3971.24", + }, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": Object { + "en": Array [ + "Remainder of Atto Primo", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/5": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/5", + "items": Array [ + Object { + "selector": Object { + "type": "FragmentSelector", + "value": "t=0,3307.22", + }, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": Object { + "en": Array [ + "Atto Secondo", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": Array [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + }, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": "ContentResource", + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act2-thumbnail.png": "ContentResource", + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4": "ContentResource", + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=0,302.05": "Canvas", + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=302.05,3971.24": "Canvas", + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1/annotation/1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2": "Canvas", + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2#t=0,3307.22": "Canvas", + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1/annotation/1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/1": "Range", + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/2": "Range", + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/3": "Range", + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/4": "Range", + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/5": "Range", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0065-opera-multiple-canvases" ("https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json", + "items": Array [ + Object { + "duration": 3971.24, + "height": 1080, + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1", + "items": Array [ + Object { + "body": Object { + "duration": 3971.24, + "format": "video/mp4", + "height": 1080, + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4", + "type": "Video", + "width": 1920, + }, + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1/annotation/1", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Atto Primo", + ], + }, + "thumbnail": Array [ + Object { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "type": "Image", + }, + ], + "type": "Canvas", + "width": 1920, + }, + Object { + "duration": 3307.22, + "height": 1080, + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1", + "items": Array [ + Object { + "body": Object { + "duration": 3307.22, + "format": "video/mp4", + "height": 1080, + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4", + "type": "Video", + "width": 1920, + }, + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1/annotation/1", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Atto Secondo", + ], + }, + "thumbnail": Array [ + Object { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act2-thumbnail.png", + "type": "Image", + }, + ], + "type": "Canvas", + "width": 1920, + }, + ], + "label": Object { + "en": Array [ + "The Elixir of Love", + ], + "it": Array [ + "L'Elisir D'Amore", + ], + }, + "metadata": Array [ + Object { + "label": Object { + "en": Array [ + "Date Issued", + ], + }, + "value": Object { + "en": Array [ + "2019", + ], + }, + }, + Object { + "label": Object { + "en": Array [ + "Publisher", + ], + }, + "value": Object { + "en": Array [ + "Indiana University Jacobs School of Music", + ], + }, + }, + ], + "structures": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=0,302.05", + "type": "Canvas", + }, + ], + "label": Object { + "it": Array [ + "Preludio e Coro d'introduzione – Bel conforto al mietitore", + ], + }, + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=302.05,3971.24", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Remainder of Atto Primo", + ], + }, + "type": "Range", + }, + ], + "label": Object { + "en": Array [ + "Atto Primo", + ], + }, + "type": "Range", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2#t=0,3307.22", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Atto Secondo", + ], + }, + "type": "Range", + }, + ], + "label": Object { + "it": Array [ + "Gaetano Donizetti, L'Elisir D'Amore", + ], + }, + "type": "Range", + }, + ], + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0074-multiple-language-captions" ("https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page/annotation": Object { + "body": Array [ + Object { + "id": "https://fixtures.iiif.io/video/europeana/Per_voi_signore_Modelli_francesi.mp4", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page/annotation", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/subtitles_captions-files-vtt": Object { + "body": Array [ + Object { + "id": "vault://30199866", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/subtitles_captions-files-vtt", + "motivation": Array [ + "supplementing", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page/annotation", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/anno/page/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/anno/page/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/subtitles_captions-files-vtt", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas": Object { + "accompanyingCanvas": null, + "annotations": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/anno/page/1", + "type": "AnnotationPage", + }, + ], + "behavior": Array [], + "duration": 65, + "height": 384, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 288, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://fixtures.iiif.io/video/europeana/Per_voi_signore_Modelli_francesi.mp4": Object { + "duration": 65, + "format": "video/mp4", + "height": 384, + "id": "https://fixtures.iiif.io/video/europeana/Per_voi_signore_Modelli_francesi.mp4", + "type": "Video", + "width": 288, + }, + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_en.vtt": Object { + "format": "text/vtt", + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_en.vtt", + "label": Object { + "en": Array [ + "Captions in WebVTT format", + ], + }, + "language": "en", + "type": "Text", + }, + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_it.vtt": Object { + "format": "text/vtt", + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_it.vtt", + "label": Object { + "it": Array [ + "Sottotitoli in formato WebVTT", + ], + }, + "language": "it", + "type": "Text", + }, + "vault://30199866": Object { + "id": "vault://30199866", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_en.vtt", + "type": "ContentResource", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_it.vtt", + "type": "ContentResource", + }, + ], + "type": "Choice", + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "For ladies. French models", + ], + "it": Array [ + "Per voi signore. Modelli francesi", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": Object { + "label": Object { + "en": Array [ + "Rights", + ], + }, + "value": Object { + "en": Array [ + "All rights reserved Cinecittà Luce spa", + ], + }, + }, + "rights": "http://rightsstatements.org/vocab/InC/1.0/", + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://fixtures.iiif.io/video/europeana/Per_voi_signore_Modelli_francesi.mp4": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_en.vtt": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_it.vtt": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas": "Canvas", + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page/annotation": "Annotation", + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/anno/page/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/subtitles_captions-files-vtt": "Annotation", + "vault://30199866": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0074-multiple-language-captions" ("https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json", + "items": Array [ + Object { + "annotations": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/anno/page/1", + "items": Array [ + Object { + "body": Object { + "items": Array [ + Object { + "format": "text/vtt", + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_en.vtt", + "label": Object { + "en": Array [ + "Captions in WebVTT format", + ], + }, + "language": "en", + "type": "Text", + }, + Object { + "format": "text/vtt", + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_it.vtt", + "label": Object { + "it": Array [ + "Sottotitoli in formato WebVTT", + ], + }, + "language": "it", + "type": "Text", + }, + ], + "type": "Choice", + }, + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/subtitles_captions-files-vtt", + "motivation": "supplementing", + "target": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "duration": 65, + "height": 384, + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page", + "items": Array [ + Object { + "body": Object { + "duration": 65, + "format": "video/mp4", + "height": 384, + "id": "https://fixtures.iiif.io/video/europeana/Per_voi_signore_Modelli_francesi.mp4", + "type": "Video", + "width": 288, + }, + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page/annotation", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 288, + }, + ], + "label": Object { + "en": Array [ + "For ladies. French models", + ], + "it": Array [ + "Per voi signore. Modelli francesi", + ], + }, + "requiredStatement": Object { + "label": Object { + "en": Array [ + "Rights", + ], + }, + "value": Object { + "en": Array [ + "All rights reserved Cinecittà Luce spa", + ], + }, + }, + "rights": "http://rightsstatements.org/vocab/InC/1.0/", + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0117-add-image-thumbnail" ("https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/annotation/p0000-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/annotation/p0000-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/canvas/p0", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/page/p0/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/page/p0/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/annotation/p0000-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/canvas/p0": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 5312, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/canvas/p0", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/page/p0/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "front cover with color bar", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 4520, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 300, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "service": Array [ + Object { + "extraFormats": Array [ + "jpg", + "png", + ], + "extraQualities": Array [ + "default", + "color", + "gray", + ], + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", + "profile": "level1", + "protocol": "http://iiif.io/api/image", + "tiles": Array [ + Object { + "height": 512, + "scaleFactors": Array [ + 1, + 2, + 4, + 8, + ], + "width": 512, + }, + ], + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 219, + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 5312, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4520, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/canvas/p0", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Playbill Cover with Manifest Thumbnail", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": Object { + "en": Array [ + "Cover of playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", + ], + }, + "thumbnail": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/annotation/p0000-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/canvas/p0": "Canvas", + "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/page/p0/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0117-add-image-thumbnail" ("https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json", + "items": Array [ + Object { + "height": 5312, + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/canvas/p0", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/page/p0/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 5312, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4520, + }, + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/annotation/p0000-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/canvas/p0", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "front cover with color bar", + ], + }, + "type": "Canvas", + "width": 4520, + }, + ], + "label": Object { + "en": Array [ + "Playbill Cover with Manifest Thumbnail", + ], + }, + "summary": Object { + "en": Array [ + "Cover of playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", + ], + }, + "thumbnail": Array [ + Object { + "format": "image/jpeg", + "height": 300, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "service": Array [ + Object { + "extraFormats": Array [ + "jpg", + "png", + ], + "extraQualities": Array [ + "default", + "color", + "gray", + ], + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", + "profile": "level1", + "protocol": "http://iiif.io/api/image", + "tiles": Array [ + Object { + "height": 512, + "scaleFactors": Array [ + 1, + 2, + 4, + 8, + ], + "width": 512, + }, + ], + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 219, + }, + ], + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0118_multivalue" ("https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://example.org/iiif/text-language/canvas1/page1/annotation1": Object { + "body": Array [ + Object { + "id": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg", + "type": "ContentResource", + }, + ], + "id": "https://example.org/iiif/text-language/canvas1/page1/annotation1", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://example.org/iiif/text-language/canvas1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://example.org/iiif/text-language/canvas1/page1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://example.org/iiif/text-language/canvas1/page1", + "items": Array [ + Object { + "id": "https://example.org/iiif/text-language/canvas1/page1/annotation1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://example.org/iiif/text-language/canvas1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 991, + "homepage": Array [], + "id": "https://example.org/iiif/text-language/canvas1", + "items": Array [ + Object { + "id": "https://example.org/iiif/text-language/canvas1/page1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 1114, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg": Object { + "format": "image/jpeg", + "id": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg", + "type": "Image", + }, + }, + "Manifest": Object { + "https://example.org/iiif/text-language/manifest": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://example.org/iiif/text-language/manifest", + "items": Array [ + Object { + "id": "https://example.org/iiif/text-language/canvas1", + "type": "Canvas", + }, + ], + "label": Object { + "fr": Array [ + "Arrangement en gris et noir no 1", + ], + }, + "metadata": Array [ + Object { + "label": Object { + "en": Array [ + "Alternative titles", + ], + }, + "value": Object { + "en": Array [ + "Whistler's Mother", + "Arrangement in Grey and Black No. 1", + ], + "fr": Array [ + "Portrait de la mère de l'artiste", + "La Mère de Whistler", + ], + }, + }, + ], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": Object { + "en": Array [ + "A painting in oil on canvas created by the American-born painter James McNeill Whistler, in 1871.", + ], + }, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://example.org/iiif/text-language/canvas1": "Canvas", + "https://example.org/iiif/text-language/canvas1/page1": "AnnotationPage", + "https://example.org/iiif/text-language/canvas1/page1/annotation1": "Annotation", + "https://example.org/iiif/text-language/manifest": "Manifest", + "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://example.org/iiif/text-language/manifest", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0118_multivalue" ("https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://example.org/iiif/text-language/manifest", + "items": Array [ + Object { + "height": 991, + "id": "https://example.org/iiif/text-language/canvas1", + "items": Array [ + Object { + "id": "https://example.org/iiif/text-language/canvas1/page1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "id": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg", + "type": "Image", + }, + "id": "https://example.org/iiif/text-language/canvas1/page1/annotation1", + "motivation": "painting", + "target": "https://example.org/iiif/text-language/canvas1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 1114, + }, + ], + "label": Object { + "fr": Array [ + "Arrangement en gris et noir no 1", + ], + }, + "metadata": Array [ + Object { + "label": Object { + "en": Array [ + "Alternative titles", + ], + }, + "value": Object { + "en": Array [ + "Whistler's Mother", + "Arrangement in Grey and Black No. 1", + ], + "fr": Array [ + "Portrait de la mère de l'artiste", + "La Mère de Whistler", + ], + }, + }, + ], + "summary": Object { + "en": Array [ + "A painting in oil on canvas created by the American-born painter James McNeill Whistler, in 1871.", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0139-geolocate-canvas-fragment" ("https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/content.json": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/content.json", + "label": Object { + "en": Array [ + "Pamphlet Cover", + ], + }, + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geoAnno.json": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geo.json", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geoAnno.json", + "label": Object { + "en": Array [ + "Annotation containing GeoJSON-LD coordinates that place the map depiction onto a Leaflet web map.", + ], + }, + "motivation": Array [ + "tagging", + ], + "target": Object { + "selector": Object { + "type": "FragmentSelector", + "value": "xywh=920,3600,1510,3000", + }, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/contentPage.json": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/contentPage.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/content.json", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/supplementingPage.json": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/supplementingPage.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geoAnno.json", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json": Object { + "accompanyingCanvas": null, + "annotations": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/supplementingPage.json", + "type": "AnnotationPage", + }, + ], + "behavior": Array [], + "duration": 0, + "height": 7072, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/contentPage.json", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Chesapeake and Ohio Canal Pamphlet", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 5212, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geo.json": Object { + "geometry": Object { + "coordinates": Array [ + Array [ + Array [ + -77.097847, + 38.901359, + ], + Array [ + -77.02694, + 38.901359, + ], + Array [ + -77.02694, + 39.03404, + ], + Array [ + -77.097847, + 39.03404, + ], + ], + ], + "type": "Polygon", + }, + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geo.json", + "properties": Object { + "label": Object { + "en": Array [ + "Targeted Map from Chesapeake and Ohio Canal Pamphlet", + ], + }, + }, + "type": "Feature", + }, + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 7072, + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 5212, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json": Object { + "@context": Array [ + "http://geojson.org/geojson-ld/geojson-context.jsonld", + "http://iiif.io/api/presentation/3/context.json", + ], + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Recipe Manifest for #139", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": Object { + "en": Array [ + "A IIIF Presentation API 3.0 Manifest containing a GeoJSON-LD Web Annotation which targets a Canvas fragment.", + ], + }, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json": "Canvas", + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/content.json": "Annotation", + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/contentPage.json": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geo.json": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geoAnno.json": "Annotation", + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/supplementingPage.json": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0139-geolocate-canvas-fragment" ("https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json") 2`] = ` +Object { + "@context": Array [ + "http://geojson.org/geojson-ld/geojson-context.jsonld", + "http://iiif.io/api/presentation/3/context.json", + ], + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json", + "items": Array [ + Object { + "annotations": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/supplementingPage.json", + "items": Array [ + Object { + "body": Object { + "geometry": Object { + "coordinates": Array [ + Array [ + Array [ + -77.097847, + 38.901359, + ], + Array [ + -77.02694, + 38.901359, + ], + Array [ + -77.02694, + 39.03404, + ], + Array [ + -77.097847, + 39.03404, + ], + ], + ], + "type": "Polygon", + }, + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geo.json", + "properties": Object { + "label": Object { + "en": Array [ + "Targeted Map from Chesapeake and Ohio Canal Pamphlet", + ], + }, + }, + "type": "Feature", + }, + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geoAnno.json", + "label": Object { + "en": Array [ + "Annotation containing GeoJSON-LD coordinates that place the map depiction onto a Leaflet web map.", + ], + }, + "motivation": "tagging", + "target": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json#xywh=920,3600,1510,3000", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "height": 7072, + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/contentPage.json", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 7072, + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 5212, + }, + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/content.json", + "label": Object { + "en": Array [ + "Pamphlet Cover", + ], + }, + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Chesapeake and Ohio Canal Pamphlet", + ], + }, + "type": "Canvas", + "width": 5212, + }, + ], + "label": Object { + "en": Array [ + "Recipe Manifest for #139", + ], + }, + "summary": Object { + "en": Array [ + "A IIIF Presentation API 3.0 Manifest containing a GeoJSON-LD Web Annotation which targets a Canvas fragment.", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0154-geo-extension" ("https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno/1": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno/1", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/canvas/1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno-page/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno-page/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno/1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0154-geo-extension/canvas/1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 3000, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/canvas/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno-page/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Front of Bronze", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 2315, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg": Object { + "format": "image/jpg", + "height": 3000, + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2315, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json": Object { + "@context": Array [ + "http://iiif.io/api/extension/navplace/context.json", + "http://iiif.io/api/presentation/3/context.json", + ], + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/canvas/1", + "type": "Canvas", + }, + ], + "label": Object { + "it": Array [ + "Bronzo Laocoonte e i suoi figli", + ], + }, + "metadata": Array [], + "navDate": null, + "navPlace": Object { + "features": Array [ + Object { + "geometry": Object { + "coordinates": Array [ + -118.4745559, + 34.0776376, + ], + "type": "Point", + }, + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/feature/1", + "properties": Object { + "label": Object { + "en": Array [ + "The Laocoön Bronze", + ], + "it": Array [ + "Bronzo Laocoonte e i suoi figli", + ], + }, + }, + "type": "Feature", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/feature-collection/1", + "type": "FeatureCollection", + }, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno-page/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno/1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0154-geo-extension/canvas/1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json": "Manifest", + "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0154-geo-extension" ("https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json") 2`] = ` +Object { + "@context": Array [ + "http://iiif.io/api/extension/navplace/context.json", + "http://iiif.io/api/presentation/3/context.json", + ], + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json", + "items": Array [ + Object { + "height": 3000, + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/canvas/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno-page/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpg", + "height": 3000, + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2315, + }, + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno/1", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/canvas/1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Front of Bronze", + ], + }, + "type": "Canvas", + "width": 2315, + }, + ], + "label": Object { + "it": Array [ + "Bronzo Laocoonte e i suoi figli", + ], + }, + "navPlace": Object { + "features": Array [ + Object { + "geometry": Object { + "coordinates": Array [ + -118.4745559, + 34.0776376, + ], + "type": "Point", + }, + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/feature/1", + "properties": Object { + "label": Object { + "en": Array [ + "The Laocoön Bronze", + ], + "it": Array [ + "Bronzo Laocoonte e i suoi figli", + ], + }, + }, + "type": "Feature", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/feature-collection/1", + "type": "FeatureCollection", + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0202-start-canvas" ("https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4613, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Blank page", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3204, + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4612, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Frontispiece", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3186, + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4613, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Title page", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3204, + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4578, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Blank page", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3174, + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 4632, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Bookplate", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 3198, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4613, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3204, + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4612, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3186, + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4613, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3204, + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4578, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3174, + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 4632, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3198, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4", + "type": "Canvas", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Multiple Related Images (Book, etc.)", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": Object { + "selector": undefined, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2": "Canvas", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3": "Canvas", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4": "Canvas", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5": "Canvas", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0202-start-canvas" ("https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json", + "items": Array [ + Object { + "height": 4613, + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4613, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3204, + }, + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Blank page", + ], + }, + "type": "Canvas", + "width": 3204, + }, + Object { + "height": 4612, + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4612, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3186, + }, + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Frontispiece", + ], + }, + "type": "Canvas", + "width": 3186, + }, + Object { + "height": 4613, + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4613, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3204, + }, + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Title page", + ], + }, + "type": "Canvas", + "width": 3204, + }, + Object { + "height": 4578, + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4578, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3174, + }, + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Blank page", + ], + }, + "type": "Canvas", + "width": 3174, + }, + Object { + "height": 4632, + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 4632, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3198, + }, + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "Bookplate", + ], + }, + "type": "Canvas", + "width": 3198, + }, + ], + "label": Object { + "en": Array [ + "Multiple Related Images (Book, etc.)", + ], + }, + "start": Object { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", + "type": "Canvas", + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0230-navdate-navdate_map_1-manifest" ("https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 7072, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "1987 Map, recto and verso, with a date of publication", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 5212, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 7072, + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 5212, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + ], + }, + "metadata": Array [], + "navDate": "1987-01-01T00:00:00+00:00", + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0230-navdate-navdate_map_1-manifest" ("https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "items": Array [ + Object { + "height": 7072, + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 7072, + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 5212, + }, + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "1987 Map, recto and verso, with a date of publication", + ], + }, + "type": "Canvas", + "width": 5212, + }, + ], + "label": Object { + "en": Array [ + "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + ], + }, + "navDate": "1987-01-01T00:00:00+00:00", + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0230-navdate-navdate_map_2-manifest" ("https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 1765, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "1986 Map, recto and verso, with a date of publication", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 1286, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 1765, + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1286, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + ], + }, + "metadata": Array [], + "navDate": "1986-01-01T00:00:00+00:00", + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0230-navdate-navdate_map_2-manifest" ("https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "items": Array [ + Object { + "height": 1765, + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 1765, + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1286, + }, + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "1986 Map, recto and verso, with a date of publication", + ], + }, + "type": "Canvas", + "width": 1286, + }, + ], + "label": Object { + "en": Array [ + "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + ], + }, + "navDate": "1986-01-01T00:00:00+00:00", + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0230-navdate-navdate-collection" ("https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object {}, + "AnnotationCollection": Object {}, + "AnnotationPage": Object {}, + "Canvas": Object {}, + "Collection": Object { + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "label": Object { + "en": Array [ + "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + ], + }, + "navDate": "1986-01-01T00:00:00+00:00", + "type": "Manifest", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "label": Object { + "en": Array [ + "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + ], + }, + "navDate": "1987-01-01T00:00:00+00:00", + "type": "Manifest", + }, + ], + "label": Object { + "en": Array [ + "Chesapeake and Ohio Canal map and guide pamphlets", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "summary": null, + "thumbnail": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Collection", + "viewingDirection": "left-to-right", + }, + }, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 300, + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 221, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "items": Array [], + "label": Object { + "en": Array [ + "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + ], + }, + "metadata": Array [], + "navDate": "1987-01-01T00:00:00+00:00", + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "items": Array [], + "label": Object { + "en": Array [ + "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + ], + }, + "metadata": Array [], + "navDate": "1986-01-01T00:00:00+00:00", + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json": "Collection", + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json": "Manifest", + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", + "type": "Collection", + }, +} +`; + +exports[`Cookbook Testing normalize "0230-navdate-navdate-collection" ("https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "label": Object { + "en": Array [ + "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + ], + }, + "navDate": "1986-01-01T00:00:00+00:00", + "type": "Manifest", + }, + Object { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "label": Object { + "en": Array [ + "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + ], + }, + "navDate": "1987-01-01T00:00:00+00:00", + "type": "Manifest", + }, + ], + "label": Object { + "en": Array [ + "Chesapeake and Ohio Canal map and guide pamphlets", + ], + }, + "thumbnail": Array [ + Object { + "format": "image/jpeg", + "height": 300, + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 221, + }, + ], + "type": "Collection", +} +`; + +exports[`Cookbook Testing normalize "0234-provider" ("https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object { + "https://id.loc.gov/authorities/n79055331": Object { + "homepage": Array [ + Object { + "id": "https://digital.library.ucla.edu/", + "type": "ContentResource", + }, + ], + "id": "https://id.loc.gov/authorities/n79055331", + "label": Object { + "en": Array [ + "UCLA Library", + ], + }, + "logo": Array [ + Object { + "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png", + "type": "ContentResource", + }, + ], + "seeAlso": Array [ + Object { + "id": "https://id.loc.gov/authorities/names/n79055331.madsxml.xml", + "type": "ContentResource", + }, + ], + "type": "Agent", + }, + }, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0": Object { + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "duration": 0, + "height": 5312, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1", + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "front cover with color bar", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 4520, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://digital.library.ucla.edu/": Object { + "format": "text/html", + "id": "https://digital.library.ucla.edu/", + "label": Object { + "en": Array [ + "UCLA Library Digital Collections", + ], + }, + "language": Array [ + "en", + ], + "type": "Text", + }, + "https://id.loc.gov/authorities/names/n79055331.madsxml.xml": Object { + "format": "application/xml", + "id": "https://id.loc.gov/authorities/names/n79055331.madsxml.xml", + "label": Object { + "en": Array [ + "US Library of Congress data about the UCLA Library", + ], + }, + "profile": "http://www.loc.gov/mads/v2", + "type": "Dataset", + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 5312, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4520, + }, + "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png": Object { + "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png", + "service": Array [ + Object { + "height": 502, + "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2", + "profile": "level2", + "sizes": Array [ + Object { + "height": 126, + "width": 300, + }, + Object { + "height": 251, + "width": 600, + }, + Object { + "height": 502, + "width": 1200, + }, + ], + "type": "ImageService3", + "width": 1200, + }, + ], + "type": "Image", + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Playbill Cover", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [ + Object { + "id": "https://id.loc.gov/authorities/n79055331", + "type": "Agent", + }, + ], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": Object { + "en": Array [ + "Cover of playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV, and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", + ], + }, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://digital.library.ucla.edu/": "ContentResource", + "https://id.loc.gov/authorities/n79055331": "Agent", + "https://id.loc.gov/authorities/names/n79055331.madsxml.xml": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0": "Canvas", + "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg": "ContentResource", + "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0234-provider" ("https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", + "items": Array [ + Object { + "height": 5312, + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 5312, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4520, + }, + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": Object { + "en": Array [ + "front cover with color bar", + ], + }, + "type": "Canvas", + "width": 4520, + }, + ], + "label": Object { + "en": Array [ + "Playbill Cover", + ], + }, + "provider": Array [ + Object { + "homepage": Array [ + Object { + "format": "text/html", + "id": "https://digital.library.ucla.edu/", + "label": Object { + "en": Array [ + "UCLA Library Digital Collections", + ], + }, + "language": Array [ + "en", + ], + "type": "Text", + }, + ], + "id": "https://id.loc.gov/authorities/n79055331", + "label": Object { + "en": Array [ + "UCLA Library", + ], + }, + "logo": Array [ + Object { + "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png", + "service": Array [ + Object { + "height": 502, + "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2", + "profile": "level2", + "sizes": Array [ + Object { + "height": 126, + "width": 300, + }, + Object { + "height": 251, + "width": 600, + }, + Object { + "height": 502, + "width": 1200, + }, + ], + "type": "ImageService3", + "width": 1200, + }, + ], + "type": "Image", + }, + ], + "seeAlso": Array [ + Object { + "format": "application/xml", + "id": "https://id.loc.gov/authorities/names/n79055331.madsxml.xml", + "label": Object { + "en": Array [ + "US Library of Congress data about the UCLA Library", + ], + }, + "profile": "http://www.loc.gov/mads/v2", + "type": "Dataset", + }, + ], + "type": "Agent", + }, + ], + "summary": Object { + "en": Array [ + "Cover of playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV, and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0258-tagging-external-resource" ("https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata": Object { + "body": Array [ + Object { + "id": "vault://cf7d210d", + "type": "ContentResource", + }, + Object { + "id": "vault://0e748e5d", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", + "motivation": Array [ + "tagging", + ], + "target": Object { + "selector": Object { + "type": "FragmentSelector", + "value": "xywh=749,1054,338,460", + }, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1", + "type": "AnnotationPage", + }, + ], + "behavior": Array [], + "duration": 0, + "height": 3024, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 4032, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "vault://0e748e5d": Object { + "format": "text/plain", + "id": "vault://0e748e5d", + "language": "de", + "type": "TextualBody", + "value": "Gänsenliesel-Brunnen", + }, + "vault://cf7d210d": Object { + "id": "vault://cf7d210d", + "source": "http://www.wikidata.org/entity/Q18624915", + "type": "SpecificResource", + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata": "Annotation", + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", + "vault://0e748e5d": "ContentResource", + "vault://cf7d210d": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0258-tagging-external-resource" ("https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json", + "items": Array [ + Object { + "annotations": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1", + "items": Array [ + Object { + "body": Array [ + Object { + "source": "http://www.wikidata.org/entity/Q18624915", + "type": "SpecificResource", + }, + Object { + "format": "text/plain", + "language": "de", + "type": "TextualBody", + "value": "Gänsenliesel-Brunnen", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", + "motivation": "tagging", + "target": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1#xywh=749,1054,338,460", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "height": 3024, + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 4032, + }, + ], + "label": Object { + "en": Array [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0261-non-rectangular-commenting" ("https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg": Object { + "body": Array [ + Object { + "id": "vault://b71e460e", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", + "motivation": Array [ + "tagging", + ], + "target": Object { + "selector": Object { + "type": "SvgSelector", + "value": "", + }, + "source": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1": Object { + "accompanyingCanvas": null, + "annotations": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1", + "type": "AnnotationPage", + }, + ], + "behavior": Array [], + "duration": 0, + "height": 3024, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 4032, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "vault://b71e460e": Object { + "format": "text/plain", + "id": "vault://b71e460e", + "language": "de", + "type": "TextualBody", + "value": "Gänsenliessel-Brunnen", + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg": "Annotation", + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", + "vault://b71e460e": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0261-non-rectangular-commenting" ("https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json", + "items": Array [ + Object { + "annotations": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1", + "items": Array [ + Object { + "body": Object { + "format": "text/plain", + "language": "de", + "type": "TextualBody", + "value": "Gänsenliessel-Brunnen", + }, + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", + "motivation": "tagging", + "target": Object { + "selector": Object { + "type": "SvgSelector", + "value": "", + }, + "source": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "type": "SpecificResource", + }, + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "height": 3024, + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 4032, + }, + ], + "label": Object { + "en": Array [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0266-full-canvas-annotation" ("https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1": Object { + "body": Array [ + Object { + "id": "vault://929e073a", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1", + "motivation": Array [ + "commenting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1": Object { + "accompanyingCanvas": null, + "annotations": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2", + "type": "AnnotationPage", + }, + ], + "behavior": Array [], + "duration": 0, + "height": 3024, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 4032, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "vault://929e073a": Object { + "format": "text/plain", + "id": "vault://929e073a", + "language": "de", + "type": "TextualBody", + "value": "Göttinger Marktplatz mit Gänseliesel Brunnen", + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json": "Manifest", + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", + "vault://929e073a": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0266-full-canvas-annotation" ("https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json", + "items": Array [ + Object { + "annotations": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2", + "items": Array [ + Object { + "body": Object { + "format": "text/plain", + "language": "de", + "type": "TextualBody", + "value": "Göttinger Marktplatz mit Gänseliesel Brunnen", + }, + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1", + "motivation": "commenting", + "target": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "height": 3024, + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 4032, + }, + ], + "label": Object { + "en": Array [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook Testing normalize "0269-embedded-or-referenced-annotations" ("https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json") 1`] = ` +Object { + "entities": Object { + "Agent": Object {}, + "Annotation": Object { + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1": Object { + "body": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1", + "motivation": Array [ + "painting", + ], + "target": Object { + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": Object {}, + "AnnotationPage": Object { + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json", + "items": Array [], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1": Object { + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": Array [], + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "AnnotationPage", + }, + }, + "Canvas": Object { + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1": Object { + "accompanyingCanvas": null, + "annotations": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json", + "type": "AnnotationPage", + }, + ], + "behavior": Array [], + "duration": 0, + "height": 3024, + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Canvas", + "width": 4032, + }, + }, + "Collection": Object {}, + "ContentResource": Object { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": Object { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + }, + "Manifest": Object { + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json": Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": Array [], + "behavior": Array [], + "homepage": Array [], + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", + "type": "Canvas", + }, + ], + "label": Object { + "en": Array [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "metadata": Array [], + "navDate": null, + "partOf": Array [], + "placeholderCanvas": null, + "provider": Array [], + "rendering": Array [], + "requiredStatement": null, + "rights": null, + "seeAlso": Array [], + "service": Array [], + "services": Array [], + "start": null, + "structures": Array [], + "summary": null, + "thumbnail": Array [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": Object {}, + "Selector": Object {}, + "Service": Object {}, + }, + "mapping": Object { + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json": "Manifest", + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", + }, + "resource": Object { + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook Testing normalize "0269-embedded-or-referenced-annotations" ("https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json") 2`] = ` +Object { + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json", + "items": Array [ + Object { + "annotations": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json", + "type": "AnnotationPage", + }, + ], + "height": 3024, + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", + "items": Array [ + Object { + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1", + "items": Array [ + Object { + "body": Object { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": Array [ + Object { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 4032, + }, + ], + "label": Object { + "en": Array [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "type": "Manifest", +} +`; diff --git a/__tests__/presentation-3-parser/__snapshots__/normalize-test.ts.snap b/__tests__/presentation-3-parser/__snapshots__/normalize-test.ts.snap index 81d3358..1a5ed34 100644 --- a/__tests__/presentation-3-parser/__snapshots__/normalize-test.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/normalize-test.ts.snap @@ -38,9 +38,7 @@ Object { }, ], "label": null, - "logo": Array [], "metadata": Array [], - "motivation": null, "provider": Array [], "rendering": Array [], "requiredStatement": null, @@ -68,13 +66,10 @@ Object { }, ], "label": null, - "logo": Array [], "metadata": Array [], - "motivation": null, "navDate": null, "partOf": Array [], "placeholderCanvas": null, - "posterCanvas": null, "provider": Array [], "rendering": Array [], "requiredStatement": null, @@ -128,13 +123,10 @@ Object { "Image 1", ], }, - "logo": Array [], "metadata": Array [], - "motivation": null, "navDate": null, "partOf": Array [], "placeholderCanvas": null, - "posterCanvas": null, "provider": Array [], "rendering": Array [], "requiredStatement": null, @@ -196,9 +188,7 @@ Object { "id": "https://example.org/iiif/book1/annotations/p1", "items": Array [], "label": null, - "logo": Array [], "metadata": Array [], - "motivation": null, "provider": Array [], "rendering": Array [], "requiredStatement": null, @@ -225,13 +215,10 @@ Object { "p. 1", ], }, - "logo": Array [], "metadata": Array [], - "motivation": null, "navDate": null, "partOf": Array [], "placeholderCanvas": null, - "posterCanvas": null, "provider": Array [], "rendering": Array [], "requiredStatement": null, @@ -253,13 +240,10 @@ Object { "id": "https://example.org/iiif/book1/canvas/p2", "items": Array [], "label": null, - "logo": Array [], "metadata": Array [], - "motivation": null, "navDate": null, "partOf": Array [], "placeholderCanvas": null, - "posterCanvas": null, "provider": Array [], "rendering": Array [], "requiredStatement": null, @@ -376,7 +360,6 @@ Object { "Book 1", ], }, - "logo": Array [], "metadata": Array [ Object { "label": Object { @@ -431,7 +414,6 @@ Object { }, }, ], - "motivation": null, "navDate": "1856-01-01T00:00:00Z", "partOf": Array [ Object { @@ -440,7 +422,6 @@ Object { }, ], "placeholderCanvas": null, - "posterCanvas": null, "provider": Array [ Object { "id": "https://example.org/about", @@ -532,13 +513,10 @@ Object { "id": "https://example.org/iiif/book1/range/top", "items": Array [], "label": null, - "logo": Array [], "metadata": Array [], - "motivation": null, "navDate": null, "partOf": Array [], "placeholderCanvas": null, - "posterCanvas": null, "provider": Array [], "rendering": Array [], "requiredStatement": null, diff --git a/__tests__/presentation-3-parser/cookbook.tests.ts b/__tests__/presentation-3-parser/cookbook.tests.ts new file mode 100644 index 0000000..a990edb --- /dev/null +++ b/__tests__/presentation-3-parser/cookbook.tests.ts @@ -0,0 +1,48 @@ +import cookbookIndex from '../../fixtures/cookbook/_index.json'; +import { promises } from 'node:fs'; +import { cwd } from 'node:process'; +import { join } from 'path'; +const { readFile } = promises; +import { normalize, serialize, serializeConfigPresentation3 } from '../../src/presentation-3'; + +const prWaitingForMerge = [ + '0219-using-caption-file', // https://github.com/IIIF/cookbook-recipes/pull/340 +]; + +describe('Cookbook', function () { + const tests = Object.values(cookbookIndex) + .filter((item: any) => prWaitingForMerge.indexOf(item.id) === -1) + .map((item) => [item.id, item.url]); + + test.each(tests)('Testing normalize %p (%p)', async (id, url) => { + const json = await readFile(join(cwd(), 'fixtures/cookbook', `${id}.json`)); + const jsonString = json.toString(); + const manifest = JSON.parse(jsonString); + const original = JSON.parse(jsonString); + const result = normalize(manifest); + expect(result).toMatchSnapshot(); + + const reserialized = serialize( + { + mapping: result.mapping, + entities: result.entities, + requests: {}, + }, + result.resource, + serializeConfigPresentation3 + ); + expect( + serialize( + { + mapping: result.mapping, + entities: result.entities, + requests: {}, + }, + result.resource, + serializeConfigPresentation3 + ) + ).toMatchSnapshot(); + + expect(reserialized).toEqual(original); + }); +}); diff --git a/__tests__/presentation-3-parser/normalize-test.ts b/__tests__/presentation-3-parser/normalize-test.ts index 08f00cd..1900cb8 100644 --- a/__tests__/presentation-3-parser/normalize-test.ts +++ b/__tests__/presentation-3-parser/normalize-test.ts @@ -342,7 +342,7 @@ describe('normalize', () => { "type": "SpecificResource", } `); - + }); test('normalize manifest with start property', () => { const db = normalize(manifestWithStartFixture); expect( diff --git a/__tests__/presentation-3-parser/serializer-test.ts b/__tests__/presentation-3-parser/serializer-test.ts index aa7a6bc..bee3ace 100644 --- a/__tests__/presentation-3-parser/serializer-test.ts +++ b/__tests__/presentation-3-parser/serializer-test.ts @@ -191,9 +191,9 @@ describe('serializer', () => { { id: 'https://example.org/iiif/book1/annotations/p1', type: 'AnnotationPage', - items: [ - // Annotations about the Manifest are included here - ], + // items: [ + // // Annotations about the Manifest are included here + // ], }, ], } as const); @@ -219,7 +219,6 @@ describe('serializer', () => { "annotations": Array [ Object { "id": "https://example.org/iiif/book1/annotations/p1", - "items": Array [], "type": "AnnotationPage", }, ], diff --git a/__tests__/presentation-3-parser/utilities.test.ts b/__tests__/presentation-3-parser/utilities.test.ts new file mode 100644 index 0000000..3f3c88a --- /dev/null +++ b/__tests__/presentation-3-parser/utilities.test.ts @@ -0,0 +1,54 @@ +import { compressSpecificResource } from '../../src/shared/compress-specific-resource'; +import { SpecificResource } from '../../../presentation-3-types'; + +describe('Misc Utilites', function () { + test('compressSpecificResource', () => { + const state: SpecificResource = { + id: 'https://iiif.io/api/cookbook/recipe/0015-start/canvas-start/segment1', + type: 'SpecificResource', + source: { + id: 'https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1', + type: 'Canvas', + }, + selector: { type: 'PointSelector', t: 120.5 }, + }; + + expect(compressSpecificResource(state, { allowSourceString: false })).toMatchInlineSnapshot(` + Object { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas-start/segment1", + "selector": Object { + "t": 120.5, + "type": "PointSelector", + }, + "source": Object { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", + "type": "Canvas", + }, + "type": "SpecificResource", + } + `); + }); + test('compressSpecificResource (allowString=true)', () => { + const state: SpecificResource = { + id: 'https://iiif.io/api/cookbook/recipe/0015-start/canvas-start/segment1', + type: 'SpecificResource', + source: { + id: 'https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1', + type: 'Canvas', + }, + selector: { type: 'PointSelector', t: 120.5 }, + }; + + expect(compressSpecificResource(state, { allowSourceString: true })).toMatchInlineSnapshot(` + Object { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas-start/segment1", + "selector": Object { + "t": 120.5, + "type": "PointSelector", + }, + "source": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", + "type": "SpecificResource", + } + `); + }); +}); diff --git a/fixtures/cookbook/0001-mvm-image.json b/fixtures/cookbook/0001-mvm-image.json new file mode 100644 index 0000000..03b10fc --- /dev/null +++ b/fixtures/cookbook/0001-mvm-image.json @@ -0,0 +1,39 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Image 1" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1", + "type": "Canvas", + "height": 1800, + "width": 1200, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png", + "type": "Image", + "format": "image/png", + "height": 1800, + "width": 1200 + }, + "target": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0002-mvm-audio.json b/fixtures/cookbook/0002-mvm-audio.json new file mode 100644 index 0000000..c2d41ac --- /dev/null +++ b/fixtures/cookbook/0002-mvm-audio.json @@ -0,0 +1,37 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Simplest Audio Example 1" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas", + "type": "Canvas", + "duration": 1985.024, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page/annotation", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", + "type": "Sound", + "format": "audio/mp4", + "duration": 1985.024 + }, + "target": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0003-mvm-video.json b/fixtures/cookbook/0003-mvm-video.json new file mode 100644 index 0000000..4dc5945 --- /dev/null +++ b/fixtures/cookbook/0003-mvm-video.json @@ -0,0 +1,41 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Video Example 3" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas", + "type": "Canvas", + "height": 360, + "width": 640, + "duration": 572.034, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page/annotation", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4", + "type": "Video", + "height": 360, + "width": 480, + "duration": 572.034, + "format": "video/mp4" + }, + "target": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0004-canvas-size.json b/fixtures/cookbook/0004-canvas-size.json new file mode 100644 index 0000000..2f7045a --- /dev/null +++ b/fixtures/cookbook/0004-canvas-size.json @@ -0,0 +1,39 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Still image from an opera performance at Indiana University" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/canvas/p1", + "type": "Canvas", + "height": 1080, + "width": 1920, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "type": "Image", + "format": "image/png", + "height": 360, + "width": 640 + }, + "target": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0005-image-service.json b/fixtures/cookbook/0005-image-service.json new file mode 100644 index 0000000..c77d52c --- /dev/null +++ b/fixtures/cookbook/0005-image-service.json @@ -0,0 +1,51 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "Canvas with a single IIIF image" + ] + }, + "height": 3024, + "width": 4032, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 3024, + "width": 4032, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0006-text-language.json b/fixtures/cookbook/0006-text-language.json new file mode 100644 index 0000000..7d9628a --- /dev/null +++ b/fixtures/cookbook/0006-text-language.json @@ -0,0 +1,107 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Whistler's Mother" + ], + "fr": [ + "La Mère de Whistler" + ] + }, + "metadata": [ + { + "label": { + "en": [ + "Creator" + ], + "fr": [ + "Auteur" + ] + }, + "value": { + "none": [ + "Whistler, James Abbott McNeill" + ] + } + }, + { + "label": { + "en": [ + "Subject" + ], + "fr": [ + "Sujet" + ] + }, + "value": { + "en": [ + "McNeill Anna Matilda, mother of Whistler (1804-1881)" + ], + "fr": [ + "McNeill Anna Matilda, mère de Whistler (1804-1881)" + ] + } + } + ], + "summary": { + "en": [ + "Arrangement in Grey and Black No. 1, also called Portrait of the Artist's Mother." + ], + "fr": [ + "Arrangement en gris et noir n°1, also called Portrait de la mère de l'artiste." + ] + }, + "requiredStatement": { + "label": { + "en": [ + "Held By" + ], + "fr": [ + "Détenu par" + ] + }, + "value": { + "none": [ + "Musée d'Orsay, Paris, France" + ] + } + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/canvas/p1", + "type": "Canvas", + "width": 1114, + "height": 991, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 1114, + "height": 991, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0006-text-language/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0007-string-formats.json b/fixtures/cookbook/0007-string-formats.json new file mode 100644 index 0000000..87bc4f5 --- /dev/null +++ b/fixtures/cookbook/0007-string-formats.json @@ -0,0 +1,78 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference" + ] + }, + "summary": { + "en": [ + "

Picture taken by the IIIF Technical Coordinator

" + ] + }, + "metadata": [ + { + "label": { + "en": [ + "Author" + ] + }, + "value": { + "none": [ + "Glen Robson" + ] + } + } + ], + "rights": "http://creativecommons.org/licenses/by-sa/3.0/", + "requiredStatement": { + "label": { + "en": [ + "Attribution" + ] + }, + "value": { + "en": [ + "Glen Robson, IIIF Technical Coordinator. CC BY-SA 3.0 " + ] + } + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/canvas/p1", + "type": "Canvas", + "height": 3024, + "width": 4032, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 3024, + "width": 4032, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0007-string-formats/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0008-rights.json b/fixtures/cookbook/0008-rights.json new file mode 100644 index 0000000..ab25810 --- /dev/null +++ b/fixtures/cookbook/0008-rights.json @@ -0,0 +1,64 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference" + ] + }, + "summary": { + "en": [ + "

Picture taken by the IIIF Technical Coordinator

" + ] + }, + "rights": "http://creativecommons.org/licenses/by-sa/3.0/", + "requiredStatement": { + "label": { + "en": [ + "Attribution" + ] + }, + "value": { + "en": [ + "Glen Robson, IIIF Technical Coordinator. CC BY-SA 3.0 " + ] + } + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/canvas/p1", + "type": "Canvas", + "height": 3024, + "width": 4032, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 3024, + "width": 4032, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0008-rights/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0009-book-1.json b/fixtures/cookbook/0009-book-1.json new file mode 100644 index 0000000..3c0269f --- /dev/null +++ b/fixtures/cookbook/0009-book-1.json @@ -0,0 +1,210 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Simple Manifest - Book" + ] + }, + "behavior": [ + "paged" + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "Blank page" + ] + }, + "height": 4613, + "width": 3204, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 4613, + "width": 3204, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p2", + "type": "Canvas", + "label": { + "en": [ + "Frontispiece" + ] + }, + "width": 3186, + "height": 4612, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3186, + "height": 4612, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p3", + "type": "Canvas", + "label": { + "en": [ + "Title page" + ] + }, + "width": 3204, + "height": 4613, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3204, + "height": 4613, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p4", + "type": "Canvas", + "label": { + "en": [ + "Blank page" + ] + }, + "width": 3174, + "height": 4578, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3174, + "height": 4578, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p4" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p5", + "type": "Canvas", + "label": { + "en": [ + "Bookplate" + ] + }, + "width": 3198, + "height": 4632, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p5/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0005-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3198, + "height": 4632, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p5" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0010-book-2-viewing-direction-.json b/fixtures/cookbook/0010-book-2-viewing-direction-.json new file mode 100644 index 0000000..cb12739 --- /dev/null +++ b/fixtures/cookbook/0010-book-2-viewing-direction-.json @@ -0,0 +1,174 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json", + "type": "Manifest", + "label": { + "en": [ + "Diary with Top-to-Bottom Viewing Direction" + ] + }, + "summary": { + "en": [ + "William Lewis Sachtleben was an American long-distance cyclist who rode across Asia from Istanbul to Peking in 1891 to 1892 with Thomas Gaskell Allen Jr., his classmate from Washington University. This was part of a longer journey that began the day after they had graduated from college, when they travelled to New York and on to Liverpool; in all they travelled 15,044 miles by bicycle, 'the longest continuous land journey ever made around the world' as reported in their book Across Asia on a bicycle (1895). Sachtleben documented his travels with photographs and diaries, the latter of which he numbered sequentially. The diary of notebook 'No. 10' covers a portion of their journey through the Armenian area of Turkey from April 12 to May 9 (there is a 2-page reading list at the end). During this time they rode from Ankara (Angora in the diary) to Sivas, where they stayed for ten days while Allen had a bout of typhoid fever, and the first half of a ten-day excursion to Merzifon (Mersovan in the diary), taken by Sachtleben to give Allen additional time to recover." + ] + }, + "viewingDirection": "top-to-bottom", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1", + "type": "Canvas", + "label": { + "en": [ + "image 1" + ] + }, + "width": 2251, + "height": 3152, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 2251, + "height": 3152, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2", + "type": "Canvas", + "label": { + "en": [ + "image 2" + ] + }, + "width": 2268, + "height": 3135, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 2268, + "height": 3135, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3", + "type": "Canvas", + "label": { + "en": [ + "image 3" + ] + }, + "width": 2274, + "height": 3135, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 2274, + "height": 3135, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4", + "type": "Canvas", + "label": { + "en": [ + "image 4" + ] + }, + "width": 2268, + "height": 3135, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 2268, + "height": 3135, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0010-book-2-viewing-direction-manifest-rtl b/fixtures/cookbook/0010-book-2-viewing-direction-manifest-rtl new file mode 100644 index 0000000..3e60f37 --- /dev/null +++ b/fixtures/cookbook/0010-book-2-viewing-direction-manifest-rtl @@ -0,0 +1,213 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json", + "type": "Manifest", + "label": { + "en": [ + "Book with Right-to-Left Viewing Direction" + ] + }, + "summary": { + "en": [ + "Playbill for \"Akiba gongen kaisen-banashi,\" \"Futatsu chōchō kuruwa nikki\" and \"Godairiki koi no fūjime\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest." + ] + }, + "viewingDirection": "right-to-left", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "front cover" + ] + }, + "width": 3497, + "height": 4823, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 4823, + "width": 3497, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2", + "type": "Canvas", + "label": { + "en": [ + "pages 1–2" + ] + }, + "width": 6062, + "height": 4804, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 6062, + "height": 4804, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3", + "type": "Canvas", + "label": { + "en": [ + "pages 3–4" + ] + }, + "width": 6127, + "height": 4776, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 6127, + "height": 4776, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4", + "type": "Canvas", + "label": { + "en": [ + "pages 5–6" + ] + }, + "width": 6124, + "height": 4751, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 6124, + "height": 4751, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5", + "type": "Canvas", + "label": { + "en": [ + "back cover" + ] + }, + "width": 3510, + "height": 4808, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p5/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0005-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3510, + "height": 4808, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0010-book-2-viewing-direction-manifest-rtl.json b/fixtures/cookbook/0010-book-2-viewing-direction-manifest-rtl.json new file mode 100644 index 0000000..3e60f37 --- /dev/null +++ b/fixtures/cookbook/0010-book-2-viewing-direction-manifest-rtl.json @@ -0,0 +1,213 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json", + "type": "Manifest", + "label": { + "en": [ + "Book with Right-to-Left Viewing Direction" + ] + }, + "summary": { + "en": [ + "Playbill for \"Akiba gongen kaisen-banashi,\" \"Futatsu chōchō kuruwa nikki\" and \"Godairiki koi no fūjime\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest." + ] + }, + "viewingDirection": "right-to-left", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "front cover" + ] + }, + "width": 3497, + "height": 4823, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 4823, + "width": 3497, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2", + "type": "Canvas", + "label": { + "en": [ + "pages 1–2" + ] + }, + "width": 6062, + "height": 4804, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 6062, + "height": 4804, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3", + "type": "Canvas", + "label": { + "en": [ + "pages 3–4" + ] + }, + "width": 6127, + "height": 4776, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 6127, + "height": 4776, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4", + "type": "Canvas", + "label": { + "en": [ + "pages 5–6" + ] + }, + "width": 6124, + "height": 4751, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 6124, + "height": 4751, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5", + "type": "Canvas", + "label": { + "en": [ + "back cover" + ] + }, + "width": 3510, + "height": 4808, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p5/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0005-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3510, + "height": 4808, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0010-book-2-viewing-direction-manifest-ttb b/fixtures/cookbook/0010-book-2-viewing-direction-manifest-ttb new file mode 100644 index 0000000..cb12739 --- /dev/null +++ b/fixtures/cookbook/0010-book-2-viewing-direction-manifest-ttb @@ -0,0 +1,174 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json", + "type": "Manifest", + "label": { + "en": [ + "Diary with Top-to-Bottom Viewing Direction" + ] + }, + "summary": { + "en": [ + "William Lewis Sachtleben was an American long-distance cyclist who rode across Asia from Istanbul to Peking in 1891 to 1892 with Thomas Gaskell Allen Jr., his classmate from Washington University. This was part of a longer journey that began the day after they had graduated from college, when they travelled to New York and on to Liverpool; in all they travelled 15,044 miles by bicycle, 'the longest continuous land journey ever made around the world' as reported in their book Across Asia on a bicycle (1895). Sachtleben documented his travels with photographs and diaries, the latter of which he numbered sequentially. The diary of notebook 'No. 10' covers a portion of their journey through the Armenian area of Turkey from April 12 to May 9 (there is a 2-page reading list at the end). During this time they rode from Ankara (Angora in the diary) to Sivas, where they stayed for ten days while Allen had a bout of typhoid fever, and the first half of a ten-day excursion to Merzifon (Mersovan in the diary), taken by Sachtleben to give Allen additional time to recover." + ] + }, + "viewingDirection": "top-to-bottom", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1", + "type": "Canvas", + "label": { + "en": [ + "image 1" + ] + }, + "width": 2251, + "height": 3152, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 2251, + "height": 3152, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2", + "type": "Canvas", + "label": { + "en": [ + "image 2" + ] + }, + "width": 2268, + "height": 3135, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 2268, + "height": 3135, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3", + "type": "Canvas", + "label": { + "en": [ + "image 3" + ] + }, + "width": 2274, + "height": 3135, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 2274, + "height": 3135, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4", + "type": "Canvas", + "label": { + "en": [ + "image 4" + ] + }, + "width": 2268, + "height": 3135, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 2268, + "height": 3135, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0010-book-2-viewing-direction-manifest-ttb.json b/fixtures/cookbook/0010-book-2-viewing-direction-manifest-ttb.json new file mode 100644 index 0000000..cb12739 --- /dev/null +++ b/fixtures/cookbook/0010-book-2-viewing-direction-manifest-ttb.json @@ -0,0 +1,174 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json", + "type": "Manifest", + "label": { + "en": [ + "Diary with Top-to-Bottom Viewing Direction" + ] + }, + "summary": { + "en": [ + "William Lewis Sachtleben was an American long-distance cyclist who rode across Asia from Istanbul to Peking in 1891 to 1892 with Thomas Gaskell Allen Jr., his classmate from Washington University. This was part of a longer journey that began the day after they had graduated from college, when they travelled to New York and on to Liverpool; in all they travelled 15,044 miles by bicycle, 'the longest continuous land journey ever made around the world' as reported in their book Across Asia on a bicycle (1895). Sachtleben documented his travels with photographs and diaries, the latter of which he numbered sequentially. The diary of notebook 'No. 10' covers a portion of their journey through the Armenian area of Turkey from April 12 to May 9 (there is a 2-page reading list at the end). During this time they rode from Ankara (Angora in the diary) to Sivas, where they stayed for ten days while Allen had a bout of typhoid fever, and the first half of a ten-day excursion to Merzifon (Mersovan in the diary), taken by Sachtleben to give Allen additional time to recover." + ] + }, + "viewingDirection": "top-to-bottom", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1", + "type": "Canvas", + "label": { + "en": [ + "image 1" + ] + }, + "width": 2251, + "height": 3152, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 2251, + "height": 3152, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2", + "type": "Canvas", + "label": { + "en": [ + "image 2" + ] + }, + "width": 2268, + "height": 3135, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 2268, + "height": 3135, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3", + "type": "Canvas", + "label": { + "en": [ + "image 3" + ] + }, + "width": 2274, + "height": 3135, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 2274, + "height": 3135, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4", + "type": "Canvas", + "label": { + "en": [ + "image 4" + ] + }, + "width": 2268, + "height": 3135, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 2268, + "height": 3135, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0011-book-3-behavior-.json b/fixtures/cookbook/0011-book-3-behavior-.json new file mode 100644 index 0000000..c43ce03 --- /dev/null +++ b/fixtures/cookbook/0011-book-3-behavior-.json @@ -0,0 +1,171 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json", + "type": "Manifest", + "label": { + "ca": [ + "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466." + ] + }, + "behavior": [ + "individuals" + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1", + "type": "Canvas", + "label": { + "en": [ + "inside cover; 1r" + ] + }, + "width": 3375, + "height": 2250, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3375, + "height": 2250, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2", + "type": "Canvas", + "label": { + "en": [ + "2v, 3r" + ] + }, + "width": 3375, + "height": 2250, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3375, + "height": 2250, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3", + "type": "Canvas", + "label": { + "en": [ + "3v, 4r" + ] + }, + "width": 3375, + "height": 2250, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3375, + "height": 2250, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4", + "type": "Canvas", + "label": { + "en": [ + "4v, 5r" + ] + }, + "width": 3375, + "height": 2250, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3375, + "height": 2250, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0011-book-3-behavior-manifest-continuous b/fixtures/cookbook/0011-book-3-behavior-manifest-continuous new file mode 100644 index 0000000..6430ccb --- /dev/null +++ b/fixtures/cookbook/0011-book-3-behavior-manifest-continuous @@ -0,0 +1,171 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json", + "type": "Manifest", + "label": { + "gez": [ + "Ms. 21 Māzemurā Dāwit, Asmat [መዝሙረ ዳዊት]" + ] + }, + "behavior": [ + "continuous" + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1", + "type": "Canvas", + "label": { + "en": [ + "Section 1 [Recto]" + ] + }, + "width": 11368, + "height": 1592, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 11368, + "height": 1592, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2", + "type": "Canvas", + "label": { + "en": [ + "Section 2 [Recto]" + ] + }, + "width": 11608, + "height": 1536, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 11608, + "height": 1536, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3", + "type": "Canvas", + "label": { + "en": [ + "Section 3 [Recto]" + ] + }, + "width": 10576, + "height": 1504, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 10576, + "height": 1504, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4", + "type": "Canvas", + "label": { + "en": [ + "Section 4 [Recto]" + ] + }, + "width": 2488, + "height": 1464, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 2488, + "height": 1464, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0011-book-3-behavior-manifest-continuous.json b/fixtures/cookbook/0011-book-3-behavior-manifest-continuous.json new file mode 100644 index 0000000..6430ccb --- /dev/null +++ b/fixtures/cookbook/0011-book-3-behavior-manifest-continuous.json @@ -0,0 +1,171 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json", + "type": "Manifest", + "label": { + "gez": [ + "Ms. 21 Māzemurā Dāwit, Asmat [መዝሙረ ዳዊት]" + ] + }, + "behavior": [ + "continuous" + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1", + "type": "Canvas", + "label": { + "en": [ + "Section 1 [Recto]" + ] + }, + "width": 11368, + "height": 1592, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 11368, + "height": 1592, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2", + "type": "Canvas", + "label": { + "en": [ + "Section 2 [Recto]" + ] + }, + "width": 11608, + "height": 1536, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 11608, + "height": 1536, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3", + "type": "Canvas", + "label": { + "en": [ + "Section 3 [Recto]" + ] + }, + "width": 10576, + "height": 1504, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 10576, + "height": 1504, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4", + "type": "Canvas", + "label": { + "en": [ + "Section 4 [Recto]" + ] + }, + "width": 2488, + "height": 1464, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 2488, + "height": 1464, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0011-book-3-behavior-manifest-individuals b/fixtures/cookbook/0011-book-3-behavior-manifest-individuals new file mode 100644 index 0000000..c43ce03 --- /dev/null +++ b/fixtures/cookbook/0011-book-3-behavior-manifest-individuals @@ -0,0 +1,171 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json", + "type": "Manifest", + "label": { + "ca": [ + "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466." + ] + }, + "behavior": [ + "individuals" + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1", + "type": "Canvas", + "label": { + "en": [ + "inside cover; 1r" + ] + }, + "width": 3375, + "height": 2250, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3375, + "height": 2250, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2", + "type": "Canvas", + "label": { + "en": [ + "2v, 3r" + ] + }, + "width": 3375, + "height": 2250, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3375, + "height": 2250, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3", + "type": "Canvas", + "label": { + "en": [ + "3v, 4r" + ] + }, + "width": 3375, + "height": 2250, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3375, + "height": 2250, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4", + "type": "Canvas", + "label": { + "en": [ + "4v, 5r" + ] + }, + "width": 3375, + "height": 2250, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3375, + "height": 2250, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0011-book-3-behavior-manifest-individuals.json b/fixtures/cookbook/0011-book-3-behavior-manifest-individuals.json new file mode 100644 index 0000000..c43ce03 --- /dev/null +++ b/fixtures/cookbook/0011-book-3-behavior-manifest-individuals.json @@ -0,0 +1,171 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json", + "type": "Manifest", + "label": { + "ca": [ + "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466." + ] + }, + "behavior": [ + "individuals" + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1", + "type": "Canvas", + "label": { + "en": [ + "inside cover; 1r" + ] + }, + "width": 3375, + "height": 2250, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3375, + "height": 2250, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2", + "type": "Canvas", + "label": { + "en": [ + "2v, 3r" + ] + }, + "width": 3375, + "height": 2250, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3375, + "height": 2250, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3", + "type": "Canvas", + "label": { + "en": [ + "3v, 4r" + ] + }, + "width": 3375, + "height": 2250, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3375, + "height": 2250, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4", + "type": "Canvas", + "label": { + "en": [ + "4v, 5r" + ] + }, + "width": 3375, + "height": 2250, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3375, + "height": 2250, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0013-placeholderCanvas.json b/fixtures/cookbook/0013-placeholderCanvas.json new file mode 100644 index 0000000..6cf6568 --- /dev/null +++ b/fixtures/cookbook/0013-placeholderCanvas.json @@ -0,0 +1,68 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Video recording of Donizetti's _The Elixer of Love_" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti", + "type": "Canvas", + "duration": 7278.466, + "width": 640, + "height": 360, + "placeholderCanvas": { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder", + "type": "Canvas", + "width": 640, + "height": 360, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "type": "Image", + "format": "image/png", + "width": 640, + "height": 360 + }, + "target": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder" + } + ] + } + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1-video", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4", + "type": "Video", + "duration": 7278.466, + "width": 640, + "height": 360, + "format": "video/mp4" + }, + "target": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0014-accompanyingcanvas.json b/fixtures/cookbook/0014-accompanyingcanvas.json new file mode 100644 index 0000000..641259e --- /dev/null +++ b/fixtures/cookbook/0014-accompanyingcanvas.json @@ -0,0 +1,81 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Partial audio recording of Gustav Mahler's _Symphony No. 3_" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "Gustav Mahler, Symphony No. 3, CD 1" + ] + }, + "duration": 1985.024, + "accompanyingCanvas": { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying", + "type": "Canvas", + "label": { + "en": [ + "First page of score for Gustav Mahler, Symphony No. 3" + ] + }, + "height": 998, + "width": 772, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 998, + "width": 772, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying" + } + ] + } + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", + "type": "Sound", + "duration": 1985.024, + "format": "video/mp4" + }, + "target": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0015-start.json b/fixtures/cookbook/0015-start.json new file mode 100644 index 0000000..671f781 --- /dev/null +++ b/fixtures/cookbook/0015-start.json @@ -0,0 +1,59 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0015-start/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Video of a 30-minute digital clock" + ] + }, + "start": { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas-start/segment1", + "type": "SpecificResource", + "source": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", + "selector": { + "type": "PointSelector", + "t": 120.5 + } + }, + "rights": "http://creativecommons.org/licenses/by/3.0/", + "requiredStatement": { + "label": { + "en": [ + "Attribution" + ] + }, + "value": { + "en": [ + "The video was created by DrLex1 and was released using a Creative Commons Attribution license" + ] + } + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", + "type": "Canvas", + "duration": 1801.055, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1/page", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1-video", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://fixtures.iiif.io/video/indiana/30-minute-clock/medium/30-minute-clock.mp4", + "type": "Video", + "duration": 1801.055, + "format": "video/mp4" + }, + "target": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0017-transcription-av.json b/fixtures/cookbook/0017-transcription-av.json new file mode 100644 index 0000000..dbf6656 --- /dev/null +++ b/fixtures/cookbook/0017-transcription-av.json @@ -0,0 +1,53 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Volleyball for Boys" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas", + "type": "Canvas", + "height": 1080, + "width": 1920, + "duration": 662.037, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page/annotation", + "type": "Annotation", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas", + "body": { + "id": "https://fixtures.iiif.io/video/indiana/volleyball/high/volleyball-for-boys.mp4", + "type": "Video", + "format": "video/mp4", + "height": 1080, + "width": 1920, + "duration": 662.037 + } + } + ] + } + ], + "rendering": [ + { + "id": "https://fixtures.iiif.io/video/indiana/volleyball/volleyball.txt", + "type": "Text", + "label": { + "en": [ + "Transcript" + ] + }, + "format": "text/txt" + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0021-tagging.json b/fixtures/cookbook/0021-tagging.json new file mode 100644 index 0000000..ba71232 --- /dev/null +++ b/fixtures/cookbook/0021-tagging.json @@ -0,0 +1,66 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", + "type": "Canvas", + "height": 3024, + "width": 4032, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 3024, + "width": 4032, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1" + } + ] + } + ], + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", + "type": "Annotation", + "motivation": "tagging", + "body": { + "type": "TextualBody", + "value": "Gänseliesel-Brunnen", + "language": "de", + "format": "text/plain" + }, + "target": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1#xywh=265,661,1260,1239" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0024-book-4-toc.json b/fixtures/cookbook/0024-book-4-toc.json new file mode 100644 index 0000000..e4bae6e --- /dev/null +++ b/fixtures/cookbook/0024-book-4-toc.json @@ -0,0 +1,327 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Ethiopic Ms 10" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "f. 1r" + ] + }, + "height": 2504, + "width": 1768, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 2504, + "width": 1768, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", + "type": "Canvas", + "label": { + "en": [ + "f. 1v" + ] + }, + "height": 2512, + "width": 1792, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 2512, + "width": 1792, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", + "type": "Canvas", + "label": { + "en": [ + "f. 2r" + ] + }, + "height": 2456, + "width": 1792, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 2456, + "width": 1792, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", + "type": "Canvas", + "label": { + "en": [ + "f. 2v" + ] + }, + "height": 2440, + "width": 1760, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 2440, + "width": 1760, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", + "type": "Canvas", + "label": { + "en": [ + "f. 3r" + ] + }, + "height": 2416, + "width": 1776, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 2416, + "width": 1776, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", + "type": "Canvas", + "label": { + "en": [ + "f. 3v" + ] + }, + "height": 2416, + "width": 1776, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p6/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 2416, + "width": 1776, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6" + } + ] + } + ] + } + ], + "structures": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r0", + "type": "Range", + "label": { + "en": [ + "Table of Contents" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r1", + "type": "Range", + "label": { + "gez": [ + "Tabiba Tabiban [ጠቢበ ጠቢባን]" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", + "type": "Canvas" + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", + "type": "Canvas" + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2", + "type": "Range", + "label": { + "gez": [ + "Arede'et [አርድዕት]" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/1", + "type": "Range", + "label": { + "en": [ + "Monday" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", + "type": "Canvas" + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", + "type": "Canvas" + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/2", + "type": "Range", + "label": { + "en": [ + "Tuesday" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", + "type": "Canvas" + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", + "type": "Canvas" + } + ] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0026-toc-opera.json b/fixtures/cookbook/0026-toc-opera.json new file mode 100644 index 0000000..d890373 --- /dev/null +++ b/fixtures/cookbook/0026-toc-opera.json @@ -0,0 +1,113 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json", + "type": "Manifest", + "label": { + "it": [ + "L'Elisir D'Amore" + ], + "en": [ + "The Elixir of Love" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", + "type": "Canvas", + "width": 1920, + "height": 1080, + "duration": 7278.422, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1/annotation/1", + "type": "Annotation", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", + "body": { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4", + "type": "Video", + "format": "video/mp4", + "height": 1080, + "width": 1920, + "duration": 7278.422 + } + } + ] + } + ] + } + ], + "structures": [ + { + "type": "Range", + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/1", + "label": { + "it": [ + "Gaetano Donizetti, L'Elisir D'Amore" + ] + }, + "items": [ + { + "type": "Range", + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/2", + "label": { + "it": [ + "Atto Primo" + ] + }, + "items": [ + { + "type": "Range", + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/3", + "label": { + "it": [ + "Preludio e Coro d'introduzione – Bel conforto al mietitore" + ] + }, + "items": [ + { + "type": "Canvas", + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=0,302.05" + } + ] + }, + { + "type": "Range", + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/4", + "label": { + "en": [ + "Remainder of Atto Primo" + ] + }, + "items": [ + { + "type": "Canvas", + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=302.05,3971.24" + } + ] + } + ] + }, + { + "type": "Range", + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/5", + "label": { + "it": [ + "Atto Secondo" + ] + }, + "items": [ + { + "type": "Canvas", + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=3971.24" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0029-metadata-anywhere.json b/fixtures/cookbook/0029-metadata-anywhere.json new file mode 100644 index 0000000..76ed8e7 --- /dev/null +++ b/fixtures/cookbook/0029-metadata-anywhere.json @@ -0,0 +1,180 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "John Dee performing an experiment before Queen Elizabeth I." + ] + }, + "metadata": [ + { + "label": { + "en": [ + "Creator" + ] + }, + "value": { + "en": [ + "Glindoni, Henry Gillard, 1852-1913" + ] + } + }, + { + "label": { + "en": [ + "Date" + ] + }, + "value": { + "en": [ + "1800-1899" + ] + } + }, + { + "label": { + "en": [ + "Physical Description" + ] + }, + "value": { + "en": [ + "1 painting : oil on canvas ; canvas 152 x 244.4 cm" + ] + } + }, + { + "label": { + "en": [ + "Reference" + ] + }, + "value": { + "en": [ + "Wellcome Library no. 47369i" + ] + } + } + ], + "requiredStatement": { + "label": { + "en": [ + "Attribution" + ] + }, + "value": { + "en": [ + "Wellcome Collection. Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)" + ] + } + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "Painting under natural light" + ] + }, + "height": 1271, + "width": 2000, + "metadata": [ + { + "label": { + "en": [ + "Description" + ] + }, + "value": { + "en": [ + "The scene is the house at Mortlake of Dr John Dee (1527-1608). At the court of Queen Elizabeth I, Dee was revered for the range of his scientific knowledge, which embraced the fields of mathematics, navigation, geography, alchemy/chemistry, medicine and optics. In the painting he is showing the effect of combining two elements, either to cause combustion or to extinguish it. Behind him is his assistant Edward Kelly, wearing a long skullcap to conceal the fact that his ears had been cropped as a punishment for forgery." + ] + } + } + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 1271, + "width": 2000, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p2", + "type": "Canvas", + "label": { + "en": [ + "X-ray view of painting" + ] + }, + "height": 1271, + "width": 2000, + "metadata": [ + { + "label": { + "en": [ + "Description" + ] + }, + "value": { + "en": [ + "The painting originally showed Dee standing in a circle of skulls on the floor, stretching from the floor area in front of the Queen (on the left) to the floor near Edward Kelly (on the right). The skulls were at an early stage painted over, but have since become visible. Another pentimento is visible in the tapestry on the right: shelves containing monstrous animals are visible behind it. The pentimenti were clarified when the painting was X-rayed in 2015." + ] + } + } + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 1271, + "width": 2000, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p2" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0030-multi-volume-.json b/fixtures/cookbook/0030-multi-volume-.json new file mode 100644 index 0000000..d169872 --- /dev/null +++ b/fixtures/cookbook/0030-multi-volume-.json @@ -0,0 +1,211 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", + "type": "Manifest", + "label": { + "en": [ + "Seirō ehon nenjū gyōji : kan 2 | 青楼絵本年中行事 : 巻 2" + ] + }, + "behavior": [ + "individuals" + ], + "viewingDirection": "right-to-left", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "Front cover" + ] + }, + "height": 5745, + "width": 4114, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5745, + "width": 4114, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", + "type": "Canvas", + "label": { + "en": [ + "Page spread 1" + ] + }, + "height": 5745, + "width": 7253, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5745, + "width": 7253, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", + "type": "Canvas", + "label": { + "en": [ + "Page spread 2" + ] + }, + "height": 5745, + "width": 7253, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5745, + "width": 7253, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", + "type": "Canvas", + "label": { + "en": [ + "Page spread 3" + ] + }, + "height": 5745, + "width": 7253, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5745, + "width": 7253, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", + "type": "Canvas", + "label": { + "en": [ + "Page spread 4" + ] + }, + "height": 5745, + "width": 7253, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5745, + "width": 7253, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0030-multi-volume-collection b/fixtures/cookbook/0030-multi-volume-collection new file mode 100644 index 0000000..0854aa1 --- /dev/null +++ b/fixtures/cookbook/0030-multi-volume-collection @@ -0,0 +1,33 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json", + "type": "Collection", + "label": { + "jp": [ + "青楼絵本年中行事 [Seirō ehon nenjū gyōji]" + ] + }, + "behavior": [ + "multi-part" + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", + "type": "Manifest", + "label": { + "jp": [ + "巻 1 [Vol. 1]" + ] + } + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", + "type": "Manifest", + "label": { + "jp": [ + "巻 2 [Vol. 2]" + ] + } + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0030-multi-volume-collection.json b/fixtures/cookbook/0030-multi-volume-collection.json new file mode 100644 index 0000000..0854aa1 --- /dev/null +++ b/fixtures/cookbook/0030-multi-volume-collection.json @@ -0,0 +1,33 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json", + "type": "Collection", + "label": { + "jp": [ + "青楼絵本年中行事 [Seirō ehon nenjū gyōji]" + ] + }, + "behavior": [ + "multi-part" + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", + "type": "Manifest", + "label": { + "jp": [ + "巻 1 [Vol. 1]" + ] + } + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", + "type": "Manifest", + "label": { + "jp": [ + "巻 2 [Vol. 2]" + ] + } + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0030-multi-volume-manifest_v1 b/fixtures/cookbook/0030-multi-volume-manifest_v1 new file mode 100644 index 0000000..004ca15 --- /dev/null +++ b/fixtures/cookbook/0030-multi-volume-manifest_v1 @@ -0,0 +1,211 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", + "type": "Manifest", + "label": { + "en": [ + "Seirō ehon nenjū gyōji : kan 1 | 青楼絵本年中行事 : 巻 1" + ] + }, + "behavior": [ + "individuals" + ], + "viewingDirection": "right-to-left", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "Front cover" + ] + }, + "height": 5730, + "width": 4301, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5730, + "width": 4301, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", + "type": "Canvas", + "label": { + "en": [ + "Page spread 1" + ] + }, + "height": 5702, + "width": 7451, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5702, + "width": 7451, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", + "type": "Canvas", + "label": { + "en": [ + "Page spread 2" + ] + }, + "height": 5702, + "width": 7451, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5702, + "width": 7451, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", + "type": "Canvas", + "label": { + "en": [ + "Page spread 3" + ] + }, + "height": 5702, + "width": 7451, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5702, + "width": 7451, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", + "type": "Canvas", + "label": { + "en": [ + "Page spread 4" + ] + }, + "height": 5702, + "width": 7451, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5702, + "width": 7451, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0030-multi-volume-manifest_v1.json b/fixtures/cookbook/0030-multi-volume-manifest_v1.json new file mode 100644 index 0000000..004ca15 --- /dev/null +++ b/fixtures/cookbook/0030-multi-volume-manifest_v1.json @@ -0,0 +1,211 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", + "type": "Manifest", + "label": { + "en": [ + "Seirō ehon nenjū gyōji : kan 1 | 青楼絵本年中行事 : 巻 1" + ] + }, + "behavior": [ + "individuals" + ], + "viewingDirection": "right-to-left", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "Front cover" + ] + }, + "height": 5730, + "width": 4301, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5730, + "width": 4301, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", + "type": "Canvas", + "label": { + "en": [ + "Page spread 1" + ] + }, + "height": 5702, + "width": 7451, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5702, + "width": 7451, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", + "type": "Canvas", + "label": { + "en": [ + "Page spread 2" + ] + }, + "height": 5702, + "width": 7451, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5702, + "width": 7451, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", + "type": "Canvas", + "label": { + "en": [ + "Page spread 3" + ] + }, + "height": 5702, + "width": 7451, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5702, + "width": 7451, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", + "type": "Canvas", + "label": { + "en": [ + "Page spread 4" + ] + }, + "height": 5702, + "width": 7451, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5702, + "width": 7451, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0030-multi-volume-manifest_v2 b/fixtures/cookbook/0030-multi-volume-manifest_v2 new file mode 100644 index 0000000..d169872 --- /dev/null +++ b/fixtures/cookbook/0030-multi-volume-manifest_v2 @@ -0,0 +1,211 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", + "type": "Manifest", + "label": { + "en": [ + "Seirō ehon nenjū gyōji : kan 2 | 青楼絵本年中行事 : 巻 2" + ] + }, + "behavior": [ + "individuals" + ], + "viewingDirection": "right-to-left", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "Front cover" + ] + }, + "height": 5745, + "width": 4114, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5745, + "width": 4114, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", + "type": "Canvas", + "label": { + "en": [ + "Page spread 1" + ] + }, + "height": 5745, + "width": 7253, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5745, + "width": 7253, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", + "type": "Canvas", + "label": { + "en": [ + "Page spread 2" + ] + }, + "height": 5745, + "width": 7253, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5745, + "width": 7253, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", + "type": "Canvas", + "label": { + "en": [ + "Page spread 3" + ] + }, + "height": 5745, + "width": 7253, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5745, + "width": 7253, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", + "type": "Canvas", + "label": { + "en": [ + "Page spread 4" + ] + }, + "height": 5745, + "width": 7253, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5745, + "width": 7253, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0030-multi-volume-manifest_v2.json b/fixtures/cookbook/0030-multi-volume-manifest_v2.json new file mode 100644 index 0000000..d169872 --- /dev/null +++ b/fixtures/cookbook/0030-multi-volume-manifest_v2.json @@ -0,0 +1,211 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", + "type": "Manifest", + "label": { + "en": [ + "Seirō ehon nenjū gyōji : kan 2 | 青楼絵本年中行事 : 巻 2" + ] + }, + "behavior": [ + "individuals" + ], + "viewingDirection": "right-to-left", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "Front cover" + ] + }, + "height": 5745, + "width": 4114, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5745, + "width": 4114, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", + "type": "Canvas", + "label": { + "en": [ + "Page spread 1" + ] + }, + "height": 5745, + "width": 7253, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5745, + "width": 7253, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", + "type": "Canvas", + "label": { + "en": [ + "Page spread 2" + ] + }, + "height": 5745, + "width": 7253, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5745, + "width": 7253, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", + "type": "Canvas", + "label": { + "en": [ + "Page spread 3" + ] + }, + "height": 5745, + "width": 7253, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5745, + "width": 7253, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", + "type": "Canvas", + "label": { + "en": [ + "Page spread 4" + ] + }, + "height": 5745, + "width": 7253, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5745, + "width": 7253, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0031-bound-multivolume.json b/fixtures/cookbook/0031-bound-multivolume.json new file mode 100644 index 0000000..c56c3e5 --- /dev/null +++ b/fixtures/cookbook/0031-bound-multivolume.json @@ -0,0 +1,316 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json", + "type": "Manifest", + "label": { + "de": [ + "Gottesdienstliche Ceremonien, Oder H. Kirchen-Gebräuche Und Religions-Pflichten Der Christen" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "Front cover" + ] + }, + "height": 7230, + "width": 5428, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 7230, + "width": 5428, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", + "type": "Canvas", + "label": { + "en": [ + "Inside front cover" + ] + }, + "height": 7230, + "width": 5428, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 7230, + "width": 5428, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", + "type": "Canvas", + "label": { + "en": [ + "Vol. 1 title page" + ] + }, + "height": 7230, + "width": 5428, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 7230, + "width": 5428, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", + "type": "Canvas", + "label": { + "en": [ + "Vol. 1 title page (verso)" + ] + }, + "height": 7230, + "width": 5428, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 7230, + "width": 5428, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", + "type": "Canvas", + "label": { + "en": [ + "Vol. 2 title page" + ] + }, + "height": 7230, + "width": 5428, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p5/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0005-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2/max/full/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 7230, + "width": 5428, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", + "type": "Canvas", + "label": { + "en": [ + "Vol. 2 title page (verso)" + ] + }, + "height": 7230, + "width": 5428, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p6/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0006-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso/max/full/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 7230, + "width": 5428, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6" + } + ] + } + ] + } + ], + "structures": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r0", + "type": "Range", + "label": { + "de": [ + "Gottesdienstliche Ceremonien, Oder H. Kirchen-Gebräuche Und Religions-Pflichten Der Christen" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r1", + "type": "Range", + "label": { + "en": [ + "Front Matter" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", + "type": "Canvas" + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", + "type": "Canvas" + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r2", + "type": "Range", + "label": { + "de": [ + "Erste Ausgabe. Begreift die Ceremonien der Lutheraner von der Augspurgischen Confession, der Reformirten, der Holländischen u. a. Kirchen" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", + "type": "Canvas" + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", + "type": "Canvas" + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r3", + "type": "Range", + "label": { + "de": [ + "Zweyte Ausgabe. Begreift die Ceremonien der Engl. hohen Kirche : Der Quacker, der Anabaptisten, der Adamiten, der Flagellanten, der Frey-Maurer, der Rhinsbürger..." + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", + "type": "Canvas" + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", + "type": "Canvas" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0033-choice.json b/fixtures/cookbook/0033-choice.json new file mode 100644 index 0000000..4721fe5 --- /dev/null +++ b/fixtures/cookbook/0033-choice.json @@ -0,0 +1,75 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "John Dee performing an experiment before Queen Elizabeth I." + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/canvas/p1", + "type": "Canvas", + "height": 1271, + "width": 2000, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "type": "Choice", + "items": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 2000, + "height": 1271, + "label": { + "en": [ + "Natural Light" + ] + }, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 2000, + "height": 1271, + "label": { + "en": [ + "X-Ray" + ] + }, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", + "type": "ImageService3", + "profile": "level1" + } + ] + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0033-choice/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0035-foldouts.json b/fixtures/cookbook/0035-foldouts.json new file mode 100644 index 0000000..1bbfc2f --- /dev/null +++ b/fixtures/cookbook/0035-foldouts.json @@ -0,0 +1,369 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Outlines of geology being the substance of a course of lectures delivered in the Theatre of the Royal Institution in the year 1816" + ] + }, + "behavior": [ + "paged" + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/1", + "type": "Canvas", + "height": 4429, + "width": 2533, + "label": { + "en": [ + "Front cover" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 4429, + "width": 2533, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/2", + "type": "Canvas", + "height": 4315, + "width": 2490, + "label": { + "en": [ + "Inside front cover" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 4315, + "width": 2490, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/3", + "type": "Canvas", + "height": 4278, + "width": 2197, + "label": { + "en": [ + "Foldout, folded" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 4278, + "width": 2197, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/4", + "type": "Canvas", + "behavior": [ + "non-paged" + ], + "height": 1968, + "width": 3688, + "label": { + "en": [ + "Foldout, unfolded" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 1968, + "width": 3688, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/4" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/5", + "type": "Canvas", + "height": 1968, + "width": 3688, + "label": { + "en": [ + "Foldout, folded (recto)" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/5/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0005-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 1968, + "width": 3688, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/5" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/6", + "type": "Canvas", + "height": 4315, + "width": 2490, + "label": { + "en": [ + "Title page" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/6/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0006-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 4315, + "width": 2490, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/6" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/7", + "type": "Canvas", + "height": 4315, + "width": 2490, + "label": { + "en": [ + "Back of title page" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/7/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0007-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 4315, + "width": 2490, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/7" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/8", + "type": "Canvas", + "height": 4315, + "width": 2490, + "label": { + "en": [ + "Inside back cover" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/8/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0008-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 4315, + "width": 2490, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/8" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/9", + "type": "Canvas", + "height": 4315, + "width": 2490, + "label": { + "en": [ + "Back cover" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/9/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0009-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 4315, + "width": 2490, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/9" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0036-composition-from-multiple-images.json b/fixtures/cookbook/0036-composition-from-multiple-images.json new file mode 100644 index 0000000..0b60a57 --- /dev/null +++ b/fixtures/cookbook/0036-composition-from-multiple-images.json @@ -0,0 +1,76 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Folio from Grandes Chroniques de France, ca. 1460" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1", + "type": "Canvas", + "label": { + "none": [ + "f. 033v-034r [Chilpéric Ier tue Galswinthe, se remarie et est assassiné]" + ] + }, + "height": 5412, + "width": 7216, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5412, + "width": 7216, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1" + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature/full/max/0/native.jpg", + "type": "Image", + "format": "image/jpeg", + "label": { + "fr": [ + "Miniature [Chilpéric Ier tue Galswinthe, se remarie et est assassiné]" + ] + }, + "width": 2138, + "height": 2414, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature", + "type": "ImageService1", + "profile": "level2" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1#xywh=3949,994,1091,1232" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0040-image-rotation-service-.json b/fixtures/cookbook/0040-image-rotation-service-.json new file mode 100644 index 0000000..dfbd4ea --- /dev/null +++ b/fixtures/cookbook/0040-image-rotation-service-.json @@ -0,0 +1,59 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json", + "type": "Manifest", + "label": { + "ca": [ + "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466." + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "inside cover; 1r" + ] + }, + "width": 2105, + "height": 1523, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", + "type": "Annotation", + "motivation": "painting", + "stylesheet": { + "type": "CssStylesheet", + "value": ".rotated { transform-origin: center; transform: rotate(90deg); }" + }, + "body": { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1", + "type": "SpecificResource", + "styleClass": "rotated", + "source": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", + "format": "image/jpeg", + "width": 1523, + "height": 2105, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", + "type": "ImageService3", + "profile": "level1" + } + ] + } + }, + "target": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0040-image-rotation-service-manifest-css b/fixtures/cookbook/0040-image-rotation-service-manifest-css new file mode 100644 index 0000000..dfbd4ea --- /dev/null +++ b/fixtures/cookbook/0040-image-rotation-service-manifest-css @@ -0,0 +1,59 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json", + "type": "Manifest", + "label": { + "ca": [ + "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466." + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "inside cover; 1r" + ] + }, + "width": 2105, + "height": 1523, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", + "type": "Annotation", + "motivation": "painting", + "stylesheet": { + "type": "CssStylesheet", + "value": ".rotated { transform-origin: center; transform: rotate(90deg); }" + }, + "body": { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1", + "type": "SpecificResource", + "styleClass": "rotated", + "source": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", + "format": "image/jpeg", + "width": 1523, + "height": 2105, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", + "type": "ImageService3", + "profile": "level1" + } + ] + } + }, + "target": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0040-image-rotation-service-manifest-css.json b/fixtures/cookbook/0040-image-rotation-service-manifest-css.json new file mode 100644 index 0000000..dfbd4ea --- /dev/null +++ b/fixtures/cookbook/0040-image-rotation-service-manifest-css.json @@ -0,0 +1,59 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json", + "type": "Manifest", + "label": { + "ca": [ + "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466." + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "inside cover; 1r" + ] + }, + "width": 2105, + "height": 1523, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", + "type": "Annotation", + "motivation": "painting", + "stylesheet": { + "type": "CssStylesheet", + "value": ".rotated { transform-origin: center; transform: rotate(90deg); }" + }, + "body": { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1", + "type": "SpecificResource", + "styleClass": "rotated", + "source": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", + "format": "image/jpeg", + "width": 1523, + "height": 2105, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", + "type": "ImageService3", + "profile": "level1" + } + ] + } + }, + "target": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0040-image-rotation-service-manifest-service b/fixtures/cookbook/0040-image-rotation-service-manifest-service new file mode 100644 index 0000000..b606027 --- /dev/null +++ b/fixtures/cookbook/0040-image-rotation-service-manifest-service @@ -0,0 +1,60 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ", + "type": "Manifest", + "label": { + "ca": [ + "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466." + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "inside cover; 1r" + ] + }, + "width": 2105, + "height": 1523, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image", + "type": "SpecificResource", + "source": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 1523, + "height": 2105, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "selector": { + "@context": "http://iiif.io/api/annex/openannotation/context.json", + "type": "iiif:ImageApiSelector", + "rotation": "90" + } + }, + "target": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0040-image-rotation-service-manifest-service.json b/fixtures/cookbook/0040-image-rotation-service-manifest-service.json new file mode 100644 index 0000000..b606027 --- /dev/null +++ b/fixtures/cookbook/0040-image-rotation-service-manifest-service.json @@ -0,0 +1,60 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ", + "type": "Manifest", + "label": { + "ca": [ + "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466." + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "inside cover; 1r" + ] + }, + "width": 2105, + "height": 1523, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image", + "type": "SpecificResource", + "source": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 1523, + "height": 2105, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "selector": { + "@context": "http://iiif.io/api/annex/openannotation/context.json", + "type": "iiif:ImageApiSelector", + "rotation": "90" + } + }, + "target": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0046-rendering.json b/fixtures/cookbook/0046-rendering.json new file mode 100644 index 0000000..55ebd3e --- /dev/null +++ b/fixtures/cookbook/0046-rendering.json @@ -0,0 +1,225 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Alternative Representations Through Rendering" + ] + }, + "summary": { + "en": [ + "Playbill for \"Akiba gongen kaisen-banashi,\" \"Futatsu chōchō kuruwa nikki\" and \"Godairiki koi no fūjime\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest." + ] + }, + "viewingDirection": "right-to-left", + "rendering": [ + { + "id": "https://fixtures.iiif.io/other/UCLA/kabuki_ezukushi_rtl.pdf", + "type": "Text", + "label": { + "en": [ + "PDF version" + ] + }, + "format": "application/pdf" + } + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "front cover" + ] + }, + "width": 3497, + "height": 4823, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3497, + "height": 4823, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p2", + "type": "Canvas", + "label": { + "en": [ + "pages 1–2" + ] + }, + "width": 6062, + "height": 4804, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 6062, + "height": 4804, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p3", + "type": "Canvas", + "label": { + "en": [ + "pages 3–4" + ] + }, + "width": 6127, + "height": 4776, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 6127, + "height": 4776, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p4", + "type": "Canvas", + "label": { + "en": [ + "pages 5–6" + ] + }, + "width": 6124, + "height": 4751, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 6124, + "height": 4751, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p4" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p5", + "type": "Canvas", + "label": { + "en": [ + "back cover" + ] + }, + "width": 3510, + "height": 4808, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p5/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0005-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3510, + "height": 4808, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p5" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0053-seeAlso.json b/fixtures/cookbook/0053-seeAlso.json new file mode 100644 index 0000000..0f06f92 --- /dev/null +++ b/fixtures/cookbook/0053-seeAlso.json @@ -0,0 +1,226 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Linking to Structured Metadata" + ] + }, + "summary": { + "en": [ + "Playbill for \"Akiba gongen kaisen-banashi,\" \"Futatsu chōchō kuruwa nikki\" and \"Godairiki koi no fūjime\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest." + ] + }, + "viewingDirection": "right-to-left", + "seeAlso": [ + { + "id": "https://fixtures.iiif.io/other/UCLA/ezukushi_mods.xml", + "type": "Dataset", + "label": { + "en": [ + "MODS metadata" + ] + }, + "format": "text/xml", + "profile": "http://www.loc.gov/mods/v3" + } + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "front cover" + ] + }, + "width": 3497, + "height": 4823, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 4823, + "width": 3497, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p2", + "type": "Canvas", + "label": { + "en": [ + "pages 1–2" + ] + }, + "width": 6062, + "height": 4804, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 6062, + "height": 4804, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p3", + "type": "Canvas", + "label": { + "en": [ + "pages 3–4" + ] + }, + "width": 6127, + "height": 4776, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 6127, + "height": 4776, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p4", + "type": "Canvas", + "label": { + "en": [ + "pages 5–6" + ] + }, + "width": 6124, + "height": 4751, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 6124, + "height": 4751, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p4" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p5", + "type": "Canvas", + "label": { + "en": [ + "back cover" + ] + }, + "width": 3510, + "height": 4808, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p5/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0005-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3510, + "height": 4808, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p5" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0064-opera-one-canvas.json b/fixtures/cookbook/0064-opera-one-canvas.json new file mode 100644 index 0000000..54cd415 --- /dev/null +++ b/fixtures/cookbook/0064-opera-one-canvas.json @@ -0,0 +1,159 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json", + "type": "Manifest", + "label": { + "it": [ + "L'Elisir D'Amore" + ], + "en": [ + "The Elixir of Love" + ] + }, + "metadata": [ + { + "label": { + "en": [ + "Date Issued" + ] + }, + "value": { + "en": [ + "2019" + ] + } + }, + { + "label": { + "en": [ + "Publisher" + ] + }, + "value": { + "en": [ + "Indiana University Jacobs School of Music" + ] + } + } + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", + "type": "Canvas", + "width": 1920, + "height": 1080, + "duration": 7278.422, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/1", + "type": "Annotation", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=0,3971.24", + "body": { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4", + "type": "Video", + "format": "video/mp4", + "height": 1080, + "width": 1920, + "duration": 3971.24 + } + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/2", + "type": "Annotation", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=3971.24", + "body": { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4", + "type": "Video", + "format": "video/mp4", + "height": 1080, + "width": 1920, + "duration": 3307.22 + } + } + ] + } + ], + "thumbnail": [ + { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "type": "Image" + } + ] + } + ], + "structures": [ + { + "type": "Range", + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/1", + "label": { + "it": [ + "Gaetano Donizetti, L'Elisir D'Amore" + ] + }, + "items": [ + { + "type": "Range", + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/2", + "label": { + "it": [ + "Atto Primo" + ] + }, + "items": [ + { + "type": "Range", + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/3", + "label": { + "it": [ + "Preludio e Coro d'introduzione – Bel conforto al mietitore" + ] + }, + "items": [ + { + "type": "Canvas", + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=0,302.05" + } + ] + }, + { + "type": "Range", + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/4", + "label": { + "en": [ + "Remainder of Atto Primo" + ] + }, + "items": [ + { + "type": "Canvas", + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=302.05,3971.24" + } + ] + } + ] + }, + { + "type": "Range", + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/5", + "label": { + "it": [ + "Atto Secondo" + ] + }, + "items": [ + { + "type": "Canvas", + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=3971.24,7278.422" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0065-opera-multiple-canvases.json b/fixtures/cookbook/0065-opera-multiple-canvases.json new file mode 100644 index 0000000..34c1e31 --- /dev/null +++ b/fixtures/cookbook/0065-opera-multiple-canvases.json @@ -0,0 +1,190 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json", + "type": "Manifest", + "label": { + "it": [ + "L'Elisir D'Amore" + ], + "en": [ + "The Elixir of Love" + ] + }, + "metadata": [ + { + "label": { + "en": [ + "Date Issued" + ] + }, + "value": { + "en": [ + "2019" + ] + } + }, + { + "label": { + "en": [ + "Publisher" + ] + }, + "value": { + "en": [ + "Indiana University Jacobs School of Music" + ] + } + } + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1", + "type": "Canvas", + "width": 1920, + "height": 1080, + "duration": 3971.24, + "label": { + "en": [ + "Atto Primo" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1/annotation/1", + "type": "Annotation", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1", + "body": { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4", + "type": "Video", + "format": "video/mp4", + "height": 1080, + "width": 1920, + "duration": 3971.24 + } + } + ] + } + ], + "thumbnail": [ + { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "type": "Image" + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2", + "type": "Canvas", + "width": 1920, + "height": 1080, + "duration": 3307.22, + "label": { + "en": [ + "Atto Secondo" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1/annotation/1", + "type": "Annotation", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2", + "body": { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4", + "type": "Video", + "format": "video/mp4", + "height": 1080, + "width": 1920, + "duration": 3307.22 + } + } + ] + } + ], + "thumbnail": [ + { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act2-thumbnail.png", + "type": "Image" + } + ] + } + ], + "structures": [ + { + "type": "Range", + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/1", + "label": { + "it": [ + "Gaetano Donizetti, L'Elisir D'Amore" + ] + }, + "items": [ + { + "type": "Range", + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/2", + "label": { + "en": [ + "Atto Primo" + ] + }, + "items": [ + { + "type": "Range", + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/3", + "label": { + "it": [ + "Preludio e Coro d'introduzione – Bel conforto al mietitore" + ] + }, + "items": [ + { + "type": "Canvas", + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=0,302.05" + } + ] + }, + { + "type": "Range", + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/4", + "label": { + "en": [ + "Remainder of Atto Primo" + ] + }, + "items": [ + { + "type": "Canvas", + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=302.05,3971.24" + } + ] + } + ] + }, + { + "type": "Range", + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/5", + "label": { + "en": [ + "Atto Secondo" + ] + }, + "items": [ + { + "type": "Canvas", + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2#t=0,3307.22" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0074-multiple-language-captions.json b/fixtures/cookbook/0074-multiple-language-captions.json new file mode 100644 index 0000000..2dac88b --- /dev/null +++ b/fixtures/cookbook/0074-multiple-language-captions.json @@ -0,0 +1,98 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json", + "type": "Manifest", + "label": { + "it": [ + "Per voi signore. Modelli francesi" + ], + "en": [ + "For ladies. French models" + ] + }, + "rights": "http://rightsstatements.org/vocab/InC/1.0/", + "requiredStatement": { + "label": { + "en": [ + "Rights" + ] + }, + "value": { + "en": [ + "All rights reserved Cinecittà Luce spa" + ] + } + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas", + "type": "Canvas", + "height": 384, + "width": 288, + "duration": 65.0, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page/annotation", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://fixtures.iiif.io/video/europeana/Per_voi_signore_Modelli_francesi.mp4", + "type": "Video", + "height": 384, + "width": 288, + "duration": 65.0, + "format": "video/mp4" + }, + "target": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas" + } + ] + } + ], + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/anno/page/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/subtitles_captions-files-vtt", + "type": "Annotation", + "motivation": "supplementing", + "body": { + "type": "Choice", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_en.vtt", + "type": "Text", + "format": "text/vtt", + "label": { + "en": [ + "Captions in WebVTT format" + ] + }, + "language": "en" + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_it.vtt", + "type": "Text", + "format": "text/vtt", + "label": { + "it": [ + "Sottotitoli in formato WebVTT" + ] + }, + "language": "it" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0117-add-image-thumbnail.json b/fixtures/cookbook/0117-add-image-thumbnail.json new file mode 100644 index 0000000..937a850 --- /dev/null +++ b/fixtures/cookbook/0117-add-image-thumbnail.json @@ -0,0 +1,94 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Playbill Cover with Manifest Thumbnail" + ] + }, + "summary": { + "en": [ + "Cover of playbill for \"Akiba gongen kaisen-banashi,\" \"Futatsu chōchō kuruwa nikki\" and \"Godairiki koi no fūjime\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest." + ] + }, + "thumbnail": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 300, + "width": 219, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", + "type": "ImageService3", + "profile": "level1", + "extraFormats": [ + "jpg", + "png" + ], + "extraQualities": [ + "default", + "color", + "gray" + ], + "protocol": "http://iiif.io/api/image", + "tiles": [ + { + "height": 512, + "scaleFactors": [ + 1, + 2, + 4, + 8 + ], + "width": 512 + } + ] + } + ] + } + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/canvas/p0", + "type": "Canvas", + "label": { + "en": [ + "front cover with color bar" + ] + }, + "width": 4520, + "height": 5312, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/page/p0/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/annotation/p0000-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 5312, + "width": 4520, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/canvas/p0" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0118_multivalue.json b/fixtures/cookbook/0118_multivalue.json new file mode 100644 index 0000000..8b7c64d --- /dev/null +++ b/fixtures/cookbook/0118_multivalue.json @@ -0,0 +1,61 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://example.org/iiif/text-language/manifest", + "type": "Manifest", + "label": { + "fr": [ + "Arrangement en gris et noir no 1" + ] + }, + "metadata": [ + { + "label": { + "en": [ + "Alternative titles" + ] + }, + "value": { + "en": [ + "Whistler's Mother", + "Arrangement in Grey and Black No. 1" + ], + "fr": [ + "Portrait de la mère de l'artiste", + "La Mère de Whistler" + ] + } + } + ], + "summary": { + "en": [ + "A painting in oil on canvas created by the American-born painter James McNeill Whistler, in 1871." + ] + }, + "items": [ + { + "id": "https://example.org/iiif/text-language/canvas1", + "type": "Canvas", + "width": 1114, + "height": 991, + "items": [ + { + "id": "https://example.org/iiif/text-language/canvas1/page1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://example.org/iiif/text-language/canvas1/page1/annotation1", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg", + "type": "Image", + "format": "image/jpeg" + }, + "target": "https://example.org/iiif/text-language/canvas1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0139-geolocate-canvas-fragment.json b/fixtures/cookbook/0139-geolocate-canvas-fragment.json new file mode 100644 index 0000000..c53446d --- /dev/null +++ b/fixtures/cookbook/0139-geolocate-canvas-fragment.json @@ -0,0 +1,117 @@ +{ + "@context": [ + "http://geojson.org/geojson-ld/geojson-context.jsonld", + "http://iiif.io/api/presentation/3/context.json" + ], + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Recipe Manifest for #139" + ] + }, + "summary": { + "en": [ + "A IIIF Presentation API 3.0 Manifest containing a GeoJSON-LD Web Annotation which targets a Canvas fragment." + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json", + "type": "Canvas", + "label": { + "en": [ + "Chesapeake and Ohio Canal Pamphlet" + ] + }, + "width": 5212, + "height": 7072, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/contentPage.json", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/content.json", + "type": "Annotation", + "motivation": "painting", + "label": { + "en": [ + "Pamphlet Cover" + ] + }, + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", + "type": "ImageService3", + "profile": "level1" + } + ], + "width": 5212, + "height": 7072 + }, + "target": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json" + } + ] + } + ], + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/supplementingPage.json", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geoAnno.json", + "type": "Annotation", + "motivation": "tagging", + "label": { + "en": [ + "Annotation containing GeoJSON-LD coordinates that place the map depiction onto a Leaflet web map." + ] + }, + "body": { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geo.json", + "type": "Feature", + "properties": { + "label": { + "en": [ + "Targeted Map from Chesapeake and Ohio Canal Pamphlet" + ] + } + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -77.097847, + 38.901359 + ], + [ + -77.02694, + 38.901359 + ], + [ + -77.02694, + 39.03404 + ], + [ + -77.097847, + 39.03404 + ] + ] + ] + } + }, + "target": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json#xywh=920,3600,1510,3000" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0154-geo-extension.json b/fixtures/cookbook/0154-geo-extension.json new file mode 100644 index 0000000..4a89abc --- /dev/null +++ b/fixtures/cookbook/0154-geo-extension.json @@ -0,0 +1,81 @@ +{ + "@context": [ + "http://iiif.io/api/extension/navplace/context.json", + "http://iiif.io/api/presentation/3/context.json" + ], + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json", + "type": "Manifest", + "label": { + "it": [ + "Bronzo Laocoonte e i suoi figli" + ] + }, + "navPlace": { + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/feature-collection/1", + "type": "FeatureCollection", + "features": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/feature/1", + "type": "Feature", + "properties": { + "label": { + "en": [ + "The Laocoön Bronze" + ], + "it": [ + "Bronzo Laocoonte e i suoi figli" + ] + } + }, + "geometry": { + "type": "Point", + "coordinates": [ + -118.4745559, + 34.0776376 + ] + } + } + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/canvas/1", + "type": "Canvas", + "height": 3000, + "width": 2315, + "label": { + "en": [ + "Front of Bronze" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno-page/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno/1", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpg", + "height": 3000, + "width": 2315, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/canvas/1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0202-start-canvas.json b/fixtures/cookbook/0202-start-canvas.json new file mode 100644 index 0000000..07f83da --- /dev/null +++ b/fixtures/cookbook/0202-start-canvas.json @@ -0,0 +1,211 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Multiple Related Images (Book, etc.)" + ] + }, + "start": { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", + "type": "Canvas" + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "Blank page" + ] + }, + "height": 4613, + "width": 3204, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 4613, + "width": 3204, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", + "type": "Canvas", + "label": { + "en": [ + "Frontispiece" + ] + }, + "width": 3186, + "height": 4612, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3186, + "height": 4612, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3", + "type": "Canvas", + "label": { + "en": [ + "Title page" + ] + }, + "width": 3204, + "height": 4613, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3204, + "height": 4613, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4", + "type": "Canvas", + "label": { + "en": [ + "Blank page" + ] + }, + "width": 3174, + "height": 4578, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3174, + "height": 4578, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5", + "type": "Canvas", + "label": { + "en": [ + "Bookplate" + ] + }, + "width": 3198, + "height": 4632, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 3198, + "height": 4632, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0219-using-caption-file.json b/fixtures/cookbook/0219-using-caption-file.json new file mode 100644 index 0000000..e881c6c --- /dev/null +++ b/fixtures/cookbook/0219-using-caption-file.json @@ -0,0 +1,70 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Lunchroom Manners" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas", + "type": "Canvas", + "height": 360, + "width": 480, + "duration": 572.034, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page/annotation1", + "type": "Annotation", + "motivation": "painting", + "body": [ + { + "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4", + "type": "Video", + "height": 360, + "width": 480, + "duration": 572.034, + "format": "video/mp4" + } + ], + "target": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas" + } + ] + } + ], + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2/a1", + "type": "Annotation", + "motivation": "supplementing", + "body": [ + { + "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/lunchroom_manners.vtt", + "type": "Text", + "format": "text/vtt", + "label": { + "en": [ + "Captions in WebVTT format" + ] + }, + "language": "en" + } + ], + "target": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0230-navdate-.json b/fixtures/cookbook/0230-navdate-.json new file mode 100644 index 0000000..935bed2 --- /dev/null +++ b/fixtures/cookbook/0230-navdate-.json @@ -0,0 +1,52 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "type": "Manifest", + "label": { + "en": [ + "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide" + ] + }, + "navDate": "1987-01-01T00:00:00+00:00", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "1987 Map, recto and verso, with a date of publication" + ] + }, + "height": 7072, + "width": 5212, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 7072, + "width": 5212, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0230-navdate-navdate-collection b/fixtures/cookbook/0230-navdate-navdate-collection new file mode 100644 index 0000000..9c25cd7 --- /dev/null +++ b/fixtures/cookbook/0230-navdate-navdate-collection @@ -0,0 +1,48 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", + "type": "Collection", + "label": { + "en": [ + "Chesapeake and Ohio Canal map and guide pamphlets" + ] + }, + "thumbnail": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 300, + "width": 221, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", + "profile": "level1", + "type": "ImageService3" + } + ] + } + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "type": "Manifest", + "label": { + "en": [ + "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide" + ] + }, + "navDate": "1986-01-01T00:00:00+00:00" + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "type": "Manifest", + "label": { + "en": [ + "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide" + ] + }, + "navDate": "1987-01-01T00:00:00+00:00" + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0230-navdate-navdate-collection.json b/fixtures/cookbook/0230-navdate-navdate-collection.json new file mode 100644 index 0000000..9c25cd7 --- /dev/null +++ b/fixtures/cookbook/0230-navdate-navdate-collection.json @@ -0,0 +1,48 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", + "type": "Collection", + "label": { + "en": [ + "Chesapeake and Ohio Canal map and guide pamphlets" + ] + }, + "thumbnail": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 300, + "width": 221, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", + "profile": "level1", + "type": "ImageService3" + } + ] + } + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "type": "Manifest", + "label": { + "en": [ + "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide" + ] + }, + "navDate": "1986-01-01T00:00:00+00:00" + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "type": "Manifest", + "label": { + "en": [ + "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide" + ] + }, + "navDate": "1987-01-01T00:00:00+00:00" + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0230-navdate-navdate_map_1-manifest b/fixtures/cookbook/0230-navdate-navdate_map_1-manifest new file mode 100644 index 0000000..935bed2 --- /dev/null +++ b/fixtures/cookbook/0230-navdate-navdate_map_1-manifest @@ -0,0 +1,52 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "type": "Manifest", + "label": { + "en": [ + "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide" + ] + }, + "navDate": "1987-01-01T00:00:00+00:00", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "1987 Map, recto and verso, with a date of publication" + ] + }, + "height": 7072, + "width": 5212, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 7072, + "width": 5212, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0230-navdate-navdate_map_1-manifest.json b/fixtures/cookbook/0230-navdate-navdate_map_1-manifest.json new file mode 100644 index 0000000..935bed2 --- /dev/null +++ b/fixtures/cookbook/0230-navdate-navdate_map_1-manifest.json @@ -0,0 +1,52 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "type": "Manifest", + "label": { + "en": [ + "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide" + ] + }, + "navDate": "1987-01-01T00:00:00+00:00", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "1987 Map, recto and verso, with a date of publication" + ] + }, + "height": 7072, + "width": 5212, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 7072, + "width": 5212, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0230-navdate-navdate_map_2-manifest b/fixtures/cookbook/0230-navdate-navdate_map_2-manifest new file mode 100644 index 0000000..e2c9a30 --- /dev/null +++ b/fixtures/cookbook/0230-navdate-navdate_map_2-manifest @@ -0,0 +1,52 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "type": "Manifest", + "label": { + "en": [ + "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide" + ] + }, + "navDate": "1986-01-01T00:00:00+00:00", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "1986 Map, recto and verso, with a date of publication" + ] + }, + "height": 1765, + "width": 1286, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 1765, + "width": 1286, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0230-navdate-navdate_map_2-manifest.json b/fixtures/cookbook/0230-navdate-navdate_map_2-manifest.json new file mode 100644 index 0000000..e2c9a30 --- /dev/null +++ b/fixtures/cookbook/0230-navdate-navdate_map_2-manifest.json @@ -0,0 +1,52 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "type": "Manifest", + "label": { + "en": [ + "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide" + ] + }, + "navDate": "1986-01-01T00:00:00+00:00", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "1986 Map, recto and verso, with a date of publication" + ] + }, + "height": 1765, + "width": 1286, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 1765, + "width": 1286, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0234-provider.json b/fixtures/cookbook/0234-provider.json new file mode 100644 index 0000000..3687d6c --- /dev/null +++ b/fixtures/cookbook/0234-provider.json @@ -0,0 +1,124 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Playbill Cover" + ] + }, + "summary": { + "en": [ + "Cover of playbill for \"Akiba gongen kaisen-banashi,\" \"Futatsu chōchō kuruwa nikki\" and \"Godairiki koi no fūjime\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV, and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest." + ] + }, + "provider": [ + { + "id": "https://id.loc.gov/authorities/n79055331", + "type": "Agent", + "label": { + "en": [ + "UCLA Library" + ] + }, + "homepage": [ + { + "id": "https://digital.library.ucla.edu/", + "type": "Text", + "label": { + "en": [ + "UCLA Library Digital Collections" + ] + }, + "format": "text/html", + "language": [ + "en" + ] + } + ], + "logo": [ + { + "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png", + "type": "Image", + "service": [ + { + "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2", + "type": "ImageService3", + "profile": "level2", + "width": 1200, + "height": 502, + "sizes": [ + { + "width": 300, + "height": 126 + }, + { + "width": 600, + "height": 251 + }, + { + "width": 1200, + "height": 502 + } + ] + } + ] + } + ], + "seeAlso": [ + { + "id": "https://id.loc.gov/authorities/names/n79055331.madsxml.xml", + "type": "Dataset", + "label": { + "en": [ + "US Library of Congress data about the UCLA Library" + ] + }, + "format": "application/xml", + "profile": "http://www.loc.gov/mads/v2" + } + ] + } + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", + "type": "Canvas", + "label": { + "en": [ + "front cover with color bar" + ] + }, + "width": 4520, + "height": 5312, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 4520, + "height": 5312, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0258-tagging-external-resource.json b/fixtures/cookbook/0258-tagging-external-resource.json new file mode 100644 index 0000000..c46fb70 --- /dev/null +++ b/fixtures/cookbook/0258-tagging-external-resource.json @@ -0,0 +1,72 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "type": "Canvas", + "height": 3024, + "width": 4032, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 3024, + "width": 4032, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1" + } + ] + } + ], + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", + "type": "Annotation", + "motivation": "tagging", + "body": [ + { + "type": "SpecificResource", + "source": "http://www.wikidata.org/entity/Q18624915" + }, + { + "type": "TextualBody", + "value": "Gänsenliesel-Brunnen", + "format": "text/plain", + "language": "de" + } + ], + "target": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1#xywh=749,1054,338,460" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0261-non-rectangular-commenting.json b/fixtures/cookbook/0261-non-rectangular-commenting.json new file mode 100644 index 0000000..10a063e --- /dev/null +++ b/fixtures/cookbook/0261-non-rectangular-commenting.json @@ -0,0 +1,73 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "type": "Canvas", + "height": 3024, + "width": 4032, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 3024, + "width": 4032, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1" + } + ] + } + ], + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", + "type": "Annotation", + "motivation": "tagging", + "body": { + "type": "TextualBody", + "value": "Gänsenliessel-Brunnen", + "language": "de", + "format": "text/plain" + }, + "target": { + "type": "SpecificResource", + "source": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "selector": { + "type": "SvgSelector", + "value": "" + } + } + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0266-full-canvas-annotation.json b/fixtures/cookbook/0266-full-canvas-annotation.json new file mode 100644 index 0000000..fc243ee --- /dev/null +++ b/fixtures/cookbook/0266-full-canvas-annotation.json @@ -0,0 +1,66 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", + "type": "Canvas", + "height": 3024, + "width": 4032, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 3024, + "width": 4032, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1" + } + ] + } + ], + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1", + "type": "Annotation", + "motivation": "commenting", + "body": { + "type": "TextualBody", + "language": "de", + "format": "text/plain", + "value": "Göttinger Marktplatz mit Gänseliesel Brunnen" + }, + "target": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0269-embedded-or-referenced-annotations.json b/fixtures/cookbook/0269-embedded-or-referenced-annotations.json new file mode 100644 index 0000000..19498c8 --- /dev/null +++ b/fixtures/cookbook/0269-embedded-or-referenced-annotations.json @@ -0,0 +1,52 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", + "type": "Canvas", + "height": 3024, + "width": 4032, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 3024, + "width": 4032, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1" + } + ] + } + ], + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json", + "type": "AnnotationPage" + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/_index.json b/fixtures/cookbook/_index.json new file mode 100644 index 0000000..db2d8aa --- /dev/null +++ b/fixtures/cookbook/_index.json @@ -0,0 +1,198 @@ +{ + "0001-mvm-image": { + "id": "0001-mvm-image", + "url": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json" + }, + "0002-mvm-audio": { + "id": "0002-mvm-audio", + "url": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json" + }, + "0003-mvm-video": { + "id": "0003-mvm-video", + "url": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json" + }, + "0005-image-service": { + "id": "0005-image-service", + "url": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json" + }, + "0006-text-language": { + "id": "0006-text-language", + "url": "https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json" + }, + "0009-book-1": { + "id": "0009-book-1", + "url": "https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json" + }, + "0007-string-formats": { + "id": "0007-string-formats", + "url": "https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json" + }, + "0008-rights": { + "id": "0008-rights", + "url": "https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json" + }, + "0013-placeholderCanvas": { + "id": "0013-placeholderCanvas", + "url": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json" + }, + "0014-accompanyingcanvas": { + "id": "0014-accompanyingcanvas", + "url": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json" + }, + "0015-start": { + "id": "0015-start", + "url": "https://iiif.io/api/cookbook/recipe/0015-start/manifest.json" + }, + "0029-metadata-anywhere": { + "id": "0029-metadata-anywhere", + "url": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json" + }, + "0046-rendering": { + "id": "0046-rendering", + "url": "https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json" + }, + "0053-seeAlso": { + "id": "0053-seeAlso", + "url": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json" + }, + "0117-add-image-thumbnail": { + "id": "0117-add-image-thumbnail", + "url": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json" + }, + "0118_multivalue": { + "id": "0118_multivalue", + "url": "https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json" + }, + "0202-start-canvas": { + "id": "0202-start-canvas", + "url": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json" + }, + "0234-provider": { + "id": "0234-provider", + "url": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json" + }, + "0024-book-4-toc": { + "id": "0024-book-4-toc", + "url": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json" + }, + "0026-toc-opera": { + "id": "0026-toc-opera", + "url": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json" + }, + "0031-bound-multivolume": { + "id": "0031-bound-multivolume", + "url": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json" + }, + "0033-choice": { + "id": "0033-choice", + "url": "https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json" + }, + "0035-foldouts": { + "id": "0035-foldouts", + "url": "https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json" + }, + "0036-composition-from-multiple-images": { + "id": "0036-composition-from-multiple-images", + "url": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json" + }, + "0004-canvas-size": { + "id": "0004-canvas-size", + "url": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json" + }, + "0017-transcription-av": { + "id": "0017-transcription-av", + "url": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json" + }, + "0064-opera-one-canvas": { + "id": "0064-opera-one-canvas", + "url": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json" + }, + "0065-opera-multiple-canvases": { + "id": "0065-opera-multiple-canvases", + "url": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json" + }, + "0074-multiple-language-captions": { + "id": "0074-multiple-language-captions", + "url": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json" + }, + "0219-using-caption-file": { + "id": "0219-using-caption-file", + "url": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/manifest.json" + }, + "0021-tagging": { + "id": "0021-tagging", + "url": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json" + }, + "0258-tagging-external-resource": { + "id": "0258-tagging-external-resource", + "url": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json" + }, + "0261-non-rectangular-commenting": { + "id": "0261-non-rectangular-commenting", + "url": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json" + }, + "0266-full-canvas-annotation": { + "id": "0266-full-canvas-annotation", + "url": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json" + }, + "0269-embedded-or-referenced-annotations": { + "id": "0269-embedded-or-referenced-annotations", + "url": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json" + }, + "0139-geolocate-canvas-fragment": { + "id": "0139-geolocate-canvas-fragment", + "url": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json" + }, + "0154-geo-extension": { + "id": "0154-geo-extension", + "url": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json" + }, + "0010-book-2-viewing-direction-manifest-rtl": { + "id": "0010-book-2-viewing-direction-manifest-rtl", + "url": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json" + }, + "0230-navdate-navdate-collection": { + "id": "0230-navdate-navdate-collection", + "url": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json" + }, + "0040-image-rotation-service-manifest-service": { + "id": "0040-image-rotation-service-manifest-service", + "url": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json" + }, + "0011-book-3-behavior-manifest-continuous": { + "id": "0011-book-3-behavior-manifest-continuous", + "url": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json" + }, + "0030-multi-volume-collection": { + "id": "0030-multi-volume-collection", + "url": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json" + }, + "0010-book-2-viewing-direction-manifest-ttb": { + "id": "0010-book-2-viewing-direction-manifest-ttb", + "url": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json" + }, + "0230-navdate-navdate_map_2-manifest": { + "id": "0230-navdate-navdate_map_2-manifest", + "url": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json" + }, + "0040-image-rotation-service-manifest-css": { + "id": "0040-image-rotation-service-manifest-css", + "url": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json" + }, + "0011-book-3-behavior-manifest-individuals": { + "id": "0011-book-3-behavior-manifest-individuals", + "url": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json" + }, + "0030-multi-volume-manifest_v1": { + "id": "0030-multi-volume-manifest_v1", + "url": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json" + }, + "0230-navdate-navdate_map_1-manifest": { + "id": "0230-navdate-navdate_map_1-manifest", + "url": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json" + }, + "0030-multi-volume-manifest_v2": { + "id": "0030-multi-volume-manifest_v2", + "url": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json" + } +} \ No newline at end of file diff --git a/package.json b/package.json index f9dde69..2a092e1 100644 --- a/package.json +++ b/package.json @@ -52,12 +52,17 @@ "prepublishOnly": "tsc -p . --declaration --emitDeclarationOnly && rollup -c", "test": "jest" }, + "resolutions": { + "@iiif/presentation-3": "^2.0.4" + }, "dependencies": { - "@iiif/presentation-2": "^1.0.1", - "@iiif/presentation-3": "^1.0.4", - "@types/geojson": "^7946.0.8" + "@iiif/presentation-2": "^1.0.2", + "@iiif/presentation-3": "^2.0.5", + "@iiif/presentation-3-normalized": "^0.9.6", + "@types/geojson": "^7946.0.10" }, "devDependencies": { + "@happy-dom/global-registrator": "^6.0.4", "@hyperion-framework/validator": "^1.1.0", "@types/jest": "^27.4.0", "@typescript-eslint/eslint-plugin": "^5.9.1", @@ -66,12 +71,13 @@ "eslint-plugin-json": "^3.1.0", "eslint-plugin-prettier": "^4.0.0", "jest": "^27.4.7", + "node-fetch": "^3.2.9", "prettier": "^2.5.1", "rollup": "^2.63.0", "rollup-library-template": "^1.0.1", "ts-jest": "^27.1.3", - "tslib": "^2.3.1", - "typescript": "^4.5.4" + "tslib": "^2.4.0", + "typescript": "^4.7.4" }, "publishConfig": { "access": "public" diff --git a/scripts/update-cookbook.mjs b/scripts/update-cookbook.mjs new file mode 100644 index 0000000..7aa3a94 --- /dev/null +++ b/scripts/update-cookbook.mjs @@ -0,0 +1,93 @@ +import { GlobalRegistrator } from "@happy-dom/global-registrator"; +import { promises } from "node:fs"; +import { cwd } from "node:process"; +import { join } from "node:path"; + +const { writeFile } = promises; + +GlobalRegistrator.register(); + +const matcher = /https:\/\/iiif\.io\/api\/cookbook\/recipe\/([^\/.]*)\//; + +function getManifest(id) { + return `https://iiif.io/api/cookbook/recipe/${id}/manifest.json`; +} + +async function main() { + const resp = await fetch("https://iiif.io/api/cookbook/recipe/matrix/"); + + const wrapper = document.createElement("div"); + wrapper.innerHTML = await resp.text(); + + + const elements = wrapper.querySelectorAll(".api-content table td a[href]"); + const index = {}; + + + for (const el of elements) { + const link = el.getAttribute("href"); + const matches = matcher.exec(link); + if (matches && matches[1]) { + const id = matches[1]; + + index[id] = { + id: id, + url: getManifest(id) + }; + console.log(getManifest(id)); + } + } + + const keys = Object.keys(index); + const promises = []; + for (const key of keys) { + promises.push((async () => { + const jsonHopefully = await (await fetch(index[key].url)).text(); + + if (jsonHopefully.trim().startsWith('{')) { + await writeFile(join(cwd(), `fixtures/cookbook`, `${key}.json`), + jsonHopefully + ); + console.log(index[key].url); + } else { + if (index[key]) { + delete index[key]; + } + + // Otherwise.. + const innerDocument = await fetch(`https://iiif.io/api/cookbook/recipe/${key}/`); + const innerWrapper = document.createElement("div"); + innerWrapper.innerHTML = await innerDocument.text(); + const elements = innerWrapper.querySelectorAll(".content > p > a"); + for (const el of elements) { + if (el.innerHTML === 'JSON-LD') { + const href = el.getAttribute('href'); + const filenameParts = href.split('/'); + const fileNameWithExtension = filenameParts[filenameParts.length - 1]; + if (fileNameWithExtension.endsWith('.json')) { + const fileName = fileNameWithExtension.slice(0, -5); + await writeFile(join(cwd(), `fixtures/cookbook`, `${key}-${fileName}`), + await (await fetch(`https://iiif.io/api/cookbook/recipe/${key}/${href}`)).text() + ); + + index[`${key}-${fileName}`] = { + id: `${key}-${fileName}`, + url: `https://iiif.io/api/cookbook/recipe/${key}/${href}`, + }; + console.log(`https://iiif.io/api/cookbook/recipe/${key}/${href}`); + } + } + } + } + })()); + } + + await Promise.all(promises); + + await writeFile(join(cwd(), `fixtures/cookbook`, "_index.json"), JSON.stringify(index, null, 2)); +} + + +main().then(() => { + console.log("done"); +}); diff --git a/src/presentation-2/upgrader.ts b/src/presentation-2/upgrader.ts index 37b7f71..961e764 100644 --- a/src/presentation-2/upgrader.ts +++ b/src/presentation-2/upgrader.ts @@ -3,7 +3,7 @@ import * as Presentation2 from '@iiif/presentation-2'; import { imageServiceProfiles, level1Support } from '../shared/image-api-profiles'; import { Traverse } from './traverse'; import { ensureArray } from '../shared/ensure-array'; -import { removeUndefinedProperties } from "../shared/remove-undefined-properties"; +import { removeUndefinedProperties } from '../shared/remove-undefined-properties'; const configuration = { attributionLabel: 'Attribution', diff --git a/src/presentation-3/empty-types.ts b/src/presentation-3/empty-types.ts index 8849865..c8e5afe 100644 --- a/src/presentation-3/empty-types.ts +++ b/src/presentation-3/empty-types.ts @@ -5,8 +5,8 @@ import { CollectionNormalized, ManifestNormalized, RangeNormalized, -} from '@iiif/presentation-3'; -import { ResourceProviderNormalized } from '@iiif/presentation-3/resources/provider'; + ResourceProviderNormalized, +} from '@iiif/presentation-3-normalized'; export const EMPTY = []; // Prevent accidental mutation @@ -23,7 +23,6 @@ export const emptyAnnotation: AnnotationNormalized = { metadata: EMPTY, seeAlso: EMPTY, homepage: EMPTY, - logo: EMPTY, rendering: EMPTY, service: EMPTY, accessibility: EMPTY, @@ -49,7 +48,6 @@ export const emptyAnnotationPage: AnnotationPageNormalized = { id: 'https://iiif-parser/annotation-page', type: 'AnnotationPage', behavior: EMPTY, - motivation: null, label: null, thumbnail: EMPTY, summary: null, @@ -60,7 +58,6 @@ export const emptyAnnotationPage: AnnotationPageNormalized = { items: EMPTY, seeAlso: EMPTY, homepage: EMPTY, - logo: EMPTY, rendering: EMPTY, service: EMPTY, }; @@ -70,9 +67,7 @@ export const emptyCanvas: CanvasNormalized = { type: 'Canvas', label: null, behavior: EMPTY, - motivation: null, thumbnail: EMPTY, - posterCanvas: null, accompanyingCanvas: null, placeholderCanvas: null, summary: null, @@ -85,7 +80,6 @@ export const emptyCanvas: CanvasNormalized = { annotations: EMPTY, seeAlso: EMPTY, homepage: EMPTY, - logo: EMPTY, partOf: EMPTY, rendering: EMPTY, service: EMPTY, @@ -100,9 +94,7 @@ export const emptyCollection: CollectionNormalized = { label: null, viewingDirection: 'left-to-right', behavior: EMPTY, - motivation: null, thumbnail: EMPTY, - posterCanvas: null, accompanyingCanvas: null, placeholderCanvas: null, summary: null, @@ -115,7 +107,6 @@ export const emptyCollection: CollectionNormalized = { annotations: EMPTY, seeAlso: EMPTY, homepage: EMPTY, - logo: EMPTY, partOf: EMPTY, rendering: EMPTY, service: EMPTY, @@ -130,13 +121,10 @@ export const emptyManifest: ManifestNormalized = { homepage: EMPTY, items: EMPTY, label: null, - logo: EMPTY, metadata: EMPTY, - motivation: null, navDate: null, provider: EMPTY, partOf: EMPTY, - posterCanvas: null, accompanyingCanvas: null, placeholderCanvas: null, rendering: EMPTY, @@ -157,9 +145,7 @@ export const emptyRange: RangeNormalized = { type: 'Range', label: null, behavior: EMPTY, - motivation: null, thumbnail: EMPTY, - posterCanvas: null, accompanyingCanvas: null, placeholderCanvas: null, summary: null, @@ -172,7 +158,6 @@ export const emptyRange: RangeNormalized = { annotations: EMPTY, seeAlso: EMPTY, homepage: EMPTY, - logo: EMPTY, partOf: EMPTY, rendering: EMPTY, service: EMPTY, diff --git a/src/presentation-3/normalize.ts b/src/presentation-3/normalize.ts index ec6ce2f..015eae4 100644 --- a/src/presentation-3/normalize.ts +++ b/src/presentation-3/normalize.ts @@ -2,19 +2,15 @@ import { Traverse } from './traverse'; import { Annotation, AnnotationPage, - AnnotationPageNormalized, Canvas, - CanvasNormalized, Collection, - CollectionNormalized, Manifest, - ManifestNormalized, PolyEntity, Range, - RangeNormalized, Reference, Selector, SpecificResource, + ResourceProvider, } from '@iiif/presentation-3'; import { EMPTY, @@ -27,8 +23,16 @@ import { } from './empty-types'; import { convertPresentation2 } from '../presentation-2'; import { NormalizedEntity } from './serialize'; -import { ResourceProvider, ResourceProviderNormalized } from '@iiif/presentation-3/resources/provider'; import { expandTargetToSpecificResource } from '../shared/expand-target'; +import { + AnnotationPageNormalized, + CanvasNormalized, + CollectionNormalized, + ManifestNormalized, + RangeNormalized, + ResourceProviderNormalized, +} from '@iiif/presentation-3-normalized'; +import { isSpecificResource } from '../shared/is-specific-resource'; export const defaultEntities = { Collection: {}, @@ -106,7 +110,8 @@ function merge(existing: any, incoming: any): any { for (const item of incoming) { if (item === null || item === undefined) { continue; - } if (Array.isArray(item)) { + } + if (Array.isArray(item)) { // FIXME: How to handle this properly? merged.push(item); } else if (typeof item === 'object' && item.id && item.type) { @@ -229,9 +234,6 @@ function ensureArrayOnAnnotation(annotation: Annotation): Annotation { if (annotation.seeAlso) { annotation.seeAlso = ensureArray(annotation.seeAlso); } - if (annotation.body) { - annotation.body = ensureArray(annotation.body); - } if (annotation.audience) { annotation.audience = ensureArray(annotation.audience); } @@ -245,10 +247,6 @@ function ensureArrayOnAnnotation(annotation: Annotation): Annotation { return annotation; } -function isSpecificResource(resource: unknown): resource is SpecificResource { - return (resource as any).type === 'SpecificResource'; -} - function toSpecificResource( target: string | Reference | SpecificResource, { typeHint, partOfTypeHint }: { typeHint?: string; partOfTypeHint?: string } = {} @@ -258,6 +256,10 @@ function toSpecificResource( } if (isSpecificResource(target)) { + if (typeof target.source === 'string') { + target.source = { id: target.source, type: typeHint || 'unknown' }; + } + if (target.source.type === 'Canvas' && target.source.partOf && typeof target.source.partOf === 'string') { target.source.partOf = [ { @@ -320,6 +322,10 @@ function annotationTargetToSpecificResource(annotation: Annotation): Annotation return annotation; } +export function traverseSpecificResource(specificResource: SpecificResource): SpecificResource { + return specificResource; +} + export function normalize(unknownEntity: unknown) { const entity = convertPresentation2(unknownEntity); const entities = getDefaultEntities(); @@ -378,6 +384,9 @@ export function normalize(unknownEntity: unknown) { addToMapping('Agent'), addToEntities('Agent'), ], + specificResource: [ + traverseSpecificResource, + ], // Remove this, content resources are NOT usually processed by this library. // They need to be available in full when they get passed down the chain. // There may be a better way to preserve annotations and content resources. diff --git a/src/presentation-3/serialize-presentation-2.ts b/src/presentation-3/serialize-presentation-2.ts index 2e13506..bc9121e 100644 --- a/src/presentation-3/serialize-presentation-2.ts +++ b/src/presentation-3/serialize-presentation-2.ts @@ -1,14 +1,13 @@ import { SerializeConfig } from './serialize'; import { - DescriptiveNormalized, FragmentSelector, InternationalString, - LinkingNormalized, Reference, Selector, SpecificResource, TechnicalProperties, } from '@iiif/presentation-3'; +import { DescriptiveNormalized, LinkingNormalized } from '@iiif/presentation-3-normalized'; import * as Presentation2 from '@iiif/presentation-2'; import { compressSpecificResource } from '../shared/compress-specific-resource'; @@ -281,15 +280,17 @@ export const serializeConfigPresentation2: SerializeConfig = { if (entity.items) { for (const _item of entity.items) { const item = _item.type === 'SpecificResource' ? _item.source : _item; - const canvas = yield item; - members.push({ - '@id': specificResourceToString(_item), - '@type': item.type, - label: canvas ? canvas.label : undefined, - within: entity.id, - }); - if (item.type === 'Canvas') { - canvases.push(item.id); + if (item) { + const canvas = yield item; + members.push({ + '@id': specificResourceToString(_item), + '@type': item.type, + label: canvas ? canvas.label : undefined, + within: entity.id, + }); + if (item.type === 'Canvas') { + canvases.push(item.id); + } } } } diff --git a/src/presentation-3/serialize-presentation-3.ts b/src/presentation-3/serialize-presentation-3.ts index 5d8170e..2ef2a77 100644 --- a/src/presentation-3/serialize-presentation-3.ts +++ b/src/presentation-3/serialize-presentation-3.ts @@ -1,13 +1,12 @@ -import { SerializeConfig, UNWRAP } from './serialize'; +import { SerializeConfig, UNSET, UNWRAP } from './serialize'; import { - DescriptiveNormalized, ImageService2, ImageService3, - LinkingNormalized, - SpecificResource, + ResourceProvider, TechnicalProperties, } from '@iiif/presentation-3'; import { compressSpecificResource } from '../shared/compress-specific-resource'; +import { DescriptiveNormalized, LinkingNormalized } from '@iiif/presentation-3-normalized'; function technicalProperties(entity: Partial): Array<[keyof TechnicalProperties, any]> { return [ @@ -16,8 +15,8 @@ function technicalProperties(entity: Partial): Array<[keyof ['type', entity.type], ['format', entity.format], ['profile', entity.profile], - ['height', entity.height], - ['width', entity.width], + ['height', entity.height || undefined], + ['width', entity.width || undefined], ['duration', entity.duration || undefined], ['viewingDirection', entity.viewingDirection !== 'left-to-right' ? entity.viewingDirection : undefined], ['behavior', entity.behavior && entity.behavior.length ? entity.behavior : undefined], @@ -86,16 +85,14 @@ function* linkingProperties( ['rendering', filterEmpty(yield entity.rendering)], ['supplementary', filterEmpty(yield entity.supplementary)], ['homepage', filterEmpty(yield entity.homepage)], - ['logo', filterEmpty(yield entity.logo)], + ['logo', filterEmpty(yield (entity as ResourceProvider).logo)], // Don't yield these, they are references. ['partOf', filterEmpty(yield entity.partOf)], [ 'start', // @todo remove once types updated. - entity.start && (entity.start as any).type === 'SpecificResource' - ? compressSpecificResource(entity.start as any as SpecificResource) - : entity.start, + entity.start ? compressSpecificResource(entity.start) : entity.start, ], ]; } @@ -111,13 +108,17 @@ export const serializeConfigPresentation3: SerializeConfig = { } return [ - ['@context', 'http://iiif.io/api/presentation/3/context.json'], + [ + '@context', + (entity as any)['@context'] ? (entity as any)['@context'] : 'http://iiif.io/api/presentation/3/context.json', + ], ...technicalProperties(entity), ...(yield* descriptiveProperties(entity)), ...(yield* linkingProperties(entity)), ['items', yield entity.items], ['structures', filterEmpty(yield entity.structures)], ['annotations', filterEmpty(yield entity.annotations)], + ['navPlace', (entity as any).navPlace], // @todo remove when types are updated ]; }, @@ -129,6 +130,7 @@ export const serializeConfigPresentation3: SerializeConfig = { ...(yield* linkingProperties(entity)), ['items', yield entity.items], ['annotations', filterEmpty(yield entity.annotations)], + ['navPlace', (entity as any).navPlace], // @todo remove when types are updated ]; }, @@ -151,11 +153,13 @@ export const serializeConfigPresentation3: SerializeConfig = { return key !== 'items'; }); + const items = yield entity.items; + return [ // Any more properties? ...entries, ...(yield* linkingProperties(entity)), - ['items', yield entity.items], + ['items', items.length ? items : UNSET], ]; }, @@ -173,7 +177,7 @@ export const serializeConfigPresentation3: SerializeConfig = { } if (key === 'target') { - return [key, compressSpecificResource(item, true)]; + return [key, compressSpecificResource(item, { allowString: true, allowSourceString: true })]; } return [key, Array.isArray(item) ? filterEmpty(item as any) : item]; @@ -188,14 +192,17 @@ export const serializeConfigPresentation3: SerializeConfig = { }, ContentResource: function* (entity: any) { - return [ - // Image properties. - ...technicalProperties(entity), - ...(yield* descriptiveProperties(entity)), - ...(yield* linkingProperties(entity)), - ['annotations', filterEmpty(yield entity.annotations)], - ['items', filterEmpty(yield entity.items)], - ]; + return mergeRemainingProperties( + [ + // Image properties. + ...technicalProperties(entity), + ...(yield* descriptiveProperties(entity)), + ...(yield* linkingProperties(entity)), + ['annotations', filterEmpty(yield entity.annotations)], + ['items', filterEmpty(yield entity.items)], + ], + entity + ); }, AnnotationCollection: function* (entity) { @@ -215,6 +222,7 @@ export const serializeConfigPresentation3: SerializeConfig = { ...(yield* descriptiveProperties(entity)), ...(yield* linkingProperties(entity)), ['items', filterEmpty(yield entity.items)], + ['navPlace', (entity as any).navPlace], // @todo remove when types are updated ]; } return [...technicalProperties(entity), ...(yield* descriptiveProperties(entity))]; @@ -244,6 +252,19 @@ export const serializeConfigPresentation3: SerializeConfig = { ...(yield* linkingProperties(entity)), ['items', rangeItems], ['annotations', filterEmpty(yield entity.annotations)], + ['navPlace', (entity as any).navPlace], // @todo remove when types are updated ]; }, }; + +function mergeRemainingProperties(entries: [string, any][], object: any): [string, any][] { + const keys = Object.keys(object); + const alreadyParsed = entries.map(([a]) => a); + + for (const key of keys) { + if (alreadyParsed.indexOf(key) === -1 && typeof object[key] !== 'undefined') { + entries.push([key, object[key]]); + } + } + return entries; +} diff --git a/src/presentation-3/serialize.ts b/src/presentation-3/serialize.ts index ca2f004..a71ba92 100644 --- a/src/presentation-3/serialize.ts +++ b/src/presentation-3/serialize.ts @@ -1,18 +1,15 @@ +import { AnnotationCollection, ContentResource, Reference, Selector } from '@iiif/presentation-3'; import { - AnnotationCollection, AnnotationCollectionNormalized, AnnotationNormalized, AnnotationPageNormalized, CanvasNormalized, CollectionNormalized, - ContentResource, ManifestNormalized, RangeNormalized, - Reference, - Selector, + ResourceProviderNormalized, ServiceNormalized, -} from '@iiif/presentation-3'; -import { ResourceProvider, ResourceProviderNormalized } from '@iiif/presentation-3/resources/provider'; +} from '@iiif/presentation-3-normalized'; export const UNSET = '__$UNSET$__'; export const UNWRAP = '__$UNWRAP$__'; diff --git a/src/presentation-3/traverse.ts b/src/presentation-3/traverse.ts index c7a19fd..60cbb67 100644 --- a/src/presentation-3/traverse.ts +++ b/src/presentation-3/traverse.ts @@ -16,8 +16,9 @@ import { Required, Service, SpecificResource, + ResourceProvider, } from '@iiif/presentation-3'; -import { ResourceProvider } from '@iiif/presentation-3/resources/provider'; +import { isSpecificResource } from '../shared/is-specific-resource'; export const types = [ 'Collection', @@ -48,13 +49,14 @@ export type TraversalMap = { service?: Array>; agent?: Array>; specificResource?: Array>; + geoJson?: Array>; }; export type TraverseOptions = { allowUndefinedReturn: boolean; }; -export function identifyResource(resource: any): string { +export function identifyResource(resource: any, typeHint?: string): string { if (typeof resource === 'undefined' || resource === null) { throw new Error('Null or undefined is not a valid entity.'); } @@ -62,6 +64,9 @@ export function identifyResource(resource: any): string { throw new Error('Array is not a valid entity'); } if (typeof resource !== 'object') { + if (typeHint) { + return typeHint; + } throw new Error(`${typeof resource} is not a valid entity`); } @@ -98,6 +103,7 @@ export class Traverse { service: [], agent: [], specificResource: [], + geoJson: [], ...traversals, }; this.options = { @@ -118,6 +124,9 @@ export class Traverse { choice: [traversal], range: [traversal], service: [traversal], + geoJson: [traversal], + specificResource: [traversal], + agent: [traversal], }); } @@ -167,7 +176,11 @@ export class Traverse { }); } if (resource.start) { - resource.start = resource.start ? this.traverseType(resource.start, this.traversals.canvas) : null; + if (isSpecificResource(resource.start)) { + resource.start = this.traverseSpecificResource(resource.start, 'Canvas') as any; + } else { + resource.start = this.traverseType(resource.start, this.traversals.canvas); + } } if (resource.rendering) { resource.rendering = resource.rendering.map((content) => @@ -200,13 +213,24 @@ export class Traverse { return this.traverseType( this.traverseDescriptive( this.traverseInlineAnnotationPages( - this.traverseLinking(this.traversePosterCanvas(this.traverseCollectionItems(collection))) + this.traverseLinking(this.traverseLinkedCanvases(this.traverseCollectionItems(collection))) ) ), this.traversals.collection ); } + traverseGeoJson(geoJson: import('geojson').GeoJSON): import('geojson').GeoJSON { + return this.traverseType(geoJson, this.traversals.geoJson); + } + + traverseNavPlace(resource: any /*NavPlaceExtension*/) { + if (resource.navPlace) { + resource.navPlace = this.traverseGeoJson(resource.navPlace); + } + return resource.navPlace; + } + traverseManifestItems(manifest: Manifest): Manifest { if (manifest.items) { manifest.items = manifest.items.map((canvas) => this.traverseCanvas(canvas)); @@ -225,7 +249,7 @@ export class Traverse { return this.traverseType( this.traverseInlineAnnotationPages( this.traverseManifestStructures( - this.traversePosterCanvas( + this.traverseLinkedCanvases( this.traverseDescriptive(this.traverseLinking(this.traverseManifestItems(manifest))) ) ) @@ -258,7 +282,7 @@ export class Traverse { traverseCanvas(canvas: Canvas): Canvas { return this.traverseType( this.traverseInlineAnnotationPages( - this.traversePosterCanvas(this.traverseDescriptive(this.traverseLinking(this.traverseCanvasItems(canvas)))) + this.traverseLinkedCanvases(this.traverseDescriptive(this.traverseLinking(this.traverseCanvasItems(canvas)))) ), this.traversals.canvas ); @@ -310,12 +334,7 @@ export class Traverse { } */ - traversePosterCanvas(json: T): T { - // @deprecated - if (json.posterCanvas) { - json.posterCanvas = this.traverseCanvas(json.posterCanvas); - } - + traverseLinkedCanvases(json: T): T { if (json.placeholderCanvas) { json.placeholderCanvas = this.traverseCanvas(json.placeholderCanvas); } @@ -367,10 +386,18 @@ export class Traverse { } traverseSpecificResource(specificResource: SpecificResource, typeHint?: string): SpecificResource { + let source = specificResource.source; + if (typeof specificResource.source === 'string') { + source = { id: specificResource.source, type: typeHint || 'unknown' }; + } + return this.traverseType( { ...specificResource, - source: this.traverseUnknown(specificResource.source, typeHint), + source: + typeHint === 'Canvas' || source.type === 'Canvas' + ? this.traverseType(source, this.traversals.canvas) + : this.traverseUnknown(source, typeHint), }, this.traversals.specificResource ); @@ -382,8 +409,8 @@ export class Traverse { if (typeof rangeOrManifest === 'string') { return this.traverseCanvas({ id: rangeOrManifest, type: 'Canvas' }); } - if (rangeOrManifest.type === 'SpecificResource') { - return this.traverseSpecificResource(rangeOrManifest as SpecificResource, 'Canvas'); + if (isSpecificResource(rangeOrManifest)) { + return this.traverseSpecificResource(rangeOrManifest, 'Canvas'); } if (rangeOrManifest.type === 'Manifest') { return this.traverseManifest(rangeOrManifest as Manifest); @@ -397,7 +424,7 @@ export class Traverse { traverseRange(range: Range): Range { return this.traverseType( - this.traversePosterCanvas(this.traverseDescriptive(this.traverseLinking(this.traverseRangeRanges(range)))), + this.traverseLinkedCanvases(this.traverseDescriptive(this.traverseLinking(this.traverseRangeRanges(range)))), this.traversals.range ); } @@ -424,7 +451,7 @@ export class Traverse { } traverseUnknown(resource: any, typeHint?: string) { - const type = identifyResource(resource); + const type = identifyResource(resource, typeHint); switch (type) { case 'Collection': diff --git a/src/shared/compress-specific-resource.ts b/src/shared/compress-specific-resource.ts index f27bfc9..437b0c2 100644 --- a/src/shared/compress-specific-resource.ts +++ b/src/shared/compress-specific-resource.ts @@ -1,10 +1,23 @@ -import { SpecificResource } from '../../../presentation-3-types'; +import { SpecificResource } from '@iiif/presentation-3'; + +export function compressSpecificResource( + target: undefined | SpecificResource, + { allowSourceString = true, allowString = false }: { allowString?: boolean; allowSourceString?: boolean } = {} +): any { + const fixSource = (resource: any) => { + if (allowSourceString && resource && resource.source && typeof resource.source !== 'string') { + const keys = Object.keys(resource.source); + if (resource.source.id && resource.source.type && keys.length === 2) { + return { ...resource, source: resource.source.id }; + } + } + return resource; + }; -export function compressSpecificResource(target: undefined | SpecificResource, allowString = false): any { if (target) { if (target.source && target.source.partOf) { // Ignore if we have a partOf - return target; + return fixSource(target); } const keys = Object.keys(target); if ( @@ -25,5 +38,5 @@ export function compressSpecificResource(target: undefined | SpecificResource, a } } } - return target; + return fixSource(target); } diff --git a/src/shared/is-specific-resource.ts b/src/shared/is-specific-resource.ts new file mode 100644 index 0000000..6623773 --- /dev/null +++ b/src/shared/is-specific-resource.ts @@ -0,0 +1,5 @@ +import { SpecificResource } from '@iiif/presentation-3'; + +export function isSpecificResource(resource: unknown): resource is SpecificResource { + return (resource as any).type === 'SpecificResource'; +} diff --git a/yarn.lock b/yarn.lock index e2d1a34..df5600d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -349,6 +349,13 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@happy-dom/global-registrator@^6.0.4": + version "6.0.4" + resolved "https://registry.yarnpkg.com/@happy-dom/global-registrator/-/global-registrator-6.0.4.tgz#30b014ff6defe3aa266585b4087be5e2f32c3638" + integrity sha512-SAIQRmz9+SyrOYdCYjs0lJKCb3x7iC1C9YW7C+IPmfGGAD3WTndHsnvslk/GalteZeIQNlUlNgCdOEjiUTn8Lg== + dependencies: + happy-dom "^6.0.4" + "@humanwhocodes/config-array@^0.9.2": version "0.9.3" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.3.tgz#f2564c744b387775b436418491f15fce6601f63e" @@ -370,17 +377,24 @@ dependencies: ajv "6.12.2" -"@iiif/presentation-2@^1.0.1": - version "1.0.1" - resolved "https://registry.yarnpkg.com/@iiif/presentation-2/-/presentation-2-1.0.1.tgz#0d76fedfeac65b31afcc30d9a8dc17f2e57041e4" - integrity sha512-iWF6rgAi9ksSwbH/4uJW1/49DOL1wN2mLKovu0qy1GYtCTg42bryAxYtnBsw6LrJZWykTStv7R3DynChfECmnA== +"@iiif/presentation-2@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@iiif/presentation-2/-/presentation-2-1.0.2.tgz#c712c4a40cc5b7291b8d92646b0ec8b8215b9b3d" + integrity sha512-EN/p+td5VrHvUsQXV26VkaDFW0HG2GPRaibPlxJRip8au8ABBrOYPIcBH69Hyk3I0UnW3xzK2VsZ9TcuQEn0Mw== -"@iiif/presentation-3@^1.0.4": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@iiif/presentation-3/-/presentation-3-1.0.4.tgz#9433c38c6a26e95ef94d1f9e0232962398611d70" - integrity sha512-L5fPMyNAZ3UaDOR7D4mcv9Z1YJIqx9/nI9kaNcq3azLB4lp5w7cv7O1her3gjIPSH/mLCOuUG5KTBOfE/SgXUg== +"@iiif/presentation-3-normalized@^0.9.6": + version "0.9.6" + resolved "https://registry.yarnpkg.com/@iiif/presentation-3-normalized/-/presentation-3-normalized-0.9.6.tgz#9346ae6307c5121e7e590c75f8f0e130fa91e38f" + integrity sha512-EHLfw9rNjfL5uFSHK9JqIveqhBU/s7hIQrc/Z6UEuO64vHXYdran5CL7nEPXeJDFFalG/DNfoLCrj5bWa1EnHg== + dependencies: + "@iiif/presentation-3" "^2.0.4" + +"@iiif/presentation-3@^2.0.4", "@iiif/presentation-3@^2.0.5": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@iiif/presentation-3/-/presentation-3-2.0.5.tgz#04c0c980ba586881984ed9433375d207f9af52ad" + integrity sha512-Iy5erfTKs1zOjwq8WiTmOeP5ZmrBFVVzBXMbKIIdv38ci1loeAR9fboncncPW7ZPqXUqeCMkjFGnP/HL22TggA== dependencies: - "@types/geojson" "^7946.0.7" + "@types/geojson" "^7946.0.10" "@istanbuljs/load-nyc-config@^1.0.0": version "1.1.0" @@ -676,15 +690,29 @@ dependencies: "@babel/types" "^7.3.0" +"@types/concat-stream@^1.6.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" + integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== + dependencies: + "@types/node" "*" + "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/geojson@^7946.0.7", "@types/geojson@^7946.0.8": - version "7946.0.8" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.8.tgz#30744afdb385e2945e22f3b033f897f76b1f12ca" - integrity sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA== +"@types/form-data@0.0.33": + version "0.0.33" + resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" + integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== + dependencies: + "@types/node" "*" + +"@types/geojson@^7946.0.10": + version "7946.0.10" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.10.tgz#6dfbf5ea17142f7f9a043809f1cd4c448cb68249" + integrity sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA== "@types/graceful-fs@^4.1.2": version "4.1.5" @@ -730,11 +758,26 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.8.tgz#50d680c8a8a78fe30abe6906453b21ad8ab0ad7b" integrity sha512-YofkM6fGv4gDJq78g4j0mMuGMkZVxZDgtU0JRdx6FgiJDG+0fY0GKVolOV8WqVmEhLCXkQRjwDdKyPxJp/uucg== +"@types/node@^10.0.3": + version "10.17.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + +"@types/node@^8.0.0": + version "8.10.66" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" + integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== + "@types/prettier@^2.1.5": version "2.4.3" resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.3.tgz#a3c65525b91fca7da00ab1a3ac2b5a2a4afbffbf" integrity sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w== +"@types/qs@^6.2.31": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + "@types/resolve@1.17.1": version "1.17.1" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" @@ -955,6 +998,11 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1081,6 +1129,14 @@ builtin-modules@^3.1.0: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== +call-bind@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -1101,6 +1157,11 @@ caniuse-lite@^1.0.30001286: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001304.tgz#38af55ed3fc8220cb13e35e6e7309c8c65a05559" integrity sha512-bdsfZd6K6ap87AGqSHJP/s1V+U6Z5lyrcbBu3ovbCCf8cSYpwTtGrCBObMpJqwxfTbLW6YTIdbb1jEeTelcpYQ== +caseless@^0.12.0, caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1176,7 +1237,7 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -combined-stream@^1.0.8: +combined-stream@^1.0.6, combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -1188,6 +1249,16 @@ concat-map@0.0.1: resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= +concat-stream@^1.6.0, concat-stream@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" @@ -1195,6 +1266,11 @@ convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -1204,6 +1280,11 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== + cssom@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" @@ -1221,6 +1302,11 @@ cssstyle@^2.3.0: dependencies: cssom "~0.3.6" +data-uri-to-buffer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz#b5db46aea50f6176428ac05b73be39a57701a64b" + integrity sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA== + data-urls@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" @@ -1681,6 +1767,14 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fetch-blob@^3.1.2, fetch-blob@^3.1.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" + integrity sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ== + dependencies: + node-domexception "^1.0.0" + web-streams-polyfill "^3.0.3" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -1721,6 +1815,15 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.5.tgz#76c8584f4fc843db64702a6bd04ab7a8bd666da3" integrity sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg== +form-data@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + form-data@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" @@ -1730,6 +1833,13 @@ form-data@^3.0.0: combined-stream "^1.0.8" mime-types "^2.1.12" +formdata-polyfill@^4.0.10: + version "4.0.10" + resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" + integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== + dependencies: + fetch-blob "^3.1.2" + fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1760,11 +1870,25 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== +get-port@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== + get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" @@ -1825,6 +1949,19 @@ graceful-fs@^4.2.4: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== +happy-dom@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/happy-dom/-/happy-dom-6.0.4.tgz#553c1a8ba842455beb975c579d769914808c7404" + integrity sha512-b+ID23Ms0BY08UNLymsOMG7EI2jSlwEt4cbJs938GZfeNAg+fqgkSO3TokQMgSOFoHznpjWmpVjBUL5boJ9PWw== + dependencies: + css.escape "^1.5.1" + he "^1.2.0" + node-fetch "^2.x.x" + sync-request "^6.1.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -1835,6 +1972,11 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -1842,6 +1984,11 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + html-encoding-sniffer@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" @@ -1854,6 +2001,16 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== +http-basic@^8.1.1: + version "8.1.3" + resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" + integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== + dependencies: + caseless "^0.12.0" + concat-stream "^1.6.2" + http-response-object "^3.0.1" + parse-cache-control "^1.0.1" + http-proxy-agent@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" @@ -1863,6 +2020,13 @@ http-proxy-agent@^4.0.1: agent-base "6" debug "4" +http-response-object@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" + integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== + dependencies: + "@types/node" "^10.0.3" + https-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" @@ -1883,6 +2047,13 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -1922,7 +2093,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2: +inherits@2, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -1981,6 +2152,11 @@ is-typedarray@^1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -2660,6 +2836,27 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= +node-domexception@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" + integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== + +node-fetch@^2.x.x: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-fetch@^3.2.9: + version "3.2.9" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.2.9.tgz#3f6070bf854de20f21b9fe8479f823462e615d7d" + integrity sha512-/2lI+DBecVvVm9tDhjziTVjo2wmTsSxSk58saUYP0P/fRJ3xxtfMDY24+CKTkfm0Dlhyn3CSXNL0SoRiCZ8Rzg== + dependencies: + data-uri-to-buffer "^4.0.0" + fetch-blob "^3.1.4" + formdata-polyfill "^4.0.10" + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -2687,6 +2884,11 @@ nwsapi@^2.2.0: resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== +object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -2751,6 +2953,11 @@ parent-module@^1.0.0: dependencies: callsites "^3.0.0" +parse-cache-control@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" + integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== + parse5@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" @@ -2834,6 +3041,18 @@ pretty-format@^27.0.0, pretty-format@^27.4.6: ansi-styles "^5.0.0" react-is "^17.0.1" +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise@^8.0.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" + integrity sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q== + dependencies: + asap "~2.0.6" + prompts@^2.0.1: version "2.4.2" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" @@ -2852,6 +3071,13 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +qs@^6.4.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -2862,6 +3088,19 @@ react-is@^17.0.1: resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== +readable-stream@^2.2.2: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + regexpp@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" @@ -2996,12 +3235,12 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-buffer@~5.1.1: +safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -"safer-buffer@>= 2.1.2 < 3": +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -3037,6 +3276,15 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.6" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" @@ -3109,6 +3357,13 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -3170,6 +3425,22 @@ symbol-tree@^3.2.4: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +sync-request@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" + integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== + dependencies: + http-response-object "^3.0.1" + sync-rpc "^1.2.1" + then-request "^6.0.0" + +sync-rpc@^1.2.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7" + integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== + dependencies: + get-port "^3.1.0" + terminal-link@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" @@ -3192,6 +3463,23 @@ text-table@^0.2.0: resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +then-request@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/then-request/-/then-request-6.0.2.tgz#ec18dd8b5ca43aaee5cb92f7e4c1630e950d4f0c" + integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== + dependencies: + "@types/concat-stream" "^1.6.0" + "@types/form-data" "0.0.33" + "@types/node" "^8.0.0" + "@types/qs" "^6.2.31" + caseless "~0.12.0" + concat-stream "^1.6.0" + form-data "^2.2.0" + http-basic "^8.1.1" + http-response-object "^3.0.1" + promise "^8.0.0" + qs "^6.4.0" + throat@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" @@ -3230,6 +3518,11 @@ tr46@^2.1.0: dependencies: punycode "^2.1.1" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + ts-jest@^27.1.3: version "27.1.3" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.3.tgz#1f723e7e74027c4da92c0ffbd73287e8af2b2957" @@ -3249,10 +3542,10 @@ tslib@^1.8.1: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== -tslib@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" - integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== +tslib@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== tsutils@^3.21.0: version "3.21.0" @@ -3297,10 +3590,15 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -typescript@^4.5.4: - version "4.5.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.4.tgz#a17d3a0263bf5c8723b9c52f43c5084edf13c2e8" - integrity sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg== +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typescript@^4.7.4: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== universalify@^0.1.2: version "0.1.2" @@ -3314,6 +3612,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" @@ -3380,6 +3683,16 @@ walker@^1.0.7: dependencies: makeerror "1.0.12" +web-streams-polyfill@^3.0.3: + version "3.2.1" + resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" + integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + webidl-conversions@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" @@ -3390,6 +3703,11 @@ webidl-conversions@^6.1.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + whatwg-encoding@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" @@ -3397,11 +3715,31 @@ whatwg-encoding@^1.0.5: dependencies: iconv-lite "0.4.24" +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== + dependencies: + iconv-lite "0.6.3" + whatwg-mimetype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + whatwg-url@^8.0.0, whatwg-url@^8.5.0: version "8.7.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" From 41dfc1bd6c5c856f984f5e57f959c414cca5f78e Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Wed, 27 Jul 2022 21:48:24 +0100 Subject: [PATCH 05/44] Updated deps --- package.json | 5 +---- yarn.lock | 12 ++++++------ 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 2a092e1..080f7ed 100644 --- a/package.json +++ b/package.json @@ -52,13 +52,10 @@ "prepublishOnly": "tsc -p . --declaration --emitDeclarationOnly && rollup -c", "test": "jest" }, - "resolutions": { - "@iiif/presentation-3": "^2.0.4" - }, "dependencies": { "@iiif/presentation-2": "^1.0.2", "@iiif/presentation-3": "^2.0.5", - "@iiif/presentation-3-normalized": "^0.9.6", + "@iiif/presentation-3-normalized": "^0.9.7", "@types/geojson": "^7946.0.10" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index df5600d..c3e9a41 100644 --- a/yarn.lock +++ b/yarn.lock @@ -382,14 +382,14 @@ resolved "https://registry.yarnpkg.com/@iiif/presentation-2/-/presentation-2-1.0.2.tgz#c712c4a40cc5b7291b8d92646b0ec8b8215b9b3d" integrity sha512-EN/p+td5VrHvUsQXV26VkaDFW0HG2GPRaibPlxJRip8au8ABBrOYPIcBH69Hyk3I0UnW3xzK2VsZ9TcuQEn0Mw== -"@iiif/presentation-3-normalized@^0.9.6": - version "0.9.6" - resolved "https://registry.yarnpkg.com/@iiif/presentation-3-normalized/-/presentation-3-normalized-0.9.6.tgz#9346ae6307c5121e7e590c75f8f0e130fa91e38f" - integrity sha512-EHLfw9rNjfL5uFSHK9JqIveqhBU/s7hIQrc/Z6UEuO64vHXYdran5CL7nEPXeJDFFalG/DNfoLCrj5bWa1EnHg== +"@iiif/presentation-3-normalized@^0.9.7": + version "0.9.7" + resolved "https://registry.yarnpkg.com/@iiif/presentation-3-normalized/-/presentation-3-normalized-0.9.7.tgz#19386234e07c91c996d15ac5e1d86d1e1882e128" + integrity sha512-Aqk0sYBFIH5W3wmVxW02tnAFbNzUU5oPygGQjvszB3PP2nSkFQ1skVjqJhQPPZTyi/de1qcJUrgSy0vp6s+c5A== dependencies: - "@iiif/presentation-3" "^2.0.4" + "@iiif/presentation-3" "^2.0.5" -"@iiif/presentation-3@^2.0.4", "@iiif/presentation-3@^2.0.5": +"@iiif/presentation-3@^2.0.5": version "2.0.5" resolved "https://registry.yarnpkg.com/@iiif/presentation-3/-/presentation-3-2.0.5.tgz#04c0c980ba586881984ed9433375d207f9af52ad" integrity sha512-Iy5erfTKs1zOjwq8WiTmOeP5ZmrBFVVzBXMbKIIdv38ci1loeAR9fboncncPW7ZPqXUqeCMkjFGnP/HL22TggA== From 610e2f3130db36588f0af39817d81626cff55ae7 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Wed, 27 Jul 2022 21:51:45 +0100 Subject: [PATCH 06/44] Fixed import --- __tests__/presentation-3-parser/utilities.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/__tests__/presentation-3-parser/utilities.test.ts b/__tests__/presentation-3-parser/utilities.test.ts index 3f3c88a..0ec5184 100644 --- a/__tests__/presentation-3-parser/utilities.test.ts +++ b/__tests__/presentation-3-parser/utilities.test.ts @@ -1,5 +1,5 @@ import { compressSpecificResource } from '../../src/shared/compress-specific-resource'; -import { SpecificResource } from '../../../presentation-3-types'; +import { SpecificResource } from '@iiif/presentation-3'; describe('Misc Utilites', function () { test('compressSpecificResource', () => { From b100be3f33e4e2cc7b6831382e7b3707c2292ee6 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Fri, 29 Jul 2022 19:52:28 +0100 Subject: [PATCH 07/44] Migrate to vitest --- .../__snapshots__/cookbook.tests.ts.snap | 16044 ++++++++-------- .../strict-upgrade.test.ts | 18 +- .../presentation-3-parser/utilities.test.ts | 10 +- package.json | 8 +- tsconfig.json | 3 +- vite.config.ts | 13 + yarn.lock | 2144 +-- 7 files changed, 8337 insertions(+), 9903 deletions(-) create mode 100644 vite.config.ts diff --git a/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap b/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap index 265e615..f741e73 100644 --- a/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap @@ -1,23 +1,23 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1 -exports[`Cookbook Testing normalize "0001-mvm-image" ("https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0001-mvm-image/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0001-mvm-image https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0001-mvm-image/annotation/p0001-image": { + "body": [ + { "id": "http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1", "type": "Canvas", }, @@ -26,66 +26,66 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0001-mvm-image/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0001-mvm-image/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 1800, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/page/p1/1", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 1200, }, }, - "Collection": Object {}, - "ContentResource": Object { - "http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png": Object { + "Collection": {}, + "ContentResource": { + "http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png": { "format": "image/png", "height": 1800, "id": "http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png", @@ -93,76 +93,76 @@ Object { "width": 1200, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Image 1", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png": "ContentResource", "https://iiif.io/api/cookbook/recipe/0001-mvm-image/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1": "Canvas", "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json": "Manifest", "https://iiif.io/api/cookbook/recipe/0001-mvm-image/page/p1/1": "AnnotationPage", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0001-mvm-image" ("https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0001-mvm-image https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 1800, "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/png", "height": 1800, "id": "http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png", @@ -182,8 +182,8 @@ Object { "width": 1200, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Image 1", ], }, @@ -191,24 +191,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0002-mvm-audio" ("https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page/annotation": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0002-mvm-audio https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page/annotation": { + "body": [ + { "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page/annotation", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page", "type": "Canvas", }, @@ -217,142 +217,142 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page/annotation", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 1985.024, "height": 0, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 0, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4": Object { + "Collection": {}, + "ContentResource": { + "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4": { "duration": 1985.024, "format": "audio/mp4", "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", "type": "Sound", }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Simplest Audio Example 1", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4": "ContentResource", "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas": "Canvas", "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page": "AnnotationPage", "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page/annotation": "Annotation", "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json": "Manifest", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0002-mvm-audio" ("https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0002-mvm-audio https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json", - "items": Array [ - Object { + "items": [ + { "duration": 1985.024, "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "duration": 1985.024, "format": "audio/mp4", "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", @@ -370,8 +370,8 @@ Object { "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Simplest Audio Example 1", ], }, @@ -379,24 +379,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0003-mvm-video" ("https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page/annotation": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0003-mvm-video https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page/annotation": { + "body": [ + { "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page/annotation", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas", "type": "Canvas", }, @@ -405,66 +405,66 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page/annotation", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 572.034, "height": 360, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 640, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4": Object { + "Collection": {}, + "ContentResource": { + "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4": { "duration": 572.034, "format": "video/mp4", "height": 360, @@ -473,77 +473,77 @@ Object { "width": 480, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Video Example 3", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4": "ContentResource", "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas": "Canvas", "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page": "AnnotationPage", "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page/annotation": "Annotation", "https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json": "Manifest", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0003-mvm-video" ("https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0003-mvm-video https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json", - "items": Array [ - Object { + "items": [ + { "duration": 572.034, "height": 360, "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "duration": 572.034, "format": "video/mp4", "height": 360, @@ -564,8 +564,8 @@ Object { "width": 640, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Video Example 3", ], }, @@ -573,24 +573,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0004-canvas-size" ("https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0004-canvas-size/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0004-canvas-size https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0004-canvas-size/annotation/p0001-image": { + "body": [ + { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/canvas/p1", "type": "Canvas", }, @@ -599,66 +599,66 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0004-canvas-size/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0004-canvas-size/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0004-canvas-size/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0004-canvas-size/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 1080, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/page/p1/1", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 1920, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": Object { + "Collection": {}, + "ContentResource": { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": { "format": "image/png", "height": 360, "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", @@ -666,76 +666,76 @@ Object { "width": 640, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/canvas/p1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Still image from an opera performance at Indiana University", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": "ContentResource", "https://iiif.io/api/cookbook/recipe/0004-canvas-size/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0004-canvas-size/canvas/p1": "Canvas", "https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json": "Manifest", "https://iiif.io/api/cookbook/recipe/0004-canvas-size/page/p1/1": "AnnotationPage", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0004-canvas-size" ("https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0004-canvas-size https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 1080, "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/png", "height": 360, "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", @@ -755,8 +755,8 @@ Object { "width": 1920, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Still image from an opera performance at Indiana University", ], }, @@ -764,24 +764,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0005-image-service" ("https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0005-image-service https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", "type": "Canvas", }, @@ -790,75 +790,75 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 3024, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Canvas with a single IIIF image", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 4032, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": { "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", "profile": "level1", "type": "ImageService3", @@ -868,81 +868,81 @@ Object { "width": 4032, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Picture of Göttingen taken during the 2019 IIIF Conference", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1": "Canvas", "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json": "Manifest", "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1": "AnnotationPage", "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0005-image-service" ("https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0005-image-service https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 3024, "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", "profile": "level1", "type": "ImageService3", @@ -960,8 +960,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Canvas with a single IIIF image", ], }, @@ -969,8 +969,8 @@ Object { "width": 4032, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Picture of Göttingen taken during the 2019 IIIF Conference", ], }, @@ -978,24 +978,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0006-text-language" ("https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0006-text-language/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0006-text-language https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0006-text-language/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/canvas/p1", "type": "Canvas", }, @@ -1004,71 +1004,71 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0006-text-language/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0006-text-language/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0006-text-language/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0006-text-language/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 991, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/page/p1/1", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 1114, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother/full/max/0/default.jpg": { "format": "image/jpeg", "height": 991, "id": "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother", "profile": "level1", "type": "ImageService3", @@ -1078,139 +1078,139 @@ Object { "width": 1114, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/canvas/p1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Whistler's Mother", ], - "fr": Array [ + "fr": [ "La Mère de Whistler", ], }, - "metadata": Array [ - Object { - "label": Object { - "en": Array [ + "metadata": [ + { + "label": { + "en": [ "Creator", ], - "fr": Array [ + "fr": [ "Auteur", ], }, - "value": Object { - "none": Array [ + "value": { + "none": [ "Whistler, James Abbott McNeill", ], }, }, - Object { - "label": Object { - "en": Array [ + { + "label": { + "en": [ "Subject", ], - "fr": Array [ + "fr": [ "Sujet", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "McNeill Anna Matilda, mother of Whistler (1804-1881)", ], - "fr": Array [ + "fr": [ "McNeill Anna Matilda, mère de Whistler (1804-1881)", ], }, }, ], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], - "requiredStatement": Object { - "label": Object { - "en": Array [ + "provider": [], + "rendering": [], + "requiredStatement": { + "label": { + "en": [ "Held By", ], - "fr": Array [ + "fr": [ "Détenu par", ], }, - "value": Object { - "none": Array [ + "value": { + "none": [ "Musée d'Orsay, Paris, France", ], }, }, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], - "summary": Object { - "en": Array [ + "structures": [], + "summary": { + "en": [ "Arrangement in Grey and Black No. 1, also called Portrait of the Artist's Mother.", ], - "fr": Array [ + "fr": [ "Arrangement en gris et noir n°1, also called Portrait de la mère de l'artiste.", ], }, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0006-text-language/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0006-text-language/canvas/p1": "Canvas", "https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json": "Manifest", "https://iiif.io/api/cookbook/recipe/0006-text-language/page/p1/1": "AnnotationPage", "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0006-text-language" ("https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0006-text-language https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 991, "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 991, "id": "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother", "profile": "level1", "type": "ImageService3", @@ -1232,69 +1232,69 @@ Object { "width": 1114, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Whistler's Mother", ], - "fr": Array [ + "fr": [ "La Mère de Whistler", ], }, - "metadata": Array [ - Object { - "label": Object { - "en": Array [ + "metadata": [ + { + "label": { + "en": [ "Creator", ], - "fr": Array [ + "fr": [ "Auteur", ], }, - "value": Object { - "none": Array [ + "value": { + "none": [ "Whistler, James Abbott McNeill", ], }, }, - Object { - "label": Object { - "en": Array [ + { + "label": { + "en": [ "Subject", ], - "fr": Array [ + "fr": [ "Sujet", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "McNeill Anna Matilda, mother of Whistler (1804-1881)", ], - "fr": Array [ + "fr": [ "McNeill Anna Matilda, mère de Whistler (1804-1881)", ], }, }, ], - "requiredStatement": Object { - "label": Object { - "en": Array [ + "requiredStatement": { + "label": { + "en": [ "Held By", ], - "fr": Array [ + "fr": [ "Détenu par", ], }, - "value": Object { - "none": Array [ + "value": { + "none": [ "Musée d'Orsay, Paris, France", ], }, }, - "summary": Object { - "en": Array [ + "summary": { + "en": [ "Arrangement in Grey and Black No. 1, also called Portrait of the Artist's Mother.", ], - "fr": Array [ + "fr": [ "Arrangement en gris et noir n°1, also called Portrait de la mère de l'artiste.", ], }, @@ -1302,24 +1302,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0007-string-formats" ("https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0007-string-formats/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0007-string-formats https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0007-string-formats/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/canvas/p1", "type": "Canvas", }, @@ -1328,71 +1328,71 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0007-string-formats/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0007-string-formats/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0007-string-formats/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0007-string-formats/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 3024, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/page/p1/1", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 4032, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": { "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", "profile": "level1", "type": "ImageService3", @@ -1402,109 +1402,109 @@ Object { "width": 4032, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/canvas/p1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Picture of Göttingen taken during the 2019 IIIF Conference", ], }, - "metadata": Array [ - Object { - "label": Object { - "en": Array [ + "metadata": [ + { + "label": { + "en": [ "Author", ], }, - "value": Object { - "none": Array [ + "value": { + "none": [ "Glen Robson", ], }, }, ], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], - "requiredStatement": Object { - "label": Object { - "en": Array [ + "provider": [], + "rendering": [], + "requiredStatement": { + "label": { + "en": [ "Attribution", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "Glen Robson, IIIF Technical Coordinator. CC BY-SA 3.0 ", ], }, }, "rights": "http://creativecommons.org/licenses/by-sa/3.0/", - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], - "summary": Object { - "en": Array [ + "structures": [], + "summary": { + "en": [ "

Picture taken by the IIIF Technical Coordinator

", ], }, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0007-string-formats/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0007-string-formats/canvas/p1": "Canvas", "https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json": "Manifest", "https://iiif.io/api/cookbook/recipe/0007-string-formats/page/p1/1": "AnnotationPage", "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0007-string-formats" ("https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0007-string-formats https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 3024, "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", "profile": "level1", "type": "ImageService3", @@ -1526,40 +1526,40 @@ Object { "width": 4032, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Picture of Göttingen taken during the 2019 IIIF Conference", ], }, - "metadata": Array [ - Object { - "label": Object { - "en": Array [ + "metadata": [ + { + "label": { + "en": [ "Author", ], }, - "value": Object { - "none": Array [ + "value": { + "none": [ "Glen Robson", ], }, }, ], - "requiredStatement": Object { - "label": Object { - "en": Array [ + "requiredStatement": { + "label": { + "en": [ "Attribution", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "Glen Robson, IIIF Technical Coordinator. CC BY-SA 3.0 ", ], }, }, "rights": "http://creativecommons.org/licenses/by-sa/3.0/", - "summary": Object { - "en": Array [ + "summary": { + "en": [ "

Picture taken by the IIIF Technical Coordinator

", ], }, @@ -1567,24 +1567,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0008-rights" ("https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0008-rights/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0008-rights https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0008-rights/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0008-rights/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0008-rights/canvas/p1", "type": "Canvas", }, @@ -1593,71 +1593,71 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0008-rights/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0008-rights/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0008-rights/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0008-rights/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0008-rights/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0008-rights/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 3024, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0008-rights/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0008-rights/page/p1/1", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 4032, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": { "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", "profile": "level1", "type": "ImageService3", @@ -1667,96 +1667,96 @@ Object { "width": 4032, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0008-rights/canvas/p1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Picture of Göttingen taken during the 2019 IIIF Conference", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], - "requiredStatement": Object { - "label": Object { - "en": Array [ + "provider": [], + "rendering": [], + "requiredStatement": { + "label": { + "en": [ "Attribution", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "Glen Robson, IIIF Technical Coordinator. CC BY-SA 3.0 ", ], }, }, "rights": "http://creativecommons.org/licenses/by-sa/3.0/", - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], - "summary": Object { - "en": Array [ + "structures": [], + "summary": { + "en": [ "

Picture taken by the IIIF Technical Coordinator

", ], }, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0008-rights/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0008-rights/canvas/p1": "Canvas", "https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json": "Manifest", "https://iiif.io/api/cookbook/recipe/0008-rights/page/p1/1": "AnnotationPage", "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0008-rights" ("https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0008-rights https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 3024, "id": "https://iiif.io/api/cookbook/recipe/0008-rights/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0008-rights/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", "profile": "level1", "type": "ImageService3", @@ -1778,26 +1778,26 @@ Object { "width": 4032, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Picture of Göttingen taken during the 2019 IIIF Conference", ], }, - "requiredStatement": Object { - "label": Object { - "en": Array [ + "requiredStatement": { + "label": { + "en": [ "Attribution", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "Glen Robson, IIIF Technical Coordinator. CC BY-SA 3.0 ", ], }, }, "rights": "http://creativecommons.org/licenses/by-sa/3.0/", - "summary": Object { - "en": Array [ + "summary": { + "en": [ "

Picture taken by the IIIF Technical Coordinator

", ], }, @@ -1805,24 +1805,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0009-book-1" ("https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p1", "type": "Canvas", }, @@ -1830,19 +1830,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0002-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0002-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0002-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p2", "type": "Canvas", }, @@ -1850,19 +1850,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0003-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0003-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0003-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p3", "type": "Canvas", }, @@ -1870,19 +1870,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0004-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0004-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0004-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p4", "type": "Canvas", }, @@ -1890,19 +1890,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0005-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0005-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0005-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p5", "type": "Canvas", }, @@ -1911,299 +1911,299 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p2/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p2/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p2/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0002-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p3/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p3/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p3/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0003-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p4/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p4/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p4/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0004-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p5/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p5/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p5/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0005-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4613, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Blank page", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3204, }, - "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p2": Object { + "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4612, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p2/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Frontispiece", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3186, }, - "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p3": Object { + "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4613, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p3/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Title page", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3204, }, - "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p4": Object { + "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p4": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4578, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p4/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Blank page", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3174, }, - "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p5": Object { + "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p5": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4632, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p5/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Bookplate", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3198, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4613, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18", "profile": "level1", "type": "ImageService3", @@ -2212,12 +2212,12 @@ Object { "type": "Image", "width": 3204, }, - "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4612, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19", "profile": "level1", "type": "ImageService3", @@ -2226,12 +2226,12 @@ Object { "type": "Image", "width": 3186, }, - "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4613, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20", "profile": "level1", "type": "ImageService3", @@ -2240,12 +2240,12 @@ Object { "type": "Image", "width": 3204, }, - "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4578, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21", "profile": "level1", "type": "ImageService3", @@ -2254,12 +2254,12 @@ Object { "type": "Image", "width": 3174, }, - "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4632, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22", "profile": "level1", "type": "ImageService3", @@ -2269,67 +2269,67 @@ Object { "width": 3198, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [ + "annotations": [], + "behavior": [ "paged", ], - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p1", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p2", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p3", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p4", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p5", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Simple Manifest - Book", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0002-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0003-image": "Annotation", @@ -2352,35 +2352,35 @@ Object { "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg": "ContentResource", "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0009-book-1" ("https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", - "behavior": Array [ + "behavior": [ "paged", ], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 4613, "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4613, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18", "profile": "level1", "type": "ImageService3", @@ -2398,28 +2398,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Blank page", ], }, "type": "Canvas", "width": 3204, }, - Object { + { "height": 4612, "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p2/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4612, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19", "profile": "level1", "type": "ImageService3", @@ -2437,28 +2437,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Frontispiece", ], }, "type": "Canvas", "width": 3186, }, - Object { + { "height": 4613, "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p3/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4613, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20", "profile": "level1", "type": "ImageService3", @@ -2476,28 +2476,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Title page", ], }, "type": "Canvas", "width": 3204, }, - Object { + { "height": 4578, "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p4/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4578, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21", "profile": "level1", "type": "ImageService3", @@ -2515,28 +2515,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Blank page", ], }, "type": "Canvas", "width": 3174, }, - Object { + { "height": 4632, "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p5/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4632, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22", "profile": "level1", "type": "ImageService3", @@ -2554,8 +2554,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Bookplate", ], }, @@ -2563,8 +2563,8 @@ Object { "width": 3198, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Simple Manifest - Book", ], }, @@ -2572,24 +2572,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0010-book-2-viewing-direction-manifest-rtl" ("https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-manifest-rtl https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1", "type": "Canvas", }, @@ -2597,19 +2597,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0002-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0002-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0002-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2", "type": "Canvas", }, @@ -2617,19 +2617,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0003-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0003-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0003-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3", "type": "Canvas", }, @@ -2637,19 +2637,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0004-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0004-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0004-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4", "type": "Canvas", }, @@ -2657,19 +2657,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0005-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0005-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0005-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5", "type": "Canvas", }, @@ -2678,299 +2678,299 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p2/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p2/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p2/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0002-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p3/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p3/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p3/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0003-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p4/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p4/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p4/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0004-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p5/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p5/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p5/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0005-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4823, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "front cover", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3497, }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2": Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4804, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p2/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "pages 1–2", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 6062, }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3": Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4776, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p3/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "pages 3–4", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 6127, }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4": Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4751, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p4/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "pages 5–6", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 6124, }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5": Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4808, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p5/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "back cover", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3510, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4823, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", "profile": "level1", "type": "ImageService3", @@ -2979,12 +2979,12 @@ Object { "type": "Image", "width": 3497, }, - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4804, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", "profile": "level1", "type": "ImageService3", @@ -2993,12 +2993,12 @@ Object { "type": "Image", "width": 6062, }, - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4776, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", "profile": "level1", "type": "ImageService3", @@ -3007,12 +3007,12 @@ Object { "type": "Image", "width": 6127, }, - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4751, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", "profile": "level1", "type": "ImageService3", @@ -3021,12 +3021,12 @@ Object { "type": "Image", "width": 6124, }, - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4808, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", "profile": "level1", "type": "ImageService3", @@ -3036,69 +3036,69 @@ Object { "width": 3510, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Book with Right-to-Left Viewing Direction", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], - "summary": Object { - "en": Array [ + "structures": [], + "summary": { + "en": [ "Playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", ], }, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "right-to-left", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0002-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0003-image": "Annotation", @@ -3121,32 +3121,32 @@ Object { "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg": "ContentResource", "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0010-book-2-viewing-direction-manifest-rtl" ("https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-manifest-rtl https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json", - "items": Array [ - Object { + "items": [ + { "height": 4823, "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4823, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", "profile": "level1", "type": "ImageService3", @@ -3164,28 +3164,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "front cover", ], }, "type": "Canvas", "width": 3497, }, - Object { + { "height": 4804, "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p2/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4804, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", "profile": "level1", "type": "ImageService3", @@ -3203,28 +3203,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "pages 1–2", ], }, "type": "Canvas", "width": 6062, }, - Object { + { "height": 4776, "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p3/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4776, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", "profile": "level1", "type": "ImageService3", @@ -3242,28 +3242,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "pages 3–4", ], }, "type": "Canvas", "width": 6127, }, - Object { + { "height": 4751, "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p4/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4751, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", "profile": "level1", "type": "ImageService3", @@ -3281,28 +3281,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "pages 5–6", ], }, "type": "Canvas", "width": 6124, }, - Object { + { "height": 4808, "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p5/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4808, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", "profile": "level1", "type": "ImageService3", @@ -3320,8 +3320,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "back cover", ], }, @@ -3329,13 +3329,13 @@ Object { "width": 3510, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Book with Right-to-Left Viewing Direction", ], }, - "summary": Object { - "en": Array [ + "summary": { + "en": [ "Playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", ], }, @@ -3344,24 +3344,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0010-book-2-viewing-direction-manifest-ttb" ("https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-manifest-ttb https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1", "type": "Canvas", }, @@ -3369,19 +3369,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0002-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0002-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0002-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2", "type": "Canvas", }, @@ -3389,19 +3389,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0003-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0003-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0003-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3", "type": "Canvas", }, @@ -3409,19 +3409,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0004-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0004-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0004-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4", "type": "Canvas", }, @@ -3430,243 +3430,243 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v2/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v2/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v2/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0002-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v3/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v3/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v3/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0003-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v4/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v4/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v4/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0004-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 3152, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "image 1", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 2251, }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2": Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 3135, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v2/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "image 2", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 2268, }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3": Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 3135, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v3/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "image 3", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 2274, }, - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4": Object { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 3135, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v4/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "image 4", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 2268, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02/full/max/0/default.jpg": { "format": "image/jpeg", "height": 3152, "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02", "profile": "level1", "type": "ImageService3", @@ -3675,12 +3675,12 @@ Object { "type": "Image", "width": 2251, }, - "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03/full/max/0/default.jpg": { "format": "image/jpeg", "height": 3135, "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03", "profile": "level1", "type": "ImageService3", @@ -3689,12 +3689,12 @@ Object { "type": "Image", "width": 2268, }, - "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04/full/max/0/default.jpg": { "format": "image/jpeg", "height": 3135, "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04", "profile": "level1", "type": "ImageService3", @@ -3703,12 +3703,12 @@ Object { "type": "Image", "width": 2274, }, - "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05/full/max/0/default.jpg": { "format": "image/jpeg", "height": 3135, "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05", "profile": "level1", "type": "ImageService3", @@ -3718,65 +3718,65 @@ Object { "width": 2268, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Diary with Top-to-Bottom Viewing Direction", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], - "summary": Object { - "en": Array [ + "structures": [], + "summary": { + "en": [ "William Lewis Sachtleben was an American long-distance cyclist who rode across Asia from Istanbul to Peking in 1891 to 1892 with Thomas Gaskell Allen Jr., his classmate from Washington University. This was part of a longer journey that began the day after they had graduated from college, when they travelled to New York and on to Liverpool; in all they travelled 15,044 miles by bicycle, 'the longest continuous land journey ever made around the world' as reported in their book Across Asia on a bicycle (1895). Sachtleben documented his travels with photographs and diaries, the latter of which he numbered sequentially. The diary of notebook 'No. 10' covers a portion of their journey through the Armenian area of Turkey from April 12 to May 9 (there is a 2-page reading list at the end). During this time they rode from Ankara (Angora in the diary) to Sivas, where they stayed for ten days while Allen had a bout of typhoid fever, and the first half of a ten-day excursion to Merzifon (Mersovan in the diary), taken by Sachtleben to give Allen additional time to recover.", ], }, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "top-to-bottom", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0002-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0003-image": "Annotation", @@ -3795,32 +3795,32 @@ Object { "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04/full/max/0/default.jpg": "ContentResource", "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0010-book-2-viewing-direction-manifest-ttb" ("https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-manifest-ttb https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json", - "items": Array [ - Object { + "items": [ + { "height": 3152, "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 3152, "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02", "profile": "level1", "type": "ImageService3", @@ -3838,28 +3838,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "image 1", ], }, "type": "Canvas", "width": 2251, }, - Object { + { "height": 3135, "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v2/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 3135, "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03", "profile": "level1", "type": "ImageService3", @@ -3877,28 +3877,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "image 2", ], }, "type": "Canvas", "width": 2268, }, - Object { + { "height": 3135, "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v3/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 3135, "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04", "profile": "level1", "type": "ImageService3", @@ -3916,28 +3916,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "image 3", ], }, "type": "Canvas", "width": 2274, }, - Object { + { "height": 3135, "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v4/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 3135, "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05", "profile": "level1", "type": "ImageService3", @@ -3955,8 +3955,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "image 4", ], }, @@ -3964,13 +3964,13 @@ Object { "width": 2268, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Diary with Top-to-Bottom Viewing Direction", ], }, - "summary": Object { - "en": Array [ + "summary": { + "en": [ "William Lewis Sachtleben was an American long-distance cyclist who rode across Asia from Istanbul to Peking in 1891 to 1892 with Thomas Gaskell Allen Jr., his classmate from Washington University. This was part of a longer journey that began the day after they had graduated from college, when they travelled to New York and on to Liverpool; in all they travelled 15,044 miles by bicycle, 'the longest continuous land journey ever made around the world' as reported in their book Across Asia on a bicycle (1895). Sachtleben documented his travels with photographs and diaries, the latter of which he numbered sequentially. The diary of notebook 'No. 10' covers a portion of their journey through the Armenian area of Turkey from April 12 to May 9 (there is a 2-page reading list at the end). During this time they rode from Ankara (Angora in the diary) to Sivas, where they stayed for ten days while Allen had a bout of typhoid fever, and the first half of a ten-day excursion to Merzifon (Mersovan in the diary), taken by Sachtleben to give Allen additional time to recover.", ], }, @@ -3979,24 +3979,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0011-book-3-behavior-manifest-continuous" ("https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-continuous https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1", "type": "Canvas", }, @@ -4004,19 +4004,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0002-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0002-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0002-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2", "type": "Canvas", }, @@ -4024,19 +4024,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0003-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0003-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0003-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3", "type": "Canvas", }, @@ -4044,19 +4044,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0004-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0004-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0004-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4", "type": "Canvas", }, @@ -4065,243 +4065,243 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s2/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s2/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s2/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0002-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s3/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s3/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s3/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0003-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s4/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s4/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s4/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0004-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 1592, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Section 1 [Recto]", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 11368, }, - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2": Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 1536, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s2/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Section 2 [Recto]", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 11608, }, - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3": Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 1504, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s3/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Section 3 [Recto]", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 10576, }, - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4": Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 1464, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s4/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Section 4 [Recto]", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 2488, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master/full/max/0/default.jpg": { "format": "image/jpeg", "height": 1592, "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master", "profile": "level1", "type": "ImageService3", @@ -4310,12 +4310,12 @@ Object { "type": "Image", "width": 11368, }, - "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master/full/max/0/default.jpg": { "format": "image/jpeg", "height": 1536, "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master", "profile": "level1", "type": "ImageService3", @@ -4324,12 +4324,12 @@ Object { "type": "Image", "width": 11608, }, - "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master/full/max/0/default.jpg": { "format": "image/jpeg", "height": 1504, "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master", "profile": "level1", "type": "ImageService3", @@ -4338,12 +4338,12 @@ Object { "type": "Image", "width": 10576, }, - "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master/full/max/0/default.jpg": { "format": "image/jpeg", "height": 1464, "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master", "profile": "level1", "type": "ImageService3", @@ -4353,63 +4353,63 @@ Object { "width": 2488, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [ + "annotations": [], + "behavior": [ "continuous", ], - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4", "type": "Canvas", }, ], - "label": Object { - "gez": Array [ + "label": { + "gez": [ "Ms. 21 Māzemurā Dāwit, Asmat [መዝሙረ ዳዊት]", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0002-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0003-image": "Annotation", @@ -4428,35 +4428,35 @@ Object { "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master/full/max/0/default.jpg": "ContentResource", "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0011-book-3-behavior-manifest-continuous" ("https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-continuous https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", - "behavior": Array [ + "behavior": [ "continuous", ], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json", - "items": Array [ - Object { + "items": [ + { "height": 1592, "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 1592, "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master", "profile": "level1", "type": "ImageService3", @@ -4474,28 +4474,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Section 1 [Recto]", ], }, "type": "Canvas", "width": 11368, }, - Object { + { "height": 1536, "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s2/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 1536, "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master", "profile": "level1", "type": "ImageService3", @@ -4513,28 +4513,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Section 2 [Recto]", ], }, "type": "Canvas", "width": 11608, }, - Object { + { "height": 1504, "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s3/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 1504, "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master", "profile": "level1", "type": "ImageService3", @@ -4552,28 +4552,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Section 3 [Recto]", ], }, "type": "Canvas", "width": 10576, }, - Object { + { "height": 1464, "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s4/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 1464, "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master", "profile": "level1", "type": "ImageService3", @@ -4591,8 +4591,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Section 4 [Recto]", ], }, @@ -4600,8 +4600,8 @@ Object { "width": 2488, }, ], - "label": Object { - "gez": Array [ + "label": { + "gez": [ "Ms. 21 Māzemurā Dāwit, Asmat [መዝሙረ ዳዊት]", ], }, @@ -4609,24 +4609,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0011-book-3-behavior-manifest-individuals" ("https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-individuals https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1", "type": "Canvas", }, @@ -4634,19 +4634,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0002-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0002-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0002-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2", "type": "Canvas", }, @@ -4654,19 +4654,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0003-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0003-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0003-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3", "type": "Canvas", }, @@ -4674,19 +4674,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0004-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0004-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0004-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4", "type": "Canvas", }, @@ -4695,243 +4695,243 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v2/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v2/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v2/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0002-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v3/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v3/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v3/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0003-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v4/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v4/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v4/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0004-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 2250, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "inside cover; 1r", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3375, }, - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2": Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 2250, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v2/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "2v, 3r", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3375, }, - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3": Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 2250, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v3/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "3v, 4r", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3375, }, - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4": Object { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 2250, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v4/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "4v, 5r", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3375, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master/full/max/0/default.jpg": { "format": "image/jpeg", "height": 2250, "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", "profile": "level1", "type": "ImageService3", @@ -4940,12 +4940,12 @@ Object { "type": "Image", "width": 3375, }, - "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master/full/max/0/default.jpg": { "format": "image/jpeg", "height": 2250, "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master", "profile": "level1", "type": "ImageService3", @@ -4954,12 +4954,12 @@ Object { "type": "Image", "width": 3375, }, - "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master/full/max/0/default.jpg": { "format": "image/jpeg", "height": 2250, "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master", "profile": "level1", "type": "ImageService3", @@ -4968,12 +4968,12 @@ Object { "type": "Image", "width": 3375, }, - "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master/full/max/0/default.jpg": { "format": "image/jpeg", "height": 2250, "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master", "profile": "level1", "type": "ImageService3", @@ -4983,63 +4983,63 @@ Object { "width": 3375, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [ + "annotations": [], + "behavior": [ "individuals", ], - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4", "type": "Canvas", }, ], - "label": Object { - "ca": Array [ + "label": { + "ca": [ "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466.", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0002-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0003-image": "Annotation", @@ -5058,35 +5058,35 @@ Object { "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master/full/max/0/default.jpg": "ContentResource", "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0011-book-3-behavior-manifest-individuals" ("https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-individuals https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", - "behavior": Array [ + "behavior": [ "individuals", ], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json", - "items": Array [ - Object { + "items": [ + { "height": 2250, "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 2250, "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", "profile": "level1", "type": "ImageService3", @@ -5104,28 +5104,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "inside cover; 1r", ], }, "type": "Canvas", "width": 3375, }, - Object { + { "height": 2250, "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v2/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 2250, "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master", "profile": "level1", "type": "ImageService3", @@ -5143,28 +5143,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "2v, 3r", ], }, "type": "Canvas", "width": 3375, }, - Object { + { "height": 2250, "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v3/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 2250, "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master", "profile": "level1", "type": "ImageService3", @@ -5182,28 +5182,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "3v, 4r", ], }, "type": "Canvas", "width": 3375, }, - Object { + { "height": 2250, "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v4/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 2250, "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master", "profile": "level1", "type": "ImageService3", @@ -5221,8 +5221,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "4v, 5r", ], }, @@ -5230,8 +5230,8 @@ Object { "width": 3375, }, ], - "label": Object { - "ca": Array [ + "label": { + "ca": [ "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466.", ], }, @@ -5239,24 +5239,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0013-placeholderCanvas" ("https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0013-placeholderCanvas https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1-image": { + "body": [ + { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder", "type": "Canvas", }, @@ -5264,19 +5264,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1-video": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1-video": { + "body": [ + { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1-video", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti", "type": "Canvas", }, @@ -5285,128 +5285,128 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1-video", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 7278.466, "height": 360, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], - "placeholderCanvas": Object { + "partOf": [], + "placeholderCanvas": { "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder", "type": "Canvas", }, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 640, }, - "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder": Object { + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 360, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 640, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": Object { + "Collection": {}, + "ContentResource": { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": { "format": "image/png", "height": 360, "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", "type": "Image", "width": 640, }, - "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4": Object { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4": { "duration": 7278.466, "format": "video/mp4", "height": 360, @@ -5415,49 +5415,49 @@ Object { "width": 640, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Video recording of Donizetti's _The Elixer of Love_", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": "ContentResource", "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4": "ContentResource", "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti": "Canvas", @@ -5468,28 +5468,28 @@ Object { "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1-video": "Annotation", "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json": "Manifest", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0013-placeholderCanvas" ("https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0013-placeholderCanvas https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json", - "items": Array [ - Object { + "items": [ + { "duration": 7278.466, "height": 360, "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "duration": 7278.466, "format": "video/mp4", "height": 360, @@ -5506,15 +5506,15 @@ Object { "type": "AnnotationPage", }, ], - "placeholderCanvas": Object { + "placeholderCanvas": { "height": 360, "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/png", "height": 360, "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", @@ -5537,8 +5537,8 @@ Object { "width": 640, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Video recording of Donizetti's _The Elixer of Love_", ], }, @@ -5546,24 +5546,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0014-accompanyingcanvas" ("https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0014-accompanyingcanvas https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying", "type": "Canvas", }, @@ -5571,19 +5571,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio": { + "body": [ + { "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", "type": "Canvas", }, @@ -5592,140 +5592,140 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 998, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "First page of score for Gustav Mahler, Symphony No. 3", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 772, }, - "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1": Object { - "accompanyingCanvas": Object { + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1": { + "accompanyingCanvas": { "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying", "type": "Canvas", }, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 1985.024, "height": 0, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Gustav Mahler, Symphony No. 3, CD 1", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 0, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4": Object { + "Collection": {}, + "ContentResource": { + "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4": { "duration": 1985.024, "format": "video/mp4", "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", "type": "Sound", }, - "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg": { "format": "image/jpeg", "height": 998, "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0", "profile": "level1", "type": "ImageService3", @@ -5735,49 +5735,49 @@ Object { "width": 772, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Partial audio recording of Gustav Mahler's _Symphony No. 3_", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4": "ContentResource", "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying": "Canvas", "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image": "Annotation", @@ -5788,33 +5788,33 @@ Object { "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json": "Manifest", "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0014-accompanyingcanvas" ("https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0014-accompanyingcanvas https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json", - "items": Array [ - Object { - "accompanyingCanvas": Object { + "items": [ + { + "accompanyingCanvas": { "height": 998, "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 998, "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0", "profile": "level1", "type": "ImageService3", @@ -5832,8 +5832,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "First page of score for Gustav Mahler, Symphony No. 3", ], }, @@ -5842,12 +5842,12 @@ Object { }, "duration": 1985.024, "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "duration": 1985.024, "format": "video/mp4", "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", @@ -5862,16 +5862,16 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Gustav Mahler, Symphony No. 3, CD 1", ], }, "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Partial audio recording of Gustav Mahler's _Symphony No. 3_", ], }, @@ -5879,24 +5879,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0015-start" ("https://iiif.io/api/cookbook/recipe/0015-start/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1-video": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0015-start https://iiif.io/api/cookbook/recipe/0015-start/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1-video": { + "body": [ + { "id": "https://fixtures.iiif.io/video/indiana/30-minute-clock/medium/30-minute-clock.mp4", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1-video", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", "type": "Canvas", }, @@ -5905,164 +5905,164 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1/page": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1/page": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1/page", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1-video", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 1801.055, "height": 0, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1/page", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 0, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://fixtures.iiif.io/video/indiana/30-minute-clock/medium/30-minute-clock.mp4": Object { + "Collection": {}, + "ContentResource": { + "https://fixtures.iiif.io/video/indiana/30-minute-clock/medium/30-minute-clock.mp4": { "duration": 1801.055, "format": "video/mp4", "id": "https://fixtures.iiif.io/video/indiana/30-minute-clock/medium/30-minute-clock.mp4", "type": "Video", }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0015-start/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0015-start/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0015-start/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Video of a 30-minute digital clock", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], - "requiredStatement": Object { - "label": Object { - "en": Array [ + "provider": [], + "rendering": [], + "requiredStatement": { + "label": { + "en": [ "Attribution", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "The video was created by DrLex1 and was released using a Creative Commons Attribution license", ], }, }, "rights": "http://creativecommons.org/licenses/by/3.0/", - "seeAlso": Array [], - "service": Array [], - "services": Array [], - "start": Object { + "seeAlso": [], + "service": [], + "services": [], + "start": { "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas-start/segment1", - "selector": Object { + "selector": { "t": 120.5, "type": "PointSelector", }, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", "type": "Canvas", }, "type": "SpecificResource", }, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://fixtures.iiif.io/video/indiana/30-minute-clock/medium/30-minute-clock.mp4": "ContentResource", "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1-video": "Annotation", "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1/page": "AnnotationPage", "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1": "Canvas", "https://iiif.io/api/cookbook/recipe/0015-start/manifest.json": "Manifest", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0015-start/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0015-start" ("https://iiif.io/api/cookbook/recipe/0015-start/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0015-start https://iiif.io/api/cookbook/recipe/0015-start/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0015-start/manifest.json", - "items": Array [ - Object { + "items": [ + { "duration": 1801.055, "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1/page", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "duration": 1801.055, "format": "video/mp4", "id": "https://fixtures.iiif.io/video/indiana/30-minute-clock/medium/30-minute-clock.mp4", @@ -6080,27 +6080,27 @@ Object { "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Video of a 30-minute digital clock", ], }, - "requiredStatement": Object { - "label": Object { - "en": Array [ + "requiredStatement": { + "label": { + "en": [ "Attribution", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "The video was created by DrLex1 and was released using a Creative Commons Attribution license", ], }, }, "rights": "http://creativecommons.org/licenses/by/3.0/", - "start": Object { + "start": { "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas-start/segment1", - "selector": Object { + "selector": { "t": 120.5, "type": "PointSelector", }, @@ -6111,24 +6111,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0017-transcription-av" ("https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page/annotation": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0017-transcription-av https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page/annotation": { + "body": [ + { "id": "https://fixtures.iiif.io/video/indiana/volleyball/high/volleyball-for-boys.mp4", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page/annotation", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas", "type": "Canvas", }, @@ -6137,71 +6137,71 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page/annotation", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 662.037, "height": 1080, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [ - Object { + "provider": [], + "rendering": [ + { "id": "https://fixtures.iiif.io/video/indiana/volleyball/volleyball.txt", "type": "ContentResource", }, ], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 1920, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://fixtures.iiif.io/video/indiana/volleyball/high/volleyball-for-boys.mp4": Object { + "Collection": {}, + "ContentResource": { + "https://fixtures.iiif.io/video/indiana/volleyball/high/volleyball-for-boys.mp4": { "duration": 662.037, "format": "video/mp4", "height": 1080, @@ -6209,60 +6209,60 @@ Object { "type": "Video", "width": 1920, }, - "https://fixtures.iiif.io/video/indiana/volleyball/volleyball.txt": Object { + "https://fixtures.iiif.io/video/indiana/volleyball/volleyball.txt": { "format": "text/txt", "id": "https://fixtures.iiif.io/video/indiana/volleyball/volleyball.txt", - "label": Object { - "en": Array [ + "label": { + "en": [ "Transcript", ], }, "type": "Text", }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Volleyball for Boys", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://fixtures.iiif.io/video/indiana/volleyball/high/volleyball-for-boys.mp4": "ContentResource", "https://fixtures.iiif.io/video/indiana/volleyball/volleyball.txt": "ContentResource", "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas": "Canvas", @@ -6270,28 +6270,28 @@ Object { "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page/annotation": "Annotation", "https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json": "Manifest", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0017-transcription-av" ("https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0017-transcription-av https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json", - "items": Array [ - Object { + "items": [ + { "duration": 662.037, "height": 1080, "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "duration": 662.037, "format": "video/mp4", "height": 1080, @@ -6308,12 +6308,12 @@ Object { "type": "AnnotationPage", }, ], - "rendering": Array [ - Object { + "rendering": [ + { "format": "text/txt", "id": "https://fixtures.iiif.io/video/indiana/volleyball/volleyball.txt", - "label": Object { - "en": Array [ + "label": { + "en": [ "Transcript", ], }, @@ -6324,8 +6324,8 @@ Object { "width": 1920, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Volleyball for Boys", ], }, @@ -6333,24 +6333,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0021-tagging" ("https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", "type": "Canvas", }, @@ -6358,23 +6358,23 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag": { + "body": [ + { "id": "vault://605b9d93", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", - "motivation": Array [ + "motivation": [ "tagging", ], - "target": Object { - "selector": Object { + "target": { + "selector": { "type": "FragmentSelector", "value": "xywh=265,661,1260,1239", }, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", "type": "Canvas", }, @@ -6383,98 +6383,98 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [ - Object { + "annotations": [ + { "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1", "type": "AnnotationPage", }, ], - "behavior": Array [], + "behavior": [], "duration": 0, "height": 3024, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 4032, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": { "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", "profile": "level1", "type": "ImageService3", @@ -6483,7 +6483,7 @@ Object { "type": "Image", "width": 4032, }, - "vault://605b9d93": Object { + "vault://605b9d93": { "format": "text/plain", "id": "vault://605b9d93", "language": "de", @@ -6491,49 +6491,49 @@ Object { "value": "Gänseliesel-Brunnen", }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Picture of Göttingen taken during the 2019 IIIF Conference", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag": "Annotation", "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1": "Canvas", @@ -6543,25 +6543,25 @@ Object { "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", "vault://605b9d93": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0021-tagging" ("https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", - "items": Array [ - Object { - "annotations": Array [ - Object { + "items": [ + { + "annotations": [ + { "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "text/plain", "language": "de", "type": "TextualBody", @@ -6578,17 +6578,17 @@ Object { ], "height": 3024, "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", "profile": "level1", "type": "ImageService3", @@ -6610,8 +6610,8 @@ Object { "width": 4032, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Picture of Göttingen taken during the 2019 IIIF Conference", ], }, @@ -6619,24 +6619,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0024-book-4-toc" ("https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", "type": "Canvas", }, @@ -6644,19 +6644,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", "type": "Canvas", }, @@ -6664,19 +6664,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", "type": "Canvas", }, @@ -6684,19 +6684,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", "type": "Canvas", }, @@ -6704,19 +6704,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", "type": "Canvas", }, @@ -6724,19 +6724,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", "type": "Canvas", }, @@ -6745,355 +6745,355 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p6/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p6/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p6/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 2504, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "f. 1r", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 1768, }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 2512, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "f. 1v", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 1792, }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 2456, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "f. 2r", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 1792, }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 2440, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "f. 2v", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 1760, }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 2416, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "f. 3r", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 1776, }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 2416, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p6/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "f. 3v", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 1776, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master/full/max/0/default.jpg": { "format": "image/jpeg", "height": 2504, "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master", "profile": "level1", "type": "ImageService3", @@ -7102,12 +7102,12 @@ Object { "type": "Image", "width": 1768, }, - "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master/full/max/0/default.jpg": { "format": "image/jpeg", "height": 2512, "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master", "profile": "level1", "type": "ImageService3", @@ -7116,12 +7116,12 @@ Object { "type": "Image", "width": 1792, }, - "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master/full/max/0/default.jpg": { "format": "image/jpeg", "height": 2456, "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master", "profile": "level1", "type": "ImageService3", @@ -7130,12 +7130,12 @@ Object { "type": "Image", "width": 1792, }, - "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master/full/max/0/default.jpg": { "format": "image/jpeg", "height": 2440, "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master", "profile": "level1", "type": "ImageService3", @@ -7144,12 +7144,12 @@ Object { "type": "Image", "width": 1760, }, - "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master/full/max/0/default.jpg": { "format": "image/jpeg", "height": 2416, "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master", "profile": "level1", "type": "ImageService3", @@ -7158,12 +7158,12 @@ Object { "type": "Image", "width": 1776, }, - "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master/full/max/0/default.jpg": { "format": "image/jpeg", "height": 2416, "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master", "profile": "level1", "type": "ImageService3", @@ -7173,439 +7173,439 @@ Object { "width": 1776, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Ethiopic Ms 10", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [ - Object { + "structures": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r0", "type": "Range", }, ], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object { - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1": Object { + "Range": { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r0": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r0": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r0", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r1", "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2", "type": "Range", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Table of Contents", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r1": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r1", - "items": Array [ - Object { + "items": [ + { "selector": undefined, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", "type": "Canvas", }, "type": "SpecificResource", }, - Object { + { "selector": undefined, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", "type": "Canvas", }, "type": "SpecificResource", }, ], - "label": Object { - "gez": Array [ + "label": { + "gez": [ "Tabiba Tabiban [ጠቢበ ጠቢባን]", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/1", "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/2", "type": "Range", }, ], - "label": Object { - "gez": Array [ + "label": { + "gez": [ "Arede'et [አርድዕት]", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/1": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/1", - "items": Array [ - Object { + "items": [ + { "selector": undefined, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", "type": "Canvas", }, "type": "SpecificResource", }, - Object { + { "selector": undefined, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", "type": "Canvas", }, "type": "SpecificResource", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Monday", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/2": Object { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/2", - "items": Array [ - Object { + "items": [ + { "selector": undefined, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", "type": "Canvas", }, "type": "SpecificResource", }, - Object { + { "selector": undefined, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", "type": "Canvas", }, "type": "SpecificResource", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Tuesday", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, }, - "Selector": Object {}, - "Service": Object {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image": "Annotation", @@ -7637,32 +7637,32 @@ Object { "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master/full/max/0/default.jpg": "ContentResource", "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0024-book-4-toc" ("https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 2504, "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 2504, "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master", "profile": "level1", "type": "ImageService3", @@ -7680,28 +7680,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "f. 1r", ], }, "type": "Canvas", "width": 1768, }, - Object { + { "height": 2512, "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 2512, "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master", "profile": "level1", "type": "ImageService3", @@ -7719,28 +7719,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "f. 1v", ], }, "type": "Canvas", "width": 1792, }, - Object { + { "height": 2456, "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 2456, "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master", "profile": "level1", "type": "ImageService3", @@ -7758,28 +7758,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "f. 2r", ], }, "type": "Canvas", "width": 1792, }, - Object { + { "height": 2440, "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 2440, "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master", "profile": "level1", "type": "ImageService3", @@ -7797,28 +7797,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "f. 2v", ], }, "type": "Canvas", "width": 1760, }, - Object { + { "height": 2416, "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 2416, "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master", "profile": "level1", "type": "ImageService3", @@ -7836,28 +7836,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "f. 3r", ], }, "type": "Canvas", "width": 1776, }, - Object { + { "height": 2416, "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p6/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 2416, "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master", "profile": "level1", "type": "ImageService3", @@ -7875,8 +7875,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "f. 3v", ], }, @@ -7884,86 +7884,86 @@ Object { "width": 1776, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Ethiopic Ms 10", ], }, - "structures": Array [ - Object { + "structures": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r0", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", "type": "Canvas", }, ], - "label": Object { - "gez": Array [ + "label": { + "gez": [ "Tabiba Tabiban [ጠቢበ ጠቢባን]", ], }, "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Monday", ], }, "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Tuesday", ], }, "type": "Range", }, ], - "label": Object { - "gez": Array [ + "label": { + "gez": [ "Arede'et [አርድዕት]", ], }, "type": "Range", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Table of Contents", ], }, @@ -7974,24 +7974,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0026-toc-opera" ("https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1/annotation/1": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0026-toc-opera https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1/annotation/1": { + "body": [ + { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1/annotation/1", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", "type": "Canvas", }, @@ -8000,66 +8000,66 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1/annotation/1", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 7278.422, "height": 1080, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 1920, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4": Object { + "Collection": {}, + "ContentResource": { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4": { "duration": 7278.422, "format": "video/mp4", "height": 1080, @@ -8068,332 +8068,332 @@ Object { "width": 1920, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "The Elixir of Love", ], - "it": Array [ + "it": [ "L'Elisir D'Amore", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [ - Object { + "structures": [ + { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/1", "type": "Range", }, ], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object { - "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=0,302.05": Object { + "Range": { + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=0,302.05": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=0,302.05", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=302.05,3971.24": Object { + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=302.05,3971.24": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=302.05,3971.24", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=3971.24": Object { + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=3971.24": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=3971.24", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/1": Object { + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/2", "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/5", "type": "Range", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Gaetano Donizetti, L'Elisir D'Amore", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/2": Object { + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/3", "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/4", "type": "Range", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Atto Primo", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/3": Object { + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/3", - "items": Array [ - Object { - "selector": Object { + "items": [ + { + "selector": { "type": "FragmentSelector", "value": "t=0,302.05", }, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", "type": "Canvas", }, "type": "SpecificResource", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Preludio e Coro d'introduzione – Bel conforto al mietitore", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/4": Object { + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/4": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/4", - "items": Array [ - Object { - "selector": Object { + "items": [ + { + "selector": { "type": "FragmentSelector", "value": "t=302.05,3971.24", }, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", "type": "Canvas", }, "type": "SpecificResource", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Remainder of Atto Primo", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/5": Object { + "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/5": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/5", - "items": Array [ - Object { - "selector": Object { + "items": [ + { + "selector": { "type": "FragmentSelector", "value": "t=3971.24", }, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", "type": "Canvas", }, "type": "SpecificResource", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Atto Secondo", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, }, - "Selector": Object {}, - "Service": Object {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4": "ContentResource", "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1": "Canvas", "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=0,302.05": "Canvas", @@ -8408,28 +8408,28 @@ Object { "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/4": "Range", "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/5": "Range", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0026-toc-opera" ("https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0026-toc-opera https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json", - "items": Array [ - Object { + "items": [ + { "duration": 7278.422, "height": 1080, "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "duration": 7278.422, "format": "video/mp4", "height": 1080, @@ -8450,77 +8450,77 @@ Object { "width": 1920, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "The Elixir of Love", ], - "it": Array [ + "it": [ "L'Elisir D'Amore", ], }, - "structures": Array [ - Object { + "structures": [ + { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=0,302.05", "type": "Canvas", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Preludio e Coro d'introduzione – Bel conforto al mietitore", ], }, "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=302.05,3971.24", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Remainder of Atto Primo", ], }, "type": "Range", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Atto Primo", ], }, "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=3971.24", "type": "Canvas", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Atto Secondo", ], }, "type": "Range", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Gaetano Donizetti, L'Elisir D'Amore", ], }, @@ -8531,24 +8531,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0029-metadata-anywhere" ("https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0029-metadata-anywhere https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p1", "type": "Canvas", }, @@ -8556,19 +8556,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0002-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0002-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0002-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p2", "type": "Canvas", }, @@ -8577,157 +8577,157 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p2/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p2/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p2/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0002-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 1271, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Painting under natural light", ], }, - "metadata": Array [ - Object { - "label": Object { - "en": Array [ + "metadata": [ + { + "label": { + "en": [ "Description", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "The scene is the house at Mortlake of Dr John Dee (1527-1608). At the court of Queen Elizabeth I, Dee was revered for the range of his scientific knowledge, which embraced the fields of mathematics, navigation, geography, alchemy/chemistry, medicine and optics. In the painting he is showing the effect of combining two elements, either to cause combustion or to extinguish it. Behind him is his assistant Edward Kelly, wearing a long skullcap to conceal the fact that his ears had been cropped as a punishment for forgery.", ], }, }, ], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 2000, }, - "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p2": Object { + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 1271, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p2/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "X-ray view of painting", ], }, - "metadata": Array [ - Object { - "label": Object { - "en": Array [ + "metadata": [ + { + "label": { + "en": [ "Description", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "The painting originally showed Dee standing in a circle of skulls on the floor, stretching from the floor area in front of the Queen (on the left) to the floor near Edward Kelly (on the right). The skulls were at an early stage painted over, but have since become visible. Another pentimento is visible in the tapestry on the right: shelves containing monstrous animals are visible behind it. The pentimenti were clarified when the painting was X-rayed in 2015.", ], }, }, ], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 2000, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg": { "format": "image/jpeg", "height": 1271, "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural", "profile": "level1", "type": "ImageService3", @@ -8736,12 +8736,12 @@ Object { "type": "Image", "width": 2000, }, - "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg": { "format": "image/jpeg", "height": 1271, "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", "profile": "level1", "type": "ImageService3", @@ -8751,113 +8751,113 @@ Object { "width": 2000, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p1", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p2", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "John Dee performing an experiment before Queen Elizabeth I.", ], }, - "metadata": Array [ - Object { - "label": Object { - "en": Array [ + "metadata": [ + { + "label": { + "en": [ "Creator", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "Glindoni, Henry Gillard, 1852-1913", ], }, }, - Object { - "label": Object { - "en": Array [ + { + "label": { + "en": [ "Date", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "1800-1899", ], }, }, - Object { - "label": Object { - "en": Array [ + { + "label": { + "en": [ "Physical Description", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "1 painting : oil on canvas ; canvas 152 x 244.4 cm", ], }, }, - Object { - "label": Object { - "en": Array [ + { + "label": { + "en": [ "Reference", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "Wellcome Library no. 47369i", ], }, }, ], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], - "requiredStatement": Object { - "label": Object { - "en": Array [ + "provider": [], + "rendering": [], + "requiredStatement": { + "label": { + "en": [ "Attribution", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "Wellcome Collection. Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)", ], }, }, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0002-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p1": "Canvas", @@ -8868,32 +8868,32 @@ Object { "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg": "ContentResource", "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0029-metadata-anywhere" ("https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0029-metadata-anywhere https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 1271, "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 1271, "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural", "profile": "level1", "type": "ImageService3", @@ -8911,20 +8911,20 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Painting under natural light", ], }, - "metadata": Array [ - Object { - "label": Object { - "en": Array [ + "metadata": [ + { + "label": { + "en": [ "Description", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "The scene is the house at Mortlake of Dr John Dee (1527-1608). At the court of Queen Elizabeth I, Dee was revered for the range of his scientific knowledge, which embraced the fields of mathematics, navigation, geography, alchemy/chemistry, medicine and optics. In the painting he is showing the effect of combining two elements, either to cause combustion or to extinguish it. Behind him is his assistant Edward Kelly, wearing a long skullcap to conceal the fact that his ears had been cropped as a punishment for forgery.", ], }, @@ -8933,20 +8933,20 @@ Object { "type": "Canvas", "width": 2000, }, - Object { + { "height": 1271, "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p2/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 1271, "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", "profile": "level1", "type": "ImageService3", @@ -8964,20 +8964,20 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "X-ray view of painting", ], }, - "metadata": Array [ - Object { - "label": Object { - "en": Array [ + "metadata": [ + { + "label": { + "en": [ "Description", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "The painting originally showed Dee standing in a circle of skulls on the floor, stretching from the floor area in front of the Queen (on the left) to the floor near Edward Kelly (on the right). The skulls were at an early stage painted over, but have since become visible. Another pentimento is visible in the tapestry on the right: shelves containing monstrous animals are visible behind it. The pentimenti were clarified when the painting was X-rayed in 2015.", ], }, @@ -8987,69 +8987,69 @@ Object { "width": 2000, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "John Dee performing an experiment before Queen Elizabeth I.", ], }, - "metadata": Array [ - Object { - "label": Object { - "en": Array [ + "metadata": [ + { + "label": { + "en": [ "Creator", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "Glindoni, Henry Gillard, 1852-1913", ], }, }, - Object { - "label": Object { - "en": Array [ + { + "label": { + "en": [ "Date", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "1800-1899", ], }, }, - Object { - "label": Object { - "en": Array [ + { + "label": { + "en": [ "Physical Description", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "1 painting : oil on canvas ; canvas 152 x 244.4 cm", ], }, }, - Object { - "label": Object { - "en": Array [ + { + "label": { + "en": [ "Reference", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "Wellcome Library no. 47369i", ], }, }, ], - "requiredStatement": Object { - "label": Object { - "en": Array [ + "requiredStatement": { + "label": { + "en": [ "Attribution", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "Wellcome Collection. Attribution-NonCommercial 4.0 International (CC BY-NC 4.0)", ], }, @@ -9058,174 +9058,174 @@ Object { } `; -exports[`Cookbook Testing normalize "0030-multi-volume-collection" ("https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object {}, - "AnnotationCollection": Object {}, - "AnnotationPage": Object {}, - "Canvas": Object {}, - "Collection": Object { - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json": Object { +exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-collection https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": {}, + "AnnotationCollection": {}, + "AnnotationPage": {}, + "Canvas": {}, + "Collection": { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [ + "annotations": [], + "behavior": [ "multi-part", ], - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", - "label": Object { - "jp": Array [ + "label": { + "jp": [ "巻 1 [Vol. 1]", ], }, "type": "Manifest", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", - "label": Object { - "jp": Array [ + "label": { + "jp": [ "巻 2 [Vol. 2]", ], }, "type": "Manifest", }, ], - "label": Object { - "jp": Array [ + "label": { + "jp": [ "青楼絵本年中行事 [Seirō ehon nenjū gyōji]", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Collection", "viewingDirection": "left-to-right", }, }, - "ContentResource": Object {}, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json": Object { + "ContentResource": {}, + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", - "items": Array [], - "label": Object { - "jp": Array [ + "items": [], + "label": { + "jp": [ "巻 1 [Vol. 1]", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", - "items": Array [], - "label": Object { - "jp": Array [ + "items": [], + "label": { + "jp": [ "巻 2 [Vol. 2]", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json": "Collection", "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json": "Manifest", "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json": "Manifest", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json", "type": "Collection", }, } `; -exports[`Cookbook Testing normalize "0030-multi-volume-collection" ("https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-collection https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", - "behavior": Array [ + "behavior": [ "multi-part", ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", - "label": Object { - "jp": Array [ + "label": { + "jp": [ "巻 1 [Vol. 1]", ], }, "type": "Manifest", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", - "label": Object { - "jp": Array [ + "label": { + "jp": [ "巻 2 [Vol. 2]", ], }, "type": "Manifest", }, ], - "label": Object { - "jp": Array [ + "label": { + "jp": [ "青楼絵本年中行事 [Seirō ehon nenjū gyōji]", ], }, @@ -9233,24 +9233,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0030-multi-volume-manifest_v1" ("https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", "type": "Canvas", }, @@ -9258,19 +9258,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", "type": "Canvas", }, @@ -9278,19 +9278,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", "type": "Canvas", }, @@ -9298,19 +9298,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", "type": "Canvas", }, @@ -9318,19 +9318,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", "type": "Canvas", }, @@ -9339,299 +9339,299 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 5730, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Front cover", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 4301, }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 5702, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Page spread 1", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 7451, }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 5702, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Page spread 2", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 7451, }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 5702, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Page spread 3", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 7451, }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 5702, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Page spread 4", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 7451, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001/full/max/0/default.jpg": { "format": "image/jpeg", "height": 5730, "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001", "profile": "level1", "type": "ImageService3", @@ -9640,12 +9640,12 @@ Object { "type": "Image", "width": 4301, }, - "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002/full/max/0/default.jpg": { "format": "image/jpeg", "height": 5702, "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002", "profile": "level1", "type": "ImageService3", @@ -9654,12 +9654,12 @@ Object { "type": "Image", "width": 7451, }, - "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003/full/max/0/default.jpg": { "format": "image/jpeg", "height": 5702, "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003", "profile": "level1", "type": "ImageService3", @@ -9668,12 +9668,12 @@ Object { "type": "Image", "width": 7451, }, - "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007/full/max/0/default.jpg": { "format": "image/jpeg", "height": 5702, "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007", "profile": "level1", "type": "ImageService3", @@ -9682,12 +9682,12 @@ Object { "type": "Image", "width": 7451, }, - "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008/full/max/0/default.jpg": { "format": "image/jpeg", "height": 5702, "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008", "profile": "level1", "type": "ImageService3", @@ -9697,67 +9697,67 @@ Object { "width": 7451, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [ + "annotations": [], + "behavior": [ "individuals", ], - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Seirō ehon nenjū gyōji : kan 1 | 青楼絵本年中行事 : 巻 1", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "right-to-left", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image": "Annotation", @@ -9780,35 +9780,35 @@ Object { "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007/full/max/0/default.jpg": "ContentResource", "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0030-multi-volume-manifest_v1" ("https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", - "behavior": Array [ + "behavior": [ "individuals", ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", - "items": Array [ - Object { + "items": [ + { "height": 5730, "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 5730, "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001", "profile": "level1", "type": "ImageService3", @@ -9826,28 +9826,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Front cover", ], }, "type": "Canvas", "width": 4301, }, - Object { + { "height": 5702, "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 5702, "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002", "profile": "level1", "type": "ImageService3", @@ -9865,28 +9865,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Page spread 1", ], }, "type": "Canvas", "width": 7451, }, - Object { + { "height": 5702, "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 5702, "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003", "profile": "level1", "type": "ImageService3", @@ -9904,28 +9904,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Page spread 2", ], }, "type": "Canvas", "width": 7451, }, - Object { + { "height": 5702, "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 5702, "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007", "profile": "level1", "type": "ImageService3", @@ -9943,28 +9943,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Page spread 3", ], }, "type": "Canvas", "width": 7451, }, - Object { + { "height": 5702, "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 5702, "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008", "profile": "level1", "type": "ImageService3", @@ -9982,8 +9982,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Page spread 4", ], }, @@ -9991,8 +9991,8 @@ Object { "width": 7451, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Seirō ehon nenjū gyōji : kan 1 | 青楼絵本年中行事 : 巻 1", ], }, @@ -10001,24 +10001,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0030-multi-volume-manifest_v2" ("https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", "type": "Canvas", }, @@ -10026,19 +10026,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", "type": "Canvas", }, @@ -10046,19 +10046,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", "type": "Canvas", }, @@ -10066,19 +10066,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", "type": "Canvas", }, @@ -10086,19 +10086,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", "type": "Canvas", }, @@ -10107,299 +10107,299 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 5745, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Front cover", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 4114, }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 5745, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Page spread 1", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 7253, }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 5745, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Page spread 2", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 7253, }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 5745, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Page spread 3", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 7253, }, - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5": Object { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 5745, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Page spread 4", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 7253, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001/full/max/0/default.jpg": { "format": "image/jpeg", "height": 5745, "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001", "profile": "level1", "type": "ImageService3", @@ -10408,12 +10408,12 @@ Object { "type": "Image", "width": 4114, }, - "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002/full/max/0/default.jpg": { "format": "image/jpeg", "height": 5745, "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002", "profile": "level1", "type": "ImageService3", @@ -10422,12 +10422,12 @@ Object { "type": "Image", "width": 7253, }, - "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003/full/max/0/default.jpg": { "format": "image/jpeg", "height": 5745, "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003", "profile": "level1", "type": "ImageService3", @@ -10436,12 +10436,12 @@ Object { "type": "Image", "width": 7253, }, - "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004/full/max/0/default.jpg": { "format": "image/jpeg", "height": 5745, "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004", "profile": "level1", "type": "ImageService3", @@ -10450,12 +10450,12 @@ Object { "type": "Image", "width": 7253, }, - "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005/full/max/0/default.jpg": { "format": "image/jpeg", "height": 5745, "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005", "profile": "level1", "type": "ImageService3", @@ -10465,67 +10465,67 @@ Object { "width": 7253, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [ + "annotations": [], + "behavior": [ "individuals", ], - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Seirō ehon nenjū gyōji : kan 2 | 青楼絵本年中行事 : 巻 2", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "right-to-left", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image": "Annotation", @@ -10548,35 +10548,35 @@ Object { "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004/full/max/0/default.jpg": "ContentResource", "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0030-multi-volume-manifest_v2" ("https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", - "behavior": Array [ + "behavior": [ "individuals", ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", - "items": Array [ - Object { + "items": [ + { "height": 5745, "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 5745, "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001", "profile": "level1", "type": "ImageService3", @@ -10594,28 +10594,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Front cover", ], }, "type": "Canvas", "width": 4114, }, - Object { + { "height": 5745, "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 5745, "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002", "profile": "level1", "type": "ImageService3", @@ -10633,28 +10633,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Page spread 1", ], }, "type": "Canvas", "width": 7253, }, - Object { + { "height": 5745, "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 5745, "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003", "profile": "level1", "type": "ImageService3", @@ -10672,28 +10672,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Page spread 2", ], }, "type": "Canvas", "width": 7253, }, - Object { + { "height": 5745, "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 5745, "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004", "profile": "level1", "type": "ImageService3", @@ -10711,28 +10711,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Page spread 3", ], }, "type": "Canvas", "width": 7253, }, - Object { + { "height": 5745, "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 5745, "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005", "profile": "level1", "type": "ImageService3", @@ -10750,8 +10750,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Page spread 4", ], }, @@ -10759,8 +10759,8 @@ Object { "width": 7253, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Seirō ehon nenjū gyōji : kan 2 | 青楼絵本年中行事 : 巻 2", ], }, @@ -10769,24 +10769,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0031-bound-multivolume" ("https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", "type": "Canvas", }, @@ -10794,19 +10794,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0002-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0002-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0002-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", "type": "Canvas", }, @@ -10814,19 +10814,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0003-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0003-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0003-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", "type": "Canvas", }, @@ -10834,19 +10834,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0004-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0004-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0004-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", "type": "Canvas", }, @@ -10854,19 +10854,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0005-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0005-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2/max/full/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0005-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", "type": "Canvas", }, @@ -10874,19 +10874,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0006-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0006-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso/max/full/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0006-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", "type": "Canvas", }, @@ -10895,355 +10895,355 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p2/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p2/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p2/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0002-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p3/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p3/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p3/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0003-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p4/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p4/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p4/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0004-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p5/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p5/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p5/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0005-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p6/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p6/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p6/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0006-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 7230, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Front cover", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 5428, }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 7230, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p2/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Inside front cover", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 5428, }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 7230, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p3/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Vol. 1 title page", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 5428, }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 7230, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p4/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Vol. 1 title page (verso)", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 5428, }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 7230, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p5/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Vol. 2 title page", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 5428, }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 7230, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p6/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Vol. 2 title page (verso)", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 5428, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover/full/max/0/default.jpg": { "format": "image/jpeg", "height": 7230, "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover", "profile": "level1", "type": "ImageService3", @@ -11252,12 +11252,12 @@ Object { "type": "Image", "width": 5428, }, - "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover/full/max/0/default.jpg": { "format": "image/jpeg", "height": 7230, "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover", "profile": "level1", "type": "ImageService3", @@ -11266,12 +11266,12 @@ Object { "type": "Image", "width": 5428, }, - "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1/full/max/0/default.jpg": { "format": "image/jpeg", "height": 7230, "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1", "profile": "level1", "type": "ImageService3", @@ -11280,12 +11280,12 @@ Object { "type": "Image", "width": 5428, }, - "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso/full/max/0/default.jpg": { "format": "image/jpeg", "height": 7230, "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso", "profile": "level1", "type": "ImageService3", @@ -11294,12 +11294,12 @@ Object { "type": "Image", "width": 5428, }, - "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2/max/full/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2/max/full/0/default.jpg": { "format": "image/jpeg", "height": 7230, "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2/max/full/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2", "profile": "level1", "type": "ImageService3", @@ -11308,12 +11308,12 @@ Object { "type": "Image", "width": 5428, }, - "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso/max/full/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso/max/full/0/default.jpg": { "format": "image/jpeg", "height": 7230, "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso/max/full/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso", "profile": "level1", "type": "ImageService3", @@ -11323,405 +11323,405 @@ Object { "width": 5428, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", "type": "Canvas", }, ], - "label": Object { - "de": Array [ + "label": { + "de": [ "Gottesdienstliche Ceremonien, Oder H. Kirchen-Gebräuche Und Religions-Pflichten Der Christen", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [ - Object { + "structures": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r0", "type": "Range", }, ], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object { - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1": Object { + "Range": { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r0": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r0": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r0", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r1", "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r2", "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r3", "type": "Range", }, ], - "label": Object { - "de": Array [ + "label": { + "de": [ "Gottesdienstliche Ceremonien, Oder H. Kirchen-Gebräuche Und Religions-Pflichten Der Christen", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r1": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r1", - "items": Array [ - Object { + "items": [ + { "selector": undefined, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", "type": "Canvas", }, "type": "SpecificResource", }, - Object { + { "selector": undefined, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", "type": "Canvas", }, "type": "SpecificResource", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Front Matter", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r2": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r2", - "items": Array [ - Object { + "items": [ + { "selector": undefined, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", "type": "Canvas", }, "type": "SpecificResource", }, - Object { + { "selector": undefined, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", "type": "Canvas", }, "type": "SpecificResource", }, ], - "label": Object { - "de": Array [ + "label": { + "de": [ "Erste Ausgabe. Begreift die Ceremonien der Lutheraner von der Augspurgischen Confession, der Reformirten, der Holländischen u. a. Kirchen", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r3": Object { + "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r3", - "items": Array [ - Object { + "items": [ + { "selector": undefined, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", "type": "Canvas", }, "type": "SpecificResource", }, - Object { + { "selector": undefined, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", "type": "Canvas", }, "type": "SpecificResource", }, ], - "label": Object { - "de": Array [ + "label": { + "de": [ "Zweyte Ausgabe. Begreift die Ceremonien der Engl. hohen Kirche : Der Quacker, der Anabaptisten, der Adamiten, der Flagellanten, der Frey-Maurer, der Rhinsbürger...", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, }, - "Selector": Object {}, - "Service": Object {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0002-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0003-image": "Annotation", @@ -11752,32 +11752,32 @@ Object { "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2/max/full/0/default.jpg": "ContentResource", "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso/max/full/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0031-bound-multivolume" ("https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 7230, "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 7230, "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover", "profile": "level1", "type": "ImageService3", @@ -11795,28 +11795,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Front cover", ], }, "type": "Canvas", "width": 5428, }, - Object { + { "height": 7230, "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p2/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 7230, "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover", "profile": "level1", "type": "ImageService3", @@ -11834,28 +11834,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Inside front cover", ], }, "type": "Canvas", "width": 5428, }, - Object { + { "height": 7230, "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p3/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 7230, "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1", "profile": "level1", "type": "ImageService3", @@ -11873,28 +11873,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Vol. 1 title page", ], }, "type": "Canvas", "width": 5428, }, - Object { + { "height": 7230, "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p4/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 7230, "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso", "profile": "level1", "type": "ImageService3", @@ -11912,28 +11912,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Vol. 1 title page (verso)", ], }, "type": "Canvas", "width": 5428, }, - Object { + { "height": 7230, "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p5/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 7230, "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2/max/full/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2", "profile": "level1", "type": "ImageService3", @@ -11951,28 +11951,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Vol. 2 title page", ], }, "type": "Canvas", "width": 5428, }, - Object { + { "height": 7230, "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p6/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 7230, "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso/max/full/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso", "profile": "level1", "type": "ImageService3", @@ -11990,8 +11990,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Vol. 2 title page (verso)", ], }, @@ -11999,75 +11999,75 @@ Object { "width": 5428, }, ], - "label": Object { - "de": Array [ + "label": { + "de": [ "Gottesdienstliche Ceremonien, Oder H. Kirchen-Gebräuche Und Religions-Pflichten Der Christen", ], }, - "structures": Array [ - Object { + "structures": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r0", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Front Matter", ], }, "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", "type": "Canvas", }, ], - "label": Object { - "de": Array [ + "label": { + "de": [ "Erste Ausgabe. Begreift die Ceremonien der Lutheraner von der Augspurgischen Confession, der Reformirten, der Holländischen u. a. Kirchen", ], }, "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", "type": "Canvas", }, ], - "label": Object { - "de": Array [ + "label": { + "de": [ "Zweyte Ausgabe. Begreift die Ceremonien der Engl. hohen Kirche : Der Quacker, der Anabaptisten, der Adamiten, der Flagellanten, der Frey-Maurer, der Rhinsbürger...", ], }, "type": "Range", }, ], - "label": Object { - "de": Array [ + "label": { + "de": [ "Gottesdienstliche Ceremonien, Oder H. Kirchen-Gebräuche Und Religions-Pflichten Der Christen", ], }, @@ -12078,24 +12078,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0033-choice" ("https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0033-choice/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0033-choice https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0033-choice/annotation/p0001-image": { + "body": [ + { "id": "vault://04f77c53", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0033-choice/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0033-choice/canvas/p1", "type": "Canvas", }, @@ -12104,76 +12104,76 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0033-choice/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0033-choice/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0033-choice/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0033-choice/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0033-choice/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0033-choice/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 1271, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0033-choice/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0033-choice/page/p1/1", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 2000, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg": { "format": "image/jpeg", "height": 1271, "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", - "label": Object { - "en": Array [ + "label": { + "en": [ "Natural Light", ], }, - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural", "profile": "level1", "type": "ImageService3", @@ -12182,17 +12182,17 @@ Object { "type": "Image", "width": 2000, }, - "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg": { "format": "image/jpeg", "height": 1271, "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg", - "label": Object { - "en": Array [ + "label": { + "en": [ "X-Ray", ], }, - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", "profile": "level1", "type": "ImageService3", @@ -12201,14 +12201,14 @@ Object { "type": "Image", "width": 2000, }, - "vault://04f77c53": Object { + "vault://04f77c53": { "id": "vault://04f77c53", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", "type": "ContentResource", }, - Object { + { "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg", "type": "ContentResource", }, @@ -12216,49 +12216,49 @@ Object { "type": "Choice", }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0033-choice/canvas/p1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "John Dee performing an experiment before Queen Elizabeth I.", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0033-choice/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0033-choice/canvas/p1": "Canvas", "https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json": "Manifest", @@ -12267,39 +12267,39 @@ Object { "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg": "ContentResource", "vault://04f77c53": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0033-choice" ("https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0033-choice https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 1271, "id": "https://iiif.io/api/cookbook/recipe/0033-choice/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0033-choice/page/p1/1", - "items": Array [ - Object { - "body": Object { - "items": Array [ - Object { + "items": [ + { + "body": { + "items": [ + { "format": "image/jpeg", "height": 1271, "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", - "label": Object { - "en": Array [ + "label": { + "en": [ "Natural Light", ], }, - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural", "profile": "level1", "type": "ImageService3", @@ -12308,17 +12308,17 @@ Object { "type": "Image", "width": 2000, }, - Object { + { "format": "image/jpeg", "height": 1271, "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg", - "label": Object { - "en": Array [ + "label": { + "en": [ "X-Ray", ], }, - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", "profile": "level1", "type": "ImageService3", @@ -12343,8 +12343,8 @@ Object { "width": 2000, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "John Dee performing an experiment before Queen Elizabeth I.", ], }, @@ -12352,24 +12352,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0035-foldouts" ("https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/1", "type": "Canvas", }, @@ -12377,19 +12377,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0002-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0002-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0002-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/2", "type": "Canvas", }, @@ -12397,19 +12397,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0003-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0003-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0003-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/3", "type": "Canvas", }, @@ -12417,19 +12417,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0004-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0004-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0004-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/4", "type": "Canvas", }, @@ -12437,19 +12437,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0005-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0005-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0005-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/5", "type": "Canvas", }, @@ -12457,19 +12457,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0006-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0006-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0006-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/6", "type": "Canvas", }, @@ -12477,19 +12477,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0007-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0007-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0007-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/7", "type": "Canvas", }, @@ -12497,19 +12497,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0008-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0008-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0008-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/8", "type": "Canvas", }, @@ -12517,19 +12517,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0009-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0009-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0009-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/9", "type": "Canvas", }, @@ -12538,525 +12538,525 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/2/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/2/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/2/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0002-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/3/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/3/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/3/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0003-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/4/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/4/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/4/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0004-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/5/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/5/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/5/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0005-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/6/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/6/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/6/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0006-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/7/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/7/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/7/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0007-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/8/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/8/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/8/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0008-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/9/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/9/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/9/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0009-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4429, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Front cover", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 2533, }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/2": Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4315, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/2/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Inside front cover", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 2490, }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/3": Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4278, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/3/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Foldout, folded", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 2197, }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/4": Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/4": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [ + "annotations": [], + "behavior": [ "non-paged", ], "duration": 0, "height": 1968, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/4/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Foldout, unfolded", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3688, }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/5": Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/5": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 1968, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/5/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Foldout, folded (recto)", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3688, }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/6": Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/6": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4315, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/6", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/6/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Title page", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 2490, }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/7": Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/7": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4315, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/7", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/7/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Back of title page", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 2490, }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/8": Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/8": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4315, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/8", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/8/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Inside back cover", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 2490, }, - "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/9": Object { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/9": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4315, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/9", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/9/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Back cover", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 2490, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4429, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover", "profile": "level1", "type": "ImageService3", @@ -13065,12 +13065,12 @@ Object { "type": "Image", "width": 2533, }, - "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4315, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover", "profile": "level1", "type": "ImageService3", @@ -13079,12 +13079,12 @@ Object { "type": "Image", "width": 2490, }, - "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4278, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded", "profile": "level1", "type": "ImageService3", @@ -13093,12 +13093,12 @@ Object { "type": "Image", "width": 2197, }, - "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated/full/max/0/default.jpg": { "format": "image/jpeg", "height": 1968, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated", "profile": "level1", "type": "ImageService3", @@ -13107,12 +13107,12 @@ Object { "type": "Image", "width": 3688, }, - "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout/full/max/0/default.jpg": { "format": "image/jpeg", "height": 1968, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout", "profile": "level1", "type": "ImageService3", @@ -13121,12 +13121,12 @@ Object { "type": "Image", "width": 3688, }, - "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4315, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage", "profile": "level1", "type": "ImageService3", @@ -13135,12 +13135,12 @@ Object { "type": "Image", "width": 2490, }, - "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4315, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto", "profile": "level1", "type": "ImageService3", @@ -13149,12 +13149,12 @@ Object { "type": "Image", "width": 2490, }, - "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4315, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover", "profile": "level1", "type": "ImageService3", @@ -13163,12 +13163,12 @@ Object { "type": "Image", "width": 2490, }, - "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4315, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover", "profile": "level1", "type": "ImageService3", @@ -13178,83 +13178,83 @@ Object { "width": 2490, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [ + "annotations": [], + "behavior": [ "paged", ], - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/1", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/2", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/3", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/4", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/5", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/6", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/7", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/8", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/9", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Outlines of geology being the substance of a course of lectures delivered in the Theatre of the Royal Institution in the year 1816", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0002-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0003-image": "Annotation", @@ -13293,35 +13293,35 @@ Object { "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover/full/max/0/default.jpg": "ContentResource", "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0035-foldouts" ("https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", - "behavior": Array [ + "behavior": [ "paged", ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 4429, "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4429, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover", "profile": "level1", "type": "ImageService3", @@ -13339,28 +13339,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Front cover", ], }, "type": "Canvas", "width": 2533, }, - Object { + { "height": 4315, "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/2/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4315, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover", "profile": "level1", "type": "ImageService3", @@ -13378,28 +13378,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Inside front cover", ], }, "type": "Canvas", "width": 2490, }, - Object { + { "height": 4278, "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/3/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4278, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded", "profile": "level1", "type": "ImageService3", @@ -13417,31 +13417,31 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Foldout, folded", ], }, "type": "Canvas", "width": 2197, }, - Object { - "behavior": Array [ + { + "behavior": [ "non-paged", ], "height": 1968, "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/4/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 1968, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout", "profile": "level1", "type": "ImageService3", @@ -13459,28 +13459,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Foldout, unfolded", ], }, "type": "Canvas", "width": 3688, }, - Object { + { "height": 1968, "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/5/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 1968, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated", "profile": "level1", "type": "ImageService3", @@ -13498,28 +13498,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Foldout, folded (recto)", ], }, "type": "Canvas", "width": 3688, }, - Object { + { "height": 4315, "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/6", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/6/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4315, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage", "profile": "level1", "type": "ImageService3", @@ -13537,28 +13537,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Title page", ], }, "type": "Canvas", "width": 2490, }, - Object { + { "height": 4315, "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/7", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/7/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4315, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto", "profile": "level1", "type": "ImageService3", @@ -13576,28 +13576,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Back of title page", ], }, "type": "Canvas", "width": 2490, }, - Object { + { "height": 4315, "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/8", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/8/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4315, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover", "profile": "level1", "type": "ImageService3", @@ -13615,28 +13615,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Inside back cover", ], }, "type": "Canvas", "width": 2490, }, - Object { + { "height": 4315, "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/9", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/9/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4315, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover", "profile": "level1", "type": "ImageService3", @@ -13654,8 +13654,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Back cover", ], }, @@ -13663,8 +13663,8 @@ Object { "width": 2490, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Outlines of geology being the substance of a course of lectures delivered in the Theatre of the Royal Institution in the year 1816", ], }, @@ -13672,24 +13672,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0036-composition-from-multiple-images" ("https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0036-composition-from-multiple-images https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1", "type": "Canvas", }, @@ -13697,23 +13697,23 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0002-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0002-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature/full/max/0/native.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0002-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "selector": Object { + "target": { + "selector": { "type": "FragmentSelector", "value": "xywh=3949,994,1091,1232", }, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1", "type": "Canvas", }, @@ -13722,79 +13722,79 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0001-image", "type": "Annotation", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0002-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 5412, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/page/p1/1", "type": "AnnotationPage", }, ], - "label": Object { - "none": Array [ + "label": { + "none": [ "f. 033v-034r [Chilpéric Ier tue Galswinthe, se remarie et est assassiné]", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 7216, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux/full/max/0/default.jpg": { "format": "image/jpeg", "height": 5412, "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux", "profile": "level1", "type": "ImageService3", @@ -13803,17 +13803,17 @@ Object { "type": "Image", "width": 7216, }, - "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature/full/max/0/native.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature/full/max/0/native.jpg": { "format": "image/jpeg", "height": 2414, "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature/full/max/0/native.jpg", - "label": Object { - "fr": Array [ + "label": { + "fr": [ "Miniature [Chilpéric Ier tue Galswinthe, se remarie et est assassiné]", ], }, - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature", "profile": "level2", "type": "ImageService1", @@ -13823,49 +13823,49 @@ Object { "width": 2138, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Folio from Grandes Chroniques de France, ca. 1460", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0002-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1": "Canvas", @@ -13874,32 +13874,32 @@ Object { "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux/full/max/0/default.jpg": "ContentResource", "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature/full/max/0/native.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0036-composition-from-multiple-images" ("https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0036-composition-from-multiple-images https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 5412, "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 5412, "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux", "profile": "level1", "type": "ImageService3", @@ -13913,18 +13913,18 @@ Object { "target": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1", "type": "Annotation", }, - Object { - "body": Object { + { + "body": { "format": "image/jpeg", "height": 2414, "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature/full/max/0/native.jpg", - "label": Object { - "fr": Array [ + "label": { + "fr": [ "Miniature [Chilpéric Ier tue Galswinthe, se remarie et est assassiné]", ], }, - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature", "profile": "level2", "type": "ImageService1", @@ -13942,8 +13942,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "none": Array [ + "label": { + "none": [ "f. 033v-034r [Chilpéric Ier tue Galswinthe, se remarie et est assassiné]", ], }, @@ -13951,8 +13951,8 @@ Object { "width": 7216, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Folio from Grandes Chroniques de France, ca. 1460", ], }, @@ -13960,28 +13960,28 @@ Object { } `; -exports[`Cookbook Testing normalize "0040-image-rotation-service-manifest-css" ("https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manifest-css https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image": { + "body": [ + { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "stylesheet": Object { + "stylesheet": { "type": "CssStylesheet", "value": ".rotated { transform-origin: center; transform: rotate(90deg); }", }, - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", "type": "Canvas", }, @@ -13990,77 +13990,77 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 1523, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "inside cover; 1r", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 2105, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1": { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1", - "source": Object { + "source": { "format": "image/jpeg", "height": 2105, "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", "profile": "level1", "type": "ImageService3", @@ -14072,83 +14072,83 @@ Object { "type": "SpecificResource", }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", "type": "Canvas", }, ], - "label": Object { - "ca": Array [ + "label": { + "ca": [ "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466.", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1": "ContentResource", "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1": "Canvas", "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json": "Manifest", "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1": "AnnotationPage", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0040-image-rotation-service-manifest-css" ("https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manifest-css https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json", - "items": Array [ - Object { + "items": [ + { "height": 1523, "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1", - "source": Object { + "source": { "format": "image/jpeg", "height": 2105, "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", "profile": "level1", "type": "ImageService3", @@ -14161,7 +14161,7 @@ Object { }, "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", "motivation": "painting", - "stylesheet": Object { + "stylesheet": { "type": "CssStylesheet", "value": ".rotated { transform-origin: center; transform: rotate(90deg); }", }, @@ -14172,8 +14172,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "inside cover; 1r", ], }, @@ -14181,8 +14181,8 @@ Object { "width": 2105, }, ], - "label": Object { - "ca": Array [ + "label": { + "ca": [ "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466.", ], }, @@ -14190,24 +14190,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0040-image-rotation-service-manifest-service" ("https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manifest-service https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image": { + "body": [ + { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", "type": "Canvas", }, @@ -14216,82 +14216,82 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 1523, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "inside cover; 1r", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 2105, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image": { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image", - "selector": Object { + "selector": { "@context": "http://iiif.io/api/annex/openannotation/context.json", "rotation": "90", "type": "iiif:ImageApiSelector", }, - "source": Object { + "source": { "format": "image/jpeg", "height": 2105, "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1", "profile": "level1", "type": "ImageService3", @@ -14303,88 +14303,88 @@ Object { "type": "SpecificResource", }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", "type": "Canvas", }, ], - "label": Object { - "ca": Array [ + "label": { + "ca": [ "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466.", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image": "ContentResource", "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1": "Canvas", "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ": "Manifest", "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1": "AnnotationPage", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0040-image-rotation-service-manifest-service" ("https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manifest-service https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ", - "items": Array [ - Object { + "items": [ + { "height": 1523, "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image", - "selector": Object { + "selector": { "@context": "http://iiif.io/api/annex/openannotation/context.json", "rotation": "90", "type": "iiif:ImageApiSelector", }, - "source": Object { + "source": { "format": "image/jpeg", "height": 2105, "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1", "profile": "level1", "type": "ImageService3", @@ -14404,8 +14404,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "inside cover; 1r", ], }, @@ -14413,8 +14413,8 @@ Object { "width": 2105, }, ], - "label": Object { - "ca": Array [ + "label": { + "ca": [ "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466.", ], }, @@ -14422,24 +14422,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0046-rendering" ("https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p1", "type": "Canvas", }, @@ -14447,19 +14447,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0002-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0002-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0002-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p2", "type": "Canvas", }, @@ -14467,19 +14467,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0003-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0003-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0003-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p3", "type": "Canvas", }, @@ -14487,19 +14487,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0004-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0004-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0004-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p4", "type": "Canvas", }, @@ -14507,19 +14507,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0005-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0005-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0005-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p5", "type": "Canvas", }, @@ -14528,309 +14528,309 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p2/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p2/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p2/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0002-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p3/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p3/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p3/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0003-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p4/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p4/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p4/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0004-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p5/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p5/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p5/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0005-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4823, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "front cover", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3497, }, - "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p2": Object { + "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4804, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p2/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "pages 1–2", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 6062, }, - "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p3": Object { + "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4776, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p3/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "pages 3–4", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 6127, }, - "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p4": Object { + "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p4": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4751, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p4/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "pages 5–6", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 6124, }, - "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p5": Object { + "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p5": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4808, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p5/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "back cover", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3510, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://fixtures.iiif.io/other/UCLA/kabuki_ezukushi_rtl.pdf": Object { + "Collection": {}, + "ContentResource": { + "https://fixtures.iiif.io/other/UCLA/kabuki_ezukushi_rtl.pdf": { "format": "application/pdf", "id": "https://fixtures.iiif.io/other/UCLA/kabuki_ezukushi_rtl.pdf", - "label": Object { - "en": Array [ + "label": { + "en": [ "PDF version", ], }, "type": "Text", }, - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4823, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", "profile": "level1", "type": "ImageService3", @@ -14839,12 +14839,12 @@ Object { "type": "Image", "width": 3497, }, - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4804, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", "profile": "level1", "type": "ImageService3", @@ -14853,12 +14853,12 @@ Object { "type": "Image", "width": 6062, }, - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4776, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", "profile": "level1", "type": "ImageService3", @@ -14867,12 +14867,12 @@ Object { "type": "Image", "width": 6127, }, - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4751, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", "profile": "level1", "type": "ImageService3", @@ -14881,12 +14881,12 @@ Object { "type": "Image", "width": 6124, }, - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4808, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", "profile": "level1", "type": "ImageService3", @@ -14896,74 +14896,74 @@ Object { "width": 3510, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p1", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p2", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p3", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p4", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p5", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Alternative Representations Through Rendering", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [ - Object { + "provider": [], + "rendering": [ + { "id": "https://fixtures.iiif.io/other/UCLA/kabuki_ezukushi_rtl.pdf", "type": "ContentResource", }, ], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], - "summary": Object { - "en": Array [ + "structures": [], + "summary": { + "en": [ "Playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", ], }, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "right-to-left", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://fixtures.iiif.io/other/UCLA/kabuki_ezukushi_rtl.pdf": "ContentResource", "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0002-image": "Annotation", @@ -14987,32 +14987,32 @@ Object { "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg": "ContentResource", "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0046-rendering" ("https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 4823, "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4823, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", "profile": "level1", "type": "ImageService3", @@ -15030,28 +15030,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "front cover", ], }, "type": "Canvas", "width": 3497, }, - Object { + { "height": 4804, "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p2/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4804, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", "profile": "level1", "type": "ImageService3", @@ -15069,28 +15069,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "pages 1–2", ], }, "type": "Canvas", "width": 6062, }, - Object { + { "height": 4776, "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p3/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4776, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", "profile": "level1", "type": "ImageService3", @@ -15108,28 +15108,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "pages 3–4", ], }, "type": "Canvas", "width": 6127, }, - Object { + { "height": 4751, "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p4/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4751, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", "profile": "level1", "type": "ImageService3", @@ -15147,28 +15147,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "pages 5–6", ], }, "type": "Canvas", "width": 6124, }, - Object { + { "height": 4808, "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p5/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4808, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", "profile": "level1", "type": "ImageService3", @@ -15186,8 +15186,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "back cover", ], }, @@ -15195,25 +15195,25 @@ Object { "width": 3510, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Alternative Representations Through Rendering", ], }, - "rendering": Array [ - Object { + "rendering": [ + { "format": "application/pdf", "id": "https://fixtures.iiif.io/other/UCLA/kabuki_ezukushi_rtl.pdf", - "label": Object { - "en": Array [ + "label": { + "en": [ "PDF version", ], }, "type": "Text", }, ], - "summary": Object { - "en": Array [ + "summary": { + "en": [ "Playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", ], }, @@ -15222,24 +15222,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0053-seeAlso" ("https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p1", "type": "Canvas", }, @@ -15247,19 +15247,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0002-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0002-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0002-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p2", "type": "Canvas", }, @@ -15267,19 +15267,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0003-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0003-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0003-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p3", "type": "Canvas", }, @@ -15287,19 +15287,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0004-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0004-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0004-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p4", "type": "Canvas", }, @@ -15307,19 +15307,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0005-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0005-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0005-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p5", "type": "Canvas", }, @@ -15328,310 +15328,310 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p2/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p2/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p2/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0002-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p3/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p3/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p3/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0003-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p4/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p4/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p4/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0004-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p5/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p5/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p5/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0005-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4823, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "front cover", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3497, }, - "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p2": Object { + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4804, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p2/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "pages 1–2", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 6062, }, - "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p3": Object { + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4776, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p3/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "pages 3–4", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 6127, }, - "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p4": Object { + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p4": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4751, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p4/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "pages 5–6", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 6124, }, - "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p5": Object { + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p5": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4808, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p5/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "back cover", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3510, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://fixtures.iiif.io/other/UCLA/ezukushi_mods.xml": Object { + "Collection": {}, + "ContentResource": { + "https://fixtures.iiif.io/other/UCLA/ezukushi_mods.xml": { "format": "text/xml", "id": "https://fixtures.iiif.io/other/UCLA/ezukushi_mods.xml", - "label": Object { - "en": Array [ + "label": { + "en": [ "MODS metadata", ], }, "profile": "http://www.loc.gov/mods/v3", "type": "Dataset", }, - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4823, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", "profile": "level1", "type": "ImageService3", @@ -15640,12 +15640,12 @@ Object { "type": "Image", "width": 3497, }, - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4804, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", "profile": "level1", "type": "ImageService3", @@ -15654,12 +15654,12 @@ Object { "type": "Image", "width": 6062, }, - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4776, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", "profile": "level1", "type": "ImageService3", @@ -15668,12 +15668,12 @@ Object { "type": "Image", "width": 6127, }, - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4751, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", "profile": "level1", "type": "ImageService3", @@ -15682,12 +15682,12 @@ Object { "type": "Image", "width": 6124, }, - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4808, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", "profile": "level1", "type": "ImageService3", @@ -15697,74 +15697,74 @@ Object { "width": 3510, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p1", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p2", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p3", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p4", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p5", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Linking to Structured Metadata", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [ - Object { + "seeAlso": [ + { "id": "https://fixtures.iiif.io/other/UCLA/ezukushi_mods.xml", "type": "ContentResource", }, ], - "service": Array [], - "services": Array [], + "service": [], + "services": [], "start": null, - "structures": Array [], - "summary": Object { - "en": Array [ + "structures": [], + "summary": { + "en": [ "Playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", ], }, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "right-to-left", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://fixtures.iiif.io/other/UCLA/ezukushi_mods.xml": "ContentResource", "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0002-image": "Annotation", @@ -15788,32 +15788,32 @@ Object { "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg": "ContentResource", "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0053-seeAlso" ("https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 4823, "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4823, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", "profile": "level1", "type": "ImageService3", @@ -15831,28 +15831,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "front cover", ], }, "type": "Canvas", "width": 3497, }, - Object { + { "height": 4804, "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p2/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4804, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", "profile": "level1", "type": "ImageService3", @@ -15870,28 +15870,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "pages 1–2", ], }, "type": "Canvas", "width": 6062, }, - Object { + { "height": 4776, "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p3/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4776, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", "profile": "level1", "type": "ImageService3", @@ -15909,28 +15909,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "pages 3–4", ], }, "type": "Canvas", "width": 6127, }, - Object { + { "height": 4751, "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p4/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4751, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", "profile": "level1", "type": "ImageService3", @@ -15948,28 +15948,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "pages 5–6", ], }, "type": "Canvas", "width": 6124, }, - Object { + { "height": 4808, "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p5/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4808, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", "profile": "level1", "type": "ImageService3", @@ -15987,8 +15987,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "back cover", ], }, @@ -15996,17 +15996,17 @@ Object { "width": 3510, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Linking to Structured Metadata", ], }, - "seeAlso": Array [ - Object { + "seeAlso": [ + { "format": "text/xml", "id": "https://fixtures.iiif.io/other/UCLA/ezukushi_mods.xml", - "label": Object { - "en": Array [ + "label": { + "en": [ "MODS metadata", ], }, @@ -16014,8 +16014,8 @@ Object { "type": "Dataset", }, ], - "summary": Object { - "en": Array [ + "summary": { + "en": [ "Playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", ], }, @@ -16024,28 +16024,28 @@ Object { } `; -exports[`Cookbook Testing normalize "0064-opera-one-canvas" ("https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/1": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0064-opera-one-canvas https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/1": { + "body": [ + { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/1", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "selector": Object { + "target": { + "selector": { "type": "FragmentSelector", "value": "t=0,3971.24", }, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", "type": "Canvas", }, @@ -16053,23 +16053,23 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/2": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/2": { + "body": [ + { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/2", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "selector": Object { + "target": { + "selector": { "type": "FragmentSelector", "value": "t=3971.24", }, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", "type": "Canvas", }, @@ -16078,64 +16078,64 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/1", "type": "Annotation", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/2", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 7278.422, "height": 1080, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [ - Object { + "thumbnail": [ + { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", "type": "ContentResource", }, @@ -16144,13 +16144,13 @@ Object { "width": 1920, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": Object { + "Collection": {}, + "ContentResource": { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", "type": "Image", }, - "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4": Object { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4": { "duration": 3971.24, "format": "video/mp4", "height": 1080, @@ -16158,7 +16158,7 @@ Object { "type": "Video", "width": 1920, }, - "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4": Object { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4": { "duration": 3307.22, "format": "video/mp4", "height": 1080, @@ -16167,357 +16167,357 @@ Object { "width": 1920, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "The Elixir of Love", ], - "it": Array [ + "it": [ "L'Elisir D'Amore", ], }, - "metadata": Array [ - Object { - "label": Object { - "en": Array [ + "metadata": [ + { + "label": { + "en": [ "Date Issued", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "2019", ], }, }, - Object { - "label": Object { - "en": Array [ + { + "label": { + "en": [ "Publisher", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "Indiana University Jacobs School of Music", ], }, }, ], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [ - Object { + "structures": [ + { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/1", "type": "Range", }, ], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object { - "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=0,302.05": Object { + "Range": { + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=0,302.05": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=0,302.05", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=302.05,3971.24": Object { + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=302.05,3971.24": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=302.05,3971.24", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=3971.24,7278.422": Object { + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=3971.24,7278.422": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=3971.24,7278.422", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/1": Object { + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/2", "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/5", "type": "Range", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Gaetano Donizetti, L'Elisir D'Amore", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/2": Object { + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/3", "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/4", "type": "Range", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Atto Primo", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/3": Object { + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/3", - "items": Array [ - Object { - "selector": Object { + "items": [ + { + "selector": { "type": "FragmentSelector", "value": "t=0,302.05", }, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", "type": "Canvas", }, "type": "SpecificResource", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Preludio e Coro d'introduzione – Bel conforto al mietitore", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/4": Object { + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/4": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/4", - "items": Array [ - Object { - "selector": Object { + "items": [ + { + "selector": { "type": "FragmentSelector", "value": "t=302.05,3971.24", }, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", "type": "Canvas", }, "type": "SpecificResource", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Remainder of Atto Primo", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/5": Object { + "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/5": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/5", - "items": Array [ - Object { - "selector": Object { + "items": [ + { + "selector": { "type": "FragmentSelector", "value": "t=3971.24,7278.422", }, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", "type": "Canvas", }, "type": "SpecificResource", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Atto Secondo", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, }, - "Selector": Object {}, - "Service": Object {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": "ContentResource", "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4": "ContentResource", "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4": "ContentResource", @@ -16535,28 +16535,28 @@ Object { "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/4": "Range", "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/5": "Range", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0064-opera-one-canvas" ("https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0064-opera-one-canvas https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json", - "items": Array [ - Object { + "items": [ + { "duration": 7278.422, "height": 1080, "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "duration": 3971.24, "format": "video/mp4", "height": 1080, @@ -16569,8 +16569,8 @@ Object { "target": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=0,3971.24", "type": "Annotation", }, - Object { - "body": Object { + { + "body": { "duration": 3307.22, "format": "video/mp4", "height": 1080, @@ -16587,8 +16587,8 @@ Object { "type": "AnnotationPage", }, ], - "thumbnail": Array [ - Object { + "thumbnail": [ + { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", "type": "Image", }, @@ -16597,103 +16597,103 @@ Object { "width": 1920, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "The Elixir of Love", ], - "it": Array [ + "it": [ "L'Elisir D'Amore", ], }, - "metadata": Array [ - Object { - "label": Object { - "en": Array [ + "metadata": [ + { + "label": { + "en": [ "Date Issued", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "2019", ], }, }, - Object { - "label": Object { - "en": Array [ + { + "label": { + "en": [ "Publisher", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "Indiana University Jacobs School of Music", ], }, }, ], - "structures": Array [ - Object { + "structures": [ + { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=0,302.05", "type": "Canvas", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Preludio e Coro d'introduzione – Bel conforto al mietitore", ], }, "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=302.05,3971.24", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Remainder of Atto Primo", ], }, "type": "Range", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Atto Primo", ], }, "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=3971.24,7278.422", "type": "Canvas", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Atto Secondo", ], }, "type": "Range", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Gaetano Donizetti, L'Elisir D'Amore", ], }, @@ -16704,24 +16704,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0065-opera-multiple-canvases" ("https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1/annotation/1": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0065-opera-multiple-canvases https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1/annotation/1": { + "body": [ + { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1/annotation/1", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1", "type": "Canvas", }, @@ -16729,19 +16729,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1/annotation/1": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1/annotation/1": { + "body": [ + { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1/annotation/1", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2", "type": "Canvas", }, @@ -16750,86 +16750,86 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1/annotation/1", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1/annotation/1", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 3971.24, "height": 1080, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Atto Primo", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [ - Object { + "thumbnail": [ + { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", "type": "ContentResource", }, @@ -16837,38 +16837,38 @@ Object { "type": "Canvas", "width": 1920, }, - "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2": Object { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 3307.22, "height": 1080, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Atto Secondo", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [ - Object { + "thumbnail": [ + { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act2-thumbnail.png", "type": "ContentResource", }, @@ -16877,17 +16877,17 @@ Object { "width": 1920, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": Object { + "Collection": {}, + "ContentResource": { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", "type": "Image", }, - "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act2-thumbnail.png": Object { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act2-thumbnail.png": { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act2-thumbnail.png", "type": "Image", }, - "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4": Object { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4": { "duration": 3971.24, "format": "video/mp4", "height": 1080, @@ -16895,7 +16895,7 @@ Object { "type": "Video", "width": 1920, }, - "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4": Object { + "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4": { "duration": 3307.22, "format": "video/mp4", "height": 1080, @@ -16904,361 +16904,361 @@ Object { "width": 1920, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "The Elixir of Love", ], - "it": Array [ + "it": [ "L'Elisir D'Amore", ], }, - "metadata": Array [ - Object { - "label": Object { - "en": Array [ + "metadata": [ + { + "label": { + "en": [ "Date Issued", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "2019", ], }, }, - Object { - "label": Object { - "en": Array [ + { + "label": { + "en": [ "Publisher", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "Indiana University Jacobs School of Music", ], }, }, ], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [ - Object { + "structures": [ + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/1", "type": "Range", }, ], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object { - "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=0,302.05": Object { + "Range": { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=0,302.05": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=0,302.05", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=302.05,3971.24": Object { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=302.05,3971.24": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=302.05,3971.24", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2#t=0,3307.22": Object { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2#t=0,3307.22": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2#t=0,3307.22", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/1": Object { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/2", "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/5", "type": "Range", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Gaetano Donizetti, L'Elisir D'Amore", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/2": Object { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/3", "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/4", "type": "Range", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Atto Primo", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/3": Object { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/3", - "items": Array [ - Object { - "selector": Object { + "items": [ + { + "selector": { "type": "FragmentSelector", "value": "t=0,302.05", }, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1", "type": "Canvas", }, "type": "SpecificResource", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Preludio e Coro d'introduzione – Bel conforto al mietitore", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/4": Object { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/4": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/4", - "items": Array [ - Object { - "selector": Object { + "items": [ + { + "selector": { "type": "FragmentSelector", "value": "t=302.05,3971.24", }, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1", "type": "Canvas", }, "type": "SpecificResource", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Remainder of Atto Primo", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/5": Object { + "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/5": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/5", - "items": Array [ - Object { - "selector": Object { + "items": [ + { + "selector": { "type": "FragmentSelector", "value": "t=0,3307.22", }, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2", "type": "Canvas", }, "type": "SpecificResource", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Atto Secondo", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "start": null, "summary": null, "supplementary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Range", "viewingDirection": "left-to-right", }, }, - "Selector": Object {}, - "Service": Object {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": "ContentResource", "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act2-thumbnail.png": "ContentResource", "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4": "ContentResource", @@ -17279,28 +17279,28 @@ Object { "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/4": "Range", "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/5": "Range", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0065-opera-multiple-canvases" ("https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0065-opera-multiple-canvases https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json", - "items": Array [ - Object { + "items": [ + { "duration": 3971.24, "height": 1080, "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "duration": 3971.24, "format": "video/mp4", "height": 1080, @@ -17317,13 +17317,13 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Atto Primo", ], }, - "thumbnail": Array [ - Object { + "thumbnail": [ + { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", "type": "Image", }, @@ -17331,16 +17331,16 @@ Object { "type": "Canvas", "width": 1920, }, - Object { + { "duration": 3307.22, "height": 1080, "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "duration": 3307.22, "format": "video/mp4", "height": 1080, @@ -17357,13 +17357,13 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Atto Secondo", ], }, - "thumbnail": Array [ - Object { + "thumbnail": [ + { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act2-thumbnail.png", "type": "Image", }, @@ -17372,103 +17372,103 @@ Object { "width": 1920, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "The Elixir of Love", ], - "it": Array [ + "it": [ "L'Elisir D'Amore", ], }, - "metadata": Array [ - Object { - "label": Object { - "en": Array [ + "metadata": [ + { + "label": { + "en": [ "Date Issued", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "2019", ], }, }, - Object { - "label": Object { - "en": Array [ + { + "label": { + "en": [ "Publisher", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "Indiana University Jacobs School of Music", ], }, }, ], - "structures": Array [ - Object { + "structures": [ + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=0,302.05", "type": "Canvas", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Preludio e Coro d'introduzione – Bel conforto al mietitore", ], }, "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=302.05,3971.24", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Remainder of Atto Primo", ], }, "type": "Range", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Atto Primo", ], }, "type": "Range", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2#t=0,3307.22", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Atto Secondo", ], }, "type": "Range", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Gaetano Donizetti, L'Elisir D'Amore", ], }, @@ -17479,24 +17479,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0074-multiple-language-captions" ("https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page/annotation": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0074-multiple-language-captions https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page/annotation": { + "body": [ + { "id": "https://fixtures.iiif.io/video/europeana/Per_voi_signore_Modelli_francesi.mp4", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page/annotation", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas", "type": "Canvas", }, @@ -17504,19 +17504,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/subtitles_captions-files-vtt": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/subtitles_captions-files-vtt": { + "body": [ + { "id": "vault://30199866", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/subtitles_captions-files-vtt", - "motivation": Array [ + "motivation": [ "supplementing", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas", "type": "Canvas", }, @@ -17525,93 +17525,93 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page/annotation", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/anno/page/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/anno/page/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/anno/page/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/subtitles_captions-files-vtt", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas": { "accompanyingCanvas": null, - "annotations": Array [ - Object { + "annotations": [ + { "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/anno/page/1", "type": "AnnotationPage", }, ], - "behavior": Array [], + "behavior": [], "duration": 65, "height": 384, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 288, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://fixtures.iiif.io/video/europeana/Per_voi_signore_Modelli_francesi.mp4": Object { + "Collection": {}, + "ContentResource": { + "https://fixtures.iiif.io/video/europeana/Per_voi_signore_Modelli_francesi.mp4": { "duration": 65, "format": "video/mp4", "height": 384, @@ -17619,36 +17619,36 @@ Object { "type": "Video", "width": 288, }, - "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_en.vtt": Object { + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_en.vtt": { "format": "text/vtt", "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_en.vtt", - "label": Object { - "en": Array [ + "label": { + "en": [ "Captions in WebVTT format", ], }, "language": "en", "type": "Text", }, - "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_it.vtt": Object { + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_it.vtt": { "format": "text/vtt", "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_it.vtt", - "label": Object { - "it": Array [ + "label": { + "it": [ "Sottotitoli in formato WebVTT", ], }, "language": "it", "type": "Text", }, - "vault://30199866": Object { + "vault://30199866": { "id": "vault://30199866", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_en.vtt", "type": "ContentResource", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_it.vtt", "type": "ContentResource", }, @@ -17656,63 +17656,63 @@ Object { "type": "Choice", }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "For ladies. French models", ], - "it": Array [ + "it": [ "Per voi signore. Modelli francesi", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], - "requiredStatement": Object { - "label": Object { - "en": Array [ + "provider": [], + "rendering": [], + "requiredStatement": { + "label": { + "en": [ "Rights", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "All rights reserved Cinecittà Luce spa", ], }, }, "rights": "http://rightsstatements.org/vocab/InC/1.0/", - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://fixtures.iiif.io/video/europeana/Per_voi_signore_Modelli_francesi.mp4": "ContentResource", "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_en.vtt": "ContentResource", "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_it.vtt": "ContentResource", @@ -17724,42 +17724,42 @@ Object { "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/subtitles_captions-files-vtt": "Annotation", "vault://30199866": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0074-multiple-language-captions" ("https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0074-multiple-language-captions https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json", - "items": Array [ - Object { - "annotations": Array [ - Object { + "items": [ + { + "annotations": [ + { "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/anno/page/1", - "items": Array [ - Object { - "body": Object { - "items": Array [ - Object { + "items": [ + { + "body": { + "items": [ + { "format": "text/vtt", "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_en.vtt", - "label": Object { - "en": Array [ + "label": { + "en": [ "Captions in WebVTT format", ], }, "language": "en", "type": "Text", }, - Object { + { "format": "text/vtt", "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_it.vtt", - "label": Object { - "it": Array [ + "label": { + "it": [ "Sottotitoli in formato WebVTT", ], }, @@ -17781,12 +17781,12 @@ Object { "duration": 65, "height": 384, "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "duration": 65, "format": "video/mp4", "height": 384, @@ -17807,22 +17807,22 @@ Object { "width": 288, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "For ladies. French models", ], - "it": Array [ + "it": [ "Per voi signore. Modelli francesi", ], }, - "requiredStatement": Object { - "label": Object { - "en": Array [ + "requiredStatement": { + "label": { + "en": [ "Rights", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "All rights reserved Cinecittà Luce spa", ], }, @@ -17832,24 +17832,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0117-add-image-thumbnail" ("https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/annotation/p0000-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0117-add-image-thumbnail https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/annotation/p0000-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/annotation/p0000-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/canvas/p0", "type": "Canvas", }, @@ -17858,80 +17858,80 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/page/p0/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/page/p0/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/page/p0/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/annotation/p0000-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/canvas/p0": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/canvas/p0": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 5312, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/canvas/p0", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/page/p0/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "front cover with color bar", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 4520, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg": { "format": "image/jpeg", "height": 300, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", - "service": Array [ - Object { - "extraFormats": Array [ + "service": [ + { + "extraFormats": [ "jpg", "png", ], - "extraQualities": Array [ + "extraQualities": [ "default", "color", "gray", @@ -17939,10 +17939,10 @@ Object { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", "profile": "level1", "protocol": "http://iiif.io/api/image", - "tiles": Array [ - Object { + "tiles": [ + { "height": 512, - "scaleFactors": Array [ + "scaleFactors": [ 1, 2, 4, @@ -17957,12 +17957,12 @@ Object { "type": "Image", "width": 219, }, - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg": { "format": "image/jpeg", "height": 5312, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", "profile": "level1", "type": "ImageService3", @@ -17972,45 +17972,45 @@ Object { "width": 4520, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/canvas/p0", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Playbill Cover with Manifest Thumbnail", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], - "summary": Object { - "en": Array [ + "structures": [], + "summary": { + "en": [ "Cover of playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", ], }, - "thumbnail": Array [ - Object { + "thumbnail": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", "type": "ContentResource", }, @@ -18019,11 +18019,11 @@ Object { "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/annotation/p0000-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/canvas/p0": "Canvas", "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json": "Manifest", @@ -18031,32 +18031,32 @@ Object { "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg": "ContentResource", "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0117-add-image-thumbnail" ("https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0117-add-image-thumbnail https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 5312, "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/canvas/p0", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/page/p0/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 5312, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", "profile": "level1", "type": "ImageService3", @@ -18074,8 +18074,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "front cover with color bar", ], }, @@ -18083,28 +18083,28 @@ Object { "width": 4520, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Playbill Cover with Manifest Thumbnail", ], }, - "summary": Object { - "en": Array [ + "summary": { + "en": [ "Cover of playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", ], }, - "thumbnail": Array [ - Object { + "thumbnail": [ + { "format": "image/jpeg", "height": 300, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", - "service": Array [ - Object { - "extraFormats": Array [ + "service": [ + { + "extraFormats": [ "jpg", "png", ], - "extraQualities": Array [ + "extraQualities": [ "default", "color", "gray", @@ -18112,10 +18112,10 @@ Object { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", "profile": "level1", "protocol": "http://iiif.io/api/image", - "tiles": Array [ - Object { + "tiles": [ + { "height": 512, - "scaleFactors": Array [ + "scaleFactors": [ 1, 2, 4, @@ -18135,24 +18135,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0118_multivalue" ("https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://example.org/iiif/text-language/canvas1/page1/annotation1": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://example.org/iiif/text-language/canvas1/page1/annotation1": { + "body": [ + { "id": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg", "type": "ContentResource", }, ], "id": "https://example.org/iiif/text-language/canvas1/page1/annotation1", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://example.org/iiif/text-language/canvas1", "type": "Canvas", }, @@ -18161,103 +18161,103 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://example.org/iiif/text-language/canvas1/page1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://example.org/iiif/text-language/canvas1/page1": { + "behavior": [], + "homepage": [], "id": "https://example.org/iiif/text-language/canvas1/page1", - "items": Array [ - Object { + "items": [ + { "id": "https://example.org/iiif/text-language/canvas1/page1/annotation1", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://example.org/iiif/text-language/canvas1": Object { + "Canvas": { + "https://example.org/iiif/text-language/canvas1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 991, - "homepage": Array [], + "homepage": [], "id": "https://example.org/iiif/text-language/canvas1", - "items": Array [ - Object { + "items": [ + { "id": "https://example.org/iiif/text-language/canvas1/page1", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 1114, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg": { "format": "image/jpeg", "id": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg", "type": "Image", }, }, - "Manifest": Object { - "https://example.org/iiif/text-language/manifest": Object { + "Manifest": { + "https://example.org/iiif/text-language/manifest": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://example.org/iiif/text-language/manifest", - "items": Array [ - Object { + "items": [ + { "id": "https://example.org/iiif/text-language/canvas1", "type": "Canvas", }, ], - "label": Object { - "fr": Array [ + "label": { + "fr": [ "Arrangement en gris et noir no 1", ], }, - "metadata": Array [ - Object { - "label": Object { - "en": Array [ + "metadata": [ + { + "label": { + "en": [ "Alternative titles", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "Whistler's Mother", "Arrangement in Grey and Black No. 1", ], - "fr": Array [ + "fr": [ "Portrait de la mère de l'artiste", "La Mère de Whistler", ], @@ -18265,59 +18265,59 @@ Object { }, ], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], - "summary": Object { - "en": Array [ + "structures": [], + "summary": { + "en": [ "A painting in oil on canvas created by the American-born painter James McNeill Whistler, in 1871.", ], }, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://example.org/iiif/text-language/canvas1": "Canvas", "https://example.org/iiif/text-language/canvas1/page1": "AnnotationPage", "https://example.org/iiif/text-language/canvas1/page1/annotation1": "Annotation", "https://example.org/iiif/text-language/manifest": "Manifest", "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://example.org/iiif/text-language/manifest", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0118_multivalue" ("https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://example.org/iiif/text-language/manifest", - "items": Array [ - Object { + "items": [ + { "height": 991, "id": "https://example.org/iiif/text-language/canvas1", - "items": Array [ - Object { + "items": [ + { "id": "https://example.org/iiif/text-language/canvas1/page1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "id": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg", "type": "Image", @@ -18335,32 +18335,32 @@ Object { "width": 1114, }, ], - "label": Object { - "fr": Array [ + "label": { + "fr": [ "Arrangement en gris et noir no 1", ], }, - "metadata": Array [ - Object { - "label": Object { - "en": Array [ + "metadata": [ + { + "label": { + "en": [ "Alternative titles", ], }, - "value": Object { - "en": Array [ + "value": { + "en": [ "Whistler's Mother", "Arrangement in Grey and Black No. 1", ], - "fr": Array [ + "fr": [ "Portrait de la mère de l'artiste", "La Mère de Whistler", ], }, }, ], - "summary": Object { - "en": Array [ + "summary": { + "en": [ "A painting in oil on canvas created by the American-born painter James McNeill Whistler, in 1871.", ], }, @@ -18368,29 +18368,29 @@ Object { } `; -exports[`Cookbook Testing normalize "0139-geolocate-canvas-fragment" ("https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/content.json": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0139-geolocate-canvas-fragment https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/content.json": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/content.json", - "label": Object { - "en": Array [ + "label": { + "en": [ "Pamphlet Cover", ], }, - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json", "type": "Canvas", }, @@ -18398,28 +18398,28 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geoAnno.json": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geoAnno.json": { + "body": [ + { "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geo.json", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geoAnno.json", - "label": Object { - "en": Array [ + "label": { + "en": [ "Annotation containing GeoJSON-LD coordinates that place the map depiction onto a Leaflet web map.", ], }, - "motivation": Array [ + "motivation": [ "tagging", ], - "target": Object { - "selector": Object { + "target": { + "selector": { "type": "FragmentSelector", "value": "xywh=920,3600,1510,3000", }, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json", "type": "Canvas", }, @@ -18428,113 +18428,113 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/contentPage.json": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/contentPage.json": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/contentPage.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/content.json", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/supplementingPage.json": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/supplementingPage.json": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/supplementingPage.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geoAnno.json", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json": { "accompanyingCanvas": null, - "annotations": Array [ - Object { + "annotations": [ + { "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/supplementingPage.json", "type": "AnnotationPage", }, ], - "behavior": Array [], + "behavior": [], "duration": 0, "height": 7072, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/contentPage.json", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Chesapeake and Ohio Canal Pamphlet", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 5212, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geo.json": Object { - "geometry": Object { - "coordinates": Array [ - Array [ - Array [ + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geo.json": { + "geometry": { + "coordinates": [ + [ + [ -77.097847, 38.901359, ], - Array [ + [ -77.02694, 38.901359, ], - Array [ + [ -77.02694, 39.03404, ], - Array [ + [ -77.097847, 39.03404, ], @@ -18543,21 +18543,21 @@ Object { "type": "Polygon", }, "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geo.json", - "properties": Object { - "label": Object { - "en": Array [ + "properties": { + "label": { + "en": [ "Targeted Map from Chesapeake and Ohio Canal Pamphlet", ], }, }, "type": "Feature", }, - "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": { "format": "image/jpeg", "height": 7072, "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", "profile": "level1", "type": "ImageService3", @@ -18567,56 +18567,56 @@ Object { "width": 5212, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json": Object { - "@context": Array [ + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json": { + "@context": [ "http://geojson.org/geojson-ld/geojson-context.jsonld", "http://iiif.io/api/presentation/3/context.json", ], "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Recipe Manifest for #139", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], - "summary": Object { - "en": Array [ + "structures": [], + "summary": { + "en": [ "A IIIF Presentation API 3.0 Manifest containing a GeoJSON-LD Web Annotation which targets a Canvas fragment.", ], }, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json": "Canvas", "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/content.json": "Annotation", "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/contentPage.json": "AnnotationPage", @@ -18626,44 +18626,44 @@ Object { "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/supplementingPage.json": "AnnotationPage", "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0139-geolocate-canvas-fragment" ("https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json") 2`] = ` -Object { - "@context": Array [ +exports[`Cookbook > Testing normalize %p (%p) 0139-geolocate-canvas-fragment https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json 2`] = ` +{ + "@context": [ "http://geojson.org/geojson-ld/geojson-context.jsonld", "http://iiif.io/api/presentation/3/context.json", ], "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json", - "items": Array [ - Object { - "annotations": Array [ - Object { + "items": [ + { + "annotations": [ + { "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/supplementingPage.json", - "items": Array [ - Object { - "body": Object { - "geometry": Object { - "coordinates": Array [ - Array [ - Array [ + "items": [ + { + "body": { + "geometry": { + "coordinates": [ + [ + [ -77.097847, 38.901359, ], - Array [ + [ -77.02694, 38.901359, ], - Array [ + [ -77.02694, 39.03404, ], - Array [ + [ -77.097847, 39.03404, ], @@ -18672,9 +18672,9 @@ Object { "type": "Polygon", }, "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geo.json", - "properties": Object { - "label": Object { - "en": Array [ + "properties": { + "label": { + "en": [ "Targeted Map from Chesapeake and Ohio Canal Pamphlet", ], }, @@ -18682,8 +18682,8 @@ Object { "type": "Feature", }, "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geoAnno.json", - "label": Object { - "en": Array [ + "label": { + "en": [ "Annotation containing GeoJSON-LD coordinates that place the map depiction onto a Leaflet web map.", ], }, @@ -18697,17 +18697,17 @@ Object { ], "height": 7072, "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/contentPage.json", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 7072, "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", "profile": "level1", "type": "ImageService3", @@ -18717,8 +18717,8 @@ Object { "width": 5212, }, "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/content.json", - "label": Object { - "en": Array [ + "label": { + "en": [ "Pamphlet Cover", ], }, @@ -18730,8 +18730,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Chesapeake and Ohio Canal Pamphlet", ], }, @@ -18739,13 +18739,13 @@ Object { "width": 5212, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Recipe Manifest for #139", ], }, - "summary": Object { - "en": Array [ + "summary": { + "en": [ "A IIIF Presentation API 3.0 Manifest containing a GeoJSON-LD Web Annotation which targets a Canvas fragment.", ], }, @@ -18753,24 +18753,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0154-geo-extension" ("https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno/1": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0154-geo-extension https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno/1": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno/1", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/canvas/1", "type": "Canvas", }, @@ -18779,75 +18779,75 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno-page/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno-page/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno-page/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno/1", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0154-geo-extension/canvas/1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0154-geo-extension/canvas/1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 3000, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/canvas/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno-page/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Front of Bronze", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 2315, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg": { "format": "image/jpg", "height": 3000, "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", "profile": "level1", "type": "ImageService3", @@ -18857,47 +18857,47 @@ Object { "width": 2315, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json": Object { - "@context": Array [ + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json": { + "@context": [ "http://iiif.io/api/extension/navplace/context.json", "http://iiif.io/api/presentation/3/context.json", ], "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/canvas/1", "type": "Canvas", }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Bronzo Laocoonte e i suoi figli", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "navPlace": Object { - "features": Array [ - Object { - "geometry": Object { - "coordinates": Array [ + "navPlace": { + "features": [ + { + "geometry": { + "coordinates": [ -118.4745559, 34.0776376, ], "type": "Point", }, "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/feature/1", - "properties": Object { - "label": Object { - "en": Array [ + "properties": { + "label": { + "en": [ "The Laocoön Bronze", ], - "it": Array [ + "it": [ "Bronzo Laocoonte e i suoi figli", ], }, @@ -18908,63 +18908,63 @@ Object { "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/feature-collection/1", "type": "FeatureCollection", }, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno-page/1": "AnnotationPage", "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno/1": "Annotation", "https://iiif.io/api/cookbook/recipe/0154-geo-extension/canvas/1": "Canvas", "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json": "Manifest", "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0154-geo-extension" ("https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json") 2`] = ` -Object { - "@context": Array [ +exports[`Cookbook > Testing normalize %p (%p) 0154-geo-extension https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json 2`] = ` +{ + "@context": [ "http://iiif.io/api/extension/navplace/context.json", "http://iiif.io/api/presentation/3/context.json", ], "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 3000, "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/canvas/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno-page/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpg", "height": 3000, "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", "profile": "level1", "type": "ImageService3", @@ -18982,8 +18982,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Front of Bronze", ], }, @@ -18991,28 +18991,28 @@ Object { "width": 2315, }, ], - "label": Object { - "it": Array [ + "label": { + "it": [ "Bronzo Laocoonte e i suoi figli", ], }, - "navPlace": Object { - "features": Array [ - Object { - "geometry": Object { - "coordinates": Array [ + "navPlace": { + "features": [ + { + "geometry": { + "coordinates": [ -118.4745559, 34.0776376, ], "type": "Point", }, "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/feature/1", - "properties": Object { - "label": Object { - "en": Array [ + "properties": { + "label": { + "en": [ "The Laocoön Bronze", ], - "it": Array [ + "it": [ "Bronzo Laocoonte e i suoi figli", ], }, @@ -19027,24 +19027,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0202-start-canvas" ("https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1", "type": "Canvas", }, @@ -19052,19 +19052,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", "type": "Canvas", }, @@ -19072,19 +19072,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3", "type": "Canvas", }, @@ -19092,19 +19092,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4", "type": "Canvas", }, @@ -19112,19 +19112,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5", "type": "Canvas", }, @@ -19133,299 +19133,299 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4613, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Blank page", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3204, }, - "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2": Object { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4612, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Frontispiece", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3186, }, - "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3": Object { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4613, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Title page", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3204, }, - "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4": Object { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4578, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Blank page", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3174, }, - "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5": Object { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 4632, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Bookplate", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 3198, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4613, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18", "profile": "level1", "type": "ImageService3", @@ -19434,12 +19434,12 @@ Object { "type": "Image", "width": 3204, }, - "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4612, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19", "profile": "level1", "type": "ImageService3", @@ -19448,12 +19448,12 @@ Object { "type": "Image", "width": 3186, }, - "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4613, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20", "profile": "level1", "type": "ImageService3", @@ -19462,12 +19462,12 @@ Object { "type": "Image", "width": 3204, }, - "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4578, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21", "profile": "level1", "type": "ImageService3", @@ -19476,12 +19476,12 @@ Object { "type": "Image", "width": 3174, }, - "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg": { "format": "image/jpeg", "height": 4632, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22", "profile": "level1", "type": "ImageService3", @@ -19491,72 +19491,72 @@ Object { "width": 3198, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4", "type": "Canvas", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Multiple Related Images (Book, etc.)", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], - "start": Object { + "seeAlso": [], + "service": [], + "services": [], + "start": { "selector": undefined, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", "type": "Canvas", }, "type": "SpecificResource", }, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image": "Annotation", @@ -19579,32 +19579,32 @@ Object { "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg": "ContentResource", "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0202-start-canvas" ("https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 4613, "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4613, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18", "profile": "level1", "type": "ImageService3", @@ -19622,28 +19622,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Blank page", ], }, "type": "Canvas", "width": 3204, }, - Object { + { "height": 4612, "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4612, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19", "profile": "level1", "type": "ImageService3", @@ -19661,28 +19661,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Frontispiece", ], }, "type": "Canvas", "width": 3186, }, - Object { + { "height": 4613, "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4613, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20", "profile": "level1", "type": "ImageService3", @@ -19700,28 +19700,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Title page", ], }, "type": "Canvas", "width": 3204, }, - Object { + { "height": 4578, "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4578, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21", "profile": "level1", "type": "ImageService3", @@ -19739,28 +19739,28 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Blank page", ], }, "type": "Canvas", "width": 3174, }, - Object { + { "height": 4632, "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 4632, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22", "profile": "level1", "type": "ImageService3", @@ -19778,8 +19778,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Bookplate", ], }, @@ -19787,12 +19787,12 @@ Object { "width": 3198, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Multiple Related Images (Book, etc.)", ], }, - "start": Object { + "start": { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", "type": "Canvas", }, @@ -19800,24 +19800,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0230-navdate-navdate_map_1-manifest" ("https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_1-manifest https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", "type": "Canvas", }, @@ -19826,75 +19826,75 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 7072, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "1987 Map, recto and verso, with a date of publication", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 5212, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": { "format": "image/jpeg", "height": 7072, "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/", "profile": "level1", "type": "ImageService3", @@ -19904,81 +19904,81 @@ Object { "width": 5212, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", ], }, - "metadata": Array [], + "metadata": [], "navDate": "1987-01-01T00:00:00+00:00", - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1": "Canvas", "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json": "Manifest", "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1": "AnnotationPage", "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0230-navdate-navdate_map_1-manifest" ("https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_1-manifest https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 7072, "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 7072, "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/", "profile": "level1", "type": "ImageService3", @@ -19996,8 +19996,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "1987 Map, recto and verso, with a date of publication", ], }, @@ -20005,8 +20005,8 @@ Object { "width": 5212, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", ], }, @@ -20015,24 +20015,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0230-navdate-navdate_map_2-manifest" ("https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_2-manifest https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", "type": "Canvas", }, @@ -20041,75 +20041,75 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 1765, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "1986 Map, recto and verso, with a date of publication", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 1286, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg": { "format": "image/jpeg", "height": 1765, "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/", "profile": "level1", "type": "ImageService3", @@ -20119,81 +20119,81 @@ Object { "width": 1286, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", ], }, - "metadata": Array [], + "metadata": [], "navDate": "1986-01-01T00:00:00+00:00", - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1": "Canvas", "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json": "Manifest", "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1": "AnnotationPage", "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0230-navdate-navdate_map_2-manifest" ("https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_2-manifest https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 1765, "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 1765, "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/", "profile": "level1", "type": "ImageService3", @@ -20211,8 +20211,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "1986 Map, recto and verso, with a date of publication", ], }, @@ -20220,8 +20220,8 @@ Object { "width": 1286, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", ], }, @@ -20230,37 +20230,37 @@ Object { } `; -exports[`Cookbook Testing normalize "0230-navdate-navdate-collection" ("https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object {}, - "AnnotationCollection": Object {}, - "AnnotationPage": Object {}, - "Canvas": Object {}, - "Collection": Object { - "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json": Object { +exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate-collection https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": {}, + "AnnotationCollection": {}, + "AnnotationPage": {}, + "Canvas": {}, + "Collection": { + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", - "label": Object { - "en": Array [ + "label": { + "en": [ "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", ], }, "navDate": "1986-01-01T00:00:00+00:00", "type": "Manifest", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", - "label": Object { - "en": Array [ + "label": { + "en": [ "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", ], }, @@ -20268,25 +20268,25 @@ Object { "type": "Manifest", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Chesapeake and Ohio Canal map and guide pamphlets", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "summary": null, - "thumbnail": Array [ - Object { + "thumbnail": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", "type": "ContentResource", }, @@ -20295,13 +20295,13 @@ Object { "viewingDirection": "left-to-right", }, }, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": Object { + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": { "format": "image/jpeg", "height": 300, "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", "profile": "level1", "type": "ImageService3", @@ -20311,104 +20311,104 @@ Object { "width": 221, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", - "items": Array [], - "label": Object { - "en": Array [ + "items": [], + "label": { + "en": [ "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", ], }, - "metadata": Array [], + "metadata": [], "navDate": "1987-01-01T00:00:00+00:00", - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, - "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json": Object { + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", - "items": Array [], - "label": Object { - "en": Array [ + "items": [], + "label": { + "en": [ "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", ], }, - "metadata": Array [], + "metadata": [], "navDate": "1986-01-01T00:00:00+00:00", - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json": "Collection", "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json": "Manifest", "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json": "Manifest", "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", "type": "Collection", }, } `; -exports[`Cookbook Testing normalize "0230-navdate-navdate-collection" ("https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate-collection https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", - "label": Object { - "en": Array [ + "label": { + "en": [ "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", ], }, "navDate": "1986-01-01T00:00:00+00:00", "type": "Manifest", }, - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", - "label": Object { - "en": Array [ + "label": { + "en": [ "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", ], }, @@ -20416,18 +20416,18 @@ Object { "type": "Manifest", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Chesapeake and Ohio Canal map and guide pamphlets", ], }, - "thumbnail": Array [ - Object { + "thumbnail": [ + { "format": "image/jpeg", "height": 300, "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", "profile": "level1", "type": "ImageService3", @@ -20441,31 +20441,31 @@ Object { } `; -exports[`Cookbook Testing normalize "0234-provider" ("https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object { - "https://id.loc.gov/authorities/n79055331": Object { - "homepage": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json 1`] = ` +{ + "entities": { + "Agent": { + "https://id.loc.gov/authorities/n79055331": { + "homepage": [ + { "id": "https://digital.library.ucla.edu/", "type": "ContentResource", }, ], "id": "https://id.loc.gov/authorities/n79055331", - "label": Object { - "en": Array [ + "label": { + "en": [ "UCLA Library", ], }, - "logo": Array [ - Object { + "logo": [ + { "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png", "type": "ContentResource", }, ], - "seeAlso": Array [ - Object { + "seeAlso": [ + { "id": "https://id.loc.gov/authorities/names/n79055331.madsxml.xml", "type": "ContentResource", }, @@ -20473,20 +20473,20 @@ Object { "type": "Agent", }, }, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image": Object { - "body": Array [ - Object { + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", "type": "Canvas", }, @@ -20495,99 +20495,99 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0": { "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], + "annotations": [], + "behavior": [], "duration": 0, "height": 5312, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1", "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "front cover with color bar", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 4520, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://digital.library.ucla.edu/": Object { + "Collection": {}, + "ContentResource": { + "https://digital.library.ucla.edu/": { "format": "text/html", "id": "https://digital.library.ucla.edu/", - "label": Object { - "en": Array [ + "label": { + "en": [ "UCLA Library Digital Collections", ], }, - "language": Array [ + "language": [ "en", ], "type": "Text", }, - "https://id.loc.gov/authorities/names/n79055331.madsxml.xml": Object { + "https://id.loc.gov/authorities/names/n79055331.madsxml.xml": { "format": "application/xml", "id": "https://id.loc.gov/authorities/names/n79055331.madsxml.xml", - "label": Object { - "en": Array [ + "label": { + "en": [ "US Library of Congress data about the UCLA Library", ], }, "profile": "http://www.loc.gov/mads/v2", "type": "Dataset", }, - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg": Object { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg": { "format": "image/jpeg", "height": 5312, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", "profile": "level1", "type": "ImageService3", @@ -20596,23 +20596,23 @@ Object { "type": "Image", "width": 4520, }, - "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png": Object { + "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png": { "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png", - "service": Array [ - Object { + "service": [ + { "height": 502, "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2", "profile": "level2", - "sizes": Array [ - Object { + "sizes": [ + { "height": 126, "width": 300, }, - Object { + { "height": 251, "width": 600, }, - Object { + { "height": 502, "width": 1200, }, @@ -20624,58 +20624,58 @@ Object { "type": "Image", }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Playbill Cover", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [ - Object { + "provider": [ + { "id": "https://id.loc.gov/authorities/n79055331", "type": "Agent", }, ], - "rendering": Array [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], - "summary": Object { - "en": Array [ + "structures": [], + "summary": { + "en": [ "Cover of playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV, and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", ], }, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://digital.library.ucla.edu/": "ContentResource", "https://id.loc.gov/authorities/n79055331": "Agent", "https://id.loc.gov/authorities/names/n79055331.madsxml.xml": "ContentResource", @@ -20686,32 +20686,32 @@ Object { "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg": "ContentResource", "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0234-provider" ("https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", - "items": Array [ - Object { + "items": [ + { "height": 5312, "id": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 5312, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", "profile": "level1", "type": "ImageService3", @@ -20729,8 +20729,8 @@ Object { "type": "AnnotationPage", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "front cover with color bar", ], }, @@ -20738,52 +20738,52 @@ Object { "width": 4520, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Playbill Cover", ], }, - "provider": Array [ - Object { - "homepage": Array [ - Object { + "provider": [ + { + "homepage": [ + { "format": "text/html", "id": "https://digital.library.ucla.edu/", - "label": Object { - "en": Array [ + "label": { + "en": [ "UCLA Library Digital Collections", ], }, - "language": Array [ + "language": [ "en", ], "type": "Text", }, ], "id": "https://id.loc.gov/authorities/n79055331", - "label": Object { - "en": Array [ + "label": { + "en": [ "UCLA Library", ], }, - "logo": Array [ - Object { + "logo": [ + { "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png", - "service": Array [ - Object { + "service": [ + { "height": 502, "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2", "profile": "level2", - "sizes": Array [ - Object { + "sizes": [ + { "height": 126, "width": 300, }, - Object { + { "height": 251, "width": 600, }, - Object { + { "height": 502, "width": 1200, }, @@ -20795,12 +20795,12 @@ Object { "type": "Image", }, ], - "seeAlso": Array [ - Object { + "seeAlso": [ + { "format": "application/xml", "id": "https://id.loc.gov/authorities/names/n79055331.madsxml.xml", - "label": Object { - "en": Array [ + "label": { + "en": [ "US Library of Congress data about the UCLA Library", ], }, @@ -20811,8 +20811,8 @@ Object { "type": "Agent", }, ], - "summary": Object { - "en": Array [ + "summary": { + "en": [ "Cover of playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV, and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", ], }, @@ -20820,32 +20820,32 @@ Object { } `; -exports[`Cookbook Testing normalize "0258-tagging-external-resource" ("https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata": { + "body": [ + { "id": "vault://cf7d210d", "type": "ContentResource", }, - Object { + { "id": "vault://0e748e5d", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", - "motivation": Array [ + "motivation": [ "tagging", ], - "target": Object { - "selector": Object { + "target": { + "selector": { "type": "FragmentSelector", "value": "xywh=749,1054,338,460", }, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", "type": "Canvas", }, @@ -20853,19 +20853,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", "type": "Canvas", }, @@ -20874,98 +20874,98 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [ - Object { + "annotations": [ + { "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1", "type": "AnnotationPage", }, ], - "behavior": Array [], + "behavior": [], "duration": 0, "height": 3024, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 4032, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": { "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", "profile": "level1", "type": "ImageService3", @@ -20974,62 +20974,62 @@ Object { "type": "Image", "width": 4032, }, - "vault://0e748e5d": Object { + "vault://0e748e5d": { "format": "text/plain", "id": "vault://0e748e5d", "language": "de", "type": "TextualBody", "value": "Gänsenliesel-Brunnen", }, - "vault://cf7d210d": Object { + "vault://cf7d210d": { "id": "vault://cf7d210d", "source": "http://www.wikidata.org/entity/Q18624915", "type": "SpecificResource", }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Picture of Göttingen taken during the 2019 IIIF Conference", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata": "Annotation", "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1": "Canvas", @@ -21040,30 +21040,30 @@ Object { "vault://0e748e5d": "ContentResource", "vault://cf7d210d": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0258-tagging-external-resource" ("https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json", - "items": Array [ - Object { - "annotations": Array [ - Object { + "items": [ + { + "annotations": [ + { "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1", - "items": Array [ - Object { - "body": Array [ - Object { + "items": [ + { + "body": [ + { "source": "http://www.wikidata.org/entity/Q18624915", "type": "SpecificResource", }, - Object { + { "format": "text/plain", "language": "de", "type": "TextualBody", @@ -21081,17 +21081,17 @@ Object { ], "height": 3024, "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", "profile": "level1", "type": "ImageService3", @@ -21113,8 +21113,8 @@ Object { "width": 4032, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Picture of Göttingen taken during the 2019 IIIF Conference", ], }, @@ -21122,24 +21122,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0261-non-rectangular-commenting" ("https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", "type": "Canvas", }, @@ -21147,19 +21147,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg": { + "body": [ + { "id": "vault://b71e460e", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", - "motivation": Array [ + "motivation": [ "tagging", ], - "target": Object { - "selector": Object { + "target": { + "selector": { "type": "SvgSelector", "value": "", }, @@ -21169,98 +21169,98 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1": { "accompanyingCanvas": null, - "annotations": Array [ - Object { + "annotations": [ + { "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1", "type": "AnnotationPage", }, ], - "behavior": Array [], + "behavior": [], "duration": 0, "height": 3024, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 4032, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": { "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", "profile": "level1", "type": "ImageService3", @@ -21269,7 +21269,7 @@ Object { "type": "Image", "width": 4032, }, - "vault://b71e460e": Object { + "vault://b71e460e": { "format": "text/plain", "id": "vault://b71e460e", "language": "de", @@ -21277,49 +21277,49 @@ Object { "value": "Gänsenliessel-Brunnen", }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Picture of Göttingen taken during the 2019 IIIF Conference", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image": "Annotation", "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg": "Annotation", "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1": "Canvas", @@ -21329,25 +21329,25 @@ Object { "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", "vault://b71e460e": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0261-non-rectangular-commenting" ("https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json", - "items": Array [ - Object { - "annotations": Array [ - Object { + "items": [ + { + "annotations": [ + { "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "text/plain", "language": "de", "type": "TextualBody", @@ -21355,8 +21355,8 @@ Object { }, "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", "motivation": "tagging", - "target": Object { - "selector": Object { + "target": { + "selector": { "type": "SvgSelector", "value": "", }, @@ -21371,17 +21371,17 @@ Object { ], "height": 3024, "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", "profile": "level1", "type": "ImageService3", @@ -21403,8 +21403,8 @@ Object { "width": 4032, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Picture of Göttingen taken during the 2019 IIIF Conference", ], }, @@ -21412,24 +21412,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0266-full-canvas-annotation" ("https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", "type": "Canvas", }, @@ -21437,19 +21437,19 @@ Object { }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1": Object { - "body": Array [ - Object { + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1": { + "body": [ + { "id": "vault://929e073a", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1", - "motivation": Array [ + "motivation": [ "commenting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", "type": "Canvas", }, @@ -21458,98 +21458,98 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1": { "accompanyingCanvas": null, - "annotations": Array [ - Object { + "annotations": [ + { "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2", "type": "AnnotationPage", }, ], - "behavior": Array [], + "behavior": [], "duration": 0, "height": 3024, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 4032, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": { "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", "profile": "level1", "type": "ImageService3", @@ -21558,7 +21558,7 @@ Object { "type": "Image", "width": 4032, }, - "vault://929e073a": Object { + "vault://929e073a": { "format": "text/plain", "id": "vault://929e073a", "language": "de", @@ -21566,49 +21566,49 @@ Object { "value": "Göttinger Marktplatz mit Gänseliesel Brunnen", }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Picture of Göttingen taken during the 2019 IIIF Conference", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1": "Canvas", "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1": "AnnotationPage", "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1": "Annotation", @@ -21618,25 +21618,25 @@ Object { "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", "vault://929e073a": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0266-full-canvas-annotation" ("https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json", - "items": Array [ - Object { - "annotations": Array [ - Object { + "items": [ + { + "annotations": [ + { "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "text/plain", "language": "de", "type": "TextualBody", @@ -21653,17 +21653,17 @@ Object { ], "height": 3024, "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", "profile": "level1", "type": "ImageService3", @@ -21685,8 +21685,8 @@ Object { "width": 4032, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Picture of Göttingen taken during the 2019 IIIF Conference", ], }, @@ -21694,24 +21694,24 @@ Object { } `; -exports[`Cookbook Testing normalize "0269-embedded-or-referenced-annotations" ("https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json") 1`] = ` -Object { - "entities": Object { - "Agent": Object {}, - "Annotation": Object { - "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1": Object { - "body": Array [ - Object { +exports[`Cookbook > Testing normalize %p (%p) 0269-embedded-or-referenced-annotations https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1": { + "body": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", "type": "ContentResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1", - "motivation": Array [ + "motivation": [ "painting", ], - "target": Object { - "source": Object { + "target": { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", "type": "Canvas", }, @@ -21720,93 +21720,93 @@ Object { "type": "Annotation", }, }, - "AnnotationCollection": Object {}, - "AnnotationPage": Object { - "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json": Object { - "behavior": Array [], - "homepage": Array [], + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json", - "items": Array [], + "items": [], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1": Object { - "behavior": Array [], - "homepage": Array [], + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1": { + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1", "type": "Annotation", }, ], "label": null, - "metadata": Array [], - "provider": Array [], - "rendering": Array [], + "metadata": [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "AnnotationPage", }, }, - "Canvas": Object { - "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1": Object { + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1": { "accompanyingCanvas": null, - "annotations": Array [ - Object { + "annotations": [ + { "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json", "type": "AnnotationPage", }, ], - "behavior": Array [], + "behavior": [], "duration": 0, "height": 3024, - "homepage": Array [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1", "type": "AnnotationPage", }, ], "label": null, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], + "seeAlso": [], + "service": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Canvas", "width": 4032, }, }, - "Collection": Object {}, - "ContentResource": Object { - "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": Object { + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": { "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", "profile": "level1", "type": "ImageService3", @@ -21816,49 +21816,49 @@ Object { "width": 4032, }, }, - "Manifest": Object { - "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json": Object { + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, - "annotations": Array [], - "behavior": Array [], - "homepage": Array [], + "annotations": [], + "behavior": [], + "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", "type": "Canvas", }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Picture of Göttingen taken during the 2019 IIIF Conference", ], }, - "metadata": Array [], + "metadata": [], "navDate": null, - "partOf": Array [], + "partOf": [], "placeholderCanvas": null, - "provider": Array [], - "rendering": Array [], + "provider": [], + "rendering": [], "requiredStatement": null, "rights": null, - "seeAlso": Array [], - "service": Array [], - "services": Array [], + "seeAlso": [], + "service": [], + "services": [], "start": null, - "structures": Array [], + "structures": [], "summary": null, - "thumbnail": Array [], + "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", }, }, - "Range": Object {}, - "Selector": Object {}, - "Service": Object {}, + "Range": {}, + "Selector": {}, + "Service": {}, }, - "mapping": Object { + "mapping": { "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json": "AnnotationPage", "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1": "Canvas", "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1": "AnnotationPage", @@ -21866,38 +21866,38 @@ Object { "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json": "Manifest", "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", }, - "resource": Object { + "resource": { "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook Testing normalize "0269-embedded-or-referenced-annotations" ("https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json") 2`] = ` -Object { +exports[`Cookbook > Testing normalize %p (%p) 0269-embedded-or-referenced-annotations https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json 2`] = ` +{ "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json", - "items": Array [ - Object { - "annotations": Array [ - Object { + "items": [ + { + "annotations": [ + { "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json", "type": "AnnotationPage", }, ], "height": 3024, "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", - "items": Array [ - Object { + "items": [ + { "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1", - "items": Array [ - Object { - "body": Object { + "items": [ + { + "body": { "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "service": Array [ - Object { + "service": [ + { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", "profile": "level1", "type": "ImageService3", @@ -21919,8 +21919,8 @@ Object { "width": 4032, }, ], - "label": Object { - "en": Array [ + "label": { + "en": [ "Picture of Göttingen taken during the 2019 IIIF Conference", ], }, diff --git a/__tests__/presentation-3-parser/strict-upgrade.test.ts b/__tests__/presentation-3-parser/strict-upgrade.test.ts index fc793dd..9ce5ceb 100644 --- a/__tests__/presentation-3-parser/strict-upgrade.test.ts +++ b/__tests__/presentation-3-parser/strict-upgrade.test.ts @@ -353,7 +353,7 @@ describe('Strict upgrade', () => { // @ts-ignore expect(upgraded.rights).toEqual('http://creativecommons.org/licenses/by/4.0/'); expect(state.warnings).toMatchInlineSnapshot(` - Array [ + [ "\\"rights\\" is an informative property and should contain the http variation of the rights statement", ] `); @@ -370,7 +370,7 @@ describe('Strict upgrade', () => { // @ts-ignore expect(upgraded.rights).toEqual('http://creativecommons.org/licenses/by/4.0/'); expect(state.warnings).toMatchInlineSnapshot(` - Array [ + [ "\\"rights\\" should only contain a single string", "\\"rights\\" is an informative property and should contain the http variation of the rights statement", ] @@ -388,7 +388,7 @@ describe('Strict upgrade', () => { // @ts-ignore expect(upgraded.rights).toEqual('This is not valid'); expect(state.warnings).toMatchInlineSnapshot(` - Array [ + [ "\\"rights\\" should be a valid URI", ] `); @@ -405,7 +405,7 @@ describe('Strict upgrade', () => { // @ts-ignore expect(upgraded.navDate).toBeUndefined(); expect(state.warnings).toMatchInlineSnapshot(` - Array [ + [ "\\"navDate\\" should be a valid XSD dateTime literal", ] `); @@ -435,7 +435,7 @@ describe('Strict upgrade', () => { // @ts-ignore expect(upgraded.navDate).toEqual('2010-01-01T00:00:00Z'); expect(state.warnings).toMatchInlineSnapshot(` - Array [ + [ "\\"navDate\\" should not contain extra whitespace", ] `); @@ -452,7 +452,7 @@ describe('Strict upgrade', () => { // @ts-ignore expect(manifest.language).toEqual(['en']); expect(state.warnings).toMatchInlineSnapshot(` - Array [ + [ "\\"language\\" should be Array of values", ] `); @@ -469,7 +469,7 @@ describe('Strict upgrade', () => { // @ts-ignore expect(upgraded.language).toEqual([]); expect(state.warnings).toMatchInlineSnapshot(` - Array [ + [ "\\"language\\" should be Array of values", "'\\"language\\" expected array of strings", ] @@ -590,7 +590,7 @@ describe('Strict upgrade', () => { // @ts-ignore expect(upgraded.items[0].accompanyingCanvas).toEqual(manifestCorrect.items[0].accompanyingCanvas); expect(state.warnings).toMatchInlineSnapshot(` - Array [ + [ "\\"accompanyingCanvas\\" should only contain a single value", ] `); @@ -606,7 +606,7 @@ describe('Strict upgrade', () => { // @ts-ignore expect(state.warnings).toMatchInlineSnapshot(` - Array [ + [ "\\"accompanyingCanvas\\" should be a Canvas", ] `); diff --git a/__tests__/presentation-3-parser/utilities.test.ts b/__tests__/presentation-3-parser/utilities.test.ts index 0ec5184..22a1d9a 100644 --- a/__tests__/presentation-3-parser/utilities.test.ts +++ b/__tests__/presentation-3-parser/utilities.test.ts @@ -14,13 +14,13 @@ describe('Misc Utilites', function () { }; expect(compressSpecificResource(state, { allowSourceString: false })).toMatchInlineSnapshot(` - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas-start/segment1", - "selector": Object { + "selector": { "t": 120.5, "type": "PointSelector", }, - "source": Object { + "source": { "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", "type": "Canvas", }, @@ -40,9 +40,9 @@ describe('Misc Utilites', function () { }; expect(compressSpecificResource(state, { allowSourceString: true })).toMatchInlineSnapshot(` - Object { + { "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas-start/segment1", - "selector": Object { + "selector": { "t": 120.5, "type": "PointSelector", }, diff --git a/package.json b/package.json index 080f7ed..cf2f974 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "scripts": { "build": "tsc -p . --declaration --emitDeclarationOnly && rollup -c", "prepublishOnly": "tsc -p . --declaration --emitDeclarationOnly && rollup -c", - "test": "jest" + "test": "vitest" }, "dependencies": { "@iiif/presentation-2": "^1.0.2", @@ -61,20 +61,20 @@ "devDependencies": { "@happy-dom/global-registrator": "^6.0.4", "@hyperion-framework/validator": "^1.1.0", - "@types/jest": "^27.4.0", "@typescript-eslint/eslint-plugin": "^5.9.1", "@typescript-eslint/parser": "^5.9.1", "eslint": "^8.7.0", "eslint-plugin-json": "^3.1.0", "eslint-plugin-prettier": "^4.0.0", - "jest": "^27.4.7", "node-fetch": "^3.2.9", "prettier": "^2.5.1", "rollup": "^2.63.0", "rollup-library-template": "^1.0.1", "ts-jest": "^27.1.3", "tslib": "^2.4.0", - "typescript": "^4.7.4" + "typescript": "^4.7.4", + "vite": "^3.0.4", + "vitest": "^0.19.1" }, "publishConfig": { "access": "public" diff --git a/tsconfig.json b/tsconfig.json index 7d94e9c..8bb7d83 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -25,7 +25,8 @@ "rootDir": "./src", "paths": { "@iiif/presentation-2": ["./node_modules/@hyperion-framework/presentation-2"], - } + }, + "types": ["vitest/globals"] }, "include": [ "./src/**/*", diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..cf361c0 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + plugins: [], + test: { + include: ['**/*.{test,tests,spec}.{js,mjs,cjs,ts,mts,cts}'], + environment: 'happy-dom', + globals: true, + }, + server: { + port: 3008, + }, +}); diff --git a/yarn.lock b/yarn.lock index c3e9a41..e377f81 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,39 +2,13 @@ # yarn lockfile v1 -"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.16.7": +"@babel/code-frame@^7.16.0", "@babel/code-frame@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== dependencies: "@babel/highlight" "^7.16.7" -"@babel/compat-data@^7.16.4": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.16.8.tgz#31560f9f29fdf1868de8cb55049538a1b9732a60" - integrity sha512-m7OkX0IdKLKPpBlJtF561YJal5y/jyI5fNfWbPxh2D/nbzzGI4qRyrD8xO2jB24u7l+5I2a43scCG2IrfjC50Q== - -"@babel/core@^7.1.0", "@babel/core@^7.12.3", "@babel/core@^7.7.2", "@babel/core@^7.8.0": - version "7.16.12" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.16.12.tgz#5edc53c1b71e54881315923ae2aedea2522bb784" - integrity sha512-dK5PtG1uiN2ikk++5OzSYsitZKny4wOCD0nrO4TqnW4BVBTQ2NGS3NgilvT/TEyxTST7LNyWV/T4tXDoD3fOgg== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.8" - "@babel/helper-compilation-targets" "^7.16.7" - "@babel/helper-module-transforms" "^7.16.7" - "@babel/helpers" "^7.16.7" - "@babel/parser" "^7.16.12" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.10" - "@babel/types" "^7.16.8" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" - "@babel/generator@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.7.tgz#b42bf46a3079fa65e1544135f32e7958f048adbb" @@ -44,25 +18,6 @@ jsesc "^2.5.1" source-map "^0.5.0" -"@babel/generator@^7.16.8", "@babel/generator@^7.7.2": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.8.tgz#359d44d966b8cd059d543250ce79596f792f2ebe" - integrity sha512-1ojZwE9+lOXzcWdWmO6TbUzDfqLD39CmEhN8+2cX9XkDo5yW1OpgfejfliysR2AWLpMamTiOiAp/mtroaymhpw== - dependencies: - "@babel/types" "^7.16.8" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-compilation-targets@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.16.7.tgz#06e66c5f299601e6c7da350049315e83209d551b" - integrity sha512-mGojBwIWcwGD6rfqgRXVlVYmPAv7eOpIemUG3dGnDdCY4Pae70ROij3XmfrH6Fa1h1aiDylpglbZyktfzyo/hA== - dependencies: - "@babel/compat-data" "^7.16.4" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.17.5" - semver "^6.3.0" - "@babel/helper-environment-visitor@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" @@ -93,39 +48,6 @@ dependencies: "@babel/types" "^7.16.7" -"@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-transforms@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.16.7.tgz#7665faeb721a01ca5327ddc6bba15a5cb34b6a41" - integrity sha512-gaqtLDxJEFCeQbYp9aLAefjhkKdjKcdh6DB7jniIGU3Pz52WAmP268zK0VgPz9hUNkMSYeH976K2/Y6yPadpng== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.8.0": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz#aa3a8ab4c3cceff8e65eb9e73d87dc4ff320b2f5" - integrity sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA== - -"@babel/helper-simple-access@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.16.7.tgz#d656654b9ea08dbb9659b69d61063ccd343ff0f7" - integrity sha512-ZIzHVyoeLMvXMN/vok/a4LWRy8G2v205mNP0XOuf9XRLyX5/u9CnVulUtDgUTama3lT+bf/UqucuZjqiGuTS1g== - dependencies: - "@babel/types" "^7.16.7" - "@babel/helper-split-export-declaration@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" @@ -138,20 +60,6 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helpers@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.16.7.tgz#7e3504d708d50344112767c3542fc5e357fffefc" - integrity sha512-9ZDoqtfY7AuEOt3cxchfii6C7GDyyMBffktR5B2jvWv8u2+efwvpnVKXMWzNehqy68tKgAfSwfdw/lWpthS2bw== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.16.7" - "@babel/types" "^7.16.7" - "@babel/highlight@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.7.tgz#81a01d7d675046f0d96f82450d9d9578bdfd6b0b" @@ -161,108 +69,12 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.16.10", "@babel/parser@^7.16.12": - version "7.16.12" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.12.tgz#9474794f9a650cf5e2f892444227f98e28cdf8b6" - integrity sha512-VfaV15po8RiZssrkPweyvbGVSe4x2y+aciFCgn0n0/SJMR22cwofRV1mtnJQYcSB1wUTaA/X1LnA3es66MCO5A== - "@babel/parser@^7.16.7", "@babel/parser@^7.6.2": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.7.tgz#d372dda9c89fcec340a82630a9f533f2fe15877e" integrity sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA== -"@babel/plugin-syntax-async-generators@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-bigint@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" - integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-class-properties@^7.8.3": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" - integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== - dependencies: - "@babel/helper-plugin-utils" "^7.12.13" - -"@babel/plugin-syntax-import-meta@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" - integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" - integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" - integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== - dependencies: - "@babel/helper-plugin-utils" "^7.10.4" - -"@babel/plugin-syntax-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" - integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== - dependencies: - "@babel/helper-plugin-utils" "^7.14.5" - -"@babel/plugin-syntax-typescript@^7.7.2": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.16.7.tgz#39c9b55ee153151990fb038651d58d3fd03f98f8" - integrity sha512-YhUIJHHGkqPgEcMYkPCKTyGUdoGKWtopIycQyjJH8OjvRgOYsXsaKehLVPScKJWAULPxMa4N1vCe6szREFlZ7A== - dependencies: - "@babel/helper-plugin-utils" "^7.16.7" - -"@babel/template@^7.16.7", "@babel/template@^7.3.3": +"@babel/template@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== @@ -271,22 +83,6 @@ "@babel/parser" "^7.16.7" "@babel/types" "^7.16.7" -"@babel/traverse@^7.16.10", "@babel/traverse@^7.16.7", "@babel/traverse@^7.7.2": - version "7.16.10" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.10.tgz#448f940defbe95b5a8029975b051f75993e8239f" - integrity sha512-yzuaYXoRJBGMlBhsMJoUW7G1UmSb/eXr/JHYM/MsOJgavJibLwASijW7oXBdw3NQ6T0bW7Ty5P/VarOs9cHmqw== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.8" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.16.10" - "@babel/types" "^7.16.8" - debug "^4.1.0" - globals "^11.1.0" - "@babel/traverse@^7.6.2": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.7.tgz#dac01236a72c2560073658dd1a285fe4e0865d76" @@ -303,14 +99,6 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.16.8", "@babel/types@^7.3.0", "@babel/types@^7.3.3": - version "7.16.8" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.8.tgz#0ba5da91dd71e0a4e7781a30f22770831062e3c1" - integrity sha512-smN2DQc5s4M7fntyjGtyIPbRJv6wW4rU/94fmYJ7PKQuZkC0qGMHXJbg6sNGt12JmVr4k5YaptI/XtiLJBnmIg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - "@babel/types@^7.16.7": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.7.tgz#4ed19d51f840ed4bd5645be6ce40775fecf03159" @@ -319,11 +107,6 @@ "@babel/helper-validator-identifier" "^7.16.7" to-fast-properties "^2.0.0" -"@bcoe/v8-coverage@^0.2.3": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" - integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== - "@betit/rollup-plugin-rename-extensions@^0.1.0": version "0.1.0" resolved "https://registry.yarnpkg.com/@betit/rollup-plugin-rename-extensions/-/rollup-plugin-rename-extensions-0.1.0.tgz#ea9c02087a7d01916565b3dec689b3427e2c5a03" @@ -396,180 +179,6 @@ dependencies: "@types/geojson" "^7946.0.10" -"@istanbuljs/load-nyc-config@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" - integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== - dependencies: - camelcase "^5.3.1" - find-up "^4.1.0" - get-package-type "^0.1.0" - js-yaml "^3.13.1" - resolve-from "^5.0.0" - -"@istanbuljs/schema@^0.1.2": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" - integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== - -"@jest/console@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/console/-/console-27.4.6.tgz#0742e6787f682b22bdad56f9db2a8a77f6a86107" - integrity sha512-jauXyacQD33n47A44KrlOVeiXHEXDqapSdfb9kTekOchH/Pd18kBIO1+xxJQRLuG+LUuljFCwTG92ra4NW7SpA== - dependencies: - "@jest/types" "^27.4.2" - "@types/node" "*" - chalk "^4.0.0" - jest-message-util "^27.4.6" - jest-util "^27.4.2" - slash "^3.0.0" - -"@jest/core@^27.4.7": - version "27.4.7" - resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.4.7.tgz#84eabdf42a25f1fa138272ed229bcf0a1b5e6913" - integrity sha512-n181PurSJkVMS+kClIFSX/LLvw9ExSb+4IMtD6YnfxZVerw9ANYtW0bPrm0MJu2pfe9SY9FJ9FtQ+MdZkrZwjg== - dependencies: - "@jest/console" "^27.4.6" - "@jest/reporters" "^27.4.6" - "@jest/test-result" "^27.4.6" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - emittery "^0.8.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-changed-files "^27.4.2" - jest-config "^27.4.7" - jest-haste-map "^27.4.6" - jest-message-util "^27.4.6" - jest-regex-util "^27.4.0" - jest-resolve "^27.4.6" - jest-resolve-dependencies "^27.4.6" - jest-runner "^27.4.6" - jest-runtime "^27.4.6" - jest-snapshot "^27.4.6" - jest-util "^27.4.2" - jest-validate "^27.4.6" - jest-watcher "^27.4.6" - micromatch "^4.0.4" - rimraf "^3.0.0" - slash "^3.0.0" - strip-ansi "^6.0.0" - -"@jest/environment@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.4.6.tgz#1e92885d64f48c8454df35ed9779fbcf31c56d8b" - integrity sha512-E6t+RXPfATEEGVidr84WngLNWZ8ffCPky8RqqRK6u1Bn0LK92INe0MDttyPl/JOzaq92BmDzOeuqk09TvM22Sg== - dependencies: - "@jest/fake-timers" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/node" "*" - jest-mock "^27.4.6" - -"@jest/fake-timers@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-27.4.6.tgz#e026ae1671316dbd04a56945be2fa251204324e8" - integrity sha512-mfaethuYF8scV8ntPpiVGIHQgS0XIALbpY2jt2l7wb/bvq4Q5pDLk4EP4D7SAvYT1QrPOPVZAtbdGAOOyIgs7A== - dependencies: - "@jest/types" "^27.4.2" - "@sinonjs/fake-timers" "^8.0.1" - "@types/node" "*" - jest-message-util "^27.4.6" - jest-mock "^27.4.6" - jest-util "^27.4.2" - -"@jest/globals@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-27.4.6.tgz#3f09bed64b0fd7f5f996920258bd4be8f52f060a" - integrity sha512-kAiwMGZ7UxrgPzu8Yv9uvWmXXxsy0GciNejlHvfPIfWkSxChzv6bgTS3YqBkGuHcis+ouMFI2696n2t+XYIeFw== - dependencies: - "@jest/environment" "^27.4.6" - "@jest/types" "^27.4.2" - expect "^27.4.6" - -"@jest/reporters@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.4.6.tgz#b53dec3a93baf9b00826abf95b932de919d6d8dd" - integrity sha512-+Zo9gV81R14+PSq4wzee4GC2mhAN9i9a7qgJWL90Gpx7fHYkWpTBvwWNZUXvJByYR9tAVBdc8VxDWqfJyIUrIQ== - dependencies: - "@bcoe/v8-coverage" "^0.2.3" - "@jest/console" "^27.4.6" - "@jest/test-result" "^27.4.6" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/node" "*" - chalk "^4.0.0" - collect-v8-coverage "^1.0.0" - exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.2.4" - istanbul-lib-coverage "^3.0.0" - istanbul-lib-instrument "^5.1.0" - istanbul-lib-report "^3.0.0" - istanbul-lib-source-maps "^4.0.0" - istanbul-reports "^3.1.3" - jest-haste-map "^27.4.6" - jest-resolve "^27.4.6" - jest-util "^27.4.2" - jest-worker "^27.4.6" - slash "^3.0.0" - source-map "^0.6.0" - string-length "^4.0.1" - terminal-link "^2.0.0" - v8-to-istanbul "^8.1.0" - -"@jest/source-map@^27.4.0": - version "27.4.0" - resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-27.4.0.tgz#2f0385d0d884fb3e2554e8f71f8fa957af9a74b6" - integrity sha512-Ntjx9jzP26Bvhbm93z/AKcPRj/9wrkI88/gK60glXDx1q+IeI0rf7Lw2c89Ch6ofonB0On/iRDreQuQ6te9pgQ== - dependencies: - callsites "^3.0.0" - graceful-fs "^4.2.4" - source-map "^0.6.0" - -"@jest/test-result@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-27.4.6.tgz#b3df94c3d899c040f602cea296979844f61bdf69" - integrity sha512-fi9IGj3fkOrlMmhQqa/t9xum8jaJOOAi/lZlm6JXSc55rJMXKHxNDN1oCP39B0/DhNOa2OMupF9BcKZnNtXMOQ== - dependencies: - "@jest/console" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/istanbul-lib-coverage" "^2.0.0" - collect-v8-coverage "^1.0.0" - -"@jest/test-sequencer@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-27.4.6.tgz#447339b8a3d7b5436f50934df30854e442a9d904" - integrity sha512-3GL+nsf6E1PsyNsJuvPyIz+DwFuCtBdtvPpm/LMXVkBJbdFvQYCDpccYT56qq5BGniXWlE81n2qk1sdXfZebnw== - dependencies: - "@jest/test-result" "^27.4.6" - graceful-fs "^4.2.4" - jest-haste-map "^27.4.6" - jest-runtime "^27.4.6" - -"@jest/transform@^27.4.6": - version "27.4.6" - resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-27.4.6.tgz#153621940b1ed500305eacdb31105d415dc30231" - integrity sha512-9MsufmJC8t5JTpWEQJ0OcOOAXaH5ioaIX6uHVBLBMoCZPfKKQF+EqP8kACAvCZ0Y1h2Zr3uOccg8re+Dr5jxyw== - dependencies: - "@babel/core" "^7.1.0" - "@jest/types" "^27.4.2" - babel-plugin-istanbul "^6.1.1" - chalk "^4.0.0" - convert-source-map "^1.4.0" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^27.4.6" - jest-regex-util "^27.4.0" - jest-util "^27.4.2" - micromatch "^4.0.4" - pirates "^4.0.4" - slash "^3.0.0" - source-map "^0.6.1" - write-file-atomic "^3.0.0" - "@jest/types@^27.4.2": version "27.4.2" resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.4.2.tgz#96536ebd34da6392c2b7c7737d693885b5dd44a5" @@ -638,57 +247,17 @@ estree-walker "^2.0.1" picomatch "^2.2.2" -"@sinonjs/commons@^1.7.0": - version "1.8.3" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d" - integrity sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/fake-timers@^8.0.1": - version "8.1.0" - resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz#3fdc2b6cb58935b21bfb8d1625eb1300484316e7" - integrity sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg== - dependencies: - "@sinonjs/commons" "^1.7.0" - -"@tootallnate/once@1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" - integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== - -"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14": - version "7.1.18" - resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.18.tgz#1a29abcc411a9c05e2094c98f9a1b7da6cdf49f8" - integrity sha512-S7unDjm/C7z2A2R9NzfKCK1I+BAALDtxEmsJBwlB3EzNfb929ykjL++1CK9LO++EIp2fQrC8O+BwjKvz6UeDyQ== - dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" - "@types/babel__generator" "*" - "@types/babel__template" "*" - "@types/babel__traverse" "*" - -"@types/babel__generator@*": - version "7.6.4" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.4.tgz#1f20ce4c5b1990b37900b63f050182d28c2439b7" - integrity sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg== - dependencies: - "@babel/types" "^7.0.0" - -"@types/babel__template@*": - version "7.4.1" - resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.1.tgz#3d1a48fd9d6c0edfd56f2ff578daed48f36c8969" - integrity sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g== +"@types/chai-subset@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94" + integrity sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw== dependencies: - "@babel/parser" "^7.1.0" - "@babel/types" "^7.0.0" + "@types/chai" "*" -"@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.14.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.14.2.tgz#ffcd470bbb3f8bf30481678fb5502278ca833a43" - integrity sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA== - dependencies: - "@babel/types" "^7.3.0" +"@types/chai@*", "@types/chai@^4.3.1": + version "4.3.1" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.1.tgz#e2c6e73e0bdeb2521d00756d099218e9f5d90a04" + integrity sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ== "@types/concat-stream@^1.6.0": version "1.6.1" @@ -714,14 +283,7 @@ resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.10.tgz#6dfbf5ea17142f7f9a043809f1cd4c448cb68249" integrity sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA== -"@types/graceful-fs@^4.1.2": - version "4.1.5" - resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.5.tgz#21ffba0d98da4350db64891f92a9e5db3cdb4e15" - integrity sha512-anKkLmZZ+xm4p8JWBf4hElkM4XR+EZeA2M9BAkkTldmcyDY4mbdIJnRghDJH3Ov5ooY7/UAoENtmdMSkaAd7Cw== - dependencies: - "@types/node" "*" - -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== @@ -740,14 +302,6 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@^27.4.0": - version "27.4.0" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.4.0.tgz#037ab8b872067cae842a320841693080f9cb84ed" - integrity sha512-gHl8XuC1RZ8H2j5sHv/JqsaxXkDDM9iDOgu0Wp8sjs4u/snb2PVehyWXJPr+ORA0RPpgw231mnutWI1+0hgjIQ== - dependencies: - jest-diff "^27.0.0" - pretty-format "^27.0.0" - "@types/json-schema@^7.0.9": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" @@ -768,11 +322,6 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== -"@types/prettier@^2.1.5": - version "2.4.3" - resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.4.3.tgz#a3c65525b91fca7da00ab1a3ac2b5a2a4afbffbf" - integrity sha512-QzSuZMBuG5u8HqYz01qtMdg/Jfctlnvj1z/lYnIDXs/golxw0fxtRAHd9KrzjR7Yxz1qVeI00o0kiO3PmVdJ9w== - "@types/qs@^6.2.31": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" @@ -785,11 +334,6 @@ dependencies: "@types/node" "*" -"@types/stack-utils@^2.0.0": - version "2.0.1" - resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" - integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== - "@types/yargs-parser@*": version "20.2.1" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" @@ -882,46 +426,16 @@ "@typescript-eslint/types" "5.10.2" eslint-visitor-keys "^3.0.0" -abab@^2.0.3, abab@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" - integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== - -acorn-globals@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" - integrity sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg== - dependencies: - acorn "^7.1.1" - acorn-walk "^7.1.1" - acorn-jsx@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== -acorn-walk@^7.1.1: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" - integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA== - -acorn@^7.1.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== - -acorn@^8.2.4, acorn@^8.7.0: +acorn@^8.7.0: version "8.7.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" integrity sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ== -agent-base@6: - version "6.0.2" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" - integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== - dependencies: - debug "4" - ajv@6.12.2: version "6.12.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" @@ -942,13 +456,6 @@ ajv@^6.10.0, ajv@^6.12.4: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ansi-escapes@^4.2.1: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -961,33 +468,13 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0, ansi-styles@^4.1.0: +ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== dependencies: color-convert "^2.0.1" -ansi-styles@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" - integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== - -anymatch@^3.0.3: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - argparse@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" @@ -1003,72 +490,16 @@ asap@~2.0.6: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -babel-jest@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.4.6.tgz#4d024e69e241cdf4f396e453a07100f44f7ce314" - integrity sha512-qZL0JT0HS1L+lOuH+xC2DVASR3nunZi/ozGhpgauJHgmI7f8rudxf6hUjEHympdQ/J64CdKmPkgfJ+A3U6QCrg== - dependencies: - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/babel__core" "^7.1.14" - babel-plugin-istanbul "^6.1.1" - babel-preset-jest "^27.4.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - slash "^3.0.0" - -babel-plugin-istanbul@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" - integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@istanbuljs/load-nyc-config" "^1.0.0" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-instrument "^5.0.4" - test-exclude "^6.0.0" - -babel-plugin-jest-hoist@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-27.4.0.tgz#d7831fc0f93573788d80dee7e682482da4c730d6" - integrity sha512-Jcu7qS4OX5kTWBc45Hz7BMmgXuJqRnhatqpUhnzGC3OBYpOmf2tv6jFNwZpwM7wU7MUuv2r9IPS/ZlYOuburVw== - dependencies: - "@babel/template" "^7.3.3" - "@babel/types" "^7.3.3" - "@types/babel__core" "^7.0.0" - "@types/babel__traverse" "^7.0.6" - -babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== - dependencies: - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - -babel-preset-jest@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-27.4.0.tgz#70d0e676a282ccb200fbabd7f415db5fdf393bca" - integrity sha512-NK4jGYpnBvNxcGo7/ZpZJr51jCGT+3bwwpVIDY2oNfTxJJldRtB4VAcYdgp1loDE50ODuTu+yBjpMAswv5tlpg== - dependencies: - babel-plugin-jest-hoist "^27.4.0" - babel-preset-current-node-syntax "^1.0.0" - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" @@ -1089,22 +520,6 @@ braces@^3.0.1: dependencies: fill-range "^7.0.1" -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browserslist@^4.17.5: - version "4.19.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.19.1.tgz#4ac0435b35ab655896c31d53018b6dd5e9e4c9a3" - integrity sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A== - dependencies: - caniuse-lite "^1.0.30001286" - electron-to-chromium "^1.4.17" - escalade "^3.1.1" - node-releases "^2.0.1" - picocolors "^1.0.0" - bs-logger@0.x: version "0.2.6" resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" @@ -1112,13 +527,6 @@ bs-logger@0.x: dependencies: fast-json-stable-stringify "2.x" -bser@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" - integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== - dependencies: - node-int64 "^0.4.0" - buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -1142,26 +550,24 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== -camelcase@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -camelcase@^6.2.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" - integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== - -caniuse-lite@^1.0.30001286: - version "1.0.30001304" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001304.tgz#38af55ed3fc8220cb13e35e6e7309c8c65a05559" - integrity sha512-bdsfZd6K6ap87AGqSHJP/s1V+U6Z5lyrcbBu3ovbCCf8cSYpwTtGrCBObMpJqwxfTbLW6YTIdbb1jEeTelcpYQ== - caseless@^0.12.0, caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== +chai@^4.3.6: + version "4.3.6" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.3.6.tgz#ffe4ba2d9fa9d6680cc0b370adae709ec9011e9c" + integrity sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + loupe "^2.3.1" + pathval "^1.1.1" + type-detect "^4.0.5" + chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" @@ -1179,40 +585,16 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -char-regex@^1.0.2: +check-error@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" - integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" + integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== ci-info@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== -cjs-module-lexer@^1.0.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40" - integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA== - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -co@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" - integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= - -collect-v8-coverage@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz#cc2c8e94fc18bbdffe64d6534570c8a673b27f59" - integrity sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg== - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -1237,7 +619,7 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -combined-stream@^1.0.6, combined-stream@^1.0.8: +combined-stream@^1.0.6: version "1.0.8" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== @@ -1259,19 +641,12 @@ concat-stream@^1.6.0, concat-stream@^1.6.2: readable-stream "^2.2.2" typedarray "^0.0.6" -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1285,55 +660,33 @@ css.escape@^1.5.1: resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== -cssom@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" - integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== - -cssom@~0.3.6: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" - integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== - dependencies: - cssom "~0.3.6" - data-uri-to-buffer@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz#b5db46aea50f6176428ac05b73be39a57701a64b" integrity sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA== -data-urls@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b" - integrity sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ== - dependencies: - abab "^2.0.3" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.0.0" - -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3: version "4.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== dependencies: ms "2.1.2" -decimal.js@^10.2.1: - version "10.3.1" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" - integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== +debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" -deep-is@^0.1.3, deep-is@~0.1.3: +deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== @@ -1348,16 +701,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -detect-newline@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" - integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== - -diff-sequences@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.4.0.tgz#d783920ad8d06ec718a060d00196dfef25b132a5" - integrity sha512-YqiQzkrsmHMH5uuh8OdQFU9/ZpADnwzml8z0O5HvRNda+5UZsaX/xN+AAxfR2hWq1Y7HZnAzO9J5lJXOuDz2Ww== - dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -1372,123 +715,201 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -domexception@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304" - integrity sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg== - dependencies: - webidl-conversions "^5.0.0" - -electron-to-chromium@^1.4.17: - version "1.4.60" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.60.tgz#2b824d862f068a9794b2b75d66ad40ff44745f18" - integrity sha512-h53hbEiKC6hijelDgxgkgAUC3PKyR7TmIfvjHnBjUGPMg/3sBuTyG6eDormw+lY24uUJvHkUPzB8dpK8b2u3Sw== - -emittery@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860" - integrity sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - es-module-lexer@^0.9.3: version "0.9.3" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +esbuild-android-64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz#414a087cb0de8db1e347ecca6c8320513de433db" + integrity sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ== + esbuild-android-arm64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.11.tgz#b8b34e35a5b43880664ac7a3fbc70243d7ed894f" integrity sha512-6iHjgvMnC/SzDH8TefL+/3lgCjYWwAd1LixYfmz/TBPbDQlxcuSkX0yiQgcJB9k+ibZ54yjVXziIwGdlc+6WNw== +esbuild-android-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz#55de3bce2aab72bcd2b606da4318ad00fb9c8151" + integrity sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A== + esbuild-darwin-64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.11.tgz#ba805de98c0412e50fcd0636451797da157b0625" integrity sha512-olq84ikh6TiBcrs3FnM4eR5VPPlcJcdW8BnUz/lNoEWYifYQ+Po5DuYV1oz1CTFMw4k6bQIZl8T3yxL+ZT2uvQ== +esbuild-darwin-64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz#4259f23ed6b4cea2ec8a28d87b7fb9801f093754" + integrity sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA== + esbuild-darwin-arm64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.11.tgz#4d3573e448af76ce33e16231f3d9f878542d6fe8" integrity sha512-Jj0ieWLREPBYr/TZJrb2GFH8PVzDqiQWavo1pOFFShrcmHWDBDrlDxPzEZ67NF/Un3t6sNNmeI1TUS/fe1xARg== +esbuild-darwin-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.51.tgz#d77b4366a71d84e530ba019d540b538b295d494a" + integrity sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow== + esbuild-freebsd-64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.11.tgz#9294e6ab359ec93590ab097b0f2017de7c78ab4d" integrity sha512-C5sT3/XIztxxz/zwDjPRHyzj/NJFOnakAanXuyfLDwhwupKPd76/PPHHyJx6Po6NI6PomgVp/zi6GRB8PfrOTA== +esbuild-freebsd-64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz#27b6587b3639f10519c65e07219d249b01f2ad38" + integrity sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g== + esbuild-freebsd-arm64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.11.tgz#ae3e0b09173350b66cf8321583c9a1c1fcb8bb55" integrity sha512-y3Llu4wbs0bk4cwjsdAtVOesXb6JkdfZDLKMt+v1U3tOEPBdSu6w8796VTksJgPfqvpX22JmPLClls0h5p+L9w== +esbuild-freebsd-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz#63c435917e566808c71fafddc600aca4d78be1ec" + integrity sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg== + esbuild-linux-32@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.11.tgz#ddadbc7038aa5a6b1675bb1503cf79a0cbf1229a" integrity sha512-Cg3nVsxArjyLke9EuwictFF3Sva+UlDTwHIuIyx8qpxRYAOUTmxr2LzYrhHyTcGOleLGXUXYsnUVwKqnKAgkcg== +esbuild-linux-32@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz#c3da774143a37e7f11559b9369d98f11f997a5d9" + integrity sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w== + esbuild-linux-64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.11.tgz#d698e3ce3a231ddfeec6b5df8c546ae8883fcd88" integrity sha512-oeR6dIrrojr8DKVrxtH3xl4eencmjsgI6kPkDCRIIFwv4p+K7ySviM85K66BN01oLjzthpUMvBVfWSJkBLeRbg== +esbuild-linux-64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz#5d92b67f674e02ae0b4a9de9a757ba482115c4ae" + integrity sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA== + esbuild-linux-arm64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.11.tgz#85faea9fa99ad355b5e3b283197a4dfd0a110fe7" integrity sha512-+e6ZCgTFQYZlmg2OqLkg1jHLYtkNDksxWDBWNtI4XG4WxuOCUErLqfEt9qWjvzK3XBcCzHImrajkUjO+rRkbMg== +esbuild-linux-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz#dac84740516e859d8b14e1ecc478dd5241b10c93" + integrity sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw== + esbuild-linux-arm@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.11.tgz#74cbcf0b8a22c8401bcbcd6ebd4cbf2baca8b7b4" integrity sha512-vcwskfD9g0tojux/ZaTJptJQU3a7YgTYsptK1y6LQ/rJmw7U5QJvboNawqM98Ca3ToYEucfCRGbl66OTNtp6KQ== +esbuild-linux-arm@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz#b3ae7000696cd53ed95b2b458554ff543a60e106" + integrity sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg== + esbuild-linux-mips64le@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.11.tgz#490429211a3233f5cbbd8575b7758b897e42979a" integrity sha512-Rrs99L+p54vepmXIb87xTG6ukrQv+CzrM8eoeR+r/OFL2Rg8RlyEtCeshXJ2+Q66MXZOgPJaokXJZb9snq28bw== +esbuild-linux-mips64le@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz#dad10770fac94efa092b5a0643821c955a9dd385" + integrity sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A== + esbuild-linux-ppc64le@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.11.tgz#fc79d60710213b5b98345f5b138d48245616827a" integrity sha512-JyzziGAI0D30Vyzt0HDihp4s1IUtJ3ssV2zx9O/c+U/dhUHVP2TmlYjzCfCr2Q6mwXTeloDcLS4qkyvJtYptdQ== +esbuild-linux-ppc64le@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz#b68c2f8294d012a16a88073d67e976edd4850ae0" + integrity sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ== + +esbuild-linux-riscv64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz#608a318b8697123e44c1e185cdf6708e3df50b93" + integrity sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA== + esbuild-linux-s390x@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.11.tgz#ca4b93556bbba6cc95b0644f2ee93c982165ba07" integrity sha512-DoThrkzunZ1nfRGoDN6REwmo8ZZWHd2ztniPVIR5RMw/Il9wiWEYBahb8jnMzQaSOxBsGp0PbyJeVLTUatnlcw== +esbuild-linux-s390x@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz#c9e7791170a3295dba79b93aa452beb9838a8625" + integrity sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw== + esbuild-netbsd-64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.11.tgz#edb340bc6653c88804cac2253e21b74258fce165" integrity sha512-12luoRQz+6eihKYh1zjrw0CBa2aw3twIiHV/FAfjh2NEBDgJQOY4WCEUEN+Rgon7xmLh4XUxCQjnwrvf8zhACw== +esbuild-netbsd-64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz#0abd40b8c2e37fda6f5cc41a04cb2b690823d891" + integrity sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A== + esbuild-openbsd-64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.11.tgz#caeff5f946f79a60ce7bcf88871ca4c71d3476e8" integrity sha512-l18TZDjmvwW6cDeR4fmizNoxndyDHamGOOAenwI4SOJbzlJmwfr0jUgjbaXCUuYVOA964siw+Ix+A+bhALWg8Q== +esbuild-openbsd-64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz#4adba0b7ea7eb1428bb00d8e94c199a949b130e8" + integrity sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA== + esbuild-sunos-64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.11.tgz#90ce7e1749c2958a53509b4bae7b8f7d98f276d6" integrity sha512-bmYzDtwASBB8c+0/HVOAiE9diR7+8zLm/i3kEojUH2z0aIs6x/S4KiTuT5/0VKJ4zk69kXel1cNWlHBMkmavQg== +esbuild-sunos-64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz#4b8a6d97dfedda30a6e39607393c5c90ebf63891" + integrity sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA== + esbuild-windows-32@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.11.tgz#d067f4ce15b29efba6336e6a23597120fafe49ec" integrity sha512-J1Ys5hMid8QgdY00OBvIolXgCQn1ARhYtxPnG6ESWNTty3ashtc4+As5nTrsErnv8ZGUcWZe4WzTP/DmEVX1UQ== +esbuild-windows-32@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz#d31d8ca0c1d314fb1edea163685a423b62e9ac17" + integrity sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg== + esbuild-windows-64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.11.tgz#13e86dd37a6cd61a5276fa2d271342d0f74da864" integrity sha512-h9FmMskMuGeN/9G9+LlHPAoiQk9jlKDUn9yA0MpiGzwLa82E7r1b1u+h2a+InprbSnSLxDq/7p5YGtYVO85Mlg== +esbuild-windows-64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz#7d3c09c8652d222925625637bdc7e6c223e0085d" + integrity sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA== + esbuild-windows-arm64@0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.11.tgz#e8edfdf1d712085e6dc3fba18a0c225aaae32b75" integrity sha512-dZp7Krv13KpwKklt9/1vBFBMqxEQIO6ri7Azf8C+ob4zOegpJmha2XY9VVWP/OyQ0OWk6cEeIzMJwInRZrzBUQ== +esbuild-windows-arm64@0.14.51: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz#0220d2304bfdc11bc27e19b2aaf56edf183e4ae9" + integrity sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g== + esbuild@^0.14.11: version "0.14.11" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.11.tgz#ac4acb78907874832afb704c3afe58ad37715c27" @@ -1513,38 +934,42 @@ esbuild@^0.14.11: esbuild-windows-64 "0.14.11" esbuild-windows-arm64 "0.14.11" -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== +esbuild@^0.14.47: + version "0.14.51" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.51.tgz#1c8ecbc8db3710da03776211dc3ee3448f7aa51e" + integrity sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw== + optionalDependencies: + esbuild-android-64 "0.14.51" + esbuild-android-arm64 "0.14.51" + esbuild-darwin-64 "0.14.51" + esbuild-darwin-arm64 "0.14.51" + esbuild-freebsd-64 "0.14.51" + esbuild-freebsd-arm64 "0.14.51" + esbuild-linux-32 "0.14.51" + esbuild-linux-64 "0.14.51" + esbuild-linux-arm "0.14.51" + esbuild-linux-arm64 "0.14.51" + esbuild-linux-mips64le "0.14.51" + esbuild-linux-ppc64le "0.14.51" + esbuild-linux-riscv64 "0.14.51" + esbuild-linux-s390x "0.14.51" + esbuild-netbsd-64 "0.14.51" + esbuild-openbsd-64 "0.14.51" + esbuild-sunos-64 "0.14.51" + esbuild-windows-32 "0.14.51" + esbuild-windows-64 "0.14.51" + esbuild-windows-arm64 "0.14.51" escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - escape-string-regexp@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== -escodegen@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" - integrity sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - eslint-plugin-json@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/eslint-plugin-json/-/eslint-plugin-json-3.1.0.tgz#251108ba1681c332e0a442ef9513bd293619de67" @@ -1643,11 +1068,6 @@ espree@^9.2.0, espree@^9.3.0: acorn-jsx "^5.3.1" eslint-visitor-keys "^3.1.0" -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - esquery@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5" @@ -1692,36 +1112,6 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -exit@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" - integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= - -expect@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/expect/-/expect-27.4.6.tgz#f335e128b0335b6ceb4fcab67ece7cbd14c942e6" - integrity sha512-1M/0kAALIaj5LaG66sFJTbRsWTADnylly82cu4bspI0nl+pgP4E6Bh/aqdHlTUjul06K7xQnnrAoqfxVU0+/ag== - dependencies: - "@jest/types" "^27.4.2" - jest-get-type "^27.4.0" - jest-matcher-utils "^27.4.6" - jest-message-util "^27.4.6" - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -1748,7 +1138,7 @@ fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -1760,13 +1150,6 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" -fb-watchman@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" - integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== - dependencies: - bser "2.1.1" - fetch-blob@^3.1.2, fetch-blob@^3.1.4: version "3.2.0" resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.2.0.tgz#f09b8d4bbd45adc6f0c20b7e787e793e309dcce9" @@ -1794,14 +1177,6 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" -find-up@^4.0.0, find-up@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" - integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== - dependencies: - locate-path "^5.0.0" - path-exists "^4.0.0" - flat-cache@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" @@ -1824,15 +1199,6 @@ form-data@^2.2.0: combined-stream "^1.0.6" mime-types "^2.1.12" -form-data@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f" - integrity sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - formdata-polyfill@^4.0.10: version "4.0.10" resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" @@ -1845,7 +1211,7 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@^2.3.2, fsevents@~2.3.2: +fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -1860,15 +1226,10 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-func-name@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" + integrity sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig== get-intrinsic@^1.0.2: version "1.1.2" @@ -1879,21 +1240,11 @@ get-intrinsic@^1.0.2: has "^1.0.3" has-symbols "^1.0.3" -get-package-type@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" - integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== - get-port@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -1908,7 +1259,7 @@ glob-parent@^6.0.1: dependencies: is-glob "^4.0.3" -glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: +glob@^7.1.3: version "7.2.0" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== @@ -1989,18 +1340,6 @@ he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -html-encoding-sniffer@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3" - integrity sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ== - dependencies: - whatwg-encoding "^1.0.5" - -html-escaper@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" - integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== - http-basic@^8.1.1: version "8.1.3" resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" @@ -2011,15 +1350,6 @@ http-basic@^8.1.1: http-response-object "^3.0.1" parse-cache-control "^1.0.1" -http-proxy-agent@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" - integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== - dependencies: - "@tootallnate/once" "1" - agent-base "6" - debug "4" - http-response-object@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" @@ -2027,26 +1357,6 @@ http-response-object@^3.0.1: dependencies: "@types/node" "^10.0.3" -https-proxy-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" - integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== - dependencies: - agent-base "6" - debug "4" - -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@0.4.24: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - iconv-lite@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" @@ -2072,14 +1382,6 @@ import-fresh@^3.0.0, import-fresh@^3.2.1: parent-module "^1.0.0" resolve-from "^4.0.0" -import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== - dependencies: - pkg-dir "^4.2.0" - resolve-cwd "^3.0.0" - imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -2098,28 +1400,25 @@ inherits@2, inherits@^2.0.3, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -is-core-module@^2.8.0, is-core-module@^2.8.1: +is-core-module@^2.8.0: version "2.8.1" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== dependencies: has "^1.0.3" +is-core-module@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" + integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== + dependencies: + has "^1.0.3" + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-generator-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" - integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== - is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -2137,21 +1436,6 @@ is-number@^7.0.0: resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-potential-custom-element-name@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" - integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-typedarray@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -2162,398 +1446,7 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" - integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== - -istanbul-lib-instrument@^5.0.4, istanbul-lib-instrument@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.1.0.tgz#7b49198b657b27a730b8e9cb601f1e1bff24c59a" - integrity sha512-czwUz525rkOFDJxfKK6mYfIs9zBKILyrZQxjz3ABhjQXhbhFsSbo1HW/BFcsDnfJYJWA6thRR5/TUY2qs5W99Q== - dependencies: - "@babel/core" "^7.12.3" - "@babel/parser" "^7.14.7" - "@istanbuljs/schema" "^0.1.2" - istanbul-lib-coverage "^3.2.0" - semver "^6.3.0" - -istanbul-lib-report@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" - integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== - dependencies: - istanbul-lib-coverage "^3.0.0" - make-dir "^3.0.0" - supports-color "^7.1.0" - -istanbul-lib-source-maps@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" - integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^3.0.0" - source-map "^0.6.1" - -istanbul-reports@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.3.tgz#4bcae3103b94518117930d51283690960b50d3c2" - integrity sha512-x9LtDVtfm/t1GFiLl3NffC7hz+I1ragvgX1P/Lg1NlIagifZDKUkuuaAxH/qpwj2IuEfD8G2Bs/UKp+sZ/pKkg== - dependencies: - html-escaper "^2.0.0" - istanbul-lib-report "^3.0.0" - -jest-changed-files@^27.4.2: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.4.2.tgz#da2547ea47c6e6a5f6ed336151bd2075736eb4a5" - integrity sha512-/9x8MjekuzUQoPjDHbBiXbNEBauhrPU2ct7m8TfCg69ywt1y/N+yYwGh3gCpnqUS3klYWDU/lSNgv+JhoD2k1A== - dependencies: - "@jest/types" "^27.4.2" - execa "^5.0.0" - throat "^6.0.1" - -jest-circus@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.4.6.tgz#d3af34c0eb742a967b1919fbb351430727bcea6c" - integrity sha512-UA7AI5HZrW4wRM72Ro80uRR2Fg+7nR0GESbSI/2M+ambbzVuA63mn5T1p3Z/wlhntzGpIG1xx78GP2YIkf6PhQ== - dependencies: - "@jest/environment" "^27.4.6" - "@jest/test-result" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - dedent "^0.7.0" - expect "^27.4.6" - is-generator-fn "^2.0.0" - jest-each "^27.4.6" - jest-matcher-utils "^27.4.6" - jest-message-util "^27.4.6" - jest-runtime "^27.4.6" - jest-snapshot "^27.4.6" - jest-util "^27.4.2" - pretty-format "^27.4.6" - slash "^3.0.0" - stack-utils "^2.0.3" - throat "^6.0.1" - -jest-cli@^27.4.7: - version "27.4.7" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.4.7.tgz#d00e759e55d77b3bcfea0715f527c394ca314e5a" - integrity sha512-zREYhvjjqe1KsGV15mdnxjThKNDgza1fhDT+iUsXWLCq3sxe9w5xnvyctcYVT5PcdLSjv7Y5dCwTS3FCF1tiuw== - dependencies: - "@jest/core" "^27.4.7" - "@jest/test-result" "^27.4.6" - "@jest/types" "^27.4.2" - chalk "^4.0.0" - exit "^0.1.2" - graceful-fs "^4.2.4" - import-local "^3.0.2" - jest-config "^27.4.7" - jest-util "^27.4.2" - jest-validate "^27.4.6" - prompts "^2.0.1" - yargs "^16.2.0" - -jest-config@^27.4.7: - version "27.4.7" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.4.7.tgz#4f084b2acbd172c8b43aa4cdffe75d89378d3972" - integrity sha512-xz/o/KJJEedHMrIY9v2ParIoYSrSVY6IVeE4z5Z3i101GoA5XgfbJz+1C8EYPsv7u7f39dS8F9v46BHDhn0vlw== - dependencies: - "@babel/core" "^7.8.0" - "@jest/test-sequencer" "^27.4.6" - "@jest/types" "^27.4.2" - babel-jest "^27.4.6" - chalk "^4.0.0" - ci-info "^3.2.0" - deepmerge "^4.2.2" - glob "^7.1.1" - graceful-fs "^4.2.4" - jest-circus "^27.4.6" - jest-environment-jsdom "^27.4.6" - jest-environment-node "^27.4.6" - jest-get-type "^27.4.0" - jest-jasmine2 "^27.4.6" - jest-regex-util "^27.4.0" - jest-resolve "^27.4.6" - jest-runner "^27.4.6" - jest-util "^27.4.2" - jest-validate "^27.4.6" - micromatch "^4.0.4" - pretty-format "^27.4.6" - slash "^3.0.0" - -jest-diff@^27.0.0, jest-diff@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.4.6.tgz#93815774d2012a2cbb6cf23f84d48c7a2618f98d" - integrity sha512-zjaB0sh0Lb13VyPsd92V7HkqF6yKRH9vm33rwBt7rPYrpQvS1nCvlIy2pICbKta+ZjWngYLNn4cCK4nyZkjS/w== - dependencies: - chalk "^4.0.0" - diff-sequences "^27.4.0" - jest-get-type "^27.4.0" - pretty-format "^27.4.6" - -jest-docblock@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-27.4.0.tgz#06c78035ca93cbbb84faf8fce64deae79a59f69f" - integrity sha512-7TBazUdCKGV7svZ+gh7C8esAnweJoG+SvcF6Cjqj4l17zA2q1cMwx2JObSioubk317H+cjcHgP+7fTs60paulg== - dependencies: - detect-newline "^3.0.0" - -jest-each@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-27.4.6.tgz#e7e8561be61d8cc6dbf04296688747ab186c40ff" - integrity sha512-n6QDq8y2Hsmn22tRkgAk+z6MCX7MeVlAzxmZDshfS2jLcaBlyhpF3tZSJLR+kXmh23GEvS0ojMR8i6ZeRvpQcA== - dependencies: - "@jest/types" "^27.4.2" - chalk "^4.0.0" - jest-get-type "^27.4.0" - jest-util "^27.4.2" - pretty-format "^27.4.6" - -jest-environment-jsdom@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-27.4.6.tgz#c23a394eb445b33621dfae9c09e4c8021dea7b36" - integrity sha512-o3dx5p/kHPbUlRvSNjypEcEtgs6LmvESMzgRFQE6c+Prwl2JLA4RZ7qAnxc5VM8kutsGRTB15jXeeSbJsKN9iA== - dependencies: - "@jest/environment" "^27.4.6" - "@jest/fake-timers" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/node" "*" - jest-mock "^27.4.6" - jest-util "^27.4.2" - jsdom "^16.6.0" - -jest-environment-node@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-27.4.6.tgz#ee8cd4ef458a0ef09d087c8cd52ca5856df90242" - integrity sha512-yfHlZ9m+kzTKZV0hVfhVu6GuDxKAYeFHrfulmy7Jxwsq4V7+ZK7f+c0XP/tbVDMQW7E4neG2u147hFkuVz0MlQ== - dependencies: - "@jest/environment" "^27.4.6" - "@jest/fake-timers" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/node" "*" - jest-mock "^27.4.6" - jest-util "^27.4.2" - -jest-get-type@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.4.0.tgz#7503d2663fffa431638337b3998d39c5e928e9b5" - integrity sha512-tk9o+ld5TWq41DkK14L4wox4s2D9MtTpKaAVzXfr5CUKm5ZK2ExcaFE0qls2W71zE/6R2TxxrK9w2r6svAFDBQ== - -jest-haste-map@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-27.4.6.tgz#c60b5233a34ca0520f325b7e2cc0a0140ad0862a" - integrity sha512-0tNpgxg7BKurZeFkIOvGCkbmOHbLFf4LUQOxrQSMjvrQaQe3l6E8x6jYC1NuWkGo5WDdbr8FEzUxV2+LWNawKQ== - dependencies: - "@jest/types" "^27.4.2" - "@types/graceful-fs" "^4.1.2" - "@types/node" "*" - anymatch "^3.0.3" - fb-watchman "^2.0.0" - graceful-fs "^4.2.4" - jest-regex-util "^27.4.0" - jest-serializer "^27.4.0" - jest-util "^27.4.2" - jest-worker "^27.4.6" - micromatch "^4.0.4" - walker "^1.0.7" - optionalDependencies: - fsevents "^2.3.2" - -jest-jasmine2@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-27.4.6.tgz#109e8bc036cb455950ae28a018f983f2abe50127" - integrity sha512-uAGNXF644I/whzhsf7/qf74gqy9OuhvJ0XYp8SDecX2ooGeaPnmJMjXjKt0mqh1Rl5dtRGxJgNrHlBQIBfS5Nw== - dependencies: - "@jest/environment" "^27.4.6" - "@jest/source-map" "^27.4.0" - "@jest/test-result" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/node" "*" - chalk "^4.0.0" - co "^4.6.0" - expect "^27.4.6" - is-generator-fn "^2.0.0" - jest-each "^27.4.6" - jest-matcher-utils "^27.4.6" - jest-message-util "^27.4.6" - jest-runtime "^27.4.6" - jest-snapshot "^27.4.6" - jest-util "^27.4.2" - pretty-format "^27.4.6" - throat "^6.0.1" - -jest-leak-detector@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-27.4.6.tgz#ed9bc3ce514b4c582637088d9faf58a33bd59bf4" - integrity sha512-kkaGixDf9R7CjHm2pOzfTxZTQQQ2gHTIWKY/JZSiYTc90bZp8kSZnUMS3uLAfwTZwc0tcMRoEX74e14LG1WapA== - dependencies: - jest-get-type "^27.4.0" - pretty-format "^27.4.6" - -jest-matcher-utils@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.4.6.tgz#53ca7f7b58170638590e946f5363b988775509b8" - integrity sha512-XD4PKT3Wn1LQnRAq7ZsTI0VRuEc9OrCPFiO1XL7bftTGmfNF0DcEwMHRgqiu7NGf8ZoZDREpGrCniDkjt79WbA== - dependencies: - chalk "^4.0.0" - jest-diff "^27.4.6" - jest-get-type "^27.4.0" - pretty-format "^27.4.6" - -jest-message-util@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.4.6.tgz#9fdde41a33820ded3127465e1a5896061524da31" - integrity sha512-0p5szriFU0U74czRSFjH6RyS7UYIAkn/ntwMuOwTGWrQIOh5NzXXrq72LOqIkJKKvFbPq+byZKuBz78fjBERBA== - dependencies: - "@babel/code-frame" "^7.12.13" - "@jest/types" "^27.4.2" - "@types/stack-utils" "^2.0.0" - chalk "^4.0.0" - graceful-fs "^4.2.4" - micromatch "^4.0.4" - pretty-format "^27.4.6" - slash "^3.0.0" - stack-utils "^2.0.3" - -jest-mock@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-27.4.6.tgz#77d1ba87fbd33ccb8ef1f061697e7341b7635195" - integrity sha512-kvojdYRkst8iVSZ1EJ+vc1RRD9llueBjKzXzeCytH3dMM7zvPV/ULcfI2nr0v0VUgm3Bjt3hBCQvOeaBz+ZTHw== - dependencies: - "@jest/types" "^27.4.2" - "@types/node" "*" - -jest-pnp-resolver@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c" - integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w== - -jest-regex-util@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.4.0.tgz#e4c45b52653128843d07ad94aec34393ea14fbca" - integrity sha512-WeCpMpNnqJYMQoOjm1nTtsgbR4XHAk1u00qDoNBQoykM280+/TmgA5Qh5giC1ecy6a5d4hbSsHzpBtu5yvlbEg== - -jest-resolve-dependencies@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.4.6.tgz#fc50ee56a67d2c2183063f6a500cc4042b5e2327" - integrity sha512-W85uJZcFXEVZ7+MZqIPCscdjuctruNGXUZ3OHSXOfXR9ITgbUKeHj+uGcies+0SsvI5GtUfTw4dY7u9qjTvQOw== - dependencies: - "@jest/types" "^27.4.2" - jest-regex-util "^27.4.0" - jest-snapshot "^27.4.6" - -jest-resolve@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.4.6.tgz#2ec3110655e86d5bfcfa992e404e22f96b0b5977" - integrity sha512-SFfITVApqtirbITKFAO7jOVN45UgFzcRdQanOFzjnbd+CACDoyeX7206JyU92l4cRr73+Qy/TlW51+4vHGt+zw== - dependencies: - "@jest/types" "^27.4.2" - chalk "^4.0.0" - graceful-fs "^4.2.4" - jest-haste-map "^27.4.6" - jest-pnp-resolver "^1.2.2" - jest-util "^27.4.2" - jest-validate "^27.4.6" - resolve "^1.20.0" - resolve.exports "^1.1.0" - slash "^3.0.0" - -jest-runner@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-27.4.6.tgz#1d390d276ec417e9b4d0d081783584cbc3e24773" - integrity sha512-IDeFt2SG4DzqalYBZRgbbPmpwV3X0DcntjezPBERvnhwKGWTW7C5pbbA5lVkmvgteeNfdd/23gwqv3aiilpYPg== - dependencies: - "@jest/console" "^27.4.6" - "@jest/environment" "^27.4.6" - "@jest/test-result" "^27.4.6" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/node" "*" - chalk "^4.0.0" - emittery "^0.8.1" - exit "^0.1.2" - graceful-fs "^4.2.4" - jest-docblock "^27.4.0" - jest-environment-jsdom "^27.4.6" - jest-environment-node "^27.4.6" - jest-haste-map "^27.4.6" - jest-leak-detector "^27.4.6" - jest-message-util "^27.4.6" - jest-resolve "^27.4.6" - jest-runtime "^27.4.6" - jest-util "^27.4.2" - jest-worker "^27.4.6" - source-map-support "^0.5.6" - throat "^6.0.1" - -jest-runtime@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-27.4.6.tgz#83ae923818e3ea04463b22f3597f017bb5a1cffa" - integrity sha512-eXYeoR/MbIpVDrjqy5d6cGCFOYBFFDeKaNWqTp0h6E74dK0zLHzASQXJpl5a2/40euBmKnprNLJ0Kh0LCndnWQ== - dependencies: - "@jest/environment" "^27.4.6" - "@jest/fake-timers" "^27.4.6" - "@jest/globals" "^27.4.6" - "@jest/source-map" "^27.4.0" - "@jest/test-result" "^27.4.6" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" - chalk "^4.0.0" - cjs-module-lexer "^1.0.0" - collect-v8-coverage "^1.0.0" - execa "^5.0.0" - glob "^7.1.3" - graceful-fs "^4.2.4" - jest-haste-map "^27.4.6" - jest-message-util "^27.4.6" - jest-mock "^27.4.6" - jest-regex-util "^27.4.0" - jest-resolve "^27.4.6" - jest-snapshot "^27.4.6" - jest-util "^27.4.2" - slash "^3.0.0" - strip-bom "^4.0.0" - -jest-serializer@^27.4.0: - version "27.4.0" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-27.4.0.tgz#34866586e1cae2388b7d12ffa2c7819edef5958a" - integrity sha512-RDhpcn5f1JYTX2pvJAGDcnsNTnsV9bjYPU8xcV+xPwOXnUPOQwf4ZEuiU6G9H1UztH+OapMgu/ckEVwO87PwnQ== - dependencies: - "@types/node" "*" - graceful-fs "^4.2.4" - -jest-snapshot@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-27.4.6.tgz#e2a3b4fff8bdce3033f2373b2e525d8b6871f616" - integrity sha512-fafUCDLQfzuNP9IRcEqaFAMzEe7u5BF7mude51wyWv7VRex60WznZIC7DfKTgSIlJa8aFzYmXclmN328aqSDmQ== - dependencies: - "@babel/core" "^7.7.2" - "@babel/generator" "^7.7.2" - "@babel/plugin-syntax-typescript" "^7.7.2" - "@babel/traverse" "^7.7.2" - "@babel/types" "^7.0.0" - "@jest/transform" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/babel__traverse" "^7.0.4" - "@types/prettier" "^2.1.5" - babel-preset-current-node-syntax "^1.0.0" - chalk "^4.0.0" - expect "^27.4.6" - graceful-fs "^4.2.4" - jest-diff "^27.4.6" - jest-get-type "^27.4.0" - jest-haste-map "^27.4.6" - jest-matcher-utils "^27.4.6" - jest-message-util "^27.4.6" - jest-util "^27.4.2" - natural-compare "^1.4.0" - pretty-format "^27.4.6" - semver "^7.3.2" - -jest-util@^27.0.0, jest-util@^27.4.2: +jest-util@^27.0.0: version "27.4.2" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.4.2.tgz#ed95b05b1adfd761e2cda47e0144c6a58e05a621" integrity sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA== @@ -2565,49 +1458,6 @@ jest-util@^27.0.0, jest-util@^27.4.2: graceful-fs "^4.2.4" picomatch "^2.2.3" -jest-validate@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-27.4.6.tgz#efc000acc4697b6cf4fa68c7f3f324c92d0c4f1f" - integrity sha512-872mEmCPVlBqbA5dToC57vA3yJaMRfIdpCoD3cyHWJOMx+SJwLNw0I71EkWs41oza/Er9Zno9XuTkRYCPDUJXQ== - dependencies: - "@jest/types" "^27.4.2" - camelcase "^6.2.0" - chalk "^4.0.0" - jest-get-type "^27.4.0" - leven "^3.1.0" - pretty-format "^27.4.6" - -jest-watcher@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.4.6.tgz#673679ebeffdd3f94338c24f399b85efc932272d" - integrity sha512-yKQ20OMBiCDigbD0quhQKLkBO+ObGN79MO4nT7YaCuQ5SM+dkBNWE8cZX0FjU6czwMvWw6StWbe+Wv4jJPJ+fw== - dependencies: - "@jest/test-result" "^27.4.6" - "@jest/types" "^27.4.2" - "@types/node" "*" - ansi-escapes "^4.2.1" - chalk "^4.0.0" - jest-util "^27.4.2" - string-length "^4.0.1" - -jest-worker@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.4.6.tgz#5d2d93db419566cb680752ca0792780e71b3273e" - integrity sha512-gHWJF/6Xi5CTG5QCvROr6GcmpIqNYpDJyc8A1h/DyXqH1tD6SnRCM0d3U5msV31D2LB/U+E0M+W4oyvKV44oNw== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^8.0.0" - -jest@^27.4.7: - version "27.4.7" - resolved "https://registry.yarnpkg.com/jest/-/jest-27.4.7.tgz#87f74b9026a1592f2da05b4d258e57505f28eca4" - integrity sha512-8heYvsx7nV/m8m24Vk26Y87g73Ba6ueUd0MWed/NXMhSZIm62U/llVbS0PJe1SHunbyXjJ/BqG1z9bFjGUIvTg== - dependencies: - "@jest/core" "^27.4.7" - import-local "^3.0.2" - jest-cli "^27.4.7" - joycon@^3.0.1: version "3.1.1" resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" @@ -2618,14 +1468,6 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.13.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -2633,39 +1475,6 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsdom@^16.6.0: - version "16.7.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710" - integrity sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw== - dependencies: - abab "^2.0.5" - acorn "^8.2.4" - acorn-globals "^6.0.0" - cssom "^0.4.4" - cssstyle "^2.3.0" - data-urls "^2.0.0" - decimal.js "^10.2.1" - domexception "^2.0.1" - escodegen "^2.0.0" - form-data "^3.0.0" - html-encoding-sniffer "^2.0.1" - http-proxy-agent "^4.0.1" - https-proxy-agent "^5.0.0" - is-potential-custom-element-name "^1.0.1" - nwsapi "^2.2.0" - parse5 "6.0.1" - saxes "^5.0.1" - symbol-tree "^3.2.4" - tough-cookie "^4.0.0" - w3c-hr-time "^1.0.2" - w3c-xmlserializer "^2.0.0" - webidl-conversions "^6.1.0" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^8.5.0" - ws "^7.4.6" - xml-name-validator "^3.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -2681,7 +1490,7 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json5@2.x, json5@^2.1.2: +json5@2.x: version "2.2.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== @@ -2693,16 +1502,6 @@ jsonc-parser@^3.0.0: resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" integrity sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA== -kleur@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" - integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -2711,20 +1510,10 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -locate-path@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" - integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== - dependencies: - p-locate "^4.1.0" +local-pkg@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.2.tgz#13107310b77e74a0e513147a131a2ba288176c2f" + integrity sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg== lodash.memoize@4.x: version "4.1.2" @@ -2736,11 +1525,18 @@ lodash.merge@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash@^4.17.21, lodash@^4.7.0: +lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== +loupe@^2.3.1: + version "2.3.4" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.4.tgz#7e0b9bffc76f148f9be769cb1321d3dcf3cb25f3" + integrity sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ== + dependencies: + get-func-name "^2.0.0" + lru-cache@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" @@ -2755,30 +1551,11 @@ magic-string@^0.25.2, magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.4" -make-dir@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" - integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== - dependencies: - semver "^6.0.0" - make-error@1.x: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== -makeerror@1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" - integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== - dependencies: - tmpl "1.0.5" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -2804,11 +1581,6 @@ mime-types@^2.1.12: dependencies: mime-db "1.51.0" -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -2831,6 +1603,11 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +nanoid@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab" + integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -2857,33 +1634,6 @@ node-fetch@^3.2.9: fetch-blob "^3.1.4" formdata-polyfill "^4.0.10" -node-int64@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" - integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= - -node-releases@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.1.tgz#3d1d395f204f1f2f29a54358b9fb678765ad2fc5" - integrity sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA== - -normalize-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -nwsapi@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - object-inspect@^1.9.0: version "1.12.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" @@ -2896,25 +1646,6 @@ once@^1.3.0: dependencies: wrappy "1" -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -optionator@^0.8.1: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - optionator@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" @@ -2927,25 +1658,6 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" -p-limit@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" - integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== - dependencies: - p-try "^2.0.0" - -p-locate@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" - integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== - dependencies: - p-limit "^2.2.0" - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -2958,22 +1670,12 @@ parse-cache-control@^1.0.1: resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== -parse5@6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" - integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== - -path-exists@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" - integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== - path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= -path-key@^3.0.0, path-key@^3.1.0: +path-key@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -2988,38 +1690,35 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.2, picomatch@^2.2.3: +picomatch@^2.2.2, picomatch@^2.2.3: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pirates@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b" - integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ== - -pkg-dir@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" - integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== +postcss@^8.4.14: + version "8.4.14" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.14.tgz#ee9274d5622b4858c1007a74d76e42e56fd21caf" + integrity sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig== dependencies: - find-up "^4.0.0" + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - prettier-linter-helpers@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" @@ -3032,15 +1731,6 @@ prettier@^2.5.1: resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== -pretty-format@^27.0.0, pretty-format@^27.4.6: - version "27.4.6" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.4.6.tgz#1b784d2f53c68db31797b2348fa39b49e31846b7" - integrity sha512-NblstegA1y/RJW2VyML+3LlpFjzx62cUrtBIKIWDXEDkjNeleA7Od7nrzcs/VLQvAeV4CgSYhrN39DRN88Qi/g== - dependencies: - ansi-regex "^5.0.1" - ansi-styles "^5.0.0" - react-is "^17.0.1" - process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -3053,20 +1743,7 @@ promise@^8.0.0: dependencies: asap "~2.0.6" -prompts@^2.0.1: - version "2.4.2" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" - integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== - dependencies: - kleur "^3.0.3" - sisteransi "^1.0.5" - -psl@^1.1.33: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -punycode@^2.1.0, punycode@^2.1.1: +punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== @@ -3083,11 +1760,6 @@ queue-microtask@^1.2.2: resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -react-is@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" - integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w== - readable-stream@^2.2.2: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" @@ -3106,33 +1778,11 @@ regexpp@^3.2.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve.exports@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" - integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== - resolve@^1.19.0: version "1.21.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.21.0.tgz#b51adc97f3472e6a5cf4444d34bc9d6b9037591f" @@ -3142,12 +1792,12 @@ resolve@^1.19.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -resolve@^1.20.0: - version "1.22.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== +resolve@^1.22.1: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: - is-core-module "^2.8.1" + is-core-module "^2.9.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -3156,7 +1806,7 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== -rimraf@^3.0.0, rimraf@^3.0.2: +rimraf@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== @@ -3228,6 +1878,13 @@ rollup@^2.63.0: optionalDependencies: fsevents "~2.3.2" +rollup@^2.75.6: + version "2.77.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.2.tgz#6b6075c55f9cc2040a5912e6e062151e42e2c4e3" + integrity sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g== + optionalDependencies: + fsevents "~2.3.2" + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -3240,30 +1897,18 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": +"safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -saxes@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-5.0.1.tgz#eebab953fa3b7608dbe94e5dadb15c888fa6696d" - integrity sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw== - dependencies: - xmlchars "^2.2.0" - -semver@7.x, semver@^7.3.2, semver@^7.3.5: +semver@7.x, semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== dependencies: lru-cache "^6.0.0" -semver@^6.0.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" @@ -3285,78 +1930,26 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.6" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" - integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== - -sisteransi@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" - integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== - slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== -source-map-support@^0.5.6: - version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== source-map@^0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - sourcemap-codec@^1.4.4: version "1.4.8" resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -stack-utils@^2.0.3: - version "2.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== - dependencies: - escape-string-regexp "^2.0.0" - -string-length@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" - integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== - dependencies: - char-regex "^1.0.2" - strip-ansi "^6.0.0" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -3364,23 +1957,13 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: +strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" -strip-bom@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" - integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" @@ -3393,38 +1976,18 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" -supports-color@^7.0.0, supports-color@^7.1.0: +supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== dependencies: has-flag "^4.0.0" -supports-color@^8.0.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-hyperlinks@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz#4f77b42488765891774b70c79babd87f9bd594bb" - integrity sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ== - dependencies: - has-flag "^4.0.0" - supports-color "^7.0.0" - supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -symbol-tree@^3.2.4: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - sync-request@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" @@ -3441,23 +2004,6 @@ sync-rpc@^1.2.1: dependencies: get-port "^3.1.0" -terminal-link@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" - integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== - dependencies: - ansi-escapes "^4.2.1" - supports-hyperlinks "^2.0.0" - -test-exclude@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" - integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== - dependencies: - "@istanbuljs/schema" "^0.1.2" - glob "^7.1.4" - minimatch "^3.0.4" - text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -3480,15 +2026,15 @@ then-request@^6.0.0: promise "^8.0.0" qs "^6.4.0" -throat@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375" - integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w== +tinypool@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.2.4.tgz#4d2598c4689d1a2ce267ddf3360a9c6b3925a20c" + integrity sha512-Vs3rhkUH6Qq1t5bqtb816oT+HeJTXfwt2cbPH17sWHIYKTotQIFPk3tf2fgqRrVyMDVOc1EnPgzIxfIulXVzwQ== -tmpl@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" - integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== +tinyspy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-1.0.0.tgz#0cb34587287b0432b33fe36a9bd945fe22b1eb89" + integrity sha512-FI5B2QdODQYDRjfuLF+OrJ8bjWRMCXokQPcwKm0W3IzcbUmBNv536cQc7eXGoAuXphZwgx1DFbqImwzz08Fnhw== to-fast-properties@^2.0.0: version "2.0.0" @@ -3502,22 +2048,6 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" -tough-cookie@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.0.0.tgz#d822234eeca882f991f0f908824ad2622ddbece4" - integrity sha512-tHdtEpQCMrc1YLrMaqXXcj6AxhYi/xgit6mZu1+EDWUn+qhUf8wMQoFIy9NXuq23zAwtcB0t/MjACGR18pcRbg== - dependencies: - psl "^1.1.33" - punycode "^2.1.1" - universalify "^0.1.2" - -tr46@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-2.1.0.tgz#fa87aa81ca5d5941da8cbf1f9b749dc969a4e240" - integrity sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw== - dependencies: - punycode "^2.1.1" - tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -3561,14 +2091,7 @@ type-check@^0.4.0, type-check@~0.4.0: dependencies: prelude-ls "^1.2.1" -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-detect@4.0.8: +type-detect@^4.0.0, type-detect@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== @@ -3578,18 +2101,6 @@ type-fest@^0.20.2: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -typedarray-to-buffer@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" - integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== - dependencies: - is-typedarray "^1.0.0" - typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -3600,11 +2111,6 @@ typescript@^4.7.4: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== -universalify@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -3622,14 +2128,32 @@ v8-compile-cache@^2.0.3: resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== -v8-to-istanbul@^8.1.0: - version "8.1.1" - resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz#77b752fd3975e31bbcef938f85e9bd1c7a8d60ed" - integrity sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w== +"vite@^2.9.12 || ^3.0.0-0", vite@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/vite/-/vite-3.0.4.tgz#c61688d6b97573e96cf5ac25f2d68597b5ce68e8" + integrity sha512-NU304nqnBeOx2MkQnskBQxVsa0pRAH5FphokTGmyy8M3oxbvw7qAXts2GORxs+h/2vKsD+osMhZ7An6yK6F1dA== dependencies: - "@types/istanbul-lib-coverage" "^2.0.1" - convert-source-map "^1.6.0" - source-map "^0.7.3" + esbuild "^0.14.47" + postcss "^8.4.14" + resolve "^1.22.1" + rollup "^2.75.6" + optionalDependencies: + fsevents "~2.3.2" + +vitest@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.19.1.tgz#8a89f4c873132d778d4206dbfbd6791c12f6d921" + integrity sha512-E/ZXpFMUahn731wzhMBNzWRp4mGgiZFT0xdHa32cbNO0CSaHpE9hTfteEU247Gi2Dula8uXo5vvrNB6dtszmQA== + dependencies: + "@types/chai" "^4.3.1" + "@types/chai-subset" "^1.3.3" + "@types/node" "*" + chai "^4.3.6" + debug "^4.3.4" + local-pkg "^0.4.2" + tinypool "^0.2.4" + tinyspy "^1.0.0" + vite "^2.9.12 || ^3.0.0-0" vscode-json-languageservice@^4.1.6: version "4.2.0" @@ -3662,27 +2186,6 @@ vscode-uri@^3.0.3: resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.3.tgz#a95c1ce2e6f41b7549f86279d19f47951e4f4d84" integrity sha512-EcswR2S8bpR7fD0YPeS7r2xXExrScVMxg4MedACaWHEtx9ftCF/qHG1xGkolzTPcEmjTavCQgbVzHUIdTMzFGA== -w3c-hr-time@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-2.0.0.tgz#3e7104a05b75146cc60f564380b7f683acf1020a" - integrity sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA== - dependencies: - xml-name-validator "^3.0.0" - -walker@^1.0.7: - version "1.0.8" - resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" - integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== - dependencies: - makeerror "1.0.12" - web-streams-polyfill@^3.0.3: version "3.2.1" resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" @@ -3693,28 +2196,11 @@ webidl-conversions@^3.0.0: resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== -webidl-conversions@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff" - integrity sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA== - -webidl-conversions@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz#9111b4d7ea80acd40f5270d666621afa78b69514" - integrity sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w== - webidl-conversions@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== -whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - whatwg-encoding@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" @@ -3722,11 +2208,6 @@ whatwg-encoding@^2.0.0: dependencies: iconv-lite "0.6.3" -whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - whatwg-mimetype@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" @@ -3740,15 +2221,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -whatwg-url@^8.0.0, whatwg-url@^8.5.0: - version "8.7.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-8.7.0.tgz#656a78e510ff8f3937bc0bcbe9f5c0ac35941b77" - integrity sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg== - dependencies: - lodash "^4.7.0" - tr46 "^2.1.0" - webidl-conversions "^6.1.0" - which@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" @@ -3756,74 +2228,22 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -word-wrap@^1.2.3, word-wrap@~1.2.3: +word-wrap@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -write-file-atomic@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" - integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== - dependencies: - imurmurhash "^0.1.4" - is-typedarray "^1.0.0" - signal-exit "^3.0.2" - typedarray-to-buffer "^3.1.5" - -ws@^7.4.6: - version "7.5.6" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" - integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@20.x, yargs-parser@^20.2.2: +yargs-parser@20.x: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - -yargs@^16.2.0: - version "16.2.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" From e4bc241efe5661f839caf369a70f250623ca53b2 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Fri, 29 Jul 2022 20:59:11 +0100 Subject: [PATCH 08/44] Migrated build to vite --- .codesandbox/ci.json | 7 + package.json | 36 +- rollup.config.js | 94 ------ scripts/base-config.mjs | 35 ++ scripts/build.mjs | 78 +++++ scripts/validate.mjs | 78 +++++ yarn.lock | 720 +++++++++++++--------------------------- 7 files changed, 446 insertions(+), 602 deletions(-) create mode 100644 .codesandbox/ci.json delete mode 100644 rollup.config.js create mode 100644 scripts/base-config.mjs create mode 100644 scripts/build.mjs create mode 100644 scripts/validate.mjs diff --git a/.codesandbox/ci.json b/.codesandbox/ci.json new file mode 100644 index 0000000..b7731e0 --- /dev/null +++ b/.codesandbox/ci.json @@ -0,0 +1,7 @@ +{ + "sandboxes": [ + "new", + "simple-parser-2xxljf" + ], + "node": "16" +} diff --git a/package.json b/package.json index cf2f974..e8f2f54 100644 --- a/package.json +++ b/package.json @@ -2,32 +2,28 @@ "name": "@iiif/parser", "version": "1.0.10", "license": "MIT", - "main": "dist/cjs/index.js", - "module": "dist/esm/index.mjs", - "types": "./dist/index.d.ts", + "main": "dist/bundle/cjs/index.js", + "module": "dist/bundle/esm/index.mjs", + "types": "dist/index.d.ts", "files": [ "dist" ], "exports": { ".": { - "require": "./dist/cjs/index.js", - "import": "./dist/esm/index.mjs", - "default": "./dist/index.umd.js" + "require": "./dist/bundle/cjs/index.js", + "import": "./dist/bundle/esm/index.mjs" }, "./presentation-2": { "require": "./dist/presentation-2/cjs/index.js", - "import": "./dist/presentation-2/esm/index.mjs", - "default": "./dist/presentation-2/index.umd.js" + "import": "./dist/presentation-2/esm/index.mjs" }, "./presentation-3": { - "require": "./dist/cjs/index.js", - "import": "./dist/esm/index.mjs", - "default": "./dist/index.umd.js" + "require": "./dist/bundle/cjs/index.js", + "import": "./dist/bundle/esm/index.mjs" }, "./strict": { "require": "./dist/strict/cjs/index.js", - "import": "./dist/strict/esm/index.mjs", - "default": "./dist/strict/index.umd.js" + "import": "./dist/strict/esm/index.mjs" }, "./upgrader": "./dist/upgrader/index.umd.js" }, @@ -44,12 +40,15 @@ ], "upgrader": [ "dist/upgrader/index.d.ts" + ], + "strict": [ + "dist/strict/index.d.ts" ] } }, "scripts": { - "build": "tsc -p . --declaration --emitDeclarationOnly && rollup -c", - "prepublishOnly": "tsc -p . --declaration --emitDeclarationOnly && rollup -c", + "build": "node ./scripts/build.mjs", + "prepublishOnly": "node ./scripts/build.mjs && node scripts/validate.mjs", "test": "vitest" }, "dependencies": { @@ -63,14 +62,15 @@ "@hyperion-framework/validator": "^1.1.0", "@typescript-eslint/eslint-plugin": "^5.9.1", "@typescript-eslint/parser": "^5.9.1", + "chalk": "^5.0.1", + "dts-bundle-generator": "^6.12.0", "eslint": "^8.7.0", "eslint-plugin-json": "^3.1.0", "eslint-plugin-prettier": "^4.0.0", + "execa": "^6.1.0", "node-fetch": "^3.2.9", "prettier": "^2.5.1", - "rollup": "^2.63.0", - "rollup-library-template": "^1.0.1", - "ts-jest": "^27.1.3", + "terser": "^5.14.2", "tslib": "^2.4.0", "typescript": "^4.7.4", "vite": "^3.0.4", diff --git a/rollup.config.js b/rollup.config.js deleted file mode 100644 index 8c6e446..0000000 --- a/rollup.config.js +++ /dev/null @@ -1,94 +0,0 @@ -import { createRollupConfig, createTypeConfig } from 'rollup-library-template'; - -const baseConfig = { - filesize: true, - minify: true, -}; - -// Roll up configs -export default [ - createTypeConfig({ - source: './.build/types/index.d.ts', - }), - createTypeConfig({ - source: './.build/types/presentation-2/index.d.ts', - dist: './dist/presentation-2/index.d.ts', - }), - createTypeConfig({ - source: './.build/types/presentation-3/strict-upgrade.d.ts', - dist: './dist/strict/index.d.ts', - }), - createTypeConfig({ - source: './.build/types/upgrader.d.ts', - dist: './dist/upgrader/index.d.ts', - }), - - // UMD bundle will have everything. - createRollupConfig({ - ...baseConfig, - inlineDynamicImports: true, - input: './src/index.umd.ts', - distPreset: 'umd', - distOptions: { - globalName: 'IIIFParser', - globals: {}, - }, - }), - - // import {} from '@iiif/parser'; - // import {} from '@iiif/parser/presentation-3'; - createRollupConfig({ - ...baseConfig, - input: './src/index.ts', - distPreset: 'esm', - }), - createRollupConfig({ - ...baseConfig, - input: './src/index.ts', - distPreset: 'cjs', - }), - - // import {} from '@iiif/parser/presentation-2'; - createRollupConfig({ - ...baseConfig, - dist: 'dist/presentation-2', - input: './src/presentation-2/index.ts', - distPreset: 'esm', - }), - createRollupConfig({ - ...baseConfig, - dist: 'dist/presentation-2', - input: './src/presentation-2/index.ts', - distPreset: 'cjs', - }), - - // import {} from '@iiif/parser/strict'; - createRollupConfig({ - ...baseConfig, - dist: 'dist/strict', - input: './src/presentation-3/strict-upgrade.ts', - distPreset: 'esm', - }), - createRollupConfig({ - ...baseConfig, - dist: 'dist/strict', - input: './src/presentation-3/strict-upgrade.ts', - distPreset: 'cjs', - }), - - // Standalone upgrader - createRollupConfig({ - ...baseConfig, - inlineDynamicImports: true, - input: './src/upgrader.ts', - distPreset: 'umd', - dist: 'dist/upgrader', - distOptions: { - globalName: 'IIIFUpgrader', - globals: {}, - }, - extra: { - treeshake: true, - }, - }), -]; diff --git a/scripts/base-config.mjs b/scripts/base-config.mjs new file mode 100644 index 0000000..3fce1df --- /dev/null +++ b/scripts/base-config.mjs @@ -0,0 +1,35 @@ +/** + * @param options {{ external: string[]; entry: string; name: string; globalName: string; outDir?: string; react?: boolean; globals: Record }} + */ +export function defineConfig(options) { + return { + build: { + sourcemap: true, + outDir: options.outDir || `dist/${options.name}`, + lib: { + entry: options.entry, + name: options.globalName, + formats: options.globalName ? ['umd'] : ['es', 'cjs'], + fileName: (format) => { + if (format === 'umd') { + return `index.umd.js`; + } + if (format === 'es') { + return `esm/${options.name}.mjs`; + } + return `${format}/${options.name}.js`; + }, + }, + minify: 'terser', + plugins: [], + rollupOptions: { + treeshake: true, + external: options.external, + output: { + globals: options.globals, + inlineDynamicImports: !!options.globalName, + }, + }, + }, + }; +} diff --git a/scripts/build.mjs b/scripts/build.mjs new file mode 100644 index 0000000..5140bb0 --- /dev/null +++ b/scripts/build.mjs @@ -0,0 +1,78 @@ +import { defineConfig } from './base-config.mjs'; +import { build } from 'vite'; +import chalk from 'chalk'; +import { execa } from "execa"; + +(async () => { + + const DIST = 'dist'; + + // Main UMD build. + buildMsg('UMD'); + await build( + defineConfig({ + entry: `src/index.ts`, + name: 'index', + outDir: DIST, + globalName: 'IIIFParser', + }) + ); + + buildMsg('@iiif/parser/presentation-3'); + await build( + defineConfig({ + entry: `src/index.ts`, + name: 'index', + outDir: `${DIST}/bundle`, + }) + ); + + buildMsg('@iiif/parser/presentation-2'); + await build( + defineConfig({ + entry: './src/presentation-2/index.ts', + name: 'index', + outDir: `${DIST}/presentation-2`, + }) + ) + + buildMsg('@iiif/parser/strict'); + await build( + defineConfig({ + entry: './src/presentation-3/strict-upgrade.ts', + name: 'index', + outDir: `${DIST}/strict`, + }) + ) + + buildMsg('@iiif/parser/upgrader'); + await build( + defineConfig({ + entry: `src/upgrader.ts`, + name: 'index', + outDir: `${DIST}/upgrader`, + globalName: 'IIIFUpgrader', + }) + ); + + buildMsg('Types'); + + listItem('@iiif/parser'); + await execa('./node_modules/.bin/dts-bundle-generator', [`--out-file=${DIST}/index.d.ts`, './src/index.ts']) + + listItem('@iiif/parser/presentation-3'); + await execa('./node_modules/.bin/dts-bundle-generator', [`--out-file=${DIST}/presentation-2/index.d.ts`, './src/presentation-2/index.ts']) + + listItem('@iiif/parser/strict'); + await execa('./node_modules/.bin/dts-bundle-generator', [`--out-file=${DIST}/strict/index.d.ts`, './src/presentation-3/strict-upgrade.ts']) + + listItem('@iiif/parser/upgrader'); + await execa('./node_modules/.bin/dts-bundle-generator', [`--out-file=${DIST}/upgrader/index.d.ts`, './src/upgrader.ts']) + + function buildMsg(name) { + console.log(chalk.grey(`\n\nBuilding ${chalk.blue(name)}\n`)); + } + function listItem(name) { + console.log(chalk.gray(`- ${chalk.green(name)}`)); + } +})(); diff --git a/scripts/validate.mjs b/scripts/validate.mjs new file mode 100644 index 0000000..03813c3 --- /dev/null +++ b/scripts/validate.mjs @@ -0,0 +1,78 @@ +import { promises as FS } from "node:fs"; +import chalk from "chalk"; + +const pkgJson = await FS.readFile(`./package.json`); +const pkg = JSON.parse(pkgJson.toString()); + +let _indent = 2; +let _indentBy = 4; + +function logWithIndent(msg) { + console.log(chalk.gray(`${new Array(_indent + 1).fill("").join(" ")}${msg}`)); +} + +async function checkFile(file, description) { + logWithIndent(`${description ? `"${chalk.cyanBright(description)}": ` : ''}${chalk.blue(`"${file}"`)} ${chalk.green(`✓`)} exists`); + await FS.stat(file); +} + +function indent() { + _indent += _indentBy; +} + +function dedent(arr = false) { + _indent -= _indentBy; + logWithIndent(arr ? ']' : '}'); +} + +console.log(chalk.gray(` +Validating ${chalk.blue(`package.json`)} +`)) + +logWithIndent(`{`); + +await checkFile(pkg.main, "main"); +await checkFile(pkg.module, "module"); +await checkFile(pkg.types, "types"); + +const exportKeys = Object.keys(pkg.exports); +logWithIndent(`"exports": {`); +indent(); +for (const exportKey of exportKeys) { + if (typeof pkg.exports[exportKey] === "string") { + await checkFile(pkg.exports[exportKey], exportKey); + continue; + } + logWithIndent(`"${exportKey}": {`); + const variations = Object.keys(pkg.exports[exportKey]); + indent(); + for (const variation of variations) { + await checkFile(pkg.exports[exportKey][variation], variation); + } + dedent(); +} +dedent(); + + +const typesVersionKeys = Object.keys(pkg.typesVersions); +logWithIndent(`"typesVersions": {`); +indent(); +for (const typesVersionKey of typesVersionKeys) { + const variations = Object.keys(pkg.typesVersions[typesVersionKey]); + logWithIndent(`"${typesVersionKey}": {`); + indent(); + for (const variation of variations) { + const listOfTypes = pkg.typesVersions[typesVersionKey][variation]; + logWithIndent(`"${variation}": [`); + indent(); + for (const pathToTypescriptFile of listOfTypes) { + await checkFile(pathToTypescriptFile); + } + dedent(true); + } + dedent(); +} +dedent(); + +console.log(chalk.greenBright(`\n\n ✓ package.json is valid`)); + diff --git a/yarn.lock b/yarn.lock index e377f81..b224400 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,121 +2,6 @@ # yarn lockfile v1 -"@babel/code-frame@^7.16.0", "@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" - -"@babel/generator@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.16.7.tgz#b42bf46a3079fa65e1544135f32e7958f048adbb" - integrity sha512-/ST3Sg8MLGY5HVYmrjOgL60ENux/HfO/CsUh7y4MalThufhE/Ff/6EibFDHi4jiDCaWfJKoqbE6oTh21c5hrRg== - dependencies: - "@babel/types" "^7.16.7" - jsesc "^2.5.1" - source-map "^0.5.0" - -"@babel/helper-environment-visitor@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz#ff484094a839bde9d89cd63cba017d7aae80ecd7" - integrity sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-function-name@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz#f1ec51551fb1c8956bc8dd95f38523b6cf375f8f" - integrity sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA== - dependencies: - "@babel/helper-get-function-arity" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/helper-get-function-arity@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz#ea08ac753117a669f1508ba06ebcc49156387419" - integrity sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/highlight@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.7.tgz#81a01d7d675046f0d96f82450d9d9578bdfd6b0b" - integrity sha512-aKpPMfLvGO3Q97V0qhw/V2SWNWlwfJknuwAunU7wZLSfrM4xTBvg7E5opUVi1kJTBKihE38CPg4nBiqX83PWYw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.16.7", "@babel/parser@^7.6.2": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.16.7.tgz#d372dda9c89fcec340a82630a9f533f2fe15877e" - integrity sha512-sR4eaSrnM7BV7QPzGfEX5paG/6wrZM3I0HDzfIAK06ESvo9oy3xBuVBxE3MbQaKNhvg8g/ixjMWo2CGpzpHsDA== - -"@babel/template@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/traverse@^7.6.2": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.16.7.tgz#dac01236a72c2560073658dd1a285fe4e0865d76" - integrity sha512-8KWJPIb8c2VvY8AJrydh6+fVRo2ODx1wYBU2398xJVq0JomuLBZmVQzLPBblJgHIGYG4znCpUZUZ0Pt2vdmVYQ== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.16.7" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.16.7": - version "7.16.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.16.7.tgz#4ed19d51f840ed4bd5645be6ce40775fecf03159" - integrity sha512-E8HuV7FO9qLpx6OtoGfUQ2cjIYnbFwvZWYBS+87EwtdMvmUPJSwykpovFB+8insbpF0uJcpr8KMUi64XZntZcg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - -"@betit/rollup-plugin-rename-extensions@^0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@betit/rollup-plugin-rename-extensions/-/rollup-plugin-rename-extensions-0.1.0.tgz#ea9c02087a7d01916565b3dec689b3427e2c5a03" - integrity sha512-ljSOXV2NshoBf1m+Xc/3WlrinaXK/ho4RL1E5GJ6/YZnJeQ2iDnBMWonaNEJ+DMrAwuZ4TcH47eR7rYbv25Nnw== - dependencies: - "@babel/parser" "^7.6.2" - "@babel/traverse" "^7.6.2" - magic-string "^0.25.2" - rollup-pluginutils "^2.8.2" - "@eslint/eslintrc@^1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" @@ -190,6 +75,46 @@ "@types/yargs" "^16.0.0" chalk "^4.0.0" +"@jridgewell/gen-mapping@^0.3.0": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.14" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" + integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -211,42 +136,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@rollup/plugin-json@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" - integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== - dependencies: - "@rollup/pluginutils" "^3.0.8" - -"@rollup/plugin-node-resolve@^13.1.3": - version "13.1.3" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.1.3.tgz#2ed277fb3ad98745424c1d2ba152484508a92d79" - integrity sha512-BdxNk+LtmElRo5d06MGY4zoepyrXX1tkzX2hrnPEZ53k78GuOMWLqmJDGIIOPwVRIFZrLQOo+Yr6KtCuLIA0AQ== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - builtin-modules "^3.1.0" - deepmerge "^4.2.2" - is-module "^1.0.0" - resolve "^1.19.0" - -"@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@rollup/pluginutils@^4.1.1": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.1.2.tgz#ed5821c15e5e05e32816f5fb9ec607cdf5a75751" - integrity sha512-ROn4qvkxP9SyPeHaf7uQC/GPFY6L/OWy9+bd9AwcjOAWQwxRscoEyAUD8qCY5o5iL4jqQwoLk2kaTKJPb/HwzQ== - dependencies: - estree-walker "^2.0.1" - picomatch "^2.2.2" - "@types/chai-subset@^1.3.3": version "1.3.3" resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94" @@ -266,11 +155,6 @@ dependencies: "@types/node" "*" -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - "@types/form-data@0.0.33": version "0.0.33" resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" @@ -327,13 +211,6 @@ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" - "@types/yargs-parser@*": version "20.2.1" resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" @@ -431,6 +308,11 @@ acorn-jsx@^5.3.1: resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== +acorn@^8.5.0: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + acorn@^8.7.0: version "8.7.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.0.tgz#90951fde0f8f09df93549481e5fc141445b791cf" @@ -461,14 +343,7 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.1.0: +ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== @@ -532,11 +407,6 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -builtin-modules@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" - integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== - call-bind@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -568,15 +438,6 @@ chai@^4.3.6: pathval "^1.1.1" type-detect "^4.0.5" -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - chalk@^4.0.0: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -585,6 +446,11 @@ chalk@^4.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" + integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== + check-error@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" @@ -595,12 +461,14 @@ ci-info@^3.2.0: resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== dependencies: - color-name "1.1.3" + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" color-convert@^2.0.1: version "2.0.1" @@ -609,11 +477,6 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" @@ -626,6 +489,11 @@ combined-stream@^1.0.6: dependencies: delayed-stream "~1.0.0" +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -646,7 +514,7 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cross-spawn@^7.0.2: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -665,7 +533,7 @@ data-uri-to-buffer@^4.0.0: resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz#b5db46aea50f6176428ac05b73be39a57701a64b" integrity sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA== -debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.3: +debug@^4.1.1, debug@^4.3.2: version "4.3.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== @@ -691,11 +559,6 @@ deep-is@^0.1.3: resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -715,121 +578,74 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -es-module-lexer@^0.9.3: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +dts-bundle-generator@^6.12.0: + version "6.12.0" + resolved "https://registry.yarnpkg.com/dts-bundle-generator/-/dts-bundle-generator-6.12.0.tgz#0a221bdce5fdd309a56c8556e645f16ed87ab07d" + integrity sha512-k/QAvuVaLIdyWRUHduDrWBe4j8PcE6TDt06+f32KHbW7/SmUPbX1O23fFtQgKwUyTBkbIjJFOFtNrF97tJcKug== + dependencies: + typescript ">=3.0.1" + yargs "^17.2.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== esbuild-android-64@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz#414a087cb0de8db1e347ecca6c8320513de433db" integrity sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ== -esbuild-android-arm64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.11.tgz#b8b34e35a5b43880664ac7a3fbc70243d7ed894f" - integrity sha512-6iHjgvMnC/SzDH8TefL+/3lgCjYWwAd1LixYfmz/TBPbDQlxcuSkX0yiQgcJB9k+ibZ54yjVXziIwGdlc+6WNw== - esbuild-android-arm64@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz#55de3bce2aab72bcd2b606da4318ad00fb9c8151" integrity sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A== -esbuild-darwin-64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.11.tgz#ba805de98c0412e50fcd0636451797da157b0625" - integrity sha512-olq84ikh6TiBcrs3FnM4eR5VPPlcJcdW8BnUz/lNoEWYifYQ+Po5DuYV1oz1CTFMw4k6bQIZl8T3yxL+ZT2uvQ== - esbuild-darwin-64@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz#4259f23ed6b4cea2ec8a28d87b7fb9801f093754" integrity sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA== -esbuild-darwin-arm64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.11.tgz#4d3573e448af76ce33e16231f3d9f878542d6fe8" - integrity sha512-Jj0ieWLREPBYr/TZJrb2GFH8PVzDqiQWavo1pOFFShrcmHWDBDrlDxPzEZ67NF/Un3t6sNNmeI1TUS/fe1xARg== - esbuild-darwin-arm64@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.51.tgz#d77b4366a71d84e530ba019d540b538b295d494a" integrity sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow== -esbuild-freebsd-64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.11.tgz#9294e6ab359ec93590ab097b0f2017de7c78ab4d" - integrity sha512-C5sT3/XIztxxz/zwDjPRHyzj/NJFOnakAanXuyfLDwhwupKPd76/PPHHyJx6Po6NI6PomgVp/zi6GRB8PfrOTA== - esbuild-freebsd-64@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz#27b6587b3639f10519c65e07219d249b01f2ad38" integrity sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g== -esbuild-freebsd-arm64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.11.tgz#ae3e0b09173350b66cf8321583c9a1c1fcb8bb55" - integrity sha512-y3Llu4wbs0bk4cwjsdAtVOesXb6JkdfZDLKMt+v1U3tOEPBdSu6w8796VTksJgPfqvpX22JmPLClls0h5p+L9w== - esbuild-freebsd-arm64@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz#63c435917e566808c71fafddc600aca4d78be1ec" integrity sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg== -esbuild-linux-32@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.11.tgz#ddadbc7038aa5a6b1675bb1503cf79a0cbf1229a" - integrity sha512-Cg3nVsxArjyLke9EuwictFF3Sva+UlDTwHIuIyx8qpxRYAOUTmxr2LzYrhHyTcGOleLGXUXYsnUVwKqnKAgkcg== - esbuild-linux-32@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz#c3da774143a37e7f11559b9369d98f11f997a5d9" integrity sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w== -esbuild-linux-64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.11.tgz#d698e3ce3a231ddfeec6b5df8c546ae8883fcd88" - integrity sha512-oeR6dIrrojr8DKVrxtH3xl4eencmjsgI6kPkDCRIIFwv4p+K7ySviM85K66BN01oLjzthpUMvBVfWSJkBLeRbg== - esbuild-linux-64@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz#5d92b67f674e02ae0b4a9de9a757ba482115c4ae" integrity sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA== -esbuild-linux-arm64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.11.tgz#85faea9fa99ad355b5e3b283197a4dfd0a110fe7" - integrity sha512-+e6ZCgTFQYZlmg2OqLkg1jHLYtkNDksxWDBWNtI4XG4WxuOCUErLqfEt9qWjvzK3XBcCzHImrajkUjO+rRkbMg== - esbuild-linux-arm64@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz#dac84740516e859d8b14e1ecc478dd5241b10c93" integrity sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw== -esbuild-linux-arm@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.11.tgz#74cbcf0b8a22c8401bcbcd6ebd4cbf2baca8b7b4" - integrity sha512-vcwskfD9g0tojux/ZaTJptJQU3a7YgTYsptK1y6LQ/rJmw7U5QJvboNawqM98Ca3ToYEucfCRGbl66OTNtp6KQ== - esbuild-linux-arm@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz#b3ae7000696cd53ed95b2b458554ff543a60e106" integrity sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg== -esbuild-linux-mips64le@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.11.tgz#490429211a3233f5cbbd8575b7758b897e42979a" - integrity sha512-Rrs99L+p54vepmXIb87xTG6ukrQv+CzrM8eoeR+r/OFL2Rg8RlyEtCeshXJ2+Q66MXZOgPJaokXJZb9snq28bw== - esbuild-linux-mips64le@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz#dad10770fac94efa092b5a0643821c955a9dd385" integrity sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A== -esbuild-linux-ppc64le@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.11.tgz#fc79d60710213b5b98345f5b138d48245616827a" - integrity sha512-JyzziGAI0D30Vyzt0HDihp4s1IUtJ3ssV2zx9O/c+U/dhUHVP2TmlYjzCfCr2Q6mwXTeloDcLS4qkyvJtYptdQ== - esbuild-linux-ppc64le@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.51.tgz#b68c2f8294d012a16a88073d67e976edd4850ae0" @@ -840,100 +656,41 @@ esbuild-linux-riscv64@0.14.51: resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.51.tgz#608a318b8697123e44c1e185cdf6708e3df50b93" integrity sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA== -esbuild-linux-s390x@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.11.tgz#ca4b93556bbba6cc95b0644f2ee93c982165ba07" - integrity sha512-DoThrkzunZ1nfRGoDN6REwmo8ZZWHd2ztniPVIR5RMw/Il9wiWEYBahb8jnMzQaSOxBsGp0PbyJeVLTUatnlcw== - esbuild-linux-s390x@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz#c9e7791170a3295dba79b93aa452beb9838a8625" integrity sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw== -esbuild-netbsd-64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.11.tgz#edb340bc6653c88804cac2253e21b74258fce165" - integrity sha512-12luoRQz+6eihKYh1zjrw0CBa2aw3twIiHV/FAfjh2NEBDgJQOY4WCEUEN+Rgon7xmLh4XUxCQjnwrvf8zhACw== - esbuild-netbsd-64@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz#0abd40b8c2e37fda6f5cc41a04cb2b690823d891" integrity sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A== -esbuild-openbsd-64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.11.tgz#caeff5f946f79a60ce7bcf88871ca4c71d3476e8" - integrity sha512-l18TZDjmvwW6cDeR4fmizNoxndyDHamGOOAenwI4SOJbzlJmwfr0jUgjbaXCUuYVOA964siw+Ix+A+bhALWg8Q== - esbuild-openbsd-64@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz#4adba0b7ea7eb1428bb00d8e94c199a949b130e8" integrity sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA== -esbuild-sunos-64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.11.tgz#90ce7e1749c2958a53509b4bae7b8f7d98f276d6" - integrity sha512-bmYzDtwASBB8c+0/HVOAiE9diR7+8zLm/i3kEojUH2z0aIs6x/S4KiTuT5/0VKJ4zk69kXel1cNWlHBMkmavQg== - esbuild-sunos-64@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz#4b8a6d97dfedda30a6e39607393c5c90ebf63891" integrity sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA== -esbuild-windows-32@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.11.tgz#d067f4ce15b29efba6336e6a23597120fafe49ec" - integrity sha512-J1Ys5hMid8QgdY00OBvIolXgCQn1ARhYtxPnG6ESWNTty3ashtc4+As5nTrsErnv8ZGUcWZe4WzTP/DmEVX1UQ== - esbuild-windows-32@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz#d31d8ca0c1d314fb1edea163685a423b62e9ac17" integrity sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg== -esbuild-windows-64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.11.tgz#13e86dd37a6cd61a5276fa2d271342d0f74da864" - integrity sha512-h9FmMskMuGeN/9G9+LlHPAoiQk9jlKDUn9yA0MpiGzwLa82E7r1b1u+h2a+InprbSnSLxDq/7p5YGtYVO85Mlg== - esbuild-windows-64@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz#7d3c09c8652d222925625637bdc7e6c223e0085d" integrity sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA== -esbuild-windows-arm64@0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.11.tgz#e8edfdf1d712085e6dc3fba18a0c225aaae32b75" - integrity sha512-dZp7Krv13KpwKklt9/1vBFBMqxEQIO6ri7Azf8C+ob4zOegpJmha2XY9VVWP/OyQ0OWk6cEeIzMJwInRZrzBUQ== - esbuild-windows-arm64@0.14.51: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.51.tgz#0220d2304bfdc11bc27e19b2aaf56edf183e4ae9" integrity sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g== -esbuild@^0.14.11: - version "0.14.11" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.11.tgz#ac4acb78907874832afb704c3afe58ad37715c27" - integrity sha512-xZvPtVj6yecnDeFb3KjjCM6i7B5TCAQZT77kkW/CpXTMnd6VLnRPKrUB1XHI1pSq6a4Zcy3BGueQ8VljqjDGCg== - optionalDependencies: - esbuild-android-arm64 "0.14.11" - esbuild-darwin-64 "0.14.11" - esbuild-darwin-arm64 "0.14.11" - esbuild-freebsd-64 "0.14.11" - esbuild-freebsd-arm64 "0.14.11" - esbuild-linux-32 "0.14.11" - esbuild-linux-64 "0.14.11" - esbuild-linux-arm "0.14.11" - esbuild-linux-arm64 "0.14.11" - esbuild-linux-mips64le "0.14.11" - esbuild-linux-ppc64le "0.14.11" - esbuild-linux-s390x "0.14.11" - esbuild-netbsd-64 "0.14.11" - esbuild-openbsd-64 "0.14.11" - esbuild-sunos-64 "0.14.11" - esbuild-windows-32 "0.14.11" - esbuild-windows-64 "0.14.11" - esbuild-windows-arm64 "0.14.11" - esbuild@^0.14.47: version "0.14.51" resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.14.51.tgz#1c8ecbc8db3710da03776211dc3ee3448f7aa51e" @@ -960,10 +717,10 @@ esbuild@^0.14.47: esbuild-windows-64 "0.14.51" esbuild-windows-arm64 "0.14.51" -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== escape-string-regexp@^4.0.0: version "4.0.0" @@ -1092,26 +849,26 @@ estraverse@^5.1.0, estraverse@^5.2.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -estree-walker@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - esutils@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +execa@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-6.1.0.tgz#cea16dee211ff011246556388effa0818394fb20" + integrity sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.1" + human-signals "^3.0.1" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^3.0.7" + strip-final-newline "^3.0.0" + fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -1165,11 +922,6 @@ file-entry-cache@^6.0.1: dependencies: flat-cache "^3.0.4" -filesize@^6.0.1: - version "6.4.0" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.4.0.tgz#914f50471dd66fdca3cefe628bd0cde4ef769bcd" - integrity sha512-mjFIpOHC4jbfcTfoh4rkWpI31mF7viw9ikj/JyLoKzqlwG/YsefKfvYlYhdYdg/9mtK2z1AzgN/0LvVQ3zdlSQ== - fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -1226,6 +978,11 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + get-func-name@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" @@ -1245,6 +1002,11 @@ get-port@^3.1.0: resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== +get-stream@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + glob-parent@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -1271,11 +1033,6 @@ glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - globals@^13.6.0, globals@^13.9.0: version "13.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" @@ -1313,11 +1070,6 @@ happy-dom@^6.0.4: whatwg-encoding "^2.0.0" whatwg-mimetype "^3.0.0" -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - has-flag@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" @@ -1357,6 +1109,11 @@ http-response-object@^3.0.1: dependencies: "@types/node" "^10.0.3" +human-signals@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-3.0.1.tgz#c740920859dafa50e5a3222da9d3bf4bb0e5eef5" + integrity sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ== + iconv-lite@0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" @@ -1400,13 +1157,6 @@ inherits@2, inherits@^2.0.3, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -is-core-module@^2.8.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211" - integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA== - dependencies: - has "^1.0.3" - is-core-module@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" @@ -1419,6 +1169,11 @@ is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -1426,16 +1181,16 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: dependencies: is-extglob "^2.1.1" -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -1458,16 +1213,6 @@ jest-util@^27.0.0: graceful-fs "^4.2.4" picomatch "^2.2.3" -joycon@^3.0.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" - integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -1475,11 +1220,6 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" @@ -1544,18 +1284,16 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -magic-string@^0.25.2, magic-string@^0.25.7: - version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== - dependencies: - sourcemap-codec "^1.4.4" - make-error@1.x: version "1.3.6" resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -1581,6 +1319,11 @@ mime-types@^2.1.12: dependencies: mime-db "1.51.0" +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" @@ -1593,11 +1336,6 @@ minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -module-details-from-path@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/module-details-from-path/-/module-details-from-path-1.0.3.tgz#114c949673e2a8a35e9d35788527aa37b679da2b" - integrity sha1-EUyUlnPiqKNenTV4hSeqN7Z52is= - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -1634,6 +1372,13 @@ node-fetch@^3.2.9: fetch-blob "^3.1.4" formdata-polyfill "^4.0.10" +npm-run-path@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.1.0.tgz#bc62f7f3f6952d9894bd08944ba011a6ee7b7e00" + integrity sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q== + dependencies: + path-key "^4.0.0" + object-inspect@^1.9.0: version "1.12.2" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" @@ -1646,6 +1391,13 @@ once@^1.3.0: dependencies: wrappy "1" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + optionator@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499" @@ -1680,6 +1432,11 @@ path-key@^3.1.0: resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" @@ -1700,7 +1457,7 @@ picocolors@^1.0.0: resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.2.2, picomatch@^2.2.3: +picomatch@^2.2.3: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== @@ -1778,20 +1535,16 @@ regexpp@^3.2.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== -resolve@^1.19.0: - version "1.21.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.21.0.tgz#b51adc97f3472e6a5cf4444d34bc9d6b9037591f" - integrity sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA== - dependencies: - is-core-module "^2.8.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - resolve@^1.22.1: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" @@ -1813,71 +1566,6 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -rollup-library-template@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rollup-library-template/-/rollup-library-template-1.0.1.tgz#72cf02887988a2d05322a0287c74e016521e20e2" - integrity sha512-Z1ljqLCne727vHPa7MR0x7lRPFnIy6PFz2D8oBbEh0Ua+Xi5d+PMSZf7aVzHOqSQx9gPRSuDBGVoxg94d/sENA== - dependencies: - "@betit/rollup-plugin-rename-extensions" "^0.1.0" - "@rollup/plugin-json" "^4.1.0" - "@rollup/plugin-node-resolve" "^13.1.3" - esbuild "^0.14.11" - rollup-plugin-dts "^4.1.0" - rollup-plugin-esbuild "^4.8.2" - rollup-plugin-rename "^1.0.1" - rollup-plugin-sizes "^1.0.4" - -rollup-plugin-dts@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-dts/-/rollup-plugin-dts-4.1.0.tgz#63b1e7de3970bb6d50877e60df2150a3892bc49c" - integrity sha512-rriXIm3jdUiYeiAAd1Fv+x2AxK6Kq6IybB2Z/IdoAW95fb4uRUurYsEYKa8L1seedezDeJhy8cfo8FEL9aZzqg== - dependencies: - magic-string "^0.25.7" - optionalDependencies: - "@babel/code-frame" "^7.16.0" - -rollup-plugin-esbuild@^4.8.2: - version "4.8.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-esbuild/-/rollup-plugin-esbuild-4.8.2.tgz#c097b93cd4b622e62206cadb5797589f548cf48c" - integrity sha512-wsaYNOjzTb6dN1qCIZsMZ7Q0LWiPJklYs2TDI8vJA2LUbvtPUY+17TC8C0vSat3jPMInfR9XWKdA7ttuwkjsGQ== - dependencies: - "@rollup/pluginutils" "^4.1.1" - debug "^4.3.3" - es-module-lexer "^0.9.3" - joycon "^3.0.1" - jsonc-parser "^3.0.0" - -rollup-plugin-rename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-rename/-/rollup-plugin-rename-1.0.1.tgz#d46a6a75373f133752e91564fd8238ae1162e687" - integrity sha512-gISyKmUmIMNcHASejxuxFWOSjnAM5ehqiMo0o0xnmCnguwojYXRZ6maM9xhlYKZ8PPCAo1oTSyC79wiI0LKX5g== - dependencies: - "@rollup/pluginutils" "^3.1.0" - estree-walker "^2.0.1" - magic-string "^0.25.7" - -rollup-plugin-sizes@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/rollup-plugin-sizes/-/rollup-plugin-sizes-1.0.4.tgz#a395699c69740b3075836893dbc7ee95c9ded02e" - integrity sha512-sZtFW+X/d4qytqFG6aKxhUj5aJadxOpMZbDrB9j9GpMKrXy2jt4RD/xbfnagbSbH+0q1kBcNd8L9tuoETjOu6g== - dependencies: - filesize "^6.0.1" - module-details-from-path "^1.0.3" - -rollup-pluginutils@^2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@^2.63.0: - version "2.63.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.63.0.tgz#fe2f7fec2133f3fab9e022b9ac245628d817c6bb" - integrity sha512-nps0idjmD+NXl6OREfyYXMn/dar3WGcyKn+KBzPdaLecub3x/LrId0wUcthcr8oZUAcZAR8NKcfGGFlNgGL1kQ== - optionalDependencies: - fsevents "~2.3.2" - rollup@^2.75.6: version "2.77.2" resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.2.tgz#6b6075c55f9cc2040a5912e6e062151e42e2c4e3" @@ -1930,6 +1618,11 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" +signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -1940,15 +1633,27 @@ source-map-js@^1.0.2: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== -source-map@^0.5.0: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" -sourcemap-codec@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +source-map@^0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" string_decoder@~1.1.1: version "1.1.1" @@ -1957,25 +1662,23 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -strip-ansi@^6.0.1: +strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== dependencies: ansi-regex "^5.0.1" +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - supports-color@^7.1.0: version "7.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" @@ -2004,6 +1707,16 @@ sync-rpc@^1.2.1: dependencies: get-port "^3.1.0" +terser@^5.14.2: + version "5.14.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.14.2.tgz#9ac9f22b06994d736174f4091aa368db896f1c10" + integrity sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -2036,11 +1749,6 @@ tinyspy@^1.0.0: resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-1.0.0.tgz#0cb34587287b0432b33fe36a9bd945fe22b1eb89" integrity sha512-FI5B2QdODQYDRjfuLF+OrJ8bjWRMCXokQPcwKm0W3IzcbUmBNv536cQc7eXGoAuXphZwgx1DFbqImwzz08Fnhw== -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -2106,7 +1814,7 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== -typescript@^4.7.4: +typescript@>=3.0.1, typescript@^4.7.4: version "4.7.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== @@ -2233,11 +1941,25 @@ word-wrap@^1.2.3: resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + yallist@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" @@ -2247,3 +1969,21 @@ yargs-parser@20.x: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-parser@^21.0.0: + version "21.0.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" + integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== + +yargs@^17.2.1: + version "17.5.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" From 4b7f54c0394e23092ca23fb1fd6c483885ab3bc2 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Fri, 29 Jul 2022 21:00:49 +0100 Subject: [PATCH 09/44] Removed unsued items --- jest.config.js | 5 ----- tsconfig.json | 6 +----- 2 files changed, 1 insertion(+), 10 deletions(-) delete mode 100644 jest.config.js diff --git a/jest.config.js b/jest.config.js deleted file mode 100644 index 8cbf894..0000000 --- a/jest.config.js +++ /dev/null @@ -1,5 +0,0 @@ -/** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */ -module.exports = { - preset: 'ts-jest', - testEnvironment: 'node', -}; \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 8bb7d83..210ae6b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -23,9 +23,6 @@ "declaration": true, "emitDeclarationOnly": true, "rootDir": "./src", - "paths": { - "@iiif/presentation-2": ["./node_modules/@hyperion-framework/presentation-2"], - }, "types": ["vitest/globals"] }, "include": [ @@ -34,7 +31,6 @@ ], "exclude": [ "node_modules", - "dist", - "lib", + "dist" ] } From 9182df1f70f73e6c86e9af83491872fef27a0ea4 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Fri, 29 Jul 2022 19:44:38 +0100 Subject: [PATCH 10/44] Added service recording during normalization --- CHANGELOG.md | 6 +- .../__snapshots__/cookbook.tests.ts.snap | 546 +++++++++++++++++- .../__snapshots__/normalize-test.ts.snap | 29 +- src/presentation-3/empty-types.ts | 7 + src/presentation-3/normalize.ts | 68 ++- .../serialize-presentation-3.ts | 21 +- src/presentation-3/serialize.ts | 6 +- src/presentation-3/traverse.ts | 12 +- 8 files changed, 635 insertions(+), 60 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03824a0..fe5d72b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Re-serializing the IIIF back to identical JSON - New traversal option for `SpecificResource` - New traversal option for `GeoJson` (e.g. from the `navPlace` extension) -- +- New storing of `Services` when normalizing [^4] ### Fixed - `[presentation-2]` `startCanvas` property on Sequences are now added to the Manifest when converting @@ -34,7 +34,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Bug where AV canvases would have height and width of `0` when serializing - Bug where custom `@context` on Manifest was not retained during serialization - Bug where Content Resources did not keep extra properties when serializing (e.g. `value` or `geometry`) -- +- Bug where serialization may sometimes include `UNSET` keyword. ### Removed - `posterCanvas` - hangover from pre-3.0, this will be ignored @@ -54,3 +54,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 [^2]: SpecificResource is defined by the W3C Annotation specification, but in short you can access the original reference by accessing `specificResource.source` [^3]: These properties were added to the specification pre-3.0 and then later removed. + +[^4]: This does not replace the inline services with references, instead it's a parallel store of normalized services. Editing tools will have to update both. This moves the problem of multiple services with different structures and fields to the user. The normalized structures will be specifically useful for loading Image services progressively in a store without affecting the serialisation of the IIIF. diff --git a/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap b/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap index f741e73..6ea4727 100644 --- a/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap @@ -908,7 +908,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0005-image-service https://iiif.io }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image": "Annotation", @@ -1176,7 +1182,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0006-text-language https://iiif.io }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother": { + "id": "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0006-text-language/annotation/p0001-image": "Annotation", @@ -1470,7 +1482,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0007-string-formats https://iiif.i }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0007-string-formats/annotation/p0001-image": "Annotation", @@ -1722,7 +1740,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0008-rights https://iiif.io/api/co }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0008-rights/annotation/p0001-image": "Annotation", @@ -2327,7 +2351,33 @@ exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/co }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0001-image": "Annotation", @@ -3096,7 +3146,33 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0001-image": "Annotation", @@ -3774,7 +3850,28 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02": { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03": { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04": { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05": { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image": "Annotation", @@ -4407,7 +4504,28 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-cont }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master": { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master": { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master": { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master": { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0001-image": "Annotation", @@ -5037,7 +5155,28 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-indi }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image": "Annotation", @@ -5775,7 +5914,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0014-accompanyingcanvas https://ii }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0": { + "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4": "ContentResource", @@ -6531,7 +6676,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image": "Annotation", @@ -7603,7 +7754,38 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap }, }, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master": { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master": { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master": { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master": { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master": { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master": { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image": "Annotation", @@ -8855,7 +9037,18 @@ exports[`Cookbook > Testing normalize %p (%p) 0029-metadata-anywhere https://iii }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural": { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray": { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0001-image": "Annotation", @@ -9755,7 +9948,33 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 http }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001": { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002": { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003": { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007": { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008": { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image": "Annotation", @@ -10523,7 +10742,33 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 http }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005": { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image": "Annotation", @@ -11719,7 +11964,38 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii }, }, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover": { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover": { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1": { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso": { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2": { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso": { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0001-image": "Annotation", @@ -12256,7 +12532,18 @@ exports[`Cookbook > Testing normalize %p (%p) 0033-choice https://iiif.io/api/co }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural": { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray": { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0033-choice/annotation/p0001-image": "Annotation", @@ -13252,7 +13539,53 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover": { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover": { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded": { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated": { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout": { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage": { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto": { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover": { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover": { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0001-image": "Annotation", @@ -13863,7 +14196,18 @@ exports[`Cookbook > Testing normalize %p (%p) 0036-composition-from-multiple-ima }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux": { + "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature": { + "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature", + "profile": "level2", + "type": "ImageService1", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0001-image": "Annotation", @@ -14961,7 +15305,33 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://fixtures.iiif.io/other/UCLA/kabuki_ezukushi_rtl.pdf": "ContentResource", @@ -15762,7 +16132,33 @@ exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/c }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://fixtures.iiif.io/other/UCLA/ezukushi_mods.xml": "ContentResource", @@ -18021,7 +18417,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0117-add-image-thumbnail https://i }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/annotation/p0000-image": "Annotation", @@ -18614,7 +19016,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0139-geolocate-canvas-fragment htt }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674": { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json": "Canvas", @@ -18927,7 +19335,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0154-geo-extension https://iiif.io }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon": { + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno-page/1": "AnnotationPage", @@ -19554,7 +19968,33 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image": "Annotation", @@ -19944,7 +20384,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_1-manifes }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/": { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image": "Annotation", @@ -20159,7 +20605,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_2-manifes }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/": { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image": "Annotation", @@ -20673,7 +21125,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/ }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://digital.library.ucla.edu/": "ContentResource", @@ -21027,7 +21485,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata": "Annotation", @@ -21317,7 +21781,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image": "Annotation", @@ -21606,7 +22076,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https: }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1": "Canvas", @@ -21856,7 +22332,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0269-embedded-or-referenced-annota }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json": "AnnotationPage", diff --git a/__tests__/presentation-3-parser/__snapshots__/normalize-test.ts.snap b/__tests__/presentation-3-parser/__snapshots__/normalize-test.ts.snap index 1a5ed34..f5ca655 100644 --- a/__tests__/presentation-3-parser/__snapshots__/normalize-test.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/normalize-test.ts.snap @@ -532,6 +532,33 @@ Object { }, }, "Selector": Object {}, - "Service": Object {}, + "Service": Object { + "https://example.org/iiif/auth/login": Object { + "@id": "https://example.org/iiif/auth/login", + "@type": "AuthCookieService1", + "id": "https://example.org/iiif/auth/login", + "label": "Login to Example Institution", + "profile": "http://iiif.io/api/auth/1/login", + "service": Array [ + Object { + "id": "https://example.org/iiif/auth/token", + "type": "AuthTokenService1", + }, + ], + "type": "AuthCookieService1", + }, + "https://example.org/iiif/auth/token": Object { + "@id": "https://example.org/iiif/auth/token", + "@type": "AuthTokenService1", + "id": "https://example.org/iiif/auth/token", + "profile": "http://iiif.io/api/auth/1/token", + "type": "AuthTokenService1", + }, + "https://example.org/service/example": Object { + "id": "https://example.org/service/example", + "profile": "https://example.org/docs/example-service.html", + "type": "ExampleExtensionService", + }, + }, } `; diff --git a/src/presentation-3/empty-types.ts b/src/presentation-3/empty-types.ts index c8e5afe..b19cae4 100644 --- a/src/presentation-3/empty-types.ts +++ b/src/presentation-3/empty-types.ts @@ -6,7 +6,9 @@ import { ManifestNormalized, RangeNormalized, ResourceProviderNormalized, + ServiceNormalized, } from '@iiif/presentation-3-normalized'; +import { _ServiceNormalized } from './serialize'; export const EMPTY = []; // Prevent accidental mutation @@ -174,3 +176,8 @@ export const emptyAgent: ResourceProviderNormalized = { seeAlso: EMPTY, homepage: EMPTY, }; + +export const emptyService: _ServiceNormalized = { + id: 'https://iiif-parser/empty-service', + type: 'UnknownService', +} as any; diff --git a/src/presentation-3/normalize.ts b/src/presentation-3/normalize.ts index 015eae4..d932f8e 100644 --- a/src/presentation-3/normalize.ts +++ b/src/presentation-3/normalize.ts @@ -11,6 +11,7 @@ import { Selector, SpecificResource, ResourceProvider, + Service, } from '@iiif/presentation-3'; import { EMPTY, @@ -20,9 +21,10 @@ import { emptyCollection, emptyManifest, emptyRange, + emptyService, } from './empty-types'; import { convertPresentation2 } from '../presentation-2'; -import { NormalizedEntity } from './serialize'; +import { CompatibleStore, NormalizedEntity } from './serialize'; import { expandTargetToSpecificResource } from '../shared/expand-target'; import { AnnotationPageNormalized, @@ -69,7 +71,7 @@ function getResource(entityOrString: PolyEntity, type: string): Reference { return { id: entityOrString, type }; } if (!entityOrString.id) { - throw new Error(`Invalid resource does not have an ID (${type})`); + throw new Error(`Invalid resource does not have an ID (${JSON.stringify(entityOrString)}, ${type})`); } return entityOrString as Reference; } @@ -163,7 +165,7 @@ function recordTypeInMapping(mapping: Record) { if (typeof id === 'undefined') { throw new Error('Found invalid entity without an ID.'); } - if (type === 'ContentResource') { + if (type === 'ContentResource' || type === 'Service') { mapping[id] = type; } else { mapping[id] = foundType as any; @@ -173,6 +175,53 @@ function recordTypeInMapping(mapping: Record) { }; } +function normalizeService(_service: any): any { + const service = Object.assign({}, _service); + if (service['@id']) { + service.id = service['@id']; + } + + if (service['@type']) { + service.type = service['@type']; + } + + if (service.service) { + const serviceReferences = []; + service.service = Array.isArray(service.service) ? service.service : [service.service]; + for (const innerService of service.service) { + serviceReferences.push({ + id: innerService['@id'] || innerService.id, + type: innerService['@type'] || innerService.type, + }); + } + service.service = serviceReferences; + } + + return Object.assign({}, emptyService, service); +} + +function recordServiceForLoading(store: CompatibleStore['entities']) { + return (resource: Service) => { + store.Service = store.Service ? store.Service : {}; + const id: string = (resource as any).id || (resource as any)['@id']; + const normalizedResource = normalizeService(resource); + + // @todo add loading status for image services. + + if (normalizedResource && normalizedResource.id) { + if (store.Service[normalizedResource.id]) { + // We need to merge. + store.Service[id] = mergeEntities(store.Service[id], normalizedResource); + } else { + store.Service[id] = normalizedResource as any; + } + } + + // Keep original on resource - this is a parallel copy for READING + return resource; + }; +} + /** * A string hashing function based on Daniel J. Bernstein's popular 'times 33' hash algorithm. * @author MatthewBarker @@ -385,16 +434,13 @@ export function normalize(unknownEntity: unknown) { addToEntities('Agent'), ], specificResource: [ + // Special-case changes to this type of resource. traverseSpecificResource, ], - // Remove this, content resources are NOT usually processed by this library. - // They need to be available in full when they get passed down the chain. - // There may be a better way to preserve annotations and content resources. - // service: [ - // ensureDefaultFields(emptyService), - // addToMapping('Service'), - // addToEntities('Service'), - // ], + service: [ + // Only record, don't replace. + recordServiceForLoading(entities), + ], }); const resource = traversal.traverseUnknown(entity) as Reference; diff --git a/src/presentation-3/serialize-presentation-3.ts b/src/presentation-3/serialize-presentation-3.ts index 2ef2a77..792f585 100644 --- a/src/presentation-3/serialize-presentation-3.ts +++ b/src/presentation-3/serialize-presentation-3.ts @@ -1,10 +1,5 @@ import { SerializeConfig, UNSET, UNWRAP } from './serialize'; -import { - ImageService2, - ImageService3, - ResourceProvider, - TechnicalProperties, -} from '@iiif/presentation-3'; +import { ImageService2, ImageService3, ResourceProvider, TechnicalProperties } from '@iiif/presentation-3'; import { compressSpecificResource } from '../shared/compress-specific-resource'; import { DescriptiveNormalized, LinkingNormalized } from '@iiif/presentation-3-normalized'; @@ -25,11 +20,21 @@ function technicalProperties(entity: Partial): Array<[keyof ]; } -function filterEmpty(item?: T[]): T[] | undefined { +function filterEmpty(item?: T[] | typeof UNSET): T[] | undefined | typeof UNSET { + if (item === UNSET) { + return undefined; + } + if (!item || item.length === 0) { return undefined; } - return item; + const filtered = item.filter((item) => (item as any) !== UNSET); + + if (filtered.length === 0) { + return undefined; + } + + return filtered; } function service2compat(service: ImageService3): ImageService2 | ImageService3 { diff --git a/src/presentation-3/serialize.ts b/src/presentation-3/serialize.ts index a71ba92..d3b1fec 100644 --- a/src/presentation-3/serialize.ts +++ b/src/presentation-3/serialize.ts @@ -30,6 +30,8 @@ export type CompatibleStore = { }; }; +export type _ServiceNormalized = ServiceNormalized & { id: string; type: string }; + export type NormalizedEntity = | CollectionNormalized | ManifestNormalized @@ -40,7 +42,7 @@ export type NormalizedEntity = | AnnotationNormalized | ContentResource | RangeNormalized - | ServiceNormalized + | _ServiceNormalized | Selector | ResourceProviderNormalized; @@ -63,7 +65,7 @@ export type SerializeConfig = { Annotation?: Serializer; ContentResource?: Serializer; Range?: Serializer; - Service?: Serializer; + Service?: Serializer<_ServiceNormalized>; Selector?: Serializer; Agent?: Serializer; }; diff --git a/src/presentation-3/traverse.ts b/src/presentation-3/traverse.ts index 60cbb67..0c7908c 100644 --- a/src/presentation-3/traverse.ts +++ b/src/presentation-3/traverse.ts @@ -147,10 +147,10 @@ export class Traverse { resource.seeAlso = resource.seeAlso.map((content) => this.traverseType(content, this.traversals.contentResource)); } if (resource.service) { - resource.service = resource.service.map((service) => this.traverseType(service, this.traversals.service)); + resource.service = resource.service.map((service) => this.traverseService(service)); } if (resource.services) { - resource.services = resource.services.map((service) => this.traverseType(service, this.traversals.service)); + resource.services = resource.services.map((service) => this.traverseService(service)); } if (resource.logo) { resource.logo = resource.logo.map((content) => this.traverseType(content, this.traversals.contentResource)); @@ -363,7 +363,7 @@ export class Traverse { if (contentResourceJson && (contentResourceJson as IIIFExternalWebResource)!.service) { (contentResourceJson as IIIFExternalWebResource).service = ( (contentResourceJson as IIIFExternalWebResource).service || [] - ).map((service) => this.traverseType(service, this.traversals.service)); + ).map((service) => this.traverseService(service)); } return contentResourceJson; @@ -447,7 +447,11 @@ export class Traverse { } traverseService(service: Service): Service { - return this.traverseType(service, this.traversals.service); + const _service: any = Object.assign({}, service); + if (_service && _service.service) { + _service.service = _service.service.map((innerService: any) => this.traverseService(innerService)); + } + return this.traverseType(_service, this.traversals.service); } traverseUnknown(resource: any, typeHint?: string) { From c030e9178748af03c1f26b3da6727855d5363ad1 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Fri, 29 Jul 2022 12:25:34 +0100 Subject: [PATCH 11/44] Added Image 3 API --- package.json | 7 + scripts/build.mjs | 13 +- src/image-3/index.ts | 24 ++ .../parser/parse-image-server-from-id.ts | 19 ++ .../parser/parse-image-service-request.ts | 46 +++ src/image-3/parser/parse-image-service-url.ts | 28 ++ src/image-3/parser/parse-region-parameter.ts | 25 ++ .../parser/parse-rotation-parameter.ts | 15 + src/image-3/parser/parse-size-parameter.ts | 43 +++ src/image-3/profiles/combine-profiles.ts | 112 +++++++ src/image-3/profiles/is-level-0.ts | 14 + src/image-3/profiles/level-to-profile.ts | 15 + src/image-3/profiles/profiles.ts | 215 +++++++++++++ src/image-3/profiles/supports-custom-sizes.ts | 29 ++ src/image-3/profiles/supports.ts | 110 +++++++ .../image-service-request-to-string.ts | 77 +++++ .../serialize/region-parameter-to-string.ts | 22 ++ .../serialize/rotation-parameter-to-string.ts | 5 + .../serialize/size-parameter-to-string.ts | 42 +++ src/image-3/types.ts | 291 ++++++++++++++++++ .../utilities/canonical-service-url.ts | 13 + .../utilities/create-image-service-request.ts | 36 +++ .../utilities/extract-fixed-size-scales.ts | 22 ++ .../utilities/fixed-sizes-from-scales.ts | 24 ++ src/image-3/utilities/get-id.ts | 11 + src/image-3/utilities/get-type.ts | 10 + src/image-3/utilities/is-image-service.ts | 23 ++ src/index.umd.ts | 2 + .../serialize-presentation-3.ts | 7 +- 29 files changed, 1293 insertions(+), 7 deletions(-) create mode 100644 src/image-3/index.ts create mode 100644 src/image-3/parser/parse-image-server-from-id.ts create mode 100644 src/image-3/parser/parse-image-service-request.ts create mode 100644 src/image-3/parser/parse-image-service-url.ts create mode 100644 src/image-3/parser/parse-region-parameter.ts create mode 100644 src/image-3/parser/parse-rotation-parameter.ts create mode 100644 src/image-3/parser/parse-size-parameter.ts create mode 100644 src/image-3/profiles/combine-profiles.ts create mode 100644 src/image-3/profiles/is-level-0.ts create mode 100644 src/image-3/profiles/level-to-profile.ts create mode 100644 src/image-3/profiles/profiles.ts create mode 100644 src/image-3/profiles/supports-custom-sizes.ts create mode 100644 src/image-3/profiles/supports.ts create mode 100644 src/image-3/serialize/image-service-request-to-string.ts create mode 100644 src/image-3/serialize/region-parameter-to-string.ts create mode 100644 src/image-3/serialize/rotation-parameter-to-string.ts create mode 100644 src/image-3/serialize/size-parameter-to-string.ts create mode 100644 src/image-3/types.ts create mode 100644 src/image-3/utilities/canonical-service-url.ts create mode 100644 src/image-3/utilities/create-image-service-request.ts create mode 100644 src/image-3/utilities/extract-fixed-size-scales.ts create mode 100644 src/image-3/utilities/fixed-sizes-from-scales.ts create mode 100644 src/image-3/utilities/get-id.ts create mode 100644 src/image-3/utilities/get-type.ts create mode 100644 src/image-3/utilities/is-image-service.ts diff --git a/package.json b/package.json index e8f2f54..c72f480 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,10 @@ "require": "./dist/strict/cjs/index.js", "import": "./dist/strict/esm/index.mjs" }, + "./image-3": { + "require": "./dist/image-3/cjs/index.js", + "import": "./dist/image-3/esm/index.mjs" + }, "./upgrader": "./dist/upgrader/index.umd.js" }, "typesVersions": { @@ -43,6 +47,9 @@ ], "strict": [ "dist/strict/index.d.ts" + ], + "image-3": [ + "dist/image-3/index.d.ts" ] } }, diff --git a/scripts/build.mjs b/scripts/build.mjs index 5140bb0..0c4add8 100644 --- a/scripts/build.mjs +++ b/scripts/build.mjs @@ -11,7 +11,7 @@ import { execa } from "execa"; buildMsg('UMD'); await build( defineConfig({ - entry: `src/index.ts`, + entry: `src/index.umd.ts`, name: 'index', outDir: DIST, globalName: 'IIIFParser', @@ -44,6 +44,14 @@ import { execa } from "execa"; outDir: `${DIST}/strict`, }) ) + buildMsg('@iiif/parser/image-3'); + await build( + defineConfig({ + entry: './src/image-3/index.ts', + name: 'index', + outDir: `${DIST}/image-3`, + }) + ) buildMsg('@iiif/parser/upgrader'); await build( @@ -69,6 +77,9 @@ import { execa } from "execa"; listItem('@iiif/parser/upgrader'); await execa('./node_modules/.bin/dts-bundle-generator', [`--out-file=${DIST}/upgrader/index.d.ts`, './src/upgrader.ts']) + listItem('@iiif/parser/image-3'); + await execa('./node_modules/.bin/dts-bundle-generator', [`--out-file=${DIST}/image-3/index.d.ts`, './src/image-3/index.ts']) + function buildMsg(name) { console.log(chalk.grey(`\n\nBuilding ${chalk.blue(name)}\n`)); } diff --git a/src/image-3/index.ts b/src/image-3/index.ts new file mode 100644 index 0000000..abb3a80 --- /dev/null +++ b/src/image-3/index.ts @@ -0,0 +1,24 @@ +export * from './types'; +export * from './parser/parse-image-server-from-id'; +export * from './parser/parse-image-service-request'; +export * from './parser/parse-image-service-url'; +export * from './parser/parse-region-parameter'; +export * from './parser/parse-rotation-parameter'; +export * from './parser/parse-size-parameter'; +export * from './profiles/profiles'; +export * from './profiles/combine-profiles'; +export * from './profiles/level-to-profile'; +export * from './profiles/is-level-0'; +export * from './profiles/supports'; +export * from './profiles/supports-custom-sizes'; +export * from './serialize/image-service-request-to-string'; +export * from './serialize/region-parameter-to-string'; +export * from './serialize/rotation-parameter-to-string'; +export * from './serialize/size-parameter-to-string'; +export * from './utilities/canonical-service-url'; +export * from './utilities/create-image-service-request'; +export * from './utilities/extract-fixed-size-scales'; +export * from './utilities/fixed-sizes-from-scales'; +export * from './utilities/get-id'; +export * from './utilities/get-type'; +export * from './utilities/is-image-service'; diff --git a/src/image-3/parser/parse-image-server-from-id.ts b/src/image-3/parser/parse-image-server-from-id.ts new file mode 100644 index 0000000..9da26b9 --- /dev/null +++ b/src/image-3/parser/parse-image-server-from-id.ts @@ -0,0 +1,19 @@ +/** + * Get image server from ID. + * + * Normalises image service URLs to extract identity of the image server. + * + * @param url + */ +export function parseImageServerFromId(url: string): string { + // Strip off the protocol + www + const id = url.replace(/(https?:\/\/)?(www.)?/i, ''); + + // Strip off the path. + if (id.indexOf('/') !== -1) { + return id.split('/')[0]; + } + + // Return the id. + return id; +} diff --git a/src/image-3/parser/parse-image-service-request.ts b/src/image-3/parser/parse-image-service-request.ts new file mode 100644 index 0000000..4b6f55f --- /dev/null +++ b/src/image-3/parser/parse-image-service-request.ts @@ -0,0 +1,46 @@ +import { parseRegionParameter } from './parse-region-parameter'; +import { parseSizeParameter } from './parse-size-parameter'; +import { parseRotationParameter } from './parse-rotation-parameter'; +import { ImageServiceImageRequest } from '../types'; +import { parseImageServiceUrl } from './parse-image-service-url'; + +export function parseImageServiceRequest(input: string, _prefix = ''): ImageServiceImageRequest { + const { path, scheme, server, prefix } = parseImageServiceUrl(input, _prefix); + + const parts = path.split('/').reverse(); + const [fileName, rotation, size, region, ...others] = parts; + const identifier = others.reverse().filter(Boolean).join('/'); + + if (parts.length === 1 || fileName === '') { + // likely the server will want to redirect this + return { type: 'base', scheme, server, prefix, identifier }; + } + + if (fileName === 'info.json') { + const [, ...identifierParts] = parts; + + return { + type: 'info', + scheme, + server, + prefix, + identifier: identifierParts.reverse().filter(Boolean).join('/'), + }; + } + + const filenameParts = fileName.split('.'); + + return { + type: 'image', + scheme, + server, + prefix, + identifier, + originalPath: path, + region: parseRegionParameter(region), + size: parseSizeParameter(size), + rotation: parseRotationParameter(rotation), + quality: filenameParts[0], + format: filenameParts[1], + }; +} diff --git a/src/image-3/parser/parse-image-service-url.ts b/src/image-3/parser/parse-image-service-url.ts new file mode 100644 index 0000000..202cba9 --- /dev/null +++ b/src/image-3/parser/parse-image-service-url.ts @@ -0,0 +1,28 @@ +export function parseImageServiceUrl(canonicalId: string, prefix = '') { + const parsedUrl = canonicalId.match(/^(([a-zA-Z]+):\/\/([^/]+))?((.*)+)/); + if (!parsedUrl) { + throw new Error(`Invalid or unknown input ${canonicalId}`); + } + const scheme = parsedUrl[2]; + const server = parsedUrl[3]; + let path = parsedUrl[4]; + if (path[0] === '/') { + path = path.substr(1); + } + if (prefix.length > 0) { + if (prefix[0] === '/') { + prefix = prefix.substr(1); + } + if (prefix !== path.substr(0, prefix.length)) { + throw new Error(`Path does not start with prefix (path: ${path}, prefix: ${prefix})`); + } + path = path.substr(prefix.length); + } + + return { + scheme, + server, + path, + prefix, + }; +} diff --git a/src/image-3/parser/parse-region-parameter.ts b/src/image-3/parser/parse-region-parameter.ts new file mode 100644 index 0000000..5e8bd94 --- /dev/null +++ b/src/image-3/parser/parse-region-parameter.ts @@ -0,0 +1,25 @@ +import { RegionParameter } from '../types'; + +export function parseRegionParameter(pathPart: string): RegionParameter { + try { + if (pathPart === 'full') { + return { full: true }; + } + if (pathPart === 'square') { + return { square: true }; + } + + const percent = pathPart.startsWith('pct:'); + const stringParts = pathPart.substr(percent ? 4 : 0).split(','); + const xywh = stringParts.map((part) => parseFloat(part)); + return { + x: xywh[0], + y: xywh[1], + w: xywh[2], + h: xywh[3], + percent: percent, + }; + } catch { + throw new Error("Expected 'full', 'square' or 'x,y,w,h'. Found " + pathPart); + } +} diff --git a/src/image-3/parser/parse-rotation-parameter.ts b/src/image-3/parser/parse-rotation-parameter.ts new file mode 100644 index 0000000..83fed07 --- /dev/null +++ b/src/image-3/parser/parse-rotation-parameter.ts @@ -0,0 +1,15 @@ +import { RotationParameter } from '../types'; + +export function parseRotationParameter(pathPart: string): RotationParameter { + const rotation: RotationParameter = { angle: 0 }; + if (pathPart[0] === '!') { + rotation.mirror = true; + pathPart = pathPart.substr(1); + } + + rotation.angle = parseFloat(pathPart) % 360; + if (Number.isNaN(rotation.angle)) { + throw new Error(`Invalid rotation ${pathPart}`); + } + return rotation; +} diff --git a/src/image-3/parser/parse-size-parameter.ts b/src/image-3/parser/parse-size-parameter.ts new file mode 100644 index 0000000..09cf544 --- /dev/null +++ b/src/image-3/parser/parse-size-parameter.ts @@ -0,0 +1,43 @@ +import { SizeParameter } from '../types'; + +export function parseSizeParameter(pathPart: string): SizeParameter { + const size: SizeParameter = { + upscaled: false, + max: false, + confined: false, + }; + + if (pathPart[0] === '^') { + size.upscaled = true; + pathPart = pathPart.slice(1); + } + + if (pathPart === 'max' || pathPart === 'full') { + size.max = true; + size.serialiseAsFull = pathPart === 'full'; + return size; + } + + if (pathPart[0] === '!') { + size.confined = true; + pathPart = pathPart.slice(1); + } + + if (pathPart[0] === 'p') { + size.percentScale = parseFloat(pathPart.slice(4)); + return size; + } + + const wh = pathPart.split(',').map((t) => t.trim()); + if (wh.length) { + if (wh[0] !== '') { + size.width = parseInt(wh[0], 10); + } + + if (wh[1] !== '') { + size.height = parseInt(wh[1], 10); + } + } + + return size; +} diff --git a/src/image-3/profiles/combine-profiles.ts b/src/image-3/profiles/combine-profiles.ts new file mode 100644 index 0000000..633831a --- /dev/null +++ b/src/image-3/profiles/combine-profiles.ts @@ -0,0 +1,112 @@ +import { levelToProfile } from './level-to-profile'; +import { Profile } from './profiles'; +import { ImageService } from '@iiif/presentation-3'; + +export function combineProfiles(service: ImageService): Profile { + const profiles: any[] = service ? (Array.isArray(service.profile) ? service.profile : [service.profile]) : []; + const final: Profile = { + extraQualities: [], + extraFormats: [], + extraFeatures: [], + }; + + for (let profile of profiles) { + if (typeof profile === 'string') { + profile = levelToProfile(profile); + } + + if (!profile) { + continue; + } + + // Merging Image 2.1.1 + if (profile.formats) { + for (const format of profile.formats) { + if (final.extraFormats.indexOf(format) === -1) { + final.extraFormats.push(format); + } + } + } + if (profile.qualities) { + for (const format of profile.qualities) { + if (final.extraQualities.indexOf(format) === -1) { + final.extraQualities.push(format); + } + } + } + if (profile.supports) { + for (const feature of profile.supports) { + if (final.extraFeatures.indexOf(feature as any) === -1) { + final.extraFeatures.push(feature as any); + } + } + } + + if (profile.maxHeight) { + final.maxHeight = profile.maxHeight; + } + if (profile.maxWidth) { + final.maxWidth = profile.maxWidth; + } + if (profile.maxArea) { + final.maxArea = profile.maxArea; + } + + // Merging Image 3.0 + if (profile.extraFormats) { + for (const format of profile.extraFormats) { + if (final.extraFormats.indexOf(format) === -1) { + final.extraFormats.push(format); + } + } + } + if (profile.extraQualities) { + for (const format of profile.extraQualities) { + if (final.extraQualities.indexOf(format) === -1) { + final.extraQualities.push(format); + } + } + } + if (profile.extraFeatures) { + for (const feature of profile.extraFeatures) { + if (final.extraFeatures.indexOf(feature as any) === -1) { + final.extraFeatures.push(feature as any); + } + } + } + + if (profile.maxHeight) { + final.maxHeight = profile.maxHeight; + } + if (profile.maxWidth) { + final.maxWidth = profile.maxWidth; + } + if (profile.maxArea) { + final.maxArea = profile.maxArea; + } + } + + if (service.extraFormats) { + for (const format of service.extraFormats) { + if (final.extraFormats.indexOf(format) === -1) { + final.extraFormats.push(format); + } + } + } + if (service.extraFeatures) { + for (const feature of service.extraFeatures) { + if (final.extraFeatures.indexOf(feature as any) === -1) { + final.extraFeatures.push(feature as any); + } + } + } + if (service.extraQualities) { + for (const quality of service.extraQualities) { + if (final.extraQualities.indexOf(quality as any) === -1) { + final.extraQualities.push(quality as any); + } + } + } + + return final; +} diff --git a/src/image-3/profiles/is-level-0.ts b/src/image-3/profiles/is-level-0.ts new file mode 100644 index 0000000..60baa0a --- /dev/null +++ b/src/image-3/profiles/is-level-0.ts @@ -0,0 +1,14 @@ +import { ImageService } from '@iiif/presentation-3'; +import { onlyLevel0 } from './profiles'; + +export function isLevel0(service: ImageService) { + const profile = Array.isArray(service.profile) ? service.profile : [service.profile]; + + for (const single of profile) { + if (typeof single === 'string' && onlyLevel0.indexOf(single) !== -1) { + return true; + } + } + + return false; +} diff --git a/src/image-3/profiles/level-to-profile.ts b/src/image-3/profiles/level-to-profile.ts new file mode 100644 index 0000000..6a1db08 --- /dev/null +++ b/src/image-3/profiles/level-to-profile.ts @@ -0,0 +1,15 @@ +import { level0, level1, level1Support, level2, level2Support, Profile } from './profiles'; + +export function levelToProfile(levelProfile: string): Profile { + const isLevel2 = level2Support.indexOf(levelProfile) !== -1; + if (isLevel2) { + return level2; + } + const isLevel1 = level1Support.indexOf(levelProfile) !== -1; + if (isLevel1) { + return level1; + } + + // The minimum. + return level0; +} diff --git a/src/image-3/profiles/profiles.ts b/src/image-3/profiles/profiles.ts new file mode 100644 index 0000000..3f309c6 --- /dev/null +++ b/src/image-3/profiles/profiles.ts @@ -0,0 +1,215 @@ +export const STANFORD_IIIF_IMAGE_COMPLIANCE_0 = 'http://library.stanford.edu/iiif/image-api/compliance.html#level0'; +export const STANFORD_IIIF_IMAGE_COMPLIANCE_1 = 'http://library.stanford.edu/iiif/image-api/compliance.html#level1'; +export const STANFORD_IIIF_IMAGE_COMPLIANCE_2 = 'http://library.stanford.edu/iiif/image-api/compliance.html#level2'; +export const STANFORD_IIIF_IMAGE_CONFORMANCE_0 = 'http://library.stanford.edu/iiif/image-api/conformance.html#level0'; +export const STANFORD_IIIF_IMAGE_CONFORMANCE_1 = 'http://library.stanford.edu/iiif/image-api/conformance.html#level1'; +export const STANFORD_IIIF_IMAGE_CONFORMANCE_2 = 'http://library.stanford.edu/iiif/image-api/conformance.html#level2'; +export const STANFORD_IIIF_1_IMAGE_COMPLIANCE_0 = + 'http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level0'; +export const STANFORD_IIIF_1_IMAGE_COMPLIANCE_1 = + 'http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level1'; +export const STANFORD_IIIF_1_IMAGE_COMPLIANCE_2 = + 'http://library.stanford.edu/iiif/image-api/1.1/compliance.html#level2'; +export const STANFORD_IIIF_1_IMAGE_CONFORMANCE_0 = + 'http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level0'; +export const STANFORD_IIIF_1_IMAGE_CONFORMANCE_1 = + 'http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level1'; +export const STANFORD_IIIF_1_IMAGE_CONFORMANCE_2 = + 'http://library.stanford.edu/iiif/image-api/1.1/conformance.html#level2'; +export const IIIF_1_IMAGE_LEVEL_0 = 'http://iiif.io/api/image/1/level0.json'; +export const IIIF_1_IMAGE_LEVEL_0_PROFILE = 'http://iiif.io/api/image/1/profiles/level0.json'; +export const IIIF_1_IMAGE_LEVEL_1 = 'http://iiif.io/api/image/1/level1.json'; +export const IIIF_1_IMAGE_LEVEL_1_PROFILE = 'http://iiif.io/api/image/1/profiles/level1.json'; +export const IIIF_1_IMAGE_LEVEL_2 = 'http://iiif.io/api/image/1/level2.json'; +export const IIIF_1_IMAGE_LEVEL_2_PROFILE = 'http://iiif.io/api/image/1/profiles/level2.json'; +export const IIIF_2_IMAGE_LEVEL_0 = 'http://iiif.io/api/image/2/level0.json'; +export const IIIF_2_IMAGE_LEVEL_0_PROFILE = 'http://iiif.io/api/image/2/profiles/level0.json'; +export const IIIF_2_IMAGE_LEVEL_1 = 'http://iiif.io/api/image/2/level1.json'; +export const IIIF_2_IMAGE_LEVEL_1_PROFILE = 'http://iiif.io/api/image/2/profiles/level1.json'; +export const IIIF_2_IMAGE_LEVEL_2 = 'http://iiif.io/api/image/2/level2.json'; +export const IIIF_2_IMAGE_LEVEL_2_PROFILE = 'http://iiif.io/api/image/2/profiles/level2.json'; +export const IIIF_3_IMAGE_LEVEL_0 = 'level0'; +export const IIIF_3_IMAGE_LEVEL_1 = 'level1'; +export const IIIF_3_IMAGE_LEVEL_2 = 'level2'; + +// Non-standard +export const IIIF_2_IMAGE_LEVEL_0_NO_JSON = 'http://iiif.io/api/image/2/level0'; +export const IIIF_2_IMAGE_LEVEL_1_NO_JSON = 'http://iiif.io/api/image/2/level1'; +export const IIIF_2_IMAGE_LEVEL_2_NO_JSON = 'http://iiif.io/api/image/2/level2'; + +export const level2Support = [ + IIIF_2_IMAGE_LEVEL_2_NO_JSON, + STANFORD_IIIF_IMAGE_COMPLIANCE_2, + STANFORD_IIIF_IMAGE_CONFORMANCE_2, + STANFORD_IIIF_1_IMAGE_COMPLIANCE_2, + STANFORD_IIIF_1_IMAGE_CONFORMANCE_2, + IIIF_1_IMAGE_LEVEL_2, + IIIF_1_IMAGE_LEVEL_2_PROFILE, + IIIF_2_IMAGE_LEVEL_2, + IIIF_2_IMAGE_LEVEL_2_PROFILE, + IIIF_3_IMAGE_LEVEL_2, +]; + +export const level1Support = [ + ...level2Support, + IIIF_2_IMAGE_LEVEL_1_NO_JSON, + STANFORD_IIIF_IMAGE_COMPLIANCE_1, + STANFORD_IIIF_IMAGE_CONFORMANCE_1, + STANFORD_IIIF_1_IMAGE_COMPLIANCE_1, + STANFORD_IIIF_1_IMAGE_CONFORMANCE_1, + IIIF_1_IMAGE_LEVEL_1, + IIIF_1_IMAGE_LEVEL_1_PROFILE, + IIIF_2_IMAGE_LEVEL_1, + IIIF_2_IMAGE_LEVEL_1_PROFILE, + IIIF_3_IMAGE_LEVEL_1, +]; + +export const imageServiceProfiles = [ + IIIF_2_IMAGE_LEVEL_0_NO_JSON, + IIIF_2_IMAGE_LEVEL_1_NO_JSON, + IIIF_2_IMAGE_LEVEL_2_NO_JSON, + STANFORD_IIIF_IMAGE_COMPLIANCE_0, + STANFORD_IIIF_IMAGE_COMPLIANCE_1, + STANFORD_IIIF_IMAGE_COMPLIANCE_2, + STANFORD_IIIF_IMAGE_CONFORMANCE_0, + STANFORD_IIIF_IMAGE_CONFORMANCE_1, + STANFORD_IIIF_IMAGE_CONFORMANCE_2, + STANFORD_IIIF_1_IMAGE_COMPLIANCE_0, + STANFORD_IIIF_1_IMAGE_COMPLIANCE_1, + STANFORD_IIIF_1_IMAGE_COMPLIANCE_2, + STANFORD_IIIF_1_IMAGE_CONFORMANCE_0, + STANFORD_IIIF_1_IMAGE_CONFORMANCE_1, + STANFORD_IIIF_1_IMAGE_CONFORMANCE_2, + IIIF_1_IMAGE_LEVEL_0, + IIIF_1_IMAGE_LEVEL_0_PROFILE, + IIIF_1_IMAGE_LEVEL_1, + IIIF_1_IMAGE_LEVEL_1_PROFILE, + IIIF_1_IMAGE_LEVEL_2, + IIIF_1_IMAGE_LEVEL_2_PROFILE, + IIIF_2_IMAGE_LEVEL_0, + IIIF_2_IMAGE_LEVEL_0_PROFILE, + IIIF_2_IMAGE_LEVEL_1, + IIIF_2_IMAGE_LEVEL_1_PROFILE, + IIIF_2_IMAGE_LEVEL_2, + IIIF_2_IMAGE_LEVEL_2_PROFILE, + IIIF_3_IMAGE_LEVEL_0, + IIIF_3_IMAGE_LEVEL_1, + IIIF_3_IMAGE_LEVEL_2, +]; + +export const level0Support = imageServiceProfiles; + +export const onlyLevel0 = [ + IIIF_2_IMAGE_LEVEL_0_NO_JSON, + STANFORD_IIIF_IMAGE_COMPLIANCE_0, + STANFORD_IIIF_IMAGE_CONFORMANCE_0, + STANFORD_IIIF_1_IMAGE_COMPLIANCE_0, + STANFORD_IIIF_1_IMAGE_CONFORMANCE_0, + IIIF_1_IMAGE_LEVEL_0, + IIIF_1_IMAGE_LEVEL_0_PROFILE, + IIIF_2_IMAGE_LEVEL_0, + IIIF_2_IMAGE_LEVEL_0_PROFILE, + IIIF_3_IMAGE_LEVEL_0, +]; + +export type Profile = { + extraFormats: string[]; + extraQualities: string[]; + extraFeatures: ExtraFeature[]; + maxArea?: number; + maxHeight?: number; + maxWidth?: number; +}; + +export const level0: Profile = { + extraFormats: ['jpg'], + extraQualities: ['default'], + extraFeatures: ['sizeByWhListed'], +}; + +export const level1: Profile = { + extraFormats: ['jpg'], + extraQualities: ['default'], + extraFeatures: [ + 'baseUriRedirect', + 'cors', + 'jsonldMediaType', + 'regionByPx', + 'regionSquare', + 'sizeByWhListed', + 'sizeByH', + 'sizeByW', + 'sizeByWh', + + // 2.1 + // 'sizeByPct', <-- Used to be supported in 2.1 + ], +}; + +export const level2: Profile = { + extraFormats: ['jpg', 'png'], + extraQualities: ['default'], + extraFeatures: [ + 'baseUriRedirect', + 'cors', + 'jsonldMediaType', + 'regionByPct', + 'regionByPx', + 'regionSquare', + 'rotationBy90s', + 'sizeByWhListed', + 'sizeByConfinedWh', + 'sizeByH', + 'sizeByPct', + 'sizeByW', + 'sizeByWh', + + // 2.1 + // 'sizeByDistortedWh', <-- Used to be supported in 2.1 + // 'sizeByForcedWh', <-- Used to be supported in 2.1 + ], +}; + +export const extraFeatures = [ + // The base URI of the service will redirect to the image information document. + 'baseUriRedirect', + // The canonical image URI HTTP link header is provided on image responses. + 'canonicalLinkHeader', + // The CORS HTTP headers are provided on all responses. + 'cors', + // The JSON-LD media type is provided when requested. + 'jsonldMediaType', + // The image may be rotated around the vertical axis, resulting in a left-to-right mirroring of the content. + 'mirroring', + // The profile HTTP link header is provided on image responses. + 'profileLinkHeader', + // Regions of the full image may be requested by percentage. + 'regionByPct', + // Regions of the full image may be requested by pixel dimensions. + 'regionByPx', + // A square region may be requested, where the width and height are equal to the shorter dimension of the full image. + 'regionSquare', + // Image rotation may be requested using values other than multiples of 90 degrees. + 'rotationArbitrary', + // Image rotation may be requested in multiples of 90 degrees. + 'rotationBy90s', + // Image size may be requested in the form !w,h. + 'sizeByConfinedWh', + // Image size may be requested in the form ,h. + 'sizeByH', + // Images size may be requested in the form pct:n. + 'sizeByPct', + // Image size may be requested in the form w,. + 'sizeByW', + // Image size may be requested in the form w,h. + 'sizeByWh', + // Image sizes prefixed with ^ may be requested. + 'sizeUpscaling', + + // 2.1.1 compat + 'sizeByWhListed', + 'sizeByDistortedWh', + 'sizeByForcedWh', +] as const; + +export type ExtraFeature = typeof extraFeatures extends ReadonlyArray ? ElementType : never; diff --git a/src/image-3/profiles/supports-custom-sizes.ts b/src/image-3/profiles/supports-custom-sizes.ts new file mode 100644 index 0000000..2e1eb6d --- /dev/null +++ b/src/image-3/profiles/supports-custom-sizes.ts @@ -0,0 +1,29 @@ +import { Service } from '../types'; +import { isImageService } from '../utilities/is-image-service'; +import { level1Support, Profile } from './profiles'; + +export function supportsCustomSizes(service: Service): boolean { + if (!isImageService(service)) { + return false; + } + + const profiles = Array.isArray(service.profile) ? service.profile : [service.profile]; + + for (const profile of profiles) { + if (typeof profile === 'string') { + if (level1Support.indexOf(profile) !== -1) { + return true; + } + } else { + const supports = [...(profile.supports || []), ...((profile as Profile).extraFeatures || [])]; + if ( + supports.indexOf('regionByPx') !== -1 && + (supports.indexOf('sizeByW') !== -1 || supports.indexOf('sizeByWh') !== -1) + ) { + return true; + } + } + } + + return false; +} diff --git a/src/image-3/profiles/supports.ts b/src/image-3/profiles/supports.ts new file mode 100644 index 0000000..c070627 --- /dev/null +++ b/src/image-3/profiles/supports.ts @@ -0,0 +1,110 @@ +import { extraFeatures, Profile } from './profiles'; +import { Service } from '../types'; +import { isImageService } from '../utilities/is-image-service'; +import { combineProfiles } from './combine-profiles'; + +export function supports( + service: Service, + req: Partial & { exactSize?: { width?: number; height?: number } } +) { + if (!isImageService(service)) { + return [false, 'Not a valid image service'] as const; + } + + req.extraFeatures = req.extraFeatures ? req.extraFeatures : []; + + const combined = combineProfiles(service); + + if (req.exactSize) { + let valid = false; + // 1. Check sizes. + if (service.sizes) { + for (const size of service.sizes) { + if (size.width && size.width === req.exactSize.width) { + if (extraFeatures.indexOf('sizeByW') !== -1) { + valid = true; + } else if (size.height && size.height === req.exactSize.height) { + valid = true; + } + } + if (size.height && size.height === req.exactSize.height) { + if (extraFeatures.indexOf('sizeByH') !== -1) { + valid = true; + } else if (size.width && size.width === req.exactSize.width) { + valid = true; + } + } + } + } + + if (!valid) { + req.maxWidth = Math.max(req.maxWidth || 0, req.exactSize.width || 0) || undefined; + req.maxHeight = Math.max(req.maxHeight || 0, req.exactSize.height || 0) || undefined; + req.maxArea = + Math.max( + req.maxArea || 0, + (req.exactSize.width && req.exactSize.height ? req.exactSize.width * req.exactSize.height : req.maxArea) || 0 + ) || undefined; + + if (!req.exactSize.height && req.exactSize.width) { + if (req.extraFeatures.indexOf('sizeByW') === -1) { + req.extraFeatures.push('sizeByW'); + } + } else if (!req.exactSize.width && req.exactSize.height) { + if (req.extraFeatures.indexOf('sizeByH') === -1) { + req.extraFeatures.push('sizeByH'); + } + } + } + } + + if (req.maxArea && combined.maxArea && req.maxArea > combined.maxArea) { + return [false, `Max area is ${combined.maxArea}`] as const; + } + + if (req.maxWidth && combined.maxWidth && req.maxWidth > combined.maxWidth) { + return [false, `Max width is ${combined.maxWidth}`] as const; + } + + if (req.maxHeight && combined.maxHeight && req.maxHeight > combined.maxHeight) { + return [false, `Max height is ${combined.maxHeight}`] as const; + } + + if (req.extraFeatures) { + const missingFeatures = []; + for (const feature of req.extraFeatures) { + if (combined.extraFeatures.indexOf(feature) === -1) { + missingFeatures.push(feature); + } + } + if (missingFeatures.length) { + return [false, `Missing features: ${missingFeatures.join(', ')}`] as const; + } + } + + if (req.extraFormats) { + const missingFormats = []; + for (const feature of req.extraFormats) { + if (combined.extraFormats.indexOf(feature) === -1) { + missingFormats.push(feature); + } + } + if (missingFormats.length) { + return [false, `Missing formats: ${missingFormats.join(', ')}`] as const; + } + } + + if (req.extraQualities) { + const missingQualities = []; + for (const quality of req.extraQualities) { + if (combined.extraQualities.indexOf(quality) === -1) { + missingQualities.push(quality); + } + } + if (missingQualities.length) { + return [false, `Missing qualities: ${missingQualities.join(', ')}`] as const; + } + } + + return [true] as const; +} diff --git a/src/image-3/serialize/image-service-request-to-string.ts b/src/image-3/serialize/image-service-request-to-string.ts new file mode 100644 index 0000000..692a54c --- /dev/null +++ b/src/image-3/serialize/image-service-request-to-string.ts @@ -0,0 +1,77 @@ +import { ImageServiceImageRequest } from '../types'; +import { regionParameterToString } from './region-parameter-to-string'; +import { sizeParameterToString } from './size-parameter-to-string'; +import { rotationParameterToString } from './rotation-parameter-to-string'; +import { ImageService } from '@iiif/presentation-3'; + +export function imageServiceRequestToString(req: ImageServiceImageRequest, service?: ImageService): string { + const prefix = req.prefix.startsWith('/') ? req.prefix.substr(1) : req.prefix; + const baseUrl = `${req.scheme}://${req.server}/${prefix ? `${prefix}/` : ''}${req.identifier}`; + + if (req.type === 'base') { + return baseUrl; + } + + if (req.type === 'info') { + return `${baseUrl}/info.json`; + } + + let { size } = req; + const { region, rotation, format, quality } = req; + + if (service) { + // Service specific changes. + const ctx = service['@context'] + ? Array.isArray(service['@context']) + ? service['@context'] + : [service['@context']] + : []; + const is2 = ctx.indexOf('http://iiif.io/api/image/2/context.json') !== -1; + const is3 = ctx.indexOf('http://iiif.io/api/image/3/context.json') !== -1; + + // max size, for canonical. + if ( + (size.width === service.width && !size.height) || + (size.height === service.height && !size.width) || + (size.width === service.width && size.height === service.height) + ) { + size = { ...size, max: true }; + } + + if (is2) { + if (size.max && !size.serialiseAsFull) { + size = { ...size, serialiseAsFull: true }; + } + + if (!size.max && size.width && size.height) { + size = { ...size, height: undefined }; + } + } + if (is3) { + if (size.max && size.serialiseAsFull) { + size = { ...size, serialiseAsFull: false }; + } + + if (size.width && !size.height && service.width && service.height) { + // canonical requires height. + const ratio = service.height / service.width; + size = { ...size, height: Math.ceil(size.width * ratio) }; + } + } + + // @todo FUTURE - possibly passing in a correct=true option + // 1. Closeness/rounding to fixed size + // 2. Fallback to supported format. + // 3. Round to rotation + } + + return [ + baseUrl, + regionParameterToString(region), + sizeParameterToString(size), + rotationParameterToString(rotation), + `${quality}.${format}`, + ] + .filter(Boolean) + .join('/'); +} diff --git a/src/image-3/serialize/region-parameter-to-string.ts b/src/image-3/serialize/region-parameter-to-string.ts new file mode 100644 index 0000000..ab6cdf8 --- /dev/null +++ b/src/image-3/serialize/region-parameter-to-string.ts @@ -0,0 +1,22 @@ +import { RegionParameter } from '../types'; + +export function regionParameterToString({ x = 0, y = 0, w, h, full, square, percent }: RegionParameter) { + if (full) { + return 'full'; + } + + if (square) { + return 'square'; + } + + if (typeof w === 'undefined' || typeof h === 'undefined') { + throw new Error('RegionParameter: invalid region'); + } + + const xywh = `${x},${y},${w},${h}`; + if (percent) { + return `pct:${xywh}`; + } + + return xywh; +} diff --git a/src/image-3/serialize/rotation-parameter-to-string.ts b/src/image-3/serialize/rotation-parameter-to-string.ts new file mode 100644 index 0000000..5afb5fe --- /dev/null +++ b/src/image-3/serialize/rotation-parameter-to-string.ts @@ -0,0 +1,5 @@ +import { RotationParameter } from '../types'; + +export function rotationParameterToString(rotationParameter: RotationParameter) { + return `${rotationParameter.mirror ? '!' : ''}${(rotationParameter.angle || 0) % 360}`; +} diff --git a/src/image-3/serialize/size-parameter-to-string.ts b/src/image-3/serialize/size-parameter-to-string.ts new file mode 100644 index 0000000..ab1415d --- /dev/null +++ b/src/image-3/serialize/size-parameter-to-string.ts @@ -0,0 +1,42 @@ +import { SizeParameter } from '../types'; + +export function sizeParameterToString({ + max, + percentScale, + upscaled, + confined, + width, + height, + serialiseAsFull, +}: SizeParameter): string { + const sb: string[] = []; + + if (upscaled) { + sb.push('^'); + } + + if (max) { + sb.push(serialiseAsFull ? 'full' : 'max'); + return sb.join(''); + } + + if (confined) { + sb.push('!'); + } + + if (percentScale) { + sb.push(`pct:${percentScale}`); + } + + if (width) { + sb.push(`${width}`); + } + + sb.push(','); + + if (height) { + sb.push(`${height}`); + } + + return sb.join(''); +} diff --git a/src/image-3/types.ts b/src/image-3/types.ts new file mode 100644 index 0000000..0e70b63 --- /dev/null +++ b/src/image-3/types.ts @@ -0,0 +1,291 @@ +import { ImageService, LinkingProperties } from '@iiif/presentation-3'; +import { ExtraFeature } from './profiles/profiles'; + +export type Service = ImageService & { + real?: false; +}; + +export type FixedSizeImage = { + id: string; + type: 'fixed'; + width: number; + height: number; + unsafe?: boolean; +}; + +export type FixedSizeImageService = { + id: string; + type: 'fixed-service'; + width: number; + height: number; +}; + +export type VariableSizeImage = { + id: string; + type: 'variable'; + minWidth: number; + maxWidth: number; + minHeight: number; + maxHeight: number; +}; + +export type UnknownSizeImage = { + id: string; + type: 'unknown'; +}; + +export type ImageCandidate = FixedSizeImage | VariableSizeImage | UnknownSizeImage | FixedSizeImageService; + +export type ImageCandidateRequest = { + width?: number; + height?: number; + maxWidth?: number; + maxHeight?: number; + minWidth?: number; + minHeight?: number; + // Configurations + fallback?: boolean; + atAnyCost?: boolean; + unsafeImageService?: boolean; + returnAllOptions?: boolean; + allowUnsafe?: boolean; + preferFixedSize?: boolean; + explain?: boolean; +}; + +/** + * Size parameter + * + * Represents the {size} parameter of a IIIF image request. + * see https://iiif.io/api/image/3.0/#42-size + * Port of https://github.com/digirati-co-uk/iiif-net/blob/main/src/IIIF/IIIF/ImageApi/SizeParameter.cs + */ +export type SizeParameter = { + height?: number; + width?: number; + max: boolean; + serialiseAsFull?: boolean; + upscaled: boolean; + confined: boolean; + percentScale?: number; +}; + +/** + * Region parameter + * + * Represents the {region} parameter of a IIIF image request. + * see https://iiif.io/api/image/3.0/#41-region + * Port of https://github.com/digirati-co-uk/iiif-net/blob/main/src/IIIF/IIIF/ImageApi/RegionParameter.cs + */ +export type RegionParameter = { + x?: number; + y?: number; + w?: number; + h?: number; + full?: boolean; + square?: boolean; + percent?: boolean; +}; + +/** + * Rotation parameter + * + * Represents the {rotation} parameter of a IIIF image request. + * see https://iiif.io/api/image/3.0/#43-rotation + * Port of https://github.com/digirati-co-uk/iiif-net/blob/main/src/IIIF/IIIF/ImageApi/RotationParameter.cs + */ +export type RotationParameter = { + mirror?: boolean; + angle: number; +}; + +export type ImageServiceImageRequest = + | { + type: 'base'; + scheme: string; + server: string; + prefix: string; + identifier: string; + } + | { + type: 'info'; + scheme: string; + server: string; + prefix: string; + identifier: string; + } + | { + type: 'image'; + scheme: string; + server: string; + prefix: string; + identifier: string; + region: RegionParameter; + size: SizeParameter; + rotation: RotationParameter; + quality: string; + format: string; + originalPath: string; + }; + +// Unused for now. +type ImageService3 = { + /** + * The `@context` property **SHOULD** appear as the very first key-value pair of the JSON representation. Its value must + * be either the URI `http://iiif.io/api/image/3/context.json` or a JSON array with the URI + * `http://iiif.io/api/image/3/context.json` as the last item. The `@context` tells Linked Data processors how to + * interpret the image information. If extensions are used then their context definitions **SHOULD** be included in + * this top-level `@context` property. + */ + '@context': 'http://iiif.io/api/image/3/context.json' | string[]; + + /** + * The base URI of the image as defined in [URI Syntax](https://iiif.io/api/image/3.0/#2-uri-syntax), including + * scheme, server, prefix and identifier without a trailing slash. + */ + id: string; + + /** + * The type for the Image API. The value **MUST** be the string `ImageService3`. + */ + type: 'ImageService3'; + + /** + * The URI `http://iiif.io/api/image` which can be used to determine that the document describes an image service + * which is a version of the IIIF Image API. + */ + protocol: 'http://iiif.io/api/image'; + + /** + * A string indicating the highest [compliance level](https://iiif.io/api/image/3.0/#6-compliance-level-and-profile-document) + * which is fully supported by the service. The value **MUST** be one of `level0`, `level1`, or `level2`. + */ + profile: 'level0' | 'level1' | 'level2'; + + /** + * The width in pixels of the full image, given as an integer. + */ + width: number; + + /** + * The height in pixels of the full image, given as an integer. + */ + height: number; + + /** + * The maximum width in pixels supported for this image. Clients **MUST NOT** expect requests with a width greater + * than this value to be supported. `maxWidth` **MUST** be specified if `maxHeight` is specified. + */ + maxWidth?: number; + + /** + * The maximum height in pixels supported for this image. Clients **MUST NOT** expect requests with a height greater than + * this value to be supported. If `maxWidth` is specified and `maxHeight` is not, then clients **SHOULD** infer that + * `maxHeight = maxWidth`. + */ + maxHeight?: number; + + /** + * The maximum area in pixels supported for this image. Clients **MUST NOT** expect requests with a `width * height` + * greater than this value to be supported. + */ + maxArea?: number; + + /** + * An array of JSON objects with the `height` and `width` properties. These sizes specify preferred values to be + * provided in the `w,h` syntax of the size request parameter for scaled versions of the full image. In the case of + * servers that do not support requests for arbitrary sizes, these may be the only sizes available. A request + * constructed with the `w,h` syntax using these sizes **MUST** be supported by the server, even if arbitrary width + * and height are not. + */ + sizes?: Array<{ + /** + * The type of the object. If present, the value must be the string `Size`. + */ + type?: 'Size'; + + /** + * The width in pixels of the image to be requested, given as an integer. + */ + height: number; + + /** + * The height in pixels of the image to be requested, given as an integer. + */ + width: number; + }>; + + /** + * An array of JSON objects describing the parameters to use to request regions of the image (tiles) that are + * efficient for the server to deliver. Each description gives a width, optionally a height for non-square tiles, + * and a set of scale factors at which tiles of those dimensions are available. + */ + tiles?: Array<{ + /** + * The type of the object. If present, the value **MUST** be the string `Tile`. + */ + type?: 'Tile'; + + /** + * The set of resolution scaling factors for the image’s predefined tiles, expressed as positive integers by which + * to divide the full size of the image. For example, a scale factor of 4 indicates that the service can + * efficiently deliver images at 1/4 or 25% of the height and width of the full image. A particular scale factor + * value **SHOULD** appear only once in the `tiles` array. + */ + scaleFactors: number[]; + + /** + * The width in pixels of the predefined tiles to be requested, given as an integer. + */ + width: number; + + /** + * The height in pixels of the predefined tiles to be requested, given as an integer. If it is not specified in + * the JSON, then it defaults to the same as `width`, resulting in square tiles. + */ + height?: number; + }>; + + /** + * An array of strings that are the preferred format parameter values, arranged in order of preference. The format + * parameter values listed must be among those specified in the referenced profile or listed in the extraFormats + * property (see [Extra Functionality](https://iiif.io/api/image/3.0/#57-extra-functionality)). + */ + preferredFormats?: string[]; + + /** + * A string that identifies a license or rights statement that applies to the content of this image. The value of + * this property must be a string drawn from the set of [Creative Commons](https://creativecommons.org/licenses/) + * license URIs, the [RightsStatements.org](http://rightsstatements.org/page/1.0/) rights statement URIs, or those + * added via the [Registry of Known Extensions](https://iiif.io/api/registry/) mechanism. The inclusion of this + * property is informative, and for example could be used to display an icon representing the rights assertions. + */ + rights?: string; + + /** + * An array of strings that can be used as the quality parameter, in addition to `default`. + */ + extraQualities?: string[]; + + /** + * An array of strings that can be used as the format parameter, in addition to the ones specified in the + * referenced profile. + */ + extraFormats?: string[]; + + /** + * An array of strings identifying features supported by the service, in addition to the ones specified in the + * referenced profile. These strings are defined either in this [table](https://iiif.io/api/image/3.0/#features-table) + * or by [registering an extension](https://iiif.io/api/extension/). + */ + extraFeatures?: ExtraFeature[]; + + /** + * A link to another resource that references this image service, for example a link to a Canvas or Manifest. The + * value **MUST** be an array of JSON objects. Each item **MUST** have the `id` and `type` properties, and **SHOULD** + * have the `label` property. + */ + partOf?: LinkingProperties['partOf']; + seeAlso?: LinkingProperties['seeAlso']; + service?: Array; +}; diff --git a/src/image-3/utilities/canonical-service-url.ts b/src/image-3/utilities/canonical-service-url.ts new file mode 100644 index 0000000..2b54775 --- /dev/null +++ b/src/image-3/utilities/canonical-service-url.ts @@ -0,0 +1,13 @@ +/** + * Get canonical service url + * Ensures an image service id contains the /info.json on the end of it. + * + * @param serviceId + */ +export function canonicalServiceUrl(serviceId: string) { + return serviceId.endsWith('info.json') + ? serviceId + : serviceId.endsWith('/') + ? `${serviceId}info.json` + : `${serviceId}/info.json`; +} diff --git a/src/image-3/utilities/create-image-service-request.ts b/src/image-3/utilities/create-image-service-request.ts new file mode 100644 index 0000000..8a63efa --- /dev/null +++ b/src/image-3/utilities/create-image-service-request.ts @@ -0,0 +1,36 @@ +import { ImageService } from '@iiif/presentation-3'; +import { ImageServiceImageRequest } from '../types'; +import { combineProfiles } from '../profiles/combine-profiles'; +import { parseImageServiceRequest } from '../parser/parse-image-service-request'; +import { canonicalServiceUrl } from './canonical-service-url'; + +export function createImageServiceRequest(imageService: ImageService): ImageServiceImageRequest { + const parsed = parseImageServiceRequest(canonicalServiceUrl(imageService.id)); + if (parsed.type !== 'info') { + throw new Error('Invalid service URL'); + } + + const features = combineProfiles(imageService); + + return { + identifier: parsed.identifier, + originalPath: '', + server: parsed.server, + prefix: parsed.prefix, + scheme: parsed.scheme, + type: 'image', + quality: features.extraQualities.indexOf('default') === -1 ? features.extraQualities[0] : 'default', + region: { + full: true, + }, + size: { + max: true, + upscaled: false, + confined: false, + }, + format: 'jpg', + rotation: { + angle: 0, + }, + }; +} diff --git a/src/image-3/utilities/extract-fixed-size-scales.ts b/src/image-3/utilities/extract-fixed-size-scales.ts new file mode 100644 index 0000000..2bf06ba --- /dev/null +++ b/src/image-3/utilities/extract-fixed-size-scales.ts @@ -0,0 +1,22 @@ +import { ImageSize } from '@iiif/presentation-3'; + +/** + * Extract fixed size scales + * + * Given a source width and height and a list of sizes of that same image, + * it will return an ordered list of scales. + * + * @param width + * @param height + * @param sizes + */ +export function extractFixedSizeScales(width: number, height: number, sizes: ImageSize[]): number[] { + const len = sizes.length; + const scales = []; + for (let i = 0; i < len; i++) { + const size = sizes[i]; + const w = size.width; + scales.push(width / w); + } + return scales; +} diff --git a/src/image-3/utilities/fixed-sizes-from-scales.ts b/src/image-3/utilities/fixed-sizes-from-scales.ts new file mode 100644 index 0000000..18126a6 --- /dev/null +++ b/src/image-3/utilities/fixed-sizes-from-scales.ts @@ -0,0 +1,24 @@ +import { ImageSize } from '@iiif/presentation-3'; + +/** + * Fixed sizes from scales. + * + * Given a width and height of an image and a list of scales, this will return + * an ordered list of widths and heights of the image at those scales. + * + * @param width + * @param height + * @param scales + */ +export function fixedSizesFromScales(width: number, height: number, scales: number[]): ImageSize[] { + const len = scales.length; + const sizes: ImageSize[] = []; + for (let i = 0; i < len; i++) { + const scale = scales[i]; + sizes.push({ + width: Math.floor(width / scale), + height: Math.floor(height / scale), + }); + } + return sizes; +} diff --git a/src/image-3/utilities/get-id.ts b/src/image-3/utilities/get-id.ts new file mode 100644 index 0000000..9cbffbf --- /dev/null +++ b/src/image-3/utilities/get-id.ts @@ -0,0 +1,11 @@ +export function getId(resource: any) { + if (resource['@id']) { + return resource['@id']; + } + + if (resource.id) { + return resource.id; + } + + return undefined; +} diff --git a/src/image-3/utilities/get-type.ts b/src/image-3/utilities/get-type.ts new file mode 100644 index 0000000..a458f0a --- /dev/null +++ b/src/image-3/utilities/get-type.ts @@ -0,0 +1,10 @@ +export function getType(resource: any) { + if (resource['@type']) { + return resource['@type']; + } + if (resource.type) { + return resource.type; + } + + return undefined; +} diff --git a/src/image-3/utilities/is-image-service.ts b/src/image-3/utilities/is-image-service.ts new file mode 100644 index 0000000..64a2e84 --- /dev/null +++ b/src/image-3/utilities/is-image-service.ts @@ -0,0 +1,23 @@ +import { imageServiceProfiles } from '../profiles/profiles'; +import { ImageService } from '@iiif/presentation-3'; +import { getId } from './get-id'; + +export function isImageService(service: any): service is ImageService { + if (!service || !service.profile) { + return false; + } + + if (!getId(service)) { + return false; + } + + const profiles = Array.isArray(service.profile) ? service.profile : [service.profile]; + + for (const profile of profiles) { + if (typeof profile === 'string' && imageServiceProfiles.indexOf(profile) !== -1) { + return true; + } + } + + return false; +} diff --git a/src/index.umd.ts b/src/index.umd.ts index c33915a..4de3bb7 100644 --- a/src/index.umd.ts +++ b/src/index.umd.ts @@ -1,7 +1,9 @@ import * as Presentation2 from './presentation-2'; import * as Presentation3 from './presentation-3'; +import * as Image3 from './image-3'; export default { Presentation2, Presentation3, + Image3, }; diff --git a/src/presentation-3/serialize-presentation-3.ts b/src/presentation-3/serialize-presentation-3.ts index 2ef2a77..8f91c92 100644 --- a/src/presentation-3/serialize-presentation-3.ts +++ b/src/presentation-3/serialize-presentation-3.ts @@ -1,10 +1,5 @@ import { SerializeConfig, UNSET, UNWRAP } from './serialize'; -import { - ImageService2, - ImageService3, - ResourceProvider, - TechnicalProperties, -} from '@iiif/presentation-3'; +import { ImageService2, ImageService3, ResourceProvider, TechnicalProperties } from '@iiif/presentation-3'; import { compressSpecificResource } from '../shared/compress-specific-resource'; import { DescriptiveNormalized, LinkingNormalized } from '@iiif/presentation-3-normalized'; From 9f3592611ac5033b6e6a4fa96d372b71a715b833 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Fri, 29 Jul 2022 12:29:02 +0100 Subject: [PATCH 12/44] Removed unused types --- src/image-3/profiles/supports-custom-sizes.ts | 4 +- src/image-3/profiles/supports.ts | 4 +- src/image-3/types.ts | 214 ------------------ 3 files changed, 4 insertions(+), 218 deletions(-) diff --git a/src/image-3/profiles/supports-custom-sizes.ts b/src/image-3/profiles/supports-custom-sizes.ts index 2e1eb6d..01f3671 100644 --- a/src/image-3/profiles/supports-custom-sizes.ts +++ b/src/image-3/profiles/supports-custom-sizes.ts @@ -1,8 +1,8 @@ -import { Service } from '../types'; +import { ImageService } from '@iiif/presentation-3'; import { isImageService } from '../utilities/is-image-service'; import { level1Support, Profile } from './profiles'; -export function supportsCustomSizes(service: Service): boolean { +export function supportsCustomSizes(service: ImageService): boolean { if (!isImageService(service)) { return false; } diff --git a/src/image-3/profiles/supports.ts b/src/image-3/profiles/supports.ts index c070627..026b38e 100644 --- a/src/image-3/profiles/supports.ts +++ b/src/image-3/profiles/supports.ts @@ -1,10 +1,10 @@ +import { ImageService } from '@iiif/presentation-3'; import { extraFeatures, Profile } from './profiles'; -import { Service } from '../types'; import { isImageService } from '../utilities/is-image-service'; import { combineProfiles } from './combine-profiles'; export function supports( - service: Service, + service: ImageService, req: Partial & { exactSize?: { width?: number; height?: number } } ) { if (!isImageService(service)) { diff --git a/src/image-3/types.ts b/src/image-3/types.ts index 0e70b63..12f859b 100644 --- a/src/image-3/types.ts +++ b/src/image-3/types.ts @@ -1,58 +1,6 @@ import { ImageService, LinkingProperties } from '@iiif/presentation-3'; import { ExtraFeature } from './profiles/profiles'; -export type Service = ImageService & { - real?: false; -}; - -export type FixedSizeImage = { - id: string; - type: 'fixed'; - width: number; - height: number; - unsafe?: boolean; -}; - -export type FixedSizeImageService = { - id: string; - type: 'fixed-service'; - width: number; - height: number; -}; - -export type VariableSizeImage = { - id: string; - type: 'variable'; - minWidth: number; - maxWidth: number; - minHeight: number; - maxHeight: number; -}; - -export type UnknownSizeImage = { - id: string; - type: 'unknown'; -}; - -export type ImageCandidate = FixedSizeImage | VariableSizeImage | UnknownSizeImage | FixedSizeImageService; - -export type ImageCandidateRequest = { - width?: number; - height?: number; - maxWidth?: number; - maxHeight?: number; - minWidth?: number; - minHeight?: number; - // Configurations - fallback?: boolean; - atAnyCost?: boolean; - unsafeImageService?: boolean; - returnAllOptions?: boolean; - allowUnsafe?: boolean; - preferFixedSize?: boolean; - explain?: boolean; -}; - /** * Size parameter * @@ -127,165 +75,3 @@ export type ImageServiceImageRequest = format: string; originalPath: string; }; - -// Unused for now. -type ImageService3 = { - /** - * The `@context` property **SHOULD** appear as the very first key-value pair of the JSON representation. Its value must - * be either the URI `http://iiif.io/api/image/3/context.json` or a JSON array with the URI - * `http://iiif.io/api/image/3/context.json` as the last item. The `@context` tells Linked Data processors how to - * interpret the image information. If extensions are used then their context definitions **SHOULD** be included in - * this top-level `@context` property. - */ - '@context': 'http://iiif.io/api/image/3/context.json' | string[]; - - /** - * The base URI of the image as defined in [URI Syntax](https://iiif.io/api/image/3.0/#2-uri-syntax), including - * scheme, server, prefix and identifier without a trailing slash. - */ - id: string; - - /** - * The type for the Image API. The value **MUST** be the string `ImageService3`. - */ - type: 'ImageService3'; - - /** - * The URI `http://iiif.io/api/image` which can be used to determine that the document describes an image service - * which is a version of the IIIF Image API. - */ - protocol: 'http://iiif.io/api/image'; - - /** - * A string indicating the highest [compliance level](https://iiif.io/api/image/3.0/#6-compliance-level-and-profile-document) - * which is fully supported by the service. The value **MUST** be one of `level0`, `level1`, or `level2`. - */ - profile: 'level0' | 'level1' | 'level2'; - - /** - * The width in pixels of the full image, given as an integer. - */ - width: number; - - /** - * The height in pixels of the full image, given as an integer. - */ - height: number; - - /** - * The maximum width in pixels supported for this image. Clients **MUST NOT** expect requests with a width greater - * than this value to be supported. `maxWidth` **MUST** be specified if `maxHeight` is specified. - */ - maxWidth?: number; - - /** - * The maximum height in pixels supported for this image. Clients **MUST NOT** expect requests with a height greater than - * this value to be supported. If `maxWidth` is specified and `maxHeight` is not, then clients **SHOULD** infer that - * `maxHeight = maxWidth`. - */ - maxHeight?: number; - - /** - * The maximum area in pixels supported for this image. Clients **MUST NOT** expect requests with a `width * height` - * greater than this value to be supported. - */ - maxArea?: number; - - /** - * An array of JSON objects with the `height` and `width` properties. These sizes specify preferred values to be - * provided in the `w,h` syntax of the size request parameter for scaled versions of the full image. In the case of - * servers that do not support requests for arbitrary sizes, these may be the only sizes available. A request - * constructed with the `w,h` syntax using these sizes **MUST** be supported by the server, even if arbitrary width - * and height are not. - */ - sizes?: Array<{ - /** - * The type of the object. If present, the value must be the string `Size`. - */ - type?: 'Size'; - - /** - * The width in pixels of the image to be requested, given as an integer. - */ - height: number; - - /** - * The height in pixels of the image to be requested, given as an integer. - */ - width: number; - }>; - - /** - * An array of JSON objects describing the parameters to use to request regions of the image (tiles) that are - * efficient for the server to deliver. Each description gives a width, optionally a height for non-square tiles, - * and a set of scale factors at which tiles of those dimensions are available. - */ - tiles?: Array<{ - /** - * The type of the object. If present, the value **MUST** be the string `Tile`. - */ - type?: 'Tile'; - - /** - * The set of resolution scaling factors for the image’s predefined tiles, expressed as positive integers by which - * to divide the full size of the image. For example, a scale factor of 4 indicates that the service can - * efficiently deliver images at 1/4 or 25% of the height and width of the full image. A particular scale factor - * value **SHOULD** appear only once in the `tiles` array. - */ - scaleFactors: number[]; - - /** - * The width in pixels of the predefined tiles to be requested, given as an integer. - */ - width: number; - - /** - * The height in pixels of the predefined tiles to be requested, given as an integer. If it is not specified in - * the JSON, then it defaults to the same as `width`, resulting in square tiles. - */ - height?: number; - }>; - - /** - * An array of strings that are the preferred format parameter values, arranged in order of preference. The format - * parameter values listed must be among those specified in the referenced profile or listed in the extraFormats - * property (see [Extra Functionality](https://iiif.io/api/image/3.0/#57-extra-functionality)). - */ - preferredFormats?: string[]; - - /** - * A string that identifies a license or rights statement that applies to the content of this image. The value of - * this property must be a string drawn from the set of [Creative Commons](https://creativecommons.org/licenses/) - * license URIs, the [RightsStatements.org](http://rightsstatements.org/page/1.0/) rights statement URIs, or those - * added via the [Registry of Known Extensions](https://iiif.io/api/registry/) mechanism. The inclusion of this - * property is informative, and for example could be used to display an icon representing the rights assertions. - */ - rights?: string; - - /** - * An array of strings that can be used as the quality parameter, in addition to `default`. - */ - extraQualities?: string[]; - - /** - * An array of strings that can be used as the format parameter, in addition to the ones specified in the - * referenced profile. - */ - extraFormats?: string[]; - - /** - * An array of strings identifying features supported by the service, in addition to the ones specified in the - * referenced profile. These strings are defined either in this [table](https://iiif.io/api/image/3.0/#features-table) - * or by [registering an extension](https://iiif.io/api/extension/). - */ - extraFeatures?: ExtraFeature[]; - - /** - * A link to another resource that references this image service, for example a link to a Canvas or Manifest. The - * value **MUST** be an array of JSON objects. Each item **MUST** have the `id` and `type` properties, and **SHOULD** - * have the `label` property. - */ - partOf?: LinkingProperties['partOf']; - seeAlso?: LinkingProperties['seeAlso']; - service?: Array; -}; From f2fa313208e0db3ef74b9ca5c84733a5e8573168 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Fri, 29 Jul 2022 12:35:41 +0100 Subject: [PATCH 13/44] Added tests --- __tests__/image-3-parser/parameters.test.ts | 343 ++++++++++++++++++ __tests__/image-3-parser/supports.test.ts | 231 ++++++++++++ src/image-3/index.ts | 2 + .../profiles/image-service-supports-format.ts | 8 + .../image-service-supports-request.ts | 83 +++++ src/image-3/types.ts | 3 - 6 files changed, 667 insertions(+), 3 deletions(-) create mode 100644 __tests__/image-3-parser/parameters.test.ts create mode 100644 __tests__/image-3-parser/supports.test.ts create mode 100644 src/image-3/profiles/image-service-supports-format.ts create mode 100644 src/image-3/profiles/image-service-supports-request.ts diff --git a/__tests__/image-3-parser/parameters.test.ts b/__tests__/image-3-parser/parameters.test.ts new file mode 100644 index 0000000..a477270 --- /dev/null +++ b/__tests__/image-3-parser/parameters.test.ts @@ -0,0 +1,343 @@ +import { createImageServiceRequest, imageServiceRequestToString, parseImageServiceRequest } from '../../src/image-3'; + +describe('IIIF Image API Parameters', () => { + /// {scheme}://{server}{/prefix}/{identifier}/{region}/{size}/{rotation}/{quality}.{format} + + describe('munch.emuseum.com examples', () => { + // https://munch.emuseum.com/apis/iiif/image/v2/17261/full/max/0/default.jpg + // https://munch.emuseum.com/apis/iiif/image/v2/17261/90,0,350,220/max/0/default.jpg + // https://munch.emuseum.com/apis/iiif/image/v2/17261/90,0,350,220/max/90/default.jpg + // https://munch.emuseum.com/apis/iiif/image/v2/17261/info.json + + test('full/max/0/default.jpg', () => { + const parsed = parseImageServiceRequest( + 'https://munch.emuseum.com/apis/iiif/image/v2/17261/full/max/0/default.jpg', + 'apis/iiif/image/v2' + ); + expect(parsed).toMatchInlineSnapshot(` + Object { + "format": "jpg", + "identifier": "17261", + "originalPath": "/17261/full/max/0/default.jpg", + "prefix": "apis/iiif/image/v2", + "quality": "default", + "region": Object { + "full": true, + }, + "rotation": Object { + "angle": 0, + }, + "scheme": "https", + "server": "munch.emuseum.com", + "size": Object { + "confined": false, + "max": true, + "serialiseAsFull": false, + "upscaled": false, + }, + "type": "image", + } + `); + + expect(imageServiceRequestToString(parsed)).toEqual( + 'https://munch.emuseum.com/apis/iiif/image/v2/17261/full/max/0/default.jpg' + ); + }); + + test('90,0,350,220/max/0/default.jpg', () => { + const parsed = parseImageServiceRequest( + 'https://munch.emuseum.com/apis/iiif/image/v2/17261/90,0,350,220/max/0/default.jpg', + 'apis/iiif/image/v2' + ); + expect(parsed).toMatchInlineSnapshot(` + Object { + "format": "jpg", + "identifier": "17261", + "originalPath": "/17261/90,0,350,220/max/0/default.jpg", + "prefix": "apis/iiif/image/v2", + "quality": "default", + "region": Object { + "h": 220, + "percent": false, + "w": 350, + "x": 90, + "y": 0, + }, + "rotation": Object { + "angle": 0, + }, + "scheme": "https", + "server": "munch.emuseum.com", + "size": Object { + "confined": false, + "max": true, + "serialiseAsFull": false, + "upscaled": false, + }, + "type": "image", + } + `); + + expect(imageServiceRequestToString(parsed)).toEqual( + 'https://munch.emuseum.com/apis/iiif/image/v2/17261/90,0,350,220/max/0/default.jpg' + ); + }); + test('90,0,350,220/max/90/default.jpg', () => { + const parsed = parseImageServiceRequest( + 'https://munch.emuseum.com/apis/iiif/image/v2/17261/90,0,350,220/max/90/default.jpg', + 'apis/iiif/image/v2' + ); + expect(parsed).toMatchInlineSnapshot(` + Object { + "format": "jpg", + "identifier": "17261", + "originalPath": "/17261/90,0,350,220/max/90/default.jpg", + "prefix": "apis/iiif/image/v2", + "quality": "default", + "region": Object { + "h": 220, + "percent": false, + "w": 350, + "x": 90, + "y": 0, + }, + "rotation": Object { + "angle": 90, + }, + "scheme": "https", + "server": "munch.emuseum.com", + "size": Object { + "confined": false, + "max": true, + "serialiseAsFull": false, + "upscaled": false, + }, + "type": "image", + } + `); + + expect(imageServiceRequestToString(parsed)).toEqual( + 'https://munch.emuseum.com/apis/iiif/image/v2/17261/90,0,350,220/max/90/default.jpg' + ); + }); + test('info.json', () => { + const parsed = parseImageServiceRequest( + 'https://munch.emuseum.com/apis/iiif/image/v2/17261/info.json', + 'apis/iiif/image/v2' + ); + expect(parsed).toMatchInlineSnapshot(` + Object { + "identifier": "17261", + "prefix": "apis/iiif/image/v2", + "scheme": "https", + "server": "munch.emuseum.com", + "type": "info", + } + `); + + expect(imageServiceRequestToString(parsed)).toEqual( + 'https://munch.emuseum.com/apis/iiif/image/v2/17261/info.json' + ); + }); + }); + + describe('V&A Documentation examples', () => { + // https://framemark.vam.ac.uk/collections/2006AN7529/full/full/0/default.jpg + test('Request an image at full size', () => { + const parsed = parseImageServiceRequest( + 'https://framemark.vam.ac.uk/collections/2006AN7529/full/full/0/default.jpg' + ); + expect(parsed).toMatchInlineSnapshot(` + Object { + "format": "jpg", + "identifier": "collections/2006AN7529", + "originalPath": "collections/2006AN7529/full/full/0/default.jpg", + "prefix": "", + "quality": "default", + "region": Object { + "full": true, + }, + "rotation": Object { + "angle": 0, + }, + "scheme": "https", + "server": "framemark.vam.ac.uk", + "size": Object { + "confined": false, + "max": true, + "serialiseAsFull": true, + "upscaled": false, + }, + "type": "image", + } + `); + expect(imageServiceRequestToString(parsed)).toEqual( + 'https://framemark.vam.ac.uk/collections/2006AN7529/full/full/0/default.jpg' + ); + }); + test('Request an image fixed at 600 by 400', () => { + const parsed = parseImageServiceRequest( + 'https://framemark.vam.ac.uk/collections/2006AN7529/full/600,400/0/default.jpg' + ); + expect(parsed).toMatchInlineSnapshot(` + Object { + "format": "jpg", + "identifier": "collections/2006AN7529", + "originalPath": "collections/2006AN7529/full/600,400/0/default.jpg", + "prefix": "", + "quality": "default", + "region": Object { + "full": true, + }, + "rotation": Object { + "angle": 0, + }, + "scheme": "https", + "server": "framemark.vam.ac.uk", + "size": Object { + "confined": false, + "height": 400, + "max": false, + "upscaled": false, + "width": 600, + }, + "type": "image", + } + `); + expect(imageServiceRequestToString(parsed)).toEqual( + 'https://framemark.vam.ac.uk/collections/2006AN7529/full/600,400/0/default.jpg' + ); + }); + test('Request a 100 by 100 (retaining aspect ratio) thumbnail', () => { + const parsed = parseImageServiceRequest( + 'https://framemark.vam.ac.uk/collections/2016JL5779/full/!100,100/0/default.jpg' + ); + expect(parsed).toMatchInlineSnapshot(` + Object { + "format": "jpg", + "identifier": "collections/2016JL5779", + "originalPath": "collections/2016JL5779/full/!100,100/0/default.jpg", + "prefix": "", + "quality": "default", + "region": Object { + "full": true, + }, + "rotation": Object { + "angle": 0, + }, + "scheme": "https", + "server": "framemark.vam.ac.uk", + "size": Object { + "confined": true, + "height": 100, + "max": false, + "upscaled": false, + "width": 100, + }, + "type": "image", + } + `); + expect(imageServiceRequestToString(parsed)).toEqual( + 'https://framemark.vam.ac.uk/collections/2016JL5779/full/!100,100/0/default.jpg' + ); + }); + test('Request a greyscale version', () => { + const parsed = parseImageServiceRequest( + 'https://framemark.vam.ac.uk/collections/2006AN7529/full/full/0/grey.jpg' + ); + expect(parsed).toMatchInlineSnapshot(` + Object { + "format": "jpg", + "identifier": "collections/2006AN7529", + "originalPath": "collections/2006AN7529/full/full/0/grey.jpg", + "prefix": "", + "quality": "grey", + "region": Object { + "full": true, + }, + "rotation": Object { + "angle": 0, + }, + "scheme": "https", + "server": "framemark.vam.ac.uk", + "size": Object { + "confined": false, + "max": true, + "serialiseAsFull": true, + "upscaled": false, + }, + "type": "image", + } + `); + expect(imageServiceRequestToString(parsed)).toEqual( + 'https://framemark.vam.ac.uk/collections/2006AN7529/full/full/0/grey.jpg' + ); + }); + test('Request a image rotated by 180 degrees', () => { + const parsed = parseImageServiceRequest( + 'https://framemark.vam.ac.uk/collections/2006AN7529/full/full/180/default.jpg' + ); + expect(parsed).toMatchInlineSnapshot(` + Object { + "format": "jpg", + "identifier": "collections/2006AN7529", + "originalPath": "collections/2006AN7529/full/full/180/default.jpg", + "prefix": "", + "quality": "default", + "region": Object { + "full": true, + }, + "rotation": Object { + "angle": 180, + }, + "scheme": "https", + "server": "framemark.vam.ac.uk", + "size": Object { + "confined": false, + "max": true, + "serialiseAsFull": true, + "upscaled": false, + }, + "type": "image", + } + `); + expect(imageServiceRequestToString(parsed)).toEqual( + 'https://framemark.vam.ac.uk/collections/2006AN7529/full/full/180/default.jpg' + ); + }); + }); + + test('Creating requests', () => { + const req = createImageServiceRequest({ + id: 'https://framemark.vam.ac.uk/collections/2006AN7529', + profile: 'level0', + }); + expect(req).toMatchInlineSnapshot(` + Object { + "format": "jpg", + "identifier": "collections/2006AN7529", + "originalPath": "", + "prefix": "", + "quality": "default", + "region": Object { + "full": true, + }, + "rotation": Object { + "angle": 0, + }, + "scheme": "https", + "server": "framemark.vam.ac.uk", + "size": Object { + "confined": false, + "max": true, + "upscaled": false, + }, + "type": "image", + } + `); + + expect(imageServiceRequestToString(req)).toMatchInlineSnapshot( + `"https://framemark.vam.ac.uk/collections/2006AN7529/full/max/0/default.jpg"` + ); + }); +}); diff --git a/__tests__/image-3-parser/supports.test.ts b/__tests__/image-3-parser/supports.test.ts new file mode 100644 index 0000000..0ead791 --- /dev/null +++ b/__tests__/image-3-parser/supports.test.ts @@ -0,0 +1,231 @@ +// noinspection DuplicatedCode + +import { ImageService } from '@iiif/presentation-3'; +import { + imageServiceRequestToString, + parseImageServiceRequest, + supports, + imageServiceSupportsRequest, + imageServiceSupportsFormat, +} from '../../src/image-3'; + +describe('supports', function () { + const id = 'https://example.org/service'; + + test('supports maxArea', () => { + expect(supports({ id, profile: 'level0' }, { maxArea: 100 })).toEqual([true]); + expect(supports({ id, profile: 'level1' }, { maxArea: 100 })).toEqual([true]); + expect(supports({ id, profile: 'level2' }, { maxArea: 100 })).toEqual([true]); + expect(supports({ id, profile: ['level0', { maxArea: 150 }] }, { maxArea: 100 })).toEqual([true]); + expect(supports({ id, profile: ['level0', { maxArea: 50 }] }, { maxArea: 100 })).toEqual([false, 'Max area is 50']); + }); + + test('supports maxWidth', () => { + expect(supports({ id, profile: 'level0' }, { maxWidth: 100 })).toEqual([true]); + expect(supports({ id, profile: 'level1' }, { maxWidth: 100 })).toEqual([true]); + expect(supports({ id, profile: 'level2' }, { maxWidth: 100 })).toEqual([true]); + expect(supports({ id, profile: ['level0', { maxWidth: 150 }] }, { maxWidth: 100 })).toEqual([true]); + expect(supports({ id, profile: ['level0', { maxWidth: 50 }] }, { maxWidth: 100 })).toEqual([ + false, + 'Max width is 50', + ]); + }); + + test('supports maxHeight', () => { + expect(supports({ id, profile: 'level0' }, { maxHeight: 100 })).toEqual([true]); + expect(supports({ id, profile: 'level1' }, { maxHeight: 100 })).toEqual([true]); + expect(supports({ id, profile: 'level2' }, { maxHeight: 100 })).toEqual([true]); + expect(supports({ id, profile: ['level0', { maxHeight: 150 }] }, { maxHeight: 100 })).toEqual([true]); + expect(supports({ id, profile: ['level0', { maxHeight: 150 }] }, { maxHeight: 150 })).toEqual([true]); + expect(supports({ id, profile: ['level0', { maxHeight: 50 }] }, { maxHeight: 100 })).toEqual([ + false, + 'Max height is 50', + ]); + }); + + test('supports qualities', () => { + expect(supports({ id, profile: 'level0' }, { extraQualities: ['default'] })).toEqual([true]); + expect(supports({ id, profile: 'level1' }, { extraQualities: ['default'] })).toEqual([true]); + expect(supports({ id, profile: 'level2' }, { extraQualities: ['default'] })).toEqual([true]); + expect( + supports({ id, profile: ['level0', { qualities: ['grey'] }] }, { extraQualities: ['default', 'grey'] }) + ).toEqual([true]); + expect( + supports( + { id, profile: ['level0', { extraQualities: ['grey'] }] as any }, + { extraQualities: ['default', 'grey'] } + ) + ).toEqual([true]); + expect(supports({ id, profile: ['level0'] }, { extraQualities: ['default', 'grey'] })).toEqual([ + false, + 'Missing qualities: grey', + ]); + }); + + test('supports features', () => { + expect(supports({ id, profile: 'level0' }, { extraFeatures: ['sizeByWhListed'] })).toEqual([true]); + expect(supports({ id, profile: 'level1' }, { extraFeatures: ['sizeByWhListed'] })).toEqual([true]); + expect(supports({ id, profile: 'level2' }, { extraFeatures: ['sizeByWhListed'] })).toEqual([true]); + expect(supports({ id, profile: ['level0'] }, { extraFeatures: ['sizeByH'] })).toEqual([ + false, + 'Missing features: sizeByH', + ]); + expect(supports({ id, profile: ['level0', { supports: ['sizeByH'] }] }, { extraFeatures: ['sizeByH'] })).toEqual([ + true, + ]); + }); + + test('imageServiceSupportsFormat', () => { + expect(imageServiceSupportsFormat({ id, profile: 'level0' }, 'jpg')).toEqual([true]); + expect(imageServiceSupportsFormat({ id, profile: 'level0' }, 'png')).toEqual([false, 'Missing formats: png']); + expect(imageServiceSupportsFormat({ id, profile: 'level0', extraFormats: ['png'] }, 'png')).toEqual([true]); + expect(imageServiceSupportsFormat({ id, profile: ['level0', { formats: ['png'] }] }, 'png')).toEqual([true]); + expect(imageServiceSupportsFormat({ id, profile: ['level0', { formats: ['png'] }] }, 'jp2')).toEqual([ + false, + 'Missing formats: jp2', + ]); + }); + + describe('imageServiceRequestToString', () => { + test('max width requests in versions.', () => { + const og = parseImageServiceRequest('https://example.org/service/full/full/0/default.jpg'); + + expect(imageServiceRequestToString(og, { '@context': 'http://iiif.io/api/image/2/context.json' } as any)).toEqual( + 'https://example.org/service/full/full/0/default.jpg' + ); + expect(imageServiceRequestToString(og, { '@context': 'http://iiif.io/api/image/3/context.json' } as any)).toEqual( + 'https://example.org/service/full/max/0/default.jpg' + ); + }); + + test('max width (specific) requests in versions.', () => { + const og = parseImageServiceRequest('https://example.org/service/full/800,600/0/default.jpg'); + + expect( + imageServiceRequestToString(og, { + '@context': 'http://iiif.io/api/image/2/context.json', + width: 800, + height: 600, + } as any) + ).toEqual('https://example.org/service/full/full/0/default.jpg'); + expect( + imageServiceRequestToString(og, { + '@context': 'http://iiif.io/api/image/3/context.json', + width: 800, + height: 600, + } as any) + ).toEqual('https://example.org/service/full/max/0/default.jpg'); + }); + + test('normal width (specific) requests in versions.', () => { + const og = parseImageServiceRequest('https://example.org/service/full/400,/0/default.jpg'); + + expect( + imageServiceRequestToString(og, { + '@context': 'http://iiif.io/api/image/2/context.json', + width: 800, + height: 600, + } as any) + ).toEqual('https://example.org/service/full/400,/0/default.jpg'); + expect( + imageServiceRequestToString(og, { + '@context': 'http://iiif.io/api/image/3/context.json', + width: 800, + height: 600, + } as any) + ).toEqual('https://example.org/service/full/400,300/0/default.jpg'); + }); + test('normal width (scaling) requests in versions.', () => { + const og = parseImageServiceRequest('https://example.org/service/full/300,/0/default.jpg'); + + expect( + imageServiceRequestToString(og, { + '@context': 'http://iiif.io/api/image/2/context.json', + width: 800, + height: 600, + } as any) + ).toEqual('https://example.org/service/full/300,/0/default.jpg'); + expect( + imageServiceRequestToString(og, { + '@context': 'http://iiif.io/api/image/3/context.json', + width: 800, + height: 600, + } as any) + ).toEqual('https://example.org/service/full/300,225/0/default.jpg'); + }); + }); + + test('normal width (rounding) requests in versions.', () => { + const og = parseImageServiceRequest('https://example.org/service/full/310,/0/default.jpg'); + + expect( + imageServiceRequestToString(og, { + '@context': 'http://iiif.io/api/image/2/context.json', + width: 800, + height: 600, + } as any) + ).toEqual('https://example.org/service/full/310,/0/default.jpg'); + expect( + imageServiceRequestToString(og, { + '@context': 'http://iiif.io/api/image/3/context.json', + width: 800, + height: 600, + } as any) + ).toEqual('https://example.org/service/full/310,233/0/default.jpg'); + }); + + describe('imageServiceSupportsRequest', () => { + test('sample image service (v2)', () => { + const u = parseImageServiceRequest; + const service2: ImageService = { + '@context': 'http://iiif.io/api/image/2/context.json', + id, + profile: 'level0', + width: 800, + height: 600, + sizes: [ + { width: 400, height: 300 }, + { width: 800, height: 600 }, + ], + }; + + expect( + // Full. + imageServiceSupportsRequest(service2, u(`https://example.org/service/full/full/0/default.jpg`)) + ).toEqual([true]); + expect( + // A size. + imageServiceSupportsRequest(service2, u(`https://example.org/service/full/400,/0/default.jpg`)) + ).toEqual([true]); + + expect( + // max -> full + imageServiceSupportsRequest(service2, u(`https://example.org/service/full/max/0/default.jpg`)) + ).toEqual([true]); + + expect( + // 800,600 -> full + imageServiceSupportsRequest(service2, u(`https://example.org/service/full/800,600/0/default.jpg`)) + ).toEqual([true]); + + expect( + // 800, -> full + imageServiceSupportsRequest(service2, u(`https://example.org/service/full/800,/0/default.jpg`)) + ).toEqual([true]); + + expect( + // 400,300 -> 400, + imageServiceSupportsRequest(service2, u(`https://example.org/service/full/400,300/0/default.jpg`)) + ).toEqual([true]); + + expect( + // 400,300 -> 400, + imageServiceSupportsRequest(service2, u(`https://example.org/service/full/450,/0/default.jpg`)) + ).toEqual([false, 'Missing features: sizeByW']); + expect( + // 400,300 -> 400, + imageServiceSupportsRequest(service2, u(`https://example.org/service/full/800,900/0/default.jpg`)) + ).toEqual([false, 'Missing features: sizeByWh']); + }); + }); +}); diff --git a/src/image-3/index.ts b/src/image-3/index.ts index abb3a80..74e4418 100644 --- a/src/image-3/index.ts +++ b/src/image-3/index.ts @@ -11,6 +11,8 @@ export * from './profiles/level-to-profile'; export * from './profiles/is-level-0'; export * from './profiles/supports'; export * from './profiles/supports-custom-sizes'; +export * from './profiles/image-service-supports-format'; +export * from './profiles/image-service-supports-request'; export * from './serialize/image-service-request-to-string'; export * from './serialize/region-parameter-to-string'; export * from './serialize/rotation-parameter-to-string'; diff --git a/src/image-3/profiles/image-service-supports-format.ts b/src/image-3/profiles/image-service-supports-format.ts new file mode 100644 index 0000000..81732e7 --- /dev/null +++ b/src/image-3/profiles/image-service-supports-format.ts @@ -0,0 +1,8 @@ +import { ImageService } from '@iiif/presentation-3'; +import { supports } from './supports'; + +export function imageServiceSupportsFormat(imageService: ImageService, format: string) { + return supports(imageService, { + extraFormats: [format], + }); +} diff --git a/src/image-3/profiles/image-service-supports-request.ts b/src/image-3/profiles/image-service-supports-request.ts new file mode 100644 index 0000000..d031023 --- /dev/null +++ b/src/image-3/profiles/image-service-supports-request.ts @@ -0,0 +1,83 @@ +import { ImageService } from '@iiif/presentation-3'; +import { ImageServiceImageRequest } from '../types'; +import { supports } from './supports'; +import { ExtraFeature } from './profiles'; + +export function imageServiceSupportsRequest(imageService: ImageService, request: ImageServiceImageRequest) { + if (request.type !== 'image') { + return [true]; + } + + const extraFeatures: ExtraFeature[] = []; + + if (request.rotation.mirror) { + extraFeatures.push('mirroring'); + } + + if (request.region.percent) { + extraFeatures.push('regionByPct'); + } + + if (request.region.square) { + extraFeatures.push('regionSquare'); + } else if (!request.region.full) { + extraFeatures.push('regionByPx'); + } + + if (request.rotation.angle) { + const remainder = request.rotation.angle % 90; + if (remainder) { + extraFeatures.push('rotationArbitrary'); + } else { + extraFeatures.push('rotationBy90s'); + } + } + + if (request.size.confined) { + extraFeatures.push('sizeByConfinedWh'); + } + + if (!request.size.width && request.size.height) { + extraFeatures.push('sizeByH'); + } + + if (request.size.percentScale) { + extraFeatures.push('sizeByPct'); + } + + // Could we bail, and check sizes instead? + const fixedSize = (imageService.sizes || []).find( + (size) => + (size.width === request.size.width && !request.size.height) || + (size.height === request.size.height && !request.size.width) || + (size.height === request.size.height && size.width === request.size.width) + ); + if (fixedSize) { + extraFeatures.push('sizeByWhListed'); + } else { + if (request.size.width && !request.size.height) { + extraFeatures.push('sizeByW'); + } + + if (request.size.width && request.size.height) { + extraFeatures.push('sizeByWh'); + } + } + + if (request.size.upscaled) { + extraFeatures.push('sizeUpscaling'); + } + + const [doesSupport, reason] = supports(imageService, { + extraFeatures, + extraQualities: [request.quality], + extraFormats: [request.format], + exactSize: request.size, + }); + + if (doesSupport) { + return [true] as const; + } + + return [false, reason] as const; +} diff --git a/src/image-3/types.ts b/src/image-3/types.ts index 12f859b..8353481 100644 --- a/src/image-3/types.ts +++ b/src/image-3/types.ts @@ -1,6 +1,3 @@ -import { ImageService, LinkingProperties } from '@iiif/presentation-3'; -import { ExtraFeature } from './profiles/profiles'; - /** * Size parameter * From 426aec680a70012db788a092dac9d8a6c940dff0 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Fri, 29 Jul 2022 21:11:43 +0100 Subject: [PATCH 14/44] Changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 03824a0..36a8ed1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fragment selectors in SpecificResources, strings and `{id,type}` References are now normalised, reducing the need to parse IDs to grab the ID/Type - Added expand target helper, used internally for normalization (possibly useful for content state). - New sub-package `@iiif/parser/strict` for fixing common mistakes in Presentation 3, with detailed feedback for implementors. +- New sub-package `@iiif/parser/image-3` for parsing IIIF Image API and some helpers - Test coverage across every [IIIF Cookbook](https://iiif.io/api/cookbook) recipe, testing: - Parsing / Traversing the IIIF - Normalizing the IIIF correctly From df35c38da793ef5db102ecc6795d1d7e6b919867 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Fri, 29 Jul 2022 21:15:13 +0100 Subject: [PATCH 15/44] Fixed tests --- __tests__/image-3-parser/parameters.test.ts | 74 ++++++------- yarn.lock | 116 +------------------- 2 files changed, 39 insertions(+), 151 deletions(-) diff --git a/__tests__/image-3-parser/parameters.test.ts b/__tests__/image-3-parser/parameters.test.ts index a477270..305f67a 100644 --- a/__tests__/image-3-parser/parameters.test.ts +++ b/__tests__/image-3-parser/parameters.test.ts @@ -15,21 +15,21 @@ describe('IIIF Image API Parameters', () => { 'apis/iiif/image/v2' ); expect(parsed).toMatchInlineSnapshot(` - Object { + { "format": "jpg", "identifier": "17261", "originalPath": "/17261/full/max/0/default.jpg", "prefix": "apis/iiif/image/v2", "quality": "default", - "region": Object { + "region": { "full": true, }, - "rotation": Object { + "rotation": { "angle": 0, }, "scheme": "https", "server": "munch.emuseum.com", - "size": Object { + "size": { "confined": false, "max": true, "serialiseAsFull": false, @@ -50,25 +50,25 @@ describe('IIIF Image API Parameters', () => { 'apis/iiif/image/v2' ); expect(parsed).toMatchInlineSnapshot(` - Object { + { "format": "jpg", "identifier": "17261", "originalPath": "/17261/90,0,350,220/max/0/default.jpg", "prefix": "apis/iiif/image/v2", "quality": "default", - "region": Object { + "region": { "h": 220, "percent": false, "w": 350, "x": 90, "y": 0, }, - "rotation": Object { + "rotation": { "angle": 0, }, "scheme": "https", "server": "munch.emuseum.com", - "size": Object { + "size": { "confined": false, "max": true, "serialiseAsFull": false, @@ -88,25 +88,25 @@ describe('IIIF Image API Parameters', () => { 'apis/iiif/image/v2' ); expect(parsed).toMatchInlineSnapshot(` - Object { + { "format": "jpg", "identifier": "17261", "originalPath": "/17261/90,0,350,220/max/90/default.jpg", "prefix": "apis/iiif/image/v2", "quality": "default", - "region": Object { + "region": { "h": 220, "percent": false, "w": 350, "x": 90, "y": 0, }, - "rotation": Object { + "rotation": { "angle": 90, }, "scheme": "https", "server": "munch.emuseum.com", - "size": Object { + "size": { "confined": false, "max": true, "serialiseAsFull": false, @@ -126,7 +126,7 @@ describe('IIIF Image API Parameters', () => { 'apis/iiif/image/v2' ); expect(parsed).toMatchInlineSnapshot(` - Object { + { "identifier": "17261", "prefix": "apis/iiif/image/v2", "scheme": "https", @@ -148,21 +148,21 @@ describe('IIIF Image API Parameters', () => { 'https://framemark.vam.ac.uk/collections/2006AN7529/full/full/0/default.jpg' ); expect(parsed).toMatchInlineSnapshot(` - Object { + { "format": "jpg", "identifier": "collections/2006AN7529", "originalPath": "collections/2006AN7529/full/full/0/default.jpg", "prefix": "", "quality": "default", - "region": Object { + "region": { "full": true, }, - "rotation": Object { + "rotation": { "angle": 0, }, "scheme": "https", "server": "framemark.vam.ac.uk", - "size": Object { + "size": { "confined": false, "max": true, "serialiseAsFull": true, @@ -180,21 +180,21 @@ describe('IIIF Image API Parameters', () => { 'https://framemark.vam.ac.uk/collections/2006AN7529/full/600,400/0/default.jpg' ); expect(parsed).toMatchInlineSnapshot(` - Object { + { "format": "jpg", "identifier": "collections/2006AN7529", "originalPath": "collections/2006AN7529/full/600,400/0/default.jpg", "prefix": "", "quality": "default", - "region": Object { + "region": { "full": true, }, - "rotation": Object { + "rotation": { "angle": 0, }, "scheme": "https", "server": "framemark.vam.ac.uk", - "size": Object { + "size": { "confined": false, "height": 400, "max": false, @@ -213,21 +213,21 @@ describe('IIIF Image API Parameters', () => { 'https://framemark.vam.ac.uk/collections/2016JL5779/full/!100,100/0/default.jpg' ); expect(parsed).toMatchInlineSnapshot(` - Object { + { "format": "jpg", "identifier": "collections/2016JL5779", "originalPath": "collections/2016JL5779/full/!100,100/0/default.jpg", "prefix": "", "quality": "default", - "region": Object { + "region": { "full": true, }, - "rotation": Object { + "rotation": { "angle": 0, }, "scheme": "https", "server": "framemark.vam.ac.uk", - "size": Object { + "size": { "confined": true, "height": 100, "max": false, @@ -246,21 +246,21 @@ describe('IIIF Image API Parameters', () => { 'https://framemark.vam.ac.uk/collections/2006AN7529/full/full/0/grey.jpg' ); expect(parsed).toMatchInlineSnapshot(` - Object { + { "format": "jpg", "identifier": "collections/2006AN7529", "originalPath": "collections/2006AN7529/full/full/0/grey.jpg", "prefix": "", "quality": "grey", - "region": Object { + "region": { "full": true, }, - "rotation": Object { + "rotation": { "angle": 0, }, "scheme": "https", "server": "framemark.vam.ac.uk", - "size": Object { + "size": { "confined": false, "max": true, "serialiseAsFull": true, @@ -278,21 +278,21 @@ describe('IIIF Image API Parameters', () => { 'https://framemark.vam.ac.uk/collections/2006AN7529/full/full/180/default.jpg' ); expect(parsed).toMatchInlineSnapshot(` - Object { + { "format": "jpg", "identifier": "collections/2006AN7529", "originalPath": "collections/2006AN7529/full/full/180/default.jpg", "prefix": "", "quality": "default", - "region": Object { + "region": { "full": true, }, - "rotation": Object { + "rotation": { "angle": 180, }, "scheme": "https", "server": "framemark.vam.ac.uk", - "size": Object { + "size": { "confined": false, "max": true, "serialiseAsFull": true, @@ -313,21 +313,21 @@ describe('IIIF Image API Parameters', () => { profile: 'level0', }); expect(req).toMatchInlineSnapshot(` - Object { + { "format": "jpg", "identifier": "collections/2006AN7529", "originalPath": "", "prefix": "", "quality": "default", - "region": Object { + "region": { "full": true, }, - "rotation": Object { + "rotation": { "angle": 0, }, "scheme": "https", "server": "framemark.vam.ac.uk", - "size": Object { + "size": { "confined": false, "max": true, "upscaled": false, diff --git a/yarn.lock b/yarn.lock index b224400..01a4131 100644 --- a/yarn.lock +++ b/yarn.lock @@ -64,17 +64,6 @@ dependencies: "@types/geojson" "^7946.0.10" -"@jest/types@^27.4.2": - version "27.4.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.4.2.tgz#96536ebd34da6392c2b7c7737d693885b5dd44a5" - integrity sha512-j35yw0PMTPpZsUoOBiuHzr1zTYoad1cVIE0ajEjcrJONxxrko/IRGKkXx3os0Nsi4Hu3+5VmDbVfq5WhG/pWAg== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^16.0.0" - chalk "^4.0.0" - "@jridgewell/gen-mapping@^0.3.0": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" @@ -167,25 +156,6 @@ resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.10.tgz#6dfbf5ea17142f7f9a043809f1cd4c448cb68249" integrity sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA== -"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" - integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== - -"@types/istanbul-lib-report@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" - integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== - dependencies: - "@types/istanbul-lib-coverage" "*" - -"@types/istanbul-reports@^3.0.0": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" - integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== - dependencies: - "@types/istanbul-lib-report" "*" - "@types/json-schema@^7.0.9": version "7.0.9" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" @@ -211,18 +181,6 @@ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== -"@types/yargs-parser@*": - version "20.2.1" - resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" - integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== - -"@types/yargs@^16.0.0": - version "16.0.4" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" - integrity sha512-T8Yc9wt/5LbJyCaLiHPReJa0kApcIgJ7Bn735GjItUfh08Z1pJvu8QZqb9s+mMvKV6WUQRV7K2R46YbjMXTTJw== - dependencies: - "@types/yargs-parser" "*" - "@typescript-eslint/eslint-plugin@^5.9.1": version "5.10.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.10.2.tgz#f8c1d59fc37bd6d9d11c97267fdfe722c4777152" @@ -395,13 +353,6 @@ braces@^3.0.1: dependencies: fill-range "^7.0.1" -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" @@ -456,11 +407,6 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA== -ci-info@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.0.tgz#b4ed1fb6818dea4803a55c623041f9165d2066b2" - integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== - cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -890,7 +836,7 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== @@ -1052,11 +998,6 @@ globby@^11.0.4: merge2 "^1.4.1" slash "^3.0.0" -graceful-fs@^4.2.4: - version "4.2.9" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.9.tgz#041b05df45755e587a24942279b9d113146e1c96" - integrity sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ== - happy-dom@^6.0.4: version "6.0.4" resolved "https://registry.yarnpkg.com/happy-dom/-/happy-dom-6.0.4.tgz#553c1a8ba842455beb975c579d769914808c7404" @@ -1201,18 +1142,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= -jest-util@^27.0.0: - version "27.4.2" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.4.2.tgz#ed95b05b1adfd761e2cda47e0144c6a58e05a621" - integrity sha512-YuxxpXU6nlMan9qyLuxHaMMOzXAl5aGZWCSzben5DhLHemYQxCc4YK+4L3ZrCutT8GPQ+ui9k5D8rUJoDioMnA== - dependencies: - "@jest/types" "^27.4.2" - "@types/node" "*" - chalk "^4.0.0" - ci-info "^3.2.0" - graceful-fs "^4.2.4" - picomatch "^2.2.3" - js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" @@ -1230,13 +1159,6 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json5@2.x: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" - integrity sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA== - dependencies: - minimist "^1.2.5" - jsonc-parser@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22" @@ -1255,11 +1177,6 @@ local-pkg@^0.4.2: resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.4.2.tgz#13107310b77e74a0e513147a131a2ba288176c2f" integrity sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg== -lodash.memoize@4.x: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - lodash.merge@^4.6.2: version "4.6.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" @@ -1284,11 +1201,6 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" -make-error@1.x: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -1331,11 +1243,6 @@ minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" @@ -1590,7 +1497,7 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -semver@7.x, semver@^7.3.5: +semver@^7.3.5: version "7.3.5" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== @@ -1761,20 +1668,6 @@ tr46@~0.0.3: resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== -ts-jest@^27.1.3: - version "27.1.3" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.3.tgz#1f723e7e74027c4da92c0ffbd73287e8af2b2957" - integrity sha512-6Nlura7s6uM9BVUAoqLH7JHyMXjz8gluryjpPXxr3IxZdAXnU6FhjvVLHFtfd1vsE1p8zD1OJfskkc0jhTSnkA== - dependencies: - bs-logger "0.x" - fast-json-stable-stringify "2.x" - jest-util "^27.0.0" - json5 "2.x" - lodash.memoize "4.x" - make-error "1.x" - semver "7.x" - yargs-parser "20.x" - tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -1965,11 +1858,6 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@20.x: - version "20.2.9" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" - integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== - yargs-parser@^21.0.0: version "21.0.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" From fb7cbefb0603ad10d69a56a328c2e1e5b6977829 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Wed, 28 Sep 2022 11:18:29 +0100 Subject: [PATCH 16/44] Build command fix --- .codesandbox/ci.json | 1 + 1 file changed, 1 insertion(+) diff --git a/.codesandbox/ci.json b/.codesandbox/ci.json index b7731e0..7e0eee6 100644 --- a/.codesandbox/ci.json +++ b/.codesandbox/ci.json @@ -3,5 +3,6 @@ "new", "simple-parser-2xxljf" ], + "buildCommand": "prepublishOnly", "node": "16" } From aaf9e08050b651312ca3a53b7e691dbdbc91d8bf Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Sat, 22 Oct 2022 17:31:29 +0100 Subject: [PATCH 17/44] formatting --- src/presentation-2/upgrader.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/presentation-2/upgrader.ts b/src/presentation-2/upgrader.ts index 176c622..0dcb9c1 100644 --- a/src/presentation-2/upgrader.ts +++ b/src/presentation-2/upgrader.ts @@ -5,7 +5,6 @@ import { Traverse } from './traverse'; import { ensureArray } from '../shared/ensure-array'; import { removeUndefinedProperties } from '../shared/remove-undefined-properties'; - const configuration = { attributionLabel: 'Attribution', lang: 'none', From 5c12d8406deca6a12cd98f9f5474ce22e6c70b29 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Sat, 22 Oct 2022 17:33:10 +0100 Subject: [PATCH 18/44] Upgrade deps --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 9c64252..732b1e9 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,7 @@ "test": "vitest" }, "dependencies": { - "@iiif/presentation-2": "^1.0.2", + "@iiif/presentation-2": "^1.0.4", "@iiif/presentation-3": "^2.0.5", "@iiif/presentation-3-normalized": "^0.9.7", "@types/geojson": "^7946.0.10" diff --git a/yarn.lock b/yarn.lock index d510b43..7e037a5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -65,10 +65,10 @@ dependencies: ajv "6.12.2" -"@iiif/presentation-2@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@iiif/presentation-2/-/presentation-2-1.0.2.tgz#c712c4a40cc5b7291b8d92646b0ec8b8215b9b3d" - integrity sha512-EN/p+td5VrHvUsQXV26VkaDFW0HG2GPRaibPlxJRip8au8ABBrOYPIcBH69Hyk3I0UnW3xzK2VsZ9TcuQEn0Mw== +"@iiif/presentation-2@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@iiif/presentation-2/-/presentation-2-1.0.4.tgz#1664aee995462fdf66ec8dfbae54fc22b4f79c97" + integrity sha512-hJakpq62VBajesLJrYPtFm6hcn6c/HkKP7CmKZ5atuzu40m0nifWYsqigR1l9sZGvhhHb/DRshPmiW/0GNrJoA== "@iiif/presentation-3-normalized@^0.9.7": version "0.9.7" From 8876efbd1576f88e6702c4a922ceebbafe88d061 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Sat, 30 Jul 2022 18:55:45 +0100 Subject: [PATCH 19/44] Added hasPart support --- CHANGELOG.md | 12 +- .../__snapshots__/cookbook.tests.ts.snap | 1971 ++++++++++++++++- .../__snapshots__/has-part.test.ts.snap | 310 +++ .../presentation-3-parser/cookbook.tests.ts | 2 +- .../presentation-3-parser/has-part.test.ts | 69 + fixtures/presentation-3/has-part.json | 58 + src/presentation-3/empty-types.ts | 5 +- src/presentation-3/index.ts | 1 + src/presentation-3/normalize.ts | 87 +- .../serialize-presentation-3.ts | 9 +- src/presentation-3/serialize.ts | 31 +- src/presentation-3/traverse.ts | 123 +- src/presentation-3/utilities.ts | 58 + 13 files changed, 2645 insertions(+), 91 deletions(-) create mode 100644 __tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap create mode 100644 __tests__/presentation-3-parser/has-part.test.ts create mode 100644 fixtures/presentation-3/has-part.json create mode 100644 src/presentation-3/utilities.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index c9ea0f2..41356d7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -27,6 +27,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - New traversal option for `SpecificResource` - New traversal option for `GeoJson` (e.g. from the `navPlace` extension) - New storing of `Services` when normalizing [^4] +- Added second parameter to Presentation 3 Traversal to access parent of current resource +- Added JSON-LD framing to serialization +- New helpers for resolving framed resources +- Added `iiif-parser:hasPart` to normalization of some resources containing JSON-LD frame for resources within a particular context (i.e. through partOf) +- Serialize config now has additional contextual information (parent resource, full resource if framed) ### Fixed - `[presentation-2]` `startCanvas` property on Sequences are now added to the Manifest when converting @@ -42,12 +47,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - `logo` on non-provider resources - hangover from pre-3.0, these will be ignored[^3] - `motivation` field on non-Annotation resources (bug) - `Traverse.traversePosterCanvas()` is removed (now `Traverse.traverseLinkedCanvases()`) -- + ### Changed - `range.items[]` is now normalised to either `Reference<'Range'>`[^1] or `SpecificResource>`[^2] - `manifest.start` is now normalised to a `SpecificResource>` - +- `ContentResource` now has a `iiif-parser:hasPart` when normalized +- `AnnotationPage` now has a `iiif-parser:hasPart` when normalized +- `Manifest` now has a `iiif-parser:hasPart` when normalized +- `Collection` now has a `iiif-parser:hasPart` when normalized [^1]: A `Reference` has the shape: `{ id: string, type: T }` and is usually narrowed to one or more types diff --git a/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap b/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap index 6ea4727..2b2261e 100644 --- a/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap @@ -13,6 +13,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0001-mvm-image https://iiif.io/api }, ], "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -89,6 +96,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0001-mvm-image https://iiif.io/api "format": "image/png", "height": 1800, "id": "http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png", + "iiif-parser:hasPart": [ + { + "id": "http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/annotation/p0001-image", + "type": "Image", + }, + ], "type": "Image", "width": 1200, }, @@ -204,6 +218,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0002-mvm-audio https://iiif.io/api }, ], "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page/annotation", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page/annotation", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -280,6 +301,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0002-mvm-audio https://iiif.io/api "duration": 1985.024, "format": "audio/mp4", "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page/annotation", + "type": "Sound", + }, + ], "type": "Sound", }, }, @@ -392,6 +420,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0003-mvm-video https://iiif.io/api }, ], "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page/annotation", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page/annotation", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -469,6 +504,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0003-mvm-video https://iiif.io/api "format": "video/mp4", "height": 360, "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page/annotation", + "type": "Video", + }, + ], "type": "Video", "width": 480, }, @@ -586,6 +628,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0004-canvas-size https://iiif.io/a }, ], "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -662,6 +711,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0004-canvas-size https://iiif.io/a "format": "image/png", "height": 360, "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/annotation/p0001-image", + "type": "Image", + }, + ], "type": "Image", "width": 640, }, @@ -777,6 +833,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0005-image-service https://iiif.io }, ], "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -857,6 +920,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0005-image-service https://iiif.io "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", @@ -997,6 +1067,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0006-text-language https://iiif.io }, ], "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0006-text-language/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -1073,6 +1150,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0006-text-language https://iiif.io "format": "image/jpeg", "height": 991, "id": "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0006-text-language/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/329817fc8a251a01c393f517d8a17d87-Whistlers_Mother", @@ -1327,6 +1411,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0007-string-formats https://iiif.i }, ], "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0007-string-formats/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -1403,6 +1494,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0007-string-formats https://iiif.i "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0007-string-formats/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", @@ -1598,6 +1696,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0008-rights https://iiif.io/api/co }, ], "id": "https://iiif.io/api/cookbook/recipe/0008-rights/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0008-rights/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -1674,6 +1779,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0008-rights https://iiif.io/api/co "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0008-rights/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", @@ -1842,6 +1954,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/co }, ], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -1862,6 +1981,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/co }, ], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0002-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0002-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p2/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -1882,6 +2008,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/co }, ], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0003-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0003-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p3/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -1902,6 +2035,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/co }, ], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0004-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0004-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p4/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -1922,6 +2062,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/co }, ], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0005-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0005-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p5/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -2226,6 +2373,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/co "format": "image/jpeg", "height": 4613, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18", @@ -2240,6 +2394,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/co "format": "image/jpeg", "height": 4612, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0002-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19", @@ -2254,6 +2415,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/co "format": "image/jpeg", "height": 4613, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0003-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20", @@ -2268,6 +2436,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/co "format": "image/jpeg", "height": 4578, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0004-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21", @@ -2282,6 +2457,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/co "format": "image/jpeg", "height": 4632, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0005-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22", @@ -2635,6 +2817,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani }, ], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -2655,6 +2844,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani }, ], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0002-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0002-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p2/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -2675,6 +2871,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani }, ], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0003-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0003-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p3/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -2695,6 +2898,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani }, ], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0004-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0004-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p4/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -2715,6 +2925,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani }, ], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0005-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0005-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p5/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -3019,6 +3236,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "format": "image/jpeg", "height": 4823, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", @@ -3033,6 +3257,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "format": "image/jpeg", "height": 4804, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0002-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", @@ -3047,6 +3278,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "format": "image/jpeg", "height": 4776, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0003-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", @@ -3061,6 +3299,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "format": "image/jpeg", "height": 4751, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0004-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", @@ -3075,6 +3320,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "format": "image/jpeg", "height": 4808, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0005-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", @@ -3433,6 +3685,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani }, ], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -3453,6 +3712,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani }, ], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0002-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0002-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v2/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -3473,6 +3739,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani }, ], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0003-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0003-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v3/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -3493,6 +3766,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani }, ], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0004-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0004-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v4/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -3741,6 +4021,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "format": "image/jpeg", "height": 3152, "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02", @@ -3755,6 +4042,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "format": "image/jpeg", "height": 3135, "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0002-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03", @@ -3769,6 +4063,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "format": "image/jpeg", "height": 3135, "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0003-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04", @@ -3783,6 +4084,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "format": "image/jpeg", "height": 3135, "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0004-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05", @@ -4089,6 +4397,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-cont }, ], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -4109,6 +4424,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-cont }, ], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0002-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0002-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s2/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -4129,6 +4451,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-cont }, ], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0003-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0003-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s3/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -4149,6 +4478,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-cont }, ], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0004-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0004-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s4/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -4397,6 +4733,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-cont "format": "image/jpeg", "height": 1592, "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master", @@ -4411,6 +4754,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-cont "format": "image/jpeg", "height": 1536, "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0002-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master", @@ -4425,6 +4775,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-cont "format": "image/jpeg", "height": 1504, "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0003-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master", @@ -4439,6 +4796,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-cont "format": "image/jpeg", "height": 1464, "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0004-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master", @@ -4740,6 +5104,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-indi }, ], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -4760,6 +5131,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-indi }, ], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0002-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0002-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v2/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -4780,6 +5158,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-indi }, ], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0003-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0003-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v3/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -4800,6 +5185,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-indi }, ], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0004-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0004-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v4/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -5048,9 +5440,16 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-indi "format": "image/jpeg", "height": 2250, "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master/full/max/0/default.jpg", - "service": [ + "iiif-parser:hasPart": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image", + "type": "Image", + }, + ], + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", "profile": "level1", "type": "ImageService3", }, @@ -5062,6 +5461,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-indi "format": "image/jpeg", "height": 2250, "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0002-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master", @@ -5076,6 +5482,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-indi "format": "image/jpeg", "height": 2250, "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0003-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master", @@ -5090,6 +5503,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-indi "format": "image/jpeg", "height": 2250, "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0004-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master", @@ -5391,6 +5811,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0013-placeholderCanvas https://iii }, ], "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -5411,6 +5838,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0013-placeholderCanvas https://iii }, ], "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1-video", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1-video", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -5542,6 +5976,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0013-placeholderCanvas https://iii "format": "image/png", "height": 360, "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1-image", + "type": "Image", + }, + ], "type": "Image", "width": 640, }, @@ -5550,6 +5991,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0013-placeholderCanvas https://iii "format": "video/mp4", "height": 360, "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1-video", + "type": "Video", + }, + ], "type": "Video", "width": 640, }, @@ -5698,6 +6146,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0014-accompanyingcanvas https://ii }, ], "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -5718,6 +6173,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0014-accompanyingcanvas https://ii }, ], "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -5857,12 +6319,26 @@ exports[`Cookbook > Testing normalize %p (%p) 0014-accompanyingcanvas https://ii "duration": 1985.024, "format": "video/mp4", "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio", + "type": "Sound", + }, + ], "type": "Sound", }, "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg": { "format": "image/jpeg", "height": 998, "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0", @@ -6037,6 +6513,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0015-start https://iiif.io/api/coo }, ], "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1-video", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1-video", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1/page", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -6084,6 +6567,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0015-start https://iiif.io/api/coo "height": 0, "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0015-start/manifest.json", + "type": "Canvas", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1/page", @@ -6113,6 +6603,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0015-start https://iiif.io/api/coo "duration": 1801.055, "format": "video/mp4", "id": "https://fixtures.iiif.io/video/indiana/30-minute-clock/medium/30-minute-clock.mp4", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/video/indiana/30-minute-clock/medium/30-minute-clock.mp4", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1-video", + "type": "Video", + }, + ], "type": "Video", }, }, @@ -6269,6 +6766,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0017-transcription-av https://iiif }, ], "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page/annotation", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page/annotation", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -6351,12 +6855,26 @@ exports[`Cookbook > Testing normalize %p (%p) 0017-transcription-av https://iiif "format": "video/mp4", "height": 1080, "id": "https://fixtures.iiif.io/video/indiana/volleyball/high/volleyball-for-boys.mp4", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/video/indiana/volleyball/high/volleyball-for-boys.mp4", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page/annotation", + "type": "Video", + }, + ], "type": "Video", "width": 1920, }, "https://fixtures.iiif.io/video/indiana/volleyball/volleyball.txt": { "format": "text/txt", "id": "https://fixtures.iiif.io/video/indiana/volleyball/volleyball.txt", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/video/indiana/volleyball/volleyball.txt", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas", + "type": "Text", + }, + ], "label": { "en": [ "Transcript", @@ -6491,6 +7009,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c }, ], "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -6511,6 +7036,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c }, ], "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1", + "type": "Annotation", + }, + ], "motivation": [ "tagging", ], @@ -6618,6 +7150,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", @@ -6631,6 +7170,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c "vault://605b9d93": { "format": "text/plain", "id": "vault://605b9d93", + "iiif-parser:hasPart": [ + { + "id": "vault://605b9d93", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", + "type": "TextualBody", + }, + ], "language": "de", "type": "TextualBody", "value": "Gänseliesel-Brunnen", @@ -6783,6 +7329,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap }, ], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -6803,6 +7356,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap }, ], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -6823,6 +7383,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap }, ], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -6843,6 +7410,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap }, ], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -6863,6 +7437,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap }, ], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -6883,6 +7464,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap }, ], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p6/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -7243,6 +7831,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "format": "image/jpeg", "height": 2504, "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master", @@ -7257,6 +7852,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "format": "image/jpeg", "height": 2512, "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master", @@ -7271,6 +7873,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "format": "image/jpeg", "height": 2456, "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master", @@ -7285,6 +7894,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "format": "image/jpeg", "height": 2440, "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master", @@ -7299,6 +7915,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "format": "image/jpeg", "height": 2416, "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master", @@ -7313,6 +7936,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "format": "image/jpeg", "height": 2416, "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master", @@ -7394,6 +8024,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r1", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -7419,6 +8056,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r1", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -7444,6 +8088,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/1", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -7469,6 +8120,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/1", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -7494,6 +8152,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/2", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -7519,6 +8184,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/2", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -7582,6 +8254,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r0", + "type": "Range", + }, + ], "items": [ { "selector": undefined, @@ -7628,6 +8307,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r0", + "type": "Range", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/1", @@ -7666,6 +8352,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2", + "type": "Range", + }, + ], "items": [ { "selector": undefined, @@ -7712,6 +8405,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2/2", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/range/r2", + "type": "Range", + }, + ], "items": [ { "selector": undefined, @@ -8169,6 +8869,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0026-toc-opera https://iiif.io/api }, ], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1/annotation/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1/annotation/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -8246,6 +8953,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0026-toc-opera https://iiif.io/api "format": "video/mp4", "height": 1080, "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low.mp4", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1/annotation/1", + "type": "Video", + }, + ], "type": "Video", "width": 1920, }, @@ -8303,6 +9017,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0026-toc-opera https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=0,302.05", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=0,302.05", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/3", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -8328,6 +9049,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0026-toc-opera https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=302.05,3971.24", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=302.05,3971.24", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/4", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -8353,6 +9081,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0026-toc-opera https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=3971.24", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1#t=3971.24", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/5", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -8416,6 +9151,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0026-toc-opera https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/2", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/1", + "type": "Range", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/3", @@ -8454,6 +9196,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0026-toc-opera https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/3", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/3", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/2", + "type": "Range", + }, + ], "items": [ { "selector": { @@ -8495,6 +9244,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0026-toc-opera https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/4", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/4", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/2", + "type": "Range", + }, + ], "items": [ { "selector": { @@ -8536,6 +9292,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0026-toc-opera https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/5", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/5", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/range/1", + "type": "Range", + }, + ], "items": [ { "selector": { @@ -8726,6 +9489,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0029-metadata-anywhere https://iii }, ], "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -8746,6 +9516,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0029-metadata-anywhere https://iii }, ], "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0002-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0002-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p2/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -8908,6 +9685,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0029-metadata-anywhere https://iii "format": "image/jpeg", "height": 1271, "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural", @@ -8922,6 +9706,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0029-metadata-anywhere https://iii "format": "image/jpeg", "height": 1271, "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0002-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", @@ -9439,6 +10230,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 http }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -9459,6 +10257,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 http }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -9479,6 +10284,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 http }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -9499,6 +10311,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 http }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -9519,6 +10338,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 http }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -9823,6 +10649,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 http "format": "image/jpeg", "height": 5730, "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001", @@ -9837,6 +10670,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 http "format": "image/jpeg", "height": 5702, "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002", @@ -9851,6 +10691,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 http "format": "image/jpeg", "height": 5702, "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003", @@ -9865,6 +10712,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 http "format": "image/jpeg", "height": 5702, "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007", @@ -9879,6 +10733,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 http "format": "image/jpeg", "height": 5702, "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008", @@ -10233,6 +11094,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 http }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -10253,6 +11121,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 http }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -10273,6 +11148,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 http }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -10293,6 +11175,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 http }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -10313,6 +11202,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 http }, ], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -10617,6 +11513,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 http "format": "image/jpeg", "height": 5745, "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001", @@ -10631,6 +11534,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 http "format": "image/jpeg", "height": 5745, "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002", @@ -10645,6 +11555,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 http "format": "image/jpeg", "height": 5745, "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003", @@ -10659,6 +11576,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 http "format": "image/jpeg", "height": 5745, "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004", @@ -10673,6 +11597,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 http "format": "image/jpeg", "height": 5745, "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005", @@ -11027,6 +11958,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii }, ], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -11047,6 +11985,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii }, ], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0002-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0002-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p2/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -11067,6 +12012,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii }, ], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0003-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0003-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p3/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -11087,6 +12039,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii }, ], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0004-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0004-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p4/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -11107,6 +12066,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii }, ], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0005-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0005-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p5/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -11127,6 +12093,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii }, ], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0006-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0006-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p6/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -11487,6 +12460,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "format": "image/jpeg", "height": 7230, "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-1_frontcover", @@ -11501,6 +12481,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "format": "image/jpeg", "height": 7230, "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0002-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-2_insidefrontcover", @@ -11515,6 +12502,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "format": "image/jpeg", "height": 7230, "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0003-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-3_titlepage1", @@ -11529,6 +12523,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "format": "image/jpeg", "height": 7230, "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0004-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-4_titlepage1_verso", @@ -11543,6 +12544,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "format": "image/jpeg", "height": 7230, "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2/max/full/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2/max/full/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0005-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-5_titlepage2", @@ -11557,6 +12565,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "format": "image/jpeg", "height": 7230, "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso/max/full/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso/max/full/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0006-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/15f769d62ca9a3a2deca390efed75d73-6_titlepage2_verso", @@ -11638,6 +12653,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r1", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -11663,6 +12685,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r1", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -11688,6 +12717,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r2", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -11713,6 +12749,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r2", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -11738,6 +12781,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r3", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -11763,6 +12813,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r3", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -11830,6 +12887,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r0", + "type": "Range", + }, + ], "items": [ { "selector": undefined, @@ -11876,6 +12940,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r2", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r0", + "type": "Range", + }, + ], "items": [ { "selector": undefined, @@ -11922,6 +12993,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r3", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r3", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/range/r0", + "type": "Range", + }, + ], "items": [ { "selector": undefined, @@ -12367,6 +13445,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0033-choice https://iiif.io/api/co }, ], "id": "https://iiif.io/api/cookbook/recipe/0033-choice/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0033-choice/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -12479,6 +13564,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0033-choice https://iiif.io/api/co }, "vault://04f77c53": { "id": "vault://04f77c53", + "iiif-parser:hasPart": [ + { + "id": "vault://04f77c53", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0033-choice/annotation/p0001-image", + "type": "Choice", + }, + ], "items": [ { "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", @@ -12652,6 +13744,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ }, ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -12672,6 +13771,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ }, ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0002-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0002-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/2/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -12692,6 +13798,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ }, ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0003-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0003-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/3/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -12712,6 +13825,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ }, ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0004-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0004-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/4/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -12732,6 +13852,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ }, ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0005-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0005-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/5/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -12752,6 +13879,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ }, ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0006-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0006-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/6/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -12772,6 +13906,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ }, ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0007-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0007-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/7/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -12792,6 +13933,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ }, ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0008-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0008-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/8/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -12812,6 +13960,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ }, ], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0009-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0009-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/9/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -13342,6 +14497,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ "format": "image/jpeg", "height": 4429, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-1_frontcover", @@ -13356,6 +14518,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ "format": "image/jpeg", "height": 4315, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0002-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-2_insidefrontcover", @@ -13370,6 +14539,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ "format": "image/jpeg", "height": 4278, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0003-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-folded", @@ -13384,6 +14560,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ "format": "image/jpeg", "height": 1968, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0005-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-3_foldout-rotated", @@ -13398,6 +14581,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ "format": "image/jpeg", "height": 1968, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0004-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-4_foldout", @@ -13412,6 +14602,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ "format": "image/jpeg", "height": 4315, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0006-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-5_titlepage", @@ -13426,6 +14623,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ "format": "image/jpeg", "height": 4315, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0007-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-6_titlepage-recto", @@ -13440,6 +14644,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ "format": "image/jpeg", "height": 4315, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0008-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-8_insidebackcover", @@ -13454,6 +14665,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ "format": "image/jpeg", "height": 4315, "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0009-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/0a469c27256eda739d43124cc448a3ba-9_backcover", @@ -14018,6 +15236,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0036-composition-from-multiple-ima }, ], "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -14038,6 +15263,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0036-composition-from-multiple-ima }, ], "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0002-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0002-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -14126,6 +15358,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0036-composition-from-multiple-ima "format": "image/jpeg", "height": 5412, "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux", @@ -14140,6 +15379,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0036-composition-from-multiple-ima "format": "image/jpeg", "height": 2414, "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature/full/max/0/native.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/899da506920824588764bc12b10fc800-bnf_chateauroux_miniature/full/max/0/native.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0002-image", + "type": "Image", + }, + ], "label": { "fr": [ "Miniature [Chilpéric Ier tue Galswinthe, se remarie et est assassiné]", @@ -14317,6 +15563,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manife }, ], "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -14399,6 +15652,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manife "ContentResource": { "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1": { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", + "type": "SpecificResource", + }, + ], "source": { "format": "image/jpeg", "height": 2105, @@ -14547,6 +15807,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manife }, ], "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -14625,6 +15892,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manife "ContentResource": { "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image": { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", + "type": "SpecificResource", + }, + ], "selector": { "@context": "http://iiif.io/api/annex/openannotation/context.json", "rotation": "90", @@ -14779,6 +16053,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api }, ], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -14799,6 +16080,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api }, ], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0002-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0002-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p2/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -14819,6 +16107,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api }, ], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0003-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0003-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p3/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -14839,6 +16134,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api }, ], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0004-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0004-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p4/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -14859,6 +16161,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api }, ], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0005-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0005-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p5/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -15162,6 +16471,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api "https://fixtures.iiif.io/other/UCLA/kabuki_ezukushi_rtl.pdf": { "format": "application/pdf", "id": "https://fixtures.iiif.io/other/UCLA/kabuki_ezukushi_rtl.pdf", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/other/UCLA/kabuki_ezukushi_rtl.pdf", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json", + "type": "Text", + }, + ], "label": { "en": [ "PDF version", @@ -15173,6 +16489,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api "format": "image/jpeg", "height": 4823, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", @@ -15187,6 +16510,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api "format": "image/jpeg", "height": 4804, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0002-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", @@ -15201,6 +16531,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api "format": "image/jpeg", "height": 4776, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0003-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", @@ -15215,6 +16552,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api "format": "image/jpeg", "height": 4751, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0004-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", @@ -15229,6 +16573,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api "format": "image/jpeg", "height": 4808, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0005-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", @@ -15605,6 +16956,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/c }, ], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -15625,6 +16983,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/c }, ], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0002-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0002-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p2/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -15645,6 +17010,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/c }, ], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0003-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0003-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p3/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -15665,6 +17037,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/c }, ], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0004-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0004-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p4/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -15685,6 +17064,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/c }, ], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0005-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0005-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p5/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -15988,6 +17374,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/c "https://fixtures.iiif.io/other/UCLA/ezukushi_mods.xml": { "format": "text/xml", "id": "https://fixtures.iiif.io/other/UCLA/ezukushi_mods.xml", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/other/UCLA/ezukushi_mods.xml", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json", + "type": "Dataset", + }, + ], "label": { "en": [ "MODS metadata", @@ -16000,6 +17393,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/c "format": "image/jpeg", "height": 4823, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", @@ -16014,6 +17414,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/c "format": "image/jpeg", "height": 4804, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0002-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", @@ -16028,6 +17435,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/c "format": "image/jpeg", "height": 4776, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0003-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", @@ -16042,6 +17456,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/c "format": "image/jpeg", "height": 4751, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0004-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", @@ -16056,6 +17477,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/c "format": "image/jpeg", "height": 4808, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0005-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", @@ -16433,6 +17861,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0064-opera-one-canvas https://iiif }, ], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -16457,6 +17892,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0064-opera-one-canvas https://iiif }, ], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/2", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -16544,6 +17986,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0064-opera-one-canvas https://iiif "ContentResource": { "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", + "type": "Image", + }, + ], "type": "Image", }, "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4": { @@ -16551,6 +18000,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0064-opera-one-canvas https://iiif "format": "video/mp4", "height": 1080, "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/1", + "type": "Video", + }, + ], "type": "Video", "width": 1920, }, @@ -16559,6 +18015,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0064-opera-one-canvas https://iiif "format": "video/mp4", "height": 1080, "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/2", + "type": "Video", + }, + ], "type": "Video", "width": 1920, }, @@ -16641,6 +18104,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0064-opera-one-canvas https://iiif "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=0,302.05", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=0,302.05", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/3", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -16666,6 +18136,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0064-opera-one-canvas https://iiif "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=302.05,3971.24", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=302.05,3971.24", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/4", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -16691,6 +18168,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0064-opera-one-canvas https://iiif "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=3971.24,7278.422", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1#t=3971.24,7278.422", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/5", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -16754,6 +18238,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0064-opera-one-canvas https://iiif "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/2", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/1", + "type": "Range", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/3", @@ -16792,6 +18283,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0064-opera-one-canvas https://iiif "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/3", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/3", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/2", + "type": "Range", + }, + ], "items": [ { "selector": { @@ -16833,6 +18331,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0064-opera-one-canvas https://iiif "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/4", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/4", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/2", + "type": "Range", + }, + ], "items": [ { "selector": { @@ -16874,6 +18379,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0064-opera-one-canvas https://iiif "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/5", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/5", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/range/1", + "type": "Range", + }, + ], "items": [ { "selector": { @@ -17113,6 +18625,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0065-opera-multiple-canvases https }, ], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1/annotation/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1/annotation/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -17133,6 +18652,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0065-opera-multiple-canvases https }, ], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1/annotation/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1/annotation/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -17277,10 +18803,24 @@ exports[`Cookbook > Testing normalize %p (%p) 0065-opera-multiple-canvases https "ContentResource": { "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png": { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act1-thumbnail.png", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1", + "type": "Image", + }, + ], "type": "Image", }, "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act2-thumbnail.png": { "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act2-thumbnail.png", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/act2-thumbnail.png", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2", + "type": "Image", + }, + ], "type": "Image", }, "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4": { @@ -17288,6 +18828,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0065-opera-multiple-canvases https "format": "video/mp4", "height": 1080, "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_1.mp4", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1/annotation/1", + "type": "Video", + }, + ], "type": "Video", "width": 1920, }, @@ -17296,6 +18843,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0065-opera-multiple-canvases https "format": "video/mp4", "height": 1080, "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/video/indiana/donizetti-elixir/vae0637_accessH264_low_act_2.mp4", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1/annotation/1", + "type": "Video", + }, + ], "type": "Video", "width": 1920, }, @@ -17382,6 +18936,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0065-opera-multiple-canvases https "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=0,302.05", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=0,302.05", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/3", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -17407,6 +18968,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0065-opera-multiple-canvases https "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=302.05,3971.24", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1#t=302.05,3971.24", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/4", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -17432,6 +19000,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0065-opera-multiple-canvases https "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2#t=0,3307.22", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2#t=0,3307.22", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/5", + "type": "Canvas", + }, + ], "items": [], "label": null, "metadata": [], @@ -17495,6 +19070,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0065-opera-multiple-canvases https "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/2", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/1", + "type": "Range", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/3", @@ -17533,6 +19115,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0065-opera-multiple-canvases https "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/3", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/3", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/2", + "type": "Range", + }, + ], "items": [ { "selector": { @@ -17574,6 +19163,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0065-opera-multiple-canvases https "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/4", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/4", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/2", + "type": "Range", + }, + ], "items": [ { "selector": { @@ -17615,6 +19211,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0065-opera-multiple-canvases https "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/5", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/5", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/range/1", + "type": "Range", + }, + ], "items": [ { "selector": { @@ -17888,6 +19491,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0074-multiple-language-captions ht }, ], "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page/annotation", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page/annotation", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -17908,6 +19518,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0074-multiple-language-captions ht }, ], "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/subtitles_captions-files-vtt", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/subtitles_captions-files-vtt", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/anno/page/1", + "type": "Annotation", + }, + ], "motivation": [ "supplementing", ], @@ -18012,6 +19629,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0074-multiple-language-captions ht "format": "video/mp4", "height": 384, "id": "https://fixtures.iiif.io/video/europeana/Per_voi_signore_Modelli_francesi.mp4", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/video/europeana/Per_voi_signore_Modelli_francesi.mp4", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page/annotation", + "type": "Video", + }, + ], "type": "Video", "width": 288, }, @@ -18039,6 +19663,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0074-multiple-language-captions ht }, "vault://30199866": { "id": "vault://30199866", + "iiif-parser:hasPart": [ + { + "id": "vault://30199866", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/subtitles_captions-files-vtt", + "type": "Choice", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/Per_voi_signore_Modelli_francesi_en.vtt", @@ -18241,6 +19872,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0117-add-image-thumbnail https://i }, ], "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/annotation/p0000-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/annotation/p0000-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/page/p0/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -18321,6 +19959,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0117-add-image-thumbnail https://i "format": "image/jpeg", "height": 300, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json", + "type": "Image", + }, + ], "service": [ { "extraFormats": [ @@ -18357,6 +20002,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0117-add-image-thumbnail https://i "format": "image/jpeg", "height": 5312, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/annotation/p0000-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", @@ -18550,6 +20202,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap }, ], "id": "https://example.org/iiif/text-language/canvas1/page1/annotation1", + "iiif-parser:hasPart": [ + { + "id": "https://example.org/iiif/text-language/canvas1/page1/annotation1", + "iiif-parser:partOf": "https://example.org/iiif/text-language/canvas1/page1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -18625,6 +20284,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg": { "format": "image/jpeg", "id": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg", + "iiif-parser:partOf": "https://example.org/iiif/text-language/canvas1/page1/annotation1", + "type": "Image", + }, + ], "type": "Image", }, }, @@ -18783,6 +20449,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0139-geolocate-canvas-fragment htt }, ], "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/content.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/content.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/contentPage.json", + "type": "Annotation", + }, + ], "label": { "en": [ "Pamphlet Cover", @@ -18808,6 +20481,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0139-geolocate-canvas-fragment htt }, ], "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geoAnno.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geoAnno.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/supplementingPage.json", + "type": "Annotation", + }, + ], "label": { "en": [ "Annotation containing GeoJSON-LD coordinates that place the map depiction onto a Leaflet web map.", @@ -18945,6 +20625,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0139-geolocate-canvas-fragment htt "type": "Polygon", }, "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geo.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geo.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geoAnno.json", + "type": "Feature", + }, + ], "properties": { "label": { "en": [ @@ -18958,6 +20645,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0139-geolocate-canvas-fragment htt "format": "image/jpeg", "height": 7072, "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/content.json", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", @@ -19174,6 +20868,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0154-geo-extension https://iiif.io }, ], "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno-page/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -19254,6 +20955,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0154-geo-extension https://iiif.io "format": "image/jpg", "height": 3000, "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno/1", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", @@ -19454,6 +21162,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ }, ], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -19474,6 +21189,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ }, ], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -19494,6 +21216,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ }, ], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -19514,6 +21243,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ }, ], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -19534,6 +21270,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ }, ], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -19703,6 +21446,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ "height": 4612, "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json", + "type": "Canvas", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1", @@ -19838,6 +21588,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ "format": "image/jpeg", "height": 4613, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18", @@ -19852,6 +21609,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ "format": "image/jpeg", "height": 4612, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19", @@ -19866,6 +21630,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ "format": "image/jpeg", "height": 4613, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20", @@ -19880,6 +21651,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ "format": "image/jpeg", "height": 4578, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21", @@ -19894,6 +21672,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ "format": "image/jpeg", "height": 4632, "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22", @@ -20253,6 +22038,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_1-manifes }, ], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -20333,6 +22125,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_1-manifes "format": "image/jpeg", "height": 7072, "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/", @@ -20474,6 +22273,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_2-manifes }, ], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -20554,6 +22360,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_2-manifes "format": "image/jpeg", "height": 1765, "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/", @@ -20752,6 +22565,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate-collection ht "format": "image/jpeg", "height": 300, "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", @@ -20905,6 +22725,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/ }, ], "id": "https://id.loc.gov/authorities/n79055331", + "iiif-parser:hasPart": [ + { + "id": "https://id.loc.gov/authorities/n79055331", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", + "type": "Agent", + }, + ], "label": { "en": [ "UCLA Library", @@ -20934,6 +22761,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/ }, ], "id": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -21013,6 +22847,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/ "https://digital.library.ucla.edu/": { "format": "text/html", "id": "https://digital.library.ucla.edu/", + "iiif-parser:hasPart": [ + { + "id": "https://digital.library.ucla.edu/", + "iiif-parser:partOf": "https://id.loc.gov/authorities/n79055331", + "type": "Text", + }, + ], "label": { "en": [ "UCLA Library Digital Collections", @@ -21026,6 +22867,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/ "https://id.loc.gov/authorities/names/n79055331.madsxml.xml": { "format": "application/xml", "id": "https://id.loc.gov/authorities/names/n79055331.madsxml.xml", + "iiif-parser:hasPart": [ + { + "id": "https://id.loc.gov/authorities/names/n79055331.madsxml.xml", + "iiif-parser:partOf": "https://id.loc.gov/authorities/n79055331", + "type": "Dataset", + }, + ], "label": { "en": [ "US Library of Congress data about the UCLA Library", @@ -21038,6 +22886,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/ "format": "image/jpeg", "height": 5312, "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", @@ -21050,6 +22905,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/ }, "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png": { "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png", + "iiif-parser:partOf": "https://id.loc.gov/authorities/n79055331", + "type": "Image", + }, + ], "service": [ { "height": 502, @@ -21295,6 +23157,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt }, ], "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1", + "type": "Annotation", + }, + ], "motivation": [ "tagging", ], @@ -21319,6 +23188,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt }, ], "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -21422,6 +23298,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", @@ -21435,12 +23318,26 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt "vault://0e748e5d": { "format": "text/plain", "id": "vault://0e748e5d", + "iiif-parser:hasPart": [ + { + "id": "vault://0e748e5d", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", + "type": "TextualBody", + }, + ], "language": "de", "type": "TextualBody", "value": "Gänsenliesel-Brunnen", }, "vault://cf7d210d": { "id": "vault://cf7d210d", + "iiif-parser:hasPart": [ + { + "id": "vault://cf7d210d", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", + "type": "SpecificResource", + }, + ], "source": "http://www.wikidata.org/entity/Q18624915", "type": "SpecificResource", }, @@ -21599,6 +23496,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht }, ], "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -21619,6 +23523,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht }, ], "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1", + "type": "Annotation", + }, + ], "motivation": [ "tagging", ], @@ -21723,6 +23634,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", @@ -21736,6 +23654,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht "vault://b71e460e": { "format": "text/plain", "id": "vault://b71e460e", + "iiif-parser:hasPart": [ + { + "id": "vault://b71e460e", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", + "type": "TextualBody", + }, + ], "language": "de", "type": "TextualBody", "value": "Gänsenliessel-Brunnen", @@ -21895,6 +23820,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https: }, ], "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -21915,6 +23847,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https: }, ], "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2", + "type": "Annotation", + }, + ], "motivation": [ "commenting", ], @@ -22018,6 +23957,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https: "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", @@ -22031,6 +23977,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https: "vault://929e073a": { "format": "text/plain", "id": "vault://929e073a", + "iiif-parser:hasPart": [ + { + "id": "vault://929e073a", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1", + "type": "TextualBody", + }, + ], "language": "de", "type": "TextualBody", "value": "Göttinger Marktplatz mit Gänseliesel Brunnen", @@ -22183,6 +24136,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0269-embedded-or-referenced-annota }, ], "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1", + "type": "Annotation", + }, + ], "motivation": [ "painting", ], @@ -22281,6 +24241,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0269-embedded-or-referenced-annota "format": "image/jpeg", "height": 3024, "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1", + "type": "Image", + }, + ], "service": [ { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", diff --git a/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap b/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap new file mode 100644 index 0000000..1f98fc6 --- /dev/null +++ b/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap @@ -0,0 +1,310 @@ +// Vitest Snapshot v1 + +exports[`Has part issues > Example manifest with thumbnail ID the same as the main resource 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + }, + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 0, + "height": 3024, + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Canvas with a single IIIF image", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 4032, + }, + }, + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "@explicit": true, + "format": {}, + "height": {}, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", + "service": {}, + "type": "Image", + "width": {}, + }, + { + "@explicit": true, + "format": {}, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "type": "Image", + }, + ], + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + }, + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json": { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "type": "Canvas", + }, + ], + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": {}, + "Selector": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + }, + }, + "mapping": { + "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", + }, + "resource": { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Has part issues > Example manifest with thumbnail ID the same as the main resource 2`] = ` +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", + "items": [ + { + "height": 3024, + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "items": [ + { + "body": { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Canvas with a single IIIF image", + ], + }, + "thumbnail": [ + { + "format": "image/jpeg", + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "Image", + }, + ], + "type": "Canvas", + "width": 4032, + }, + ], + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "type": "Manifest", +} +`; + +exports[`Has part issues > merging 2 entities 1`] = ` +{ + "format": "image/jpeg", + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://example.org/canvas-2", + "type": "Image", + }, + ], + "type": "Image", +} +`; + +exports[`Has part issues > merging 2 entities 2`] = ` +{ + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "@explicit": true, + "format": {}, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://example.org/canvas-2", + "type": "Image", + }, + { + "@explicit": true, + "format": {}, + "height": {}, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://example.org/canvas-1", + "service": {}, + "type": "Image", + "width": {}, + }, + ], + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, +} +`; diff --git a/__tests__/presentation-3-parser/cookbook.tests.ts b/__tests__/presentation-3-parser/cookbook.tests.ts index a990edb..10f745a 100644 --- a/__tests__/presentation-3-parser/cookbook.tests.ts +++ b/__tests__/presentation-3-parser/cookbook.tests.ts @@ -3,7 +3,7 @@ import { promises } from 'node:fs'; import { cwd } from 'node:process'; import { join } from 'path'; const { readFile } = promises; -import { normalize, serialize, serializeConfigPresentation3 } from '../../src/presentation-3'; +import { normalize, serialize, serializeConfigPresentation3 } from '../../src'; const prWaitingForMerge = [ '0219-using-caption-file', // https://github.com/IIIF/cookbook-recipes/pull/340 diff --git a/__tests__/presentation-3-parser/has-part.test.ts b/__tests__/presentation-3-parser/has-part.test.ts new file mode 100644 index 0000000..7e5975d --- /dev/null +++ b/__tests__/presentation-3-parser/has-part.test.ts @@ -0,0 +1,69 @@ +import { describe, test, expect } from 'vitest'; +import hasPartManifest from '../../fixtures/presentation-3/has-part.json'; +import { normalize, serialize, mergeEntities, serializeConfigPresentation3 } from '../../src'; + +describe('Has part issues', function () { + test('merging 2 entities', () => { + const first = { + id: 'https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg', + type: 'Image', + format: 'image/jpeg', + }; + const second = { + id: 'https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg', + type: 'Image', + format: 'image/jpeg', + height: 3024, + width: 4032, + service: [ + { + id: 'https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen', + profile: 'level1', + type: 'ImageService3', + }, + ], + }; + + const initial = mergeEntities( + { + id: 'https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg', + type: 'Image', + }, + first, + { parent: { id: 'https://example.org/canvas-2' } } + ); + expect(initial).toMatchSnapshot(); + const merged = mergeEntities(initial as any, second, { parent: { id: 'https://example.org/canvas-1' } }); + + expect(merged).toMatchSnapshot(); + }); + + test('Example manifest with thumbnail ID the same as the main resource', () => { + const original = JSON.parse(JSON.stringify(hasPartManifest)); + const result = normalize(hasPartManifest); + expect(result).toMatchSnapshot(); + + const reserialized = serialize( + { + mapping: result.mapping, + entities: result.entities, + requests: {}, + }, + result.resource, + serializeConfigPresentation3 + ); + expect( + serialize( + { + mapping: result.mapping, + entities: result.entities, + requests: {}, + }, + result.resource, + serializeConfigPresentation3 + ) + ).toMatchSnapshot(); + + expect(reserialized).toEqual(original); + }); +}); diff --git a/fixtures/presentation-3/has-part.json b/fixtures/presentation-3/has-part.json new file mode 100644 index 0000000..347c74b --- /dev/null +++ b/fixtures/presentation-3/has-part.json @@ -0,0 +1,58 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "type": "Canvas", + "label": { + "en": [ + "Canvas with a single IIIF image" + ] + }, + "thumbnail": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg" + } + ], + "height": 3024, + "width": 4032, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 3024, + "width": 4032, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1" + } + ] + } + ] + } + ] +} diff --git a/src/presentation-3/empty-types.ts b/src/presentation-3/empty-types.ts index f5c29e8..11bf68c 100644 --- a/src/presentation-3/empty-types.ts +++ b/src/presentation-3/empty-types.ts @@ -8,10 +8,7 @@ import { ResourceProviderNormalized, } from '@iiif/presentation-3-normalized'; import { _ServiceNormalized } from './serialize'; - -export const EMPTY = []; -// Prevent accidental mutation -Object.freeze(EMPTY); +import { EMPTY } from './utilities'; export const emptyAnnotation: AnnotationNormalized = { id: 'https://iiif-parser/annotation', diff --git a/src/presentation-3/index.ts b/src/presentation-3/index.ts index a20a439..af5698c 100644 --- a/src/presentation-3/index.ts +++ b/src/presentation-3/index.ts @@ -4,3 +4,4 @@ export * from './traverse'; export * from './serialize'; export * from './serialize-presentation-2'; export * from './serialize-presentation-3'; +export * from './utilities'; diff --git a/src/presentation-3/normalize.ts b/src/presentation-3/normalize.ts index d932f8e..94688d2 100644 --- a/src/presentation-3/normalize.ts +++ b/src/presentation-3/normalize.ts @@ -1,4 +1,4 @@ -import { Traverse } from './traverse'; +import { TraversalContext, Traverse } from './traverse'; import { Annotation, AnnotationPage, @@ -14,7 +14,6 @@ import { Service, } from '@iiif/presentation-3'; import { - EMPTY, emptyAgent, emptyAnnotationPage, emptyCanvas, @@ -35,6 +34,7 @@ import { ResourceProviderNormalized, } from '@iiif/presentation-3-normalized'; import { isSpecificResource } from '../shared/is-specific-resource'; +import { EMPTY, HAS_PART, PART_OF, WILDCARD } from './utilities'; export const defaultEntities = { Collection: {}, @@ -79,12 +79,12 @@ function getResource(entityOrString: PolyEntity, type: string): Reference { function mapToEntities(entities: Record>) { return (type: string, defaultStringType?: string) => { const storeType = entities[type] ? entities[type] : {}; - return (r: T): T => { + return (r: T, context: TraversalContext): T => { const resource = getResource(r, defaultStringType || type); if (resource && resource.id && type) { storeType[resource.id] = storeType[resource.id] - ? (mergeEntities(storeType[resource.id], resource) as any) - : Object.assign({}, resource); + ? (mergeEntities(storeType[resource.id], resource, { parent: context.parent }) as any) + : mergeEntities({ id: resource.id, type: resource.type } as any, resource, { parent: context.parent }); return { id: resource.id, type: type === 'ContentResource' ? type : resource.type, @@ -95,7 +95,7 @@ function mapToEntities(entities: Record }; } -function merge(existing: any, incoming: any): any { +export function merge(existing: any, incoming: any, context?: { parent?: any }): any { if (!incoming) { // Falsy values are ignored return existing; @@ -133,14 +133,83 @@ function merge(existing: any, incoming: any): any { // For objects, we check the existing object for non-existing or "empty" // properties and use the value from the incoming object for them const merged = { ...existing }; + const added: string[] = []; + const unchanged: string[] = []; + const existingKeys = Object.keys(existing).filter((key) => key !== HAS_PART && key !== 'id' && key !== 'type'); + const previouslyChangedValues: any = {}; + const incomingChangedValues: any = {}; for (const [key, val] of Object.entries(incoming)) { + if (key === HAS_PART || key === 'id' || key === 'type') { + continue; + } const currentVal = merged[key]; - if (currentVal === EMPTY || !currentVal) { + if (currentVal === val) { + unchanged.push(key); + } else if (currentVal === EMPTY || !currentVal) { + added.push(key); merged[key] = val; } else { + if (currentVal && val) { + previouslyChangedValues[key] = currentVal; + incomingChangedValues[key] = val; + } merged[key] = merge(currentVal, val); + if (merged[key] === previouslyChangedValues[key]) { + unchanged.push(key); + delete previouslyChangedValues[key]; + } + } + } + + if (context && context.parent && context.parent.id) { + const newHasPart: any[] = []; + const part: any = { + [PART_OF]: context.parent.id, + }; + + if (merged[HAS_PART] && merged[HAS_PART].length) { + // We already have one, it may conflict here. + // 1. Fix the first part. + if (merged[HAS_PART].length === 1) { + const first = { ...merged[HAS_PART][0] }; + const changedKeys = Object.keys(previouslyChangedValues); + if (first) { + first['@explicit'] = true; + for (const addedProperty of existingKeys) { + if (addedProperty !== HAS_PART) { + first[addedProperty] = WILDCARD; + } + } + for (const changedKey of changedKeys) { + first[changedKey] = previouslyChangedValues[changedKey]; + } + } + newHasPart.push(first); + } else { + newHasPart.push(...merged[HAS_PART]); + } + + // Add the framing. + const changedKeys = Object.keys(incomingChangedValues); + part['@explicit'] = true; + for (const addedProperty of added) { + part[addedProperty] = WILDCARD; + } + for (const unchangedValue of unchanged) { + part[unchangedValue] = WILDCARD; + } + for (const changedKey of changedKeys) { + part[changedKey] = incomingChangedValues[changedKey]; + } } + + part.id = merged.id; + part.type = merged.type; + newHasPart.push(part); + + merged[HAS_PART] = newHasPart; } + return merged; } else if (existing) { return existing; @@ -148,14 +217,14 @@ function merge(existing: any, incoming: any): any { return incoming; } -function mergeEntities(existing: NormalizedEntity, incoming: any): NormalizedEntity { +export function mergeEntities(existing: NormalizedEntity, incoming: any, context?: { parent?: any }): NormalizedEntity { if (typeof existing === 'string') { return existing; } if (incoming.id !== (existing as any).id || incoming.type !== (existing as any).type) { throw new Error('Can only merge entities with identical identifiers and type!'); } - return merge({ ...existing }, incoming); + return merge({ ...existing }, incoming, context); } function recordTypeInMapping(mapping: Record) { diff --git a/src/presentation-3/serialize-presentation-3.ts b/src/presentation-3/serialize-presentation-3.ts index 6e55007..5d1f536 100644 --- a/src/presentation-3/serialize-presentation-3.ts +++ b/src/presentation-3/serialize-presentation-3.ts @@ -1,7 +1,8 @@ -import { SerializeConfig, UNSET, UNWRAP } from './serialize'; +import { SerializeConfig } from './serialize'; import { ImageService2, ImageService3, ResourceProvider, TechnicalProperties } from '@iiif/presentation-3'; import { compressSpecificResource } from '../shared/compress-specific-resource'; import { DescriptiveNormalized, LinkingNormalized } from '@iiif/presentation-3-normalized'; +import { HAS_PART, UNSET, UNWRAP } from './utilities'; function technicalProperties(entity: Partial): Array<[keyof TechnicalProperties, any]> { return [ @@ -17,6 +18,7 @@ function technicalProperties(entity: Partial): Array<[keyof ['behavior', entity.behavior && entity.behavior.length ? entity.behavior : undefined], ['timeMode', entity.timeMode], ['motivation', Array.isArray(entity.motivation) ? entity.motivation[0] : entity.motivation], + ['iiif-parser:hasPart' as any, UNSET], ]; } @@ -200,7 +202,7 @@ export const serializeConfigPresentation3: SerializeConfig = { return [key, Array.isArray(item) ? filterEmpty(item as any) : item]; }) .filter(([key]) => { - return key !== 'body'; + return key !== 'body' && key !== HAS_PART; }); const resolvedBody = yield entity.body; @@ -279,6 +281,9 @@ function mergeRemainingProperties(entries: [string, any][], object: any): [strin const alreadyParsed = entries.map(([a]) => a); for (const key of keys) { + if (key === HAS_PART) { + continue; + } if (alreadyParsed.indexOf(key) === -1 && typeof object[key] !== 'undefined') { entries.push([key, object[key]]); } diff --git a/src/presentation-3/serialize.ts b/src/presentation-3/serialize.ts index d3b1fec..013e795 100644 --- a/src/presentation-3/serialize.ts +++ b/src/presentation-3/serialize.ts @@ -10,9 +10,7 @@ import { ResourceProviderNormalized, ServiceNormalized, } from '@iiif/presentation-3-normalized'; - -export const UNSET = '__$UNSET$__'; -export const UNWRAP = '__$UNWRAP$__'; +import { resolveIfExists, UNSET, UNWRAP } from './utilities'; export type Field = any[]; @@ -48,6 +46,8 @@ export type NormalizedEntity = type SerializerContext = { isTopLevel?: boolean; + parent?: any; + fullResource?: any; }; export type Serializer = ( @@ -70,17 +70,6 @@ export type SerializeConfig = { Agent?: Serializer; }; -function resolveIfExists(state: CompatibleStore, url: string): T | undefined { - const request = state.requests[url]; - // Return the resource. - const resourceType = state.mapping[url]; - if (!resourceType || (request && request.resourceUri && !state.entities[resourceType][request.resourceUri])) { - // Continue refetching resource, this is an invalid state. - return undefined; - } - return state.entities[resourceType][request ? request.resourceUri : url] as T; -} - export function serializedFieldsToObject(fields: Field[] | [string]): T { const object: any = {}; @@ -105,17 +94,21 @@ export function serialize(state: CompatibleStore, subject: Reference, co throw new Error(`Serializer not found for ${subject.type}`); } - function flatten(sub: Reference) { + function flatten(sub: Reference, parent?: any) { const generator = config[sub.type as keyof SerializeConfig]; if (!generator) { return UNSET; } - const resource = resolveIfExists(state, sub.id) || (sub.id && sub.type ? sub : null); + const [resource, fullResource] = resolveIfExists(state, sub.id, parent) || (sub.id && sub.type ? sub : null); if (!resource) { return UNSET; } - const iterator = generator(resource as any, state, { isTopLevel: subject.id === sub.id }); + const iterator = generator(resource as any, state, { + parent, + isTopLevel: subject.id === sub.id, + fullResource, + }); let current = iterator.next(); while (!current.done) { const requestToHydrate: Reference | Reference[] = current.value as any; @@ -125,11 +118,11 @@ export function serialize(state: CompatibleStore, subject: Reference, co if (Array.isArray(requestToHydrate)) { const nextList: any[] = []; for (const req of requestToHydrate) { - nextList.push(flatten(req)); + nextList.push(flatten(req, sub)); } next = nextList; } else { - next = flatten(requestToHydrate); + next = flatten(requestToHydrate, sub); } } current = iterator.next(next); diff --git a/src/presentation-3/traverse.ts b/src/presentation-3/traverse.ts index 6874ea4..c494dc8 100644 --- a/src/presentation-3/traverse.ts +++ b/src/presentation-3/traverse.ts @@ -35,7 +35,9 @@ export const types = [ 'Agent', ]; -export type Traversal = (jsonLd: T) => Partial | any; +export type TraversalContext = { parent?: any }; + +export type Traversal = (jsonLd: T, context: TraversalContext) => Partial | any; export type TraversalMap = { collection?: Array>; @@ -134,63 +136,71 @@ export class Traverse { traverseDescriptive>(resource: T) { if (resource.thumbnail) { resource.thumbnail = resource.thumbnail.map((thumbnail) => - this.traverseType(thumbnail, this.traversals.contentResource) + this.traverseType(thumbnail, { parent: resource }, this.traversals.contentResource) ); } if (resource.provider) { - resource.provider = resource.provider.map((agent) => this.traverseAgent(agent)); + resource.provider = resource.provider.map((agent) => this.traverseAgent(agent, resource)); } return resource; } traverseLinking>(resource: T) { if (resource.seeAlso) { - resource.seeAlso = resource.seeAlso.map((content) => this.traverseType(content, this.traversals.contentResource)); + resource.seeAlso = resource.seeAlso.map((content) => + this.traverseType(content, { parent: resource }, this.traversals.contentResource) + ); } if (resource.service) { resource.service = ensureArray(resource.service).map((service) => this.traverseService(service)); } if (resource.services) { - resource.services = resource.services.map((service) => this.traverseService(service)); + resource.services = resource.services.map((service) => this.traverseService(service, resource)); } if (resource.logo) { - resource.logo = resource.logo.map((content) => this.traverseType(content, this.traversals.contentResource)); + resource.logo = resource.logo.map((content) => + this.traverseType(content, { parent: resource }, this.traversals.contentResource) + ); } if (resource.homepage) { resource.homepage = resource.homepage.map((homepage) => - this.traverseType(homepage, this.traversals.contentResource) + this.traverseType(homepage, { parent: resource }, this.traversals.contentResource) ); } if (resource.partOf) { // Array resource.partOf = resource.partOf.map((partOf) => { if (typeof partOf === 'string' || !partOf.type) { - return this.traverseType(partOf as ContentResource, this.traversals.contentResource); + return this.traverseType(partOf as ContentResource, { parent: resource }, this.traversals.contentResource); } if (partOf.type === 'Canvas') { - return this.traverseType(partOf as Canvas, this.traversals.canvas); + return this.traverseType(partOf as Canvas, { parent: resource }, this.traversals.canvas); } if (partOf.type === 'AnnotationCollection') { - return this.traverseType(partOf as AnnotationCollection, this.traversals.annotationCollection); + return this.traverseType( + partOf as AnnotationCollection, + { parent: resource }, + this.traversals.annotationCollection + ); } - return this.traverseType(partOf as ContentResource, this.traversals.contentResource); + return this.traverseType(partOf as ContentResource, { parent: resource }, this.traversals.contentResource); }); } if (resource.start) { if (isSpecificResource(resource.start)) { - resource.start = this.traverseSpecificResource(resource.start, 'Canvas') as any; + resource.start = this.traverseSpecificResource(resource.start, 'Canvas', resource) as any; } else { - resource.start = this.traverseType(resource.start, this.traversals.canvas); + resource.start = this.traverseType(resource.start, { parent: resource }, this.traversals.canvas); } } if (resource.rendering) { resource.rendering = resource.rendering.map((content) => - this.traverseType(content, this.traversals.contentResource) + this.traverseType(content, { parent: resource }, this.traversals.contentResource) ); } if (resource.supplementary) { resource.supplementary = resource.supplementary.map((content) => - this.traverseType(content, this.traversals.contentResource) + this.traverseType(content, { parent: resource }, this.traversals.contentResource) ); } @@ -210,24 +220,25 @@ export class Traverse { return collection; } - traverseCollection(collection: Collection): Collection { + traverseCollection(collection: Collection, parent?: any): Collection { return this.traverseType( this.traverseDescriptive( this.traverseInlineAnnotationPages( this.traverseLinking(this.traverseLinkedCanvases(this.traverseCollectionItems(collection))) ) ), + { parent }, this.traversals.collection ); } - traverseGeoJson(geoJson: import('geojson').GeoJSON): import('geojson').GeoJSON { - return this.traverseType(geoJson, this.traversals.geoJson); + traverseGeoJson(geoJson: import('geojson').GeoJSON, parent?: any): import('geojson').GeoJSON { + return this.traverseType(geoJson, { parent }, this.traversals.geoJson); } traverseNavPlace(resource: any /*NavPlaceExtension*/) { if (resource.navPlace) { - resource.navPlace = this.traverseGeoJson(resource.navPlace); + resource.navPlace = this.traverseGeoJson(resource.navPlace, resource); } return resource.navPlace; } @@ -246,7 +257,7 @@ export class Traverse { return manifest; } - traverseManifest(manifest: Manifest): Manifest { + traverseManifest(manifest: Manifest, parent?: any): Manifest { return this.traverseType( this.traverseInlineAnnotationPages( this.traverseManifestStructures( @@ -255,6 +266,7 @@ export class Traverse { ) ) ), + { parent }, this.traversals.manifest ); } @@ -280,11 +292,12 @@ export class Traverse { return resource; } - traverseCanvas(canvas: Canvas): Canvas { + traverseCanvas(canvas: Canvas, parent?: any): Canvas { return this.traverseType( this.traverseInlineAnnotationPages( this.traverseLinkedCanvases(this.traverseDescriptive(this.traverseLinking(this.traverseCanvasItems(canvas)))) ), + { parent }, this.traversals.canvas ); } @@ -292,15 +305,16 @@ export class Traverse { traverseAnnotationPageItems(annotationPage: AnnotationPage): AnnotationPage { if (annotationPage.items) { annotationPage.items = annotationPage.items.map((annotation: Annotation): Annotation => { - return this.traverseAnnotation(annotation); + return this.traverseAnnotation(annotation, annotationPage); }); } return annotationPage; } - traverseAnnotationPage(annotationPageJson: AnnotationPage): AnnotationPage { + traverseAnnotationPage(annotationPageJson: AnnotationPage, parent?: any): AnnotationPage { return this.traverseType( this.traverseDescriptive(this.traverseLinking(this.traverseAnnotationPageItems(annotationPageJson) as any)), + { parent }, this.traversals.annotationPage ); } @@ -310,10 +324,10 @@ export class Traverse { traverseAnnotationBody(annotation: Annotation): Annotation { if (Array.isArray(annotation.body)) { annotation.body = annotation.body.map((annotationBody: any): ContentResource => { - return this.traverseContentResource(annotationBody); + return this.traverseContentResource(annotationBody, annotation); }); } else if (annotation.body) { - annotation.body = this.traverseContentResource(annotation.body as ContentResource); + annotation.body = this.traverseContentResource(annotation.body as ContentResource, annotation); } return annotation; @@ -348,11 +362,12 @@ export class Traverse { } // @todo traverseAnnotationSelector - traverseAnnotation(annotationJson: Annotation): Annotation { + traverseAnnotation(annotationJson: Annotation, parent?: any): Annotation { return this.traverseType( // Disabled these for now. // this.traverseAnnotationTarget(this.traverseLinking(this.traverseAnnotationBody(annotationJson))), this.traverseLinking(this.traverseAnnotationBody(annotationJson)), + { parent }, this.traversals.annotation ); } @@ -364,16 +379,16 @@ export class Traverse { if (contentResourceJson && (contentResourceJson as IIIFExternalWebResource)!.service) { (contentResourceJson as IIIFExternalWebResource).service = ensureArray( (contentResourceJson as IIIFExternalWebResource).service || [] - ).map((service) => this.traverseService(service)); + ).map((service) => this.traverseService(service, contentResourceJson)); } return contentResourceJson; } - traverseContentResource(contentResourceJson: ContentResource): ContentResource { + traverseContentResource(contentResourceJson: ContentResource, parent?: any): ContentResource { if ((contentResourceJson as any).type === 'Choice') { (contentResourceJson as any).items = (contentResourceJson as any).items.map((choiceItem: ContentResource) => { - return this.traverseContentResource(choiceItem); + return this.traverseContentResource(choiceItem, contentResourceJson); }); } @@ -382,11 +397,12 @@ export class Traverse { // ContentResources are permitted to have a `.annotations` property, so we can pass it as any for this // case. this.traverseInlineAnnotationPages(this.traverseContentResourceLinking(contentResourceJson) as any), + { parent }, this.traversals.contentResource ); } - traverseSpecificResource(specificResource: SpecificResource, typeHint?: string): SpecificResource { + traverseSpecificResource(specificResource: SpecificResource, typeHint?: string, parent?: any): SpecificResource { let source = specificResource.source; if (typeof specificResource.source === 'string') { source = { id: specificResource.source, type: typeHint || 'unknown' }; @@ -397,9 +413,10 @@ export class Traverse { ...specificResource, source: typeHint === 'Canvas' || source.type === 'Canvas' - ? this.traverseType(source, this.traversals.canvas) - : this.traverseUnknown(source, typeHint), + ? this.traverseType(source, { parent }, this.traversals.canvas) + : this.traverseUnknown(source, { typeHint, parent }), }, + { parent }, this.traversals.specificResource ); } @@ -408,38 +425,40 @@ export class Traverse { if (range.items) { range.items = range.items.map((rangeOrManifest: RangeItems) => { if (typeof rangeOrManifest === 'string') { - return this.traverseCanvas({ id: rangeOrManifest, type: 'Canvas' }); + return this.traverseCanvas({ id: rangeOrManifest, type: 'Canvas' }, range); } if (isSpecificResource(rangeOrManifest)) { - return this.traverseSpecificResource(rangeOrManifest, 'Canvas'); + return this.traverseSpecificResource(rangeOrManifest, 'Canvas', range); } if (rangeOrManifest.type === 'Manifest') { - return this.traverseManifest(rangeOrManifest as Manifest); + return this.traverseManifest(rangeOrManifest as Manifest, range); } - return this.traverseRange(rangeOrManifest as Range); + return this.traverseRange(rangeOrManifest as Range, range); }); } return range; } - traverseRange(range: Range): Range { + traverseRange(range: Range, parent?: any): Range { return this.traverseType( this.traverseLinkedCanvases(this.traverseDescriptive(this.traverseLinking(this.traverseRangeRanges(range)))), + { parent }, this.traversals.range ); } - traverseAgent(agent: ResourceProvider) { + traverseAgent(agent: ResourceProvider, parent?: any) { return this.traverseType( this.traverseDescriptive(this.traverseLinking(agent)), + { parent }, this.traversals.agent ); } - traverseType(object: T, traversals: Array>): T { + traverseType(object: T, context: TraversalContext, traversals: Array>): T { return traversals.reduce((acc: T, traversal: Traversal): T => { - const returnValue = traversal(acc); + const returnValue = traversal(acc, context); if (typeof returnValue === 'undefined' && !this.options.allowUndefinedReturn) { return acc; } @@ -447,36 +466,36 @@ export class Traverse { }, object); } - traverseService(service: Service): Service { + traverseService(service: Service, parent?: any): Service { const _service: any = Object.assign({}, service); if (_service && _service.service) { _service.service = _service.service.map((innerService: any) => this.traverseService(innerService)); } - return this.traverseType(_service, this.traversals.service); + return this.traverseType(_service, { parent }, this.traversals.service); } - traverseUnknown(resource: any, typeHint?: string) { + traverseUnknown(resource: any, { parent, typeHint }: { typeHint?: string; parent?: any } = {}) { const type = identifyResource(resource, typeHint); switch (type) { case 'Collection': - return this.traverseCollection(resource as Collection); + return this.traverseCollection(resource as Collection, parent); case 'Manifest': - return this.traverseManifest(resource as Manifest); + return this.traverseManifest(resource as Manifest, parent); case 'Canvas': - return this.traverseCanvas(resource as Canvas); + return this.traverseCanvas(resource as Canvas, parent); case 'AnnotationPage': - return this.traverseAnnotationPage(resource as AnnotationPage); + return this.traverseAnnotationPage(resource as AnnotationPage, parent); case 'Annotation': - return this.traverseAnnotation(resource as Annotation); + return this.traverseAnnotation(resource as Annotation, parent); case 'ContentResource': - return this.traverseContentResource(resource as ContentResource); + return this.traverseContentResource(resource as ContentResource, parent); case 'Range': - return this.traverseRange(resource as Range); + return this.traverseRange(resource as Range, parent); case 'Service': - return this.traverseService(resource as Service); + return this.traverseService(resource as Service, parent); case 'Agent': - return this.traverseAgent(resource as ResourceProvider); + return this.traverseAgent(resource as ResourceProvider, parent); default: { if (typeHint) { return typeHint; diff --git a/src/presentation-3/utilities.ts b/src/presentation-3/utilities.ts new file mode 100644 index 0000000..ebd24f7 --- /dev/null +++ b/src/presentation-3/utilities.ts @@ -0,0 +1,58 @@ +import { CompatibleStore, NormalizedEntity } from './serialize'; + +export const WILDCARD = {}; +export const HAS_PART = 'iiif-parser:hasPart'; +export const PART_OF = 'iiif-parser:partOf'; +export const UNSET = '__$UNSET$__'; +export const UNWRAP = '__$UNWRAP$__'; +export const EMPTY = []; + +// Prevent accidental mutation +Object.freeze(EMPTY); +Object.freeze(WILDCARD); + +export function isWildcard(object: any) { + if (object === WILDCARD) { + return true; + } + for (const i in object) { + return false; + } + return true; +} + +export function resolveIfExists( + state: CompatibleStore, + url: string, + parent?: any +): readonly [T | undefined, T | undefined] { + const request = state.requests[url]; + // Return the resource. + const resourceType = state.mapping[url]; + if (!resourceType || (request && request.resourceUri && !state.entities[resourceType][request.resourceUri])) { + // Continue refetching resource, this is an invalid state. + return [undefined, undefined]; + } + const fullEntity: any = state.entities[resourceType][request ? request.resourceUri : url] as T; + + if (fullEntity[HAS_PART]) { + const framing = fullEntity[HAS_PART].find((t: any) => t[PART_OF] === parent.id); + if (framing && framing['@explicit']) { + const newEntity: any = {}; + const keys = Object.keys(framing); + for (const key of keys) { + if (key === PART_OF || key === '@explicit') { + continue; + } + if (isWildcard(framing[key])) { + newEntity[key] = fullEntity[key]; + } else { + newEntity[key] = framing[key]; + } + } + return [newEntity, fullEntity]; + } + } + + return [fullEntity, fullEntity]; +} From 94aabfff2c31ed9ff8504221ee493db48ed4008e Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Sat, 30 Jul 2022 19:35:36 +0100 Subject: [PATCH 20/44] Added manifest case and self-part of --- .../__snapshots__/cookbook.tests.ts.snap | 336 ++++++++++++++++++ .../__snapshots__/has-part.test.ts.snap | 122 +++++++ .../presentation-3-parser/has-part.test.ts | 50 +++ fixtures/cookbook/_index.json | 32 +- src/presentation-3/normalize.ts | 33 +- src/presentation-3/utilities.ts | 4 +- 6 files changed, 550 insertions(+), 27 deletions(-) diff --git a/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap b/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap index 2b2261e..88ca997 100644 --- a/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap @@ -115,6 +115,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0001-mvm-image https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1", @@ -319,6 +326,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0002-mvm-audio https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas", @@ -523,6 +537,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0003-mvm-video https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas", @@ -730,6 +751,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0004-canvas-size https://iiif.io/a "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/canvas/p1", @@ -946,6 +974,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0005-image-service https://iiif.io "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", @@ -1176,6 +1211,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0006-text-language https://iiif.io "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0006-text-language/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/canvas/p1", @@ -1520,6 +1562,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0007-string-formats https://iiif.i "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/canvas/p1", @@ -1805,6 +1854,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0008-rights https://iiif.io/api/co "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0008-rights/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0008-rights/canvas/p1", @@ -2485,6 +2541,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/co ], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p1", @@ -3346,6 +3409,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1", @@ -4110,6 +4180,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1", @@ -4824,6 +4901,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-cont ], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1", @@ -5531,6 +5615,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-indi ], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1", @@ -6010,6 +6101,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0013-placeholderCanvas https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti", @@ -6358,6 +6456,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0014-accompanyingcanvas https://ii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1", @@ -6621,6 +6726,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0015-start https://iiif.io/api/coo "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0015-start/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0015-start/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", @@ -6891,6 +7003,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0017-transcription-av https://iiif "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas", @@ -7190,6 +7309,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", @@ -7962,6 +8088,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", @@ -8972,6 +9105,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0026-toc-opera https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", @@ -9732,6 +9872,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0029-metadata-anywhere https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p1", @@ -10060,6 +10207,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-collection https ], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json", + "type": "Collection", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", @@ -10761,6 +10915,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 http ], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", @@ -11625,6 +11786,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 http ], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", @@ -12591,6 +12759,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", @@ -13592,6 +13767,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0033-choice https://iiif.io/api/co "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0033-choice/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0033-choice/canvas/p1", @@ -14693,6 +14875,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ ], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/1", @@ -15410,6 +15599,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0036-composition-from-multiple-ima "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1", @@ -15684,6 +15880,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manife "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", @@ -15929,6 +16132,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manife "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", @@ -16599,6 +16809,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p1", @@ -17503,6 +17720,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/c "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p1", @@ -18034,6 +18258,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0064-opera-one-canvas https://iiif "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", @@ -18862,6 +19093,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0065-opera-multiple-canvases https "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1", @@ -19691,6 +19929,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0074-multiple-language-captions ht "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas", @@ -20028,6 +20273,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0117-add-image-thumbnail https://i "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/canvas/p0", @@ -20302,6 +20554,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://example.org/iiif/text-language/manifest", + "iiif-parser:hasPart": [ + { + "id": "https://example.org/iiif/text-language/manifest", + "iiif-parser:partOf": "https://example.org/iiif/text-language/manifest", + "type": "Manifest", + }, + ], "items": [ { "id": "https://example.org/iiif/text-language/canvas1", @@ -20674,6 +20933,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0139-geolocate-canvas-fragment htt "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json", @@ -20984,6 +21250,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0154-geo-extension https://iiif.io "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/canvas/1", @@ -21698,6 +21971,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1", @@ -22151,6 +22431,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_1-manifes "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", @@ -22386,6 +22673,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_2-manifes "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", @@ -22511,6 +22805,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate-collection ht "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", + "type": "Collection", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", @@ -22946,6 +23247,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/ "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", @@ -23350,6 +23658,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", @@ -23674,6 +23989,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", @@ -23997,6 +24319,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https: "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", @@ -24267,6 +24596,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0269-embedded-or-referenced-annota "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", diff --git a/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap b/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap index 1f98fc6..c1e340a 100644 --- a/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap @@ -1,5 +1,120 @@ // Vitest Snapshot v1 +exports[`Has part issues > Collection and manifest labels > Collection, then manifest. 1`] = ` +{ + "id": "https://iiif.wellcomecollection.org/presentation/b18031511_0001", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18031511_0001", + "iiif-parser:partOf": "https://example.org/collection-1", + "type": "Manifest", + }, + ], + "label": { + "en": [ + "Volume 1", + "The biological basis of medicine / edited by E. Edward Bittar ; assisted by Neville Bittar.", + ], + }, + "type": "Manifest", +} +`; + +exports[`Has part issues > Collection and manifest labels > Collection, then manifest. 2`] = ` +{ + "id": "https://iiif.wellcomecollection.org/presentation/b18031511_0001", + "iiif-parser:hasPart": [ + { + "@explicit": true, + "id": "https://iiif.wellcomecollection.org/presentation/b18031511_0001", + "iiif-parser:partOf": "https://example.org/collection-1", + "label": { + "en": [ + "Volume 1", + "The biological basis of medicine / edited by E. Edward Bittar ; assisted by Neville Bittar.", + ], + }, + "type": "Manifest", + }, + { + "@explicit": true, + "id": "https://iiif.wellcomecollection.org/presentation/b18031511_0001", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18031511_0001", + "label": { + "en": [ + "The biological basis of medicine / edited by E. Edward Bittar ; assisted by Neville Bittar.", + ], + }, + "type": "Manifest", + }, + ], + "label": { + "en": [ + "Volume 1", + "The biological basis of medicine / edited by E. Edward Bittar ; assisted by Neville Bittar.", + ], + }, + "type": "Manifest", +} +`; + +exports[`Has part issues > Collection and manifest labels > Manifest then Collection 1`] = ` +{ + "id": "https://iiif.wellcomecollection.org/presentation/b18031511_0001", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18031511_0001", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18031511_0001", + "type": "Manifest", + }, + ], + "label": { + "en": [ + "The biological basis of medicine / edited by E. Edward Bittar ; assisted by Neville Bittar.", + ], + }, + "type": "Manifest", +} +`; + +exports[`Has part issues > Collection and manifest labels > Manifest then Collection 2`] = ` +{ + "id": "https://iiif.wellcomecollection.org/presentation/b18031511_0001", + "iiif-parser:hasPart": [ + { + "@explicit": true, + "id": "https://iiif.wellcomecollection.org/presentation/b18031511_0001", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18031511_0001", + "label": { + "en": [ + "The biological basis of medicine / edited by E. Edward Bittar ; assisted by Neville Bittar.", + ], + }, + "type": "Manifest", + }, + { + "@explicit": true, + "id": "https://iiif.wellcomecollection.org/presentation/b18031511_0001", + "iiif-parser:partOf": "https://example.org/collection-1", + "label": { + "en": [ + "Volume 1", + "The biological basis of medicine / edited by E. Edward Bittar ; assisted by Neville Bittar.", + ], + }, + "type": "Manifest", + }, + ], + "label": { + "en": [ + "The biological basis of medicine / edited by E. Edward Bittar ; assisted by Neville Bittar.", + "Volume 1", + ], + }, + "type": "Manifest", +} +`; + exports[`Has part issues > Example manifest with thumbnail ID the same as the main resource 1`] = ` { "entities": { @@ -143,6 +258,13 @@ exports[`Has part issues > Example manifest with thumbnail ID the same as the ma "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", + "type": "Manifest", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", diff --git a/__tests__/presentation-3-parser/has-part.test.ts b/__tests__/presentation-3-parser/has-part.test.ts index 7e5975d..2033ff8 100644 --- a/__tests__/presentation-3-parser/has-part.test.ts +++ b/__tests__/presentation-3-parser/has-part.test.ts @@ -66,4 +66,54 @@ describe('Has part issues', function () { expect(reserialized).toEqual(original); }); + + describe('Collection and manifest labels', () => { + const manifestFromCollection = { + id: 'https://iiif.wellcomecollection.org/presentation/b18031511_0001', + type: 'Manifest', + label: { + en: ['Volume 1', 'The biological basis of medicine / edited by E. Edward Bittar ; assisted by Neville Bittar.'], + }, + }; + const manifestOnItsOwn = { + id: 'https://iiif.wellcomecollection.org/presentation/b18031511_0001', + type: 'Manifest', + label: { + en: ['The biological basis of medicine / edited by E. Edward Bittar ; assisted by Neville Bittar.'], + }, + }; + + test('Collection, then manifest.', () => { + const initial = mergeEntities( + { + id: 'https://iiif.wellcomecollection.org/presentation/b18031511_0001', + type: 'Manifest', + } as any, + manifestFromCollection, + { parent: { id: 'https://example.org/collection-1' } } + ); + expect(initial).toMatchSnapshot(); + + const merged = mergeEntities(initial as any, manifestOnItsOwn, { parent: undefined, isTopLevel: true }); + expect(merged).toMatchSnapshot(); + }); + + test('Manifest then Collection', () => { + // Then test Manifest, then collection + const initial = mergeEntities( + { + id: 'https://iiif.wellcomecollection.org/presentation/b18031511_0001', + type: 'Manifest', + } as any, + manifestOnItsOwn, + { parent: undefined, isTopLevel: true } + ); + expect(initial).toMatchSnapshot(); + + const merged = mergeEntities(initial as any, manifestFromCollection, { + parent: { id: 'https://example.org/collection-1' }, + }); + expect(merged).toMatchSnapshot(); + }); + }); }); diff --git a/fixtures/cookbook/_index.json b/fixtures/cookbook/_index.json index db2d8aa..fad18cd 100644 --- a/fixtures/cookbook/_index.json +++ b/fixtures/cookbook/_index.json @@ -147,6 +147,10 @@ "id": "0154-geo-extension", "url": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json" }, + "0040-image-rotation-service-manifest-service": { + "id": "0040-image-rotation-service-manifest-service", + "url": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json" + }, "0010-book-2-viewing-direction-manifest-rtl": { "id": "0010-book-2-viewing-direction-manifest-rtl", "url": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json" @@ -155,34 +159,26 @@ "id": "0230-navdate-navdate-collection", "url": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json" }, - "0040-image-rotation-service-manifest-service": { - "id": "0040-image-rotation-service-manifest-service", - "url": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json" - }, - "0011-book-3-behavior-manifest-continuous": { - "id": "0011-book-3-behavior-manifest-continuous", - "url": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json" - }, "0030-multi-volume-collection": { "id": "0030-multi-volume-collection", "url": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json" }, + "0040-image-rotation-service-manifest-css": { + "id": "0040-image-rotation-service-manifest-css", + "url": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json" + }, "0010-book-2-viewing-direction-manifest-ttb": { "id": "0010-book-2-viewing-direction-manifest-ttb", "url": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json" }, + "0011-book-3-behavior-manifest-continuous": { + "id": "0011-book-3-behavior-manifest-continuous", + "url": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json" + }, "0230-navdate-navdate_map_2-manifest": { "id": "0230-navdate-navdate_map_2-manifest", "url": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json" }, - "0040-image-rotation-service-manifest-css": { - "id": "0040-image-rotation-service-manifest-css", - "url": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json" - }, - "0011-book-3-behavior-manifest-individuals": { - "id": "0011-book-3-behavior-manifest-individuals", - "url": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json" - }, "0030-multi-volume-manifest_v1": { "id": "0030-multi-volume-manifest_v1", "url": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json" @@ -191,6 +187,10 @@ "id": "0230-navdate-navdate_map_1-manifest", "url": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json" }, + "0011-book-3-behavior-manifest-individuals": { + "id": "0011-book-3-behavior-manifest-individuals", + "url": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json" + }, "0030-multi-volume-manifest_v2": { "id": "0030-multi-volume-manifest_v2", "url": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json" diff --git a/src/presentation-3/normalize.ts b/src/presentation-3/normalize.ts index 94688d2..40f48db 100644 --- a/src/presentation-3/normalize.ts +++ b/src/presentation-3/normalize.ts @@ -76,15 +76,21 @@ function getResource(entityOrString: PolyEntity, type: string): Reference { return entityOrString as Reference; } -function mapToEntities(entities: Record>) { +function mapToEntities(entities: Record>, topLevel: any) { return (type: string, defaultStringType?: string) => { const storeType = entities[type] ? entities[type] : {}; return (r: T, context: TraversalContext): T => { const resource = getResource(r, defaultStringType || type); if (resource && resource.id && type) { storeType[resource.id] = storeType[resource.id] - ? (mergeEntities(storeType[resource.id], resource, { parent: context.parent }) as any) - : mergeEntities({ id: resource.id, type: resource.type } as any, resource, { parent: context.parent }); + ? (mergeEntities(storeType[resource.id], resource, { + parent: context.parent, + isTopLevel: topLevel.id === resource.id, + }) as any) + : mergeEntities({ id: resource.id, type: resource.type } as any, resource, { + parent: context.parent, + isTopLevel: topLevel.id === resource.id, + }); return { id: resource.id, type: type === 'ContentResource' ? type : resource.type, @@ -95,7 +101,7 @@ function mapToEntities(entities: Record }; } -export function merge(existing: any, incoming: any, context?: { parent?: any }): any { +export function merge(existing: any, incoming: any, context?: { parent?: any; isTopLevel?: boolean }): any { if (!incoming) { // Falsy values are ignored return existing; @@ -161,11 +167,14 @@ export function merge(existing: any, incoming: any, context?: { parent?: any }): } } - if (context && context.parent && context.parent.id) { + if (context && ((context.parent && context.parent.id) || context.isTopLevel)) { const newHasPart: any[] = []; - const part: any = { - [PART_OF]: context.parent.id, - }; + const part: any = {}; + if (context.parent) { + part[PART_OF] = context.parent.id; + } else if (context.isTopLevel) { + part[PART_OF] = existing.id; + } if (merged[HAS_PART] && merged[HAS_PART].length) { // We already have one, it may conflict here. @@ -217,7 +226,11 @@ export function merge(existing: any, incoming: any, context?: { parent?: any }): return incoming; } -export function mergeEntities(existing: NormalizedEntity, incoming: any, context?: { parent?: any }): NormalizedEntity { +export function mergeEntities( + existing: NormalizedEntity, + incoming: any, + context?: { parent?: any; isTopLevel?: boolean } +): NormalizedEntity { if (typeof existing === 'string') { return existing; } @@ -448,7 +461,7 @@ export function normalize(unknownEntity: unknown) { const entity = convertPresentation2(unknownEntity); const entities = getDefaultEntities(); const mapping = {}; - const addToEntities = mapToEntities(entities); + const addToEntities = mapToEntities(entities, entity); const addToMapping = recordTypeInMapping(mapping); const traversal = new Traverse({ diff --git a/src/presentation-3/utilities.ts b/src/presentation-3/utilities.ts index ebd24f7..df120a0 100644 --- a/src/presentation-3/utilities.ts +++ b/src/presentation-3/utilities.ts @@ -36,7 +36,9 @@ export function resolveIfExists( const fullEntity: any = state.entities[resourceType][request ? request.resourceUri : url] as T; if (fullEntity[HAS_PART]) { - const framing = fullEntity[HAS_PART].find((t: any) => t[PART_OF] === parent.id); + const framing = fullEntity[HAS_PART].find((t: any) => { + return parent ? t[PART_OF] === parent.id : t[PART_OF] === fullEntity.id; + }); if (framing && framing['@explicit']) { const newEntity: any = {}; const keys = Object.keys(framing); From b14a09ca9019283084dfda4673d2cbd919b7272a Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Tue, 30 Aug 2022 18:00:29 +0100 Subject: [PATCH 21/44] Service services array --- src/presentation-3/serialize-presentation-3.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/presentation-3/serialize-presentation-3.ts b/src/presentation-3/serialize-presentation-3.ts index 5d1f536..3902b48 100644 --- a/src/presentation-3/serialize-presentation-3.ts +++ b/src/presentation-3/serialize-presentation-3.ts @@ -70,6 +70,10 @@ function filterService2Compat(services?: any[]) { return undefined; } + if (!Array.isArray(services)) { + services = [services]; + } + return (services as any[]).map(service2compat); } From 9537cf6d70f7fdcfc8c697431d4eeb87bc10cc92 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Tue, 30 Aug 2022 18:05:20 +0100 Subject: [PATCH 22/44] Bump parser --- src/presentation-3/serialize-presentation-3.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/presentation-3/serialize-presentation-3.ts b/src/presentation-3/serialize-presentation-3.ts index 3902b48..941ff84 100644 --- a/src/presentation-3/serialize-presentation-3.ts +++ b/src/presentation-3/serialize-presentation-3.ts @@ -66,14 +66,14 @@ function service2compat(service: ImageService3): ImageService2 | ImageService3 { } function filterService2Compat(services?: any[]) { - if (!services || services.length === 0) { - return undefined; - } - if (!Array.isArray(services)) { services = [services]; } + if (!services || services.length === 0) { + return undefined; + } + return (services as any[]).map(service2compat); } From 842ab579e83c0b3c1d659ddb41b568ea09ee333f Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Tue, 30 Aug 2022 18:10:09 +0100 Subject: [PATCH 23/44] Service services array --- src/presentation-3/traverse.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/presentation-3/traverse.ts b/src/presentation-3/traverse.ts index c494dc8..440f288 100644 --- a/src/presentation-3/traverse.ts +++ b/src/presentation-3/traverse.ts @@ -469,7 +469,7 @@ export class Traverse { traverseService(service: Service, parent?: any): Service { const _service: any = Object.assign({}, service); if (_service && _service.service) { - _service.service = _service.service.map((innerService: any) => this.traverseService(innerService)); + _service.service = ensureArray(_service.service).map((innerService: any) => this.traverseService(innerService)); } return this.traverseType(_service, { parent }, this.traversals.service); } From a8eb49e835c5c67d317767376214059a680977d7 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Sat, 22 Oct 2022 18:01:41 +0100 Subject: [PATCH 24/44] Fixed tests --- src/presentation-3/serialize-presentation-3.ts | 6 +++--- src/presentation-3/traverse.ts | 2 +- src/shared/ensure-array.ts | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/presentation-3/serialize-presentation-3.ts b/src/presentation-3/serialize-presentation-3.ts index 941ff84..604cfa0 100644 --- a/src/presentation-3/serialize-presentation-3.ts +++ b/src/presentation-3/serialize-presentation-3.ts @@ -67,7 +67,7 @@ function service2compat(service: ImageService3): ImageService2 | ImageService3 { function filterService2Compat(services?: any[]) { if (!Array.isArray(services)) { - services = [services]; + services = services ? [services] : []; } if (!services || services.length === 0) { @@ -103,8 +103,8 @@ function* linkingProperties( ): Generator> { return [ ['seeAlso', filterEmpty(yield entity.seeAlso)], - ['service', filterService2Compat(entity.service)], - ['services', filterService2Compat(entity.services)], + ['service', filterEmpty(filterService2Compat(entity.service))], + ['services', filterEmpty(filterService2Compat(entity.services))], ['rendering', filterEmpty(yield entity.rendering)], ['supplementary', filterEmpty(yield entity.supplementary)], ['homepage', filterEmpty(yield entity.homepage)], diff --git a/src/presentation-3/traverse.ts b/src/presentation-3/traverse.ts index 440f288..4fe4e40 100644 --- a/src/presentation-3/traverse.ts +++ b/src/presentation-3/traverse.ts @@ -155,7 +155,7 @@ export class Traverse { resource.service = ensureArray(resource.service).map((service) => this.traverseService(service)); } if (resource.services) { - resource.services = resource.services.map((service) => this.traverseService(service, resource)); + resource.services = ensureArray(resource.services).map((service) => this.traverseService(service, resource)); } if (resource.logo) { resource.logo = resource.logo.map((content) => diff --git a/src/shared/ensure-array.ts b/src/shared/ensure-array.ts index 5edffba..2eae523 100644 --- a/src/shared/ensure-array.ts +++ b/src/shared/ensure-array.ts @@ -2,5 +2,5 @@ export function ensureArray(maybeArray: T | T[]): T[] { if (Array.isArray(maybeArray)) { return maybeArray; } - return [maybeArray]; + return maybeArray ? [maybeArray] : []; } From a398090005987dc5aa9a73a8e9486342b7e6c3c2 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Sat, 22 Oct 2022 18:25:36 +0100 Subject: [PATCH 25/44] Optimise import --- .../__snapshots__/has-part.test.ts.snap | 93 +++++++++++++++++++ .../presentation-3-parser/has-part.test.ts | 68 ++++++++++++++ src/presentation-3/normalize.ts | 52 ++++++----- 3 files changed, 190 insertions(+), 23 deletions(-) diff --git a/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap b/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap index c1e340a..e8b49eb 100644 --- a/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap @@ -380,6 +380,99 @@ exports[`Has part issues > Example manifest with thumbnail ID the same as the ma } `; +exports[`Has part issues > Merging the same 2 entities 1`] = ` +{ + "format": "image/jpeg", + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://example.org/canvas-2", + "type": "Image", + }, + ], + "type": "Image", +} +`; + +exports[`Has part issues > Merging the same 2 entities 2`] = ` +{ + "format": "image/jpeg", + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://example.org/canvas-2", + "type": "Image", + }, + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://example.org/canvas-1", + "type": "Image", + }, + ], + "type": "Image", +} +`; + +exports[`Has part issues > Merging the same 2 entities and then different one 1`] = ` +{ + "format": "image/jpeg", + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://example.org/canvas-2", + "type": "Image", + }, + ], + "type": "Image", +} +`; + +exports[`Has part issues > Merging the same 2 entities and then different one 2`] = ` +{ + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "@explicit": true, + "format": {}, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://example.org/canvas-2", + "type": "Image", + }, + { + "@explicit": true, + "format": {}, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://example.org/canvas-1", + "type": "Image", + }, + { + "@explicit": true, + "format": {}, + "height": {}, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://example.org/canvas-3", + "service": {}, + "type": "Image", + "width": {}, + }, + ], + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, +} +`; + exports[`Has part issues > merging 2 entities 1`] = ` { "format": "image/jpeg", diff --git a/__tests__/presentation-3-parser/has-part.test.ts b/__tests__/presentation-3-parser/has-part.test.ts index 2033ff8..3721102 100644 --- a/__tests__/presentation-3-parser/has-part.test.ts +++ b/__tests__/presentation-3-parser/has-part.test.ts @@ -38,6 +38,74 @@ describe('Has part issues', function () { expect(merged).toMatchSnapshot(); }); + + test('Merging the same 2 entities', () => { + const first = { + id: 'https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg', + type: 'Image', + format: 'image/jpeg', + }; + const second = { + id: 'https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg', + type: 'Image', + format: 'image/jpeg', + }; + + const initial = mergeEntities( + { + id: 'https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg', + type: 'Image', + }, + first, + { parent: { id: 'https://example.org/canvas-2' } } + ); + expect(initial).toMatchSnapshot(); + const merged = mergeEntities(initial as any, second, { parent: { id: 'https://example.org/canvas-1' } }); + + expect(merged).toMatchSnapshot(); + }) + + test('Merging the same 2 entities and then different one', () => { + const first = { + id: 'https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg', + type: 'Image', + format: 'image/jpeg', + }; + const second = { + id: 'https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg', + type: 'Image', + format: 'image/jpeg', + }; + const third = { + id: 'https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg', + type: 'Image', + format: 'image/jpeg', + height: 3024, + width: 4032, + service: [ + { + id: 'https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen', + profile: 'level1', + type: 'ImageService3', + }, + ], + }; + + const initial = mergeEntities( + { + id: 'https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg', + type: 'Image', + }, + first, + { parent: { id: 'https://example.org/canvas-2' } } + ); + expect(initial).toMatchSnapshot(); + const merged = mergeEntities(initial as any, second, { parent: { id: 'https://example.org/canvas-1' } }); + const merged2 = mergeEntities(merged as any, third, { parent: { id: 'https://example.org/canvas-3' } }); + + expect(merged2).toMatchSnapshot(); + }) + test('Example manifest with thumbnail ID the same as the main resource', () => { const original = JSON.parse(JSON.stringify(hasPartManifest)); const result = normalize(hasPartManifest); diff --git a/src/presentation-3/normalize.ts b/src/presentation-3/normalize.ts index 40f48db..47eab4f 100644 --- a/src/presentation-3/normalize.ts +++ b/src/presentation-3/normalize.ts @@ -177,38 +177,44 @@ export function merge(existing: any, incoming: any, context?: { parent?: any; is } if (merged[HAS_PART] && merged[HAS_PART].length) { + const noExplicit = !merged[HAS_PART].find((r: any) => r['@explicit']); + const hasDiverged = added.length > 0 || unchanged.length !== existingKeys.length; // We already have one, it may conflict here. // 1. Fix the first part. - if (merged[HAS_PART].length === 1) { - const first = { ...merged[HAS_PART][0] }; - const changedKeys = Object.keys(previouslyChangedValues); - if (first) { - first['@explicit'] = true; - for (const addedProperty of existingKeys) { - if (addedProperty !== HAS_PART) { - first[addedProperty] = WILDCARD; + if (noExplicit && hasDiverged) { + for (const item of merged[HAS_PART]) { + const first = { ...item }; + const changedKeys = Object.keys(previouslyChangedValues); + if (first) { + first['@explicit'] = true; + for (const addedProperty of existingKeys) { + if (addedProperty !== HAS_PART) { + first[addedProperty] = WILDCARD; + } + } + for (const changedKey of changedKeys) { + first[changedKey] = previouslyChangedValues[changedKey]; } } - for (const changedKey of changedKeys) { - first[changedKey] = previouslyChangedValues[changedKey]; - } + newHasPart.push(first); } - newHasPart.push(first); } else { newHasPart.push(...merged[HAS_PART]); } - // Add the framing. - const changedKeys = Object.keys(incomingChangedValues); - part['@explicit'] = true; - for (const addedProperty of added) { - part[addedProperty] = WILDCARD; - } - for (const unchangedValue of unchanged) { - part[unchangedValue] = WILDCARD; - } - for (const changedKey of changedKeys) { - part[changedKey] = incomingChangedValues[changedKey]; + if (hasDiverged) { + // Add the framing. + const changedKeys = Object.keys(incomingChangedValues); + part['@explicit'] = true; + for (const addedProperty of added) { + part[addedProperty] = WILDCARD; + } + for (const unchangedValue of unchanged) { + part[unchangedValue] = WILDCARD; + } + for (const changedKey of changedKeys) { + part[changedKey] = incomingChangedValues[changedKey]; + } } } From 8d105a3fadb8e32ff941a6ec5b674de7baad6ed5 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Fri, 18 Nov 2022 19:56:03 +0000 Subject: [PATCH 26/44] Cookbook updates + extra tests --- .../__snapshots__/cookbook.tests.ts.snap | 2166 ++++++++++++----- .../presentation-3-parser/to-ref.tests.ts | 19 + fixtures/cookbook/0002-mvm-audio.json | 2 +- .../cookbook/0019-html-in-annotations.json | 66 + fixtures/cookbook/0118_multivalue.json | 10 +- .../cookbook/0240-navPlace-on-canvases.json | 144 ++ .../0258-tagging-external-resource.json | 2 +- .../0261-non-rectangular-commenting.json | 2 +- fixtures/cookbook/_index.json | 30 +- package.json | 5 +- src/presentation-3/index.ts | 5 + .../serialize-presentation-3.ts | 7 +- src/presentation-3/traverse.ts | 61 +- src/presentation-3/utilities.ts | 16 +- src/shared/compose.ts | 3 + src/shared/to-ref.ts | 31 + yarn.lock | 347 ++- 17 files changed, 2188 insertions(+), 728 deletions(-) create mode 100644 __tests__/presentation-3-parser/to-ref.tests.ts create mode 100644 fixtures/cookbook/0019-html-in-annotations.json create mode 100644 fixtures/cookbook/0240-navPlace-on-canvases.json create mode 100644 src/shared/compose.ts create mode 100644 src/shared/to-ref.ts diff --git a/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap b/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap index 88ca997..1a33d83 100644 --- a/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap @@ -237,7 +237,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0002-mvm-audio https://iiif.io/api ], "target": { "source": { - "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page", + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas", "type": "Canvas", }, "type": "SpecificResource", @@ -402,7 +402,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0002-mvm-audio https://iiif.io/api }, "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page/annotation", "motivation": "painting", - "target": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page", + "target": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas", "type": "Annotation", }, ], @@ -7115,23 +7115,23 @@ exports[`Cookbook > Testing normalize %p (%p) 0017-transcription-av https://iiif } `; -exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json 1`] = ` +exports[`Cookbook > Testing normalize %p (%p) 0019-html-in-annotations https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json 1`] = ` { "entities": { "Agent": {}, "Annotation": { - "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image": { + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1/anno-1": { "body": [ { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", "type": "ContentResource", }, ], - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1/anno-1", "iiif-parser:hasPart": [ { - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1/anno-1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1", "type": "Annotation", }, ], @@ -7140,38 +7140,34 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c ], "target": { "source": { - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1", "type": "Canvas", }, "type": "SpecificResource", }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag": { + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2/anno-1": { "body": [ { - "id": "vault://605b9d93", + "id": "vault://8c31cd02", "type": "ContentResource", }, ], - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2/anno-1", "iiif-parser:hasPart": [ { - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2/anno-1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2", "type": "Annotation", }, ], "motivation": [ - "tagging", + "commenting", ], "target": { - "selector": { - "type": "FragmentSelector", - "value": "xywh=265,661,1260,1239", - }, "source": { - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1", "type": "Canvas", }, "type": "SpecificResource", @@ -7181,13 +7177,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c }, "AnnotationCollection": {}, "AnnotationPage": { - "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1": { + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1": { "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1/anno-1", "type": "Annotation", }, ], @@ -7203,13 +7199,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1": { + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2": { "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2/anno-1", "type": "Annotation", }, ], @@ -7227,11 +7223,11 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c }, }, "Canvas": { - "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1": { + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1": { "accompanyingCanvas": null, "annotations": [ { - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2", "type": "AnnotationPage", }, ], @@ -7239,10 +7235,10 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c "duration": 0, "height": 3024, "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1", "type": "AnnotationPage", }, ], @@ -7272,7 +7268,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c "iiif-parser:hasPart": [ { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1/anno-1", "type": "Image", }, ], @@ -7286,39 +7282,39 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c "type": "Image", "width": 4032, }, - "vault://605b9d93": { - "format": "text/plain", - "id": "vault://605b9d93", + "vault://8c31cd02": { + "format": "text/html", + "id": "vault://8c31cd02", "iiif-parser:hasPart": [ { - "id": "vault://605b9d93", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", + "id": "vault://8c31cd02", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2/anno-1", "type": "TextualBody", }, ], "language": "de", "type": "TextualBody", - "value": "Gänseliesel-Brunnen", + "value": "

Göttinger Marktplatz mit Gänseliesel Brunnen Wikipedia logo

", }, }, "Manifest": { - "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json": { + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, "annotations": [], "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json", "iiif-parser:hasPart": [ { - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json", "type": "Manifest", }, ], "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1", "type": "Canvas", }, ], @@ -7357,42 +7353,42 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c }, }, "mapping": { - "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image": "Annotation", - "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag": "Annotation", - "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1": "Canvas", - "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json": "Manifest", - "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1": "AnnotationPage", - "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1/anno-1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2/anno-1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json": "Manifest", "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", - "vault://605b9d93": "ContentResource", + "vault://8c31cd02": "ContentResource", }, "resource": { - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json 2`] = ` +exports[`Cookbook > Testing normalize %p (%p) 0019-html-in-annotations https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json 2`] = ` { "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json", "items": [ { "annotations": [ { - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2", "items": [ { "body": { - "format": "text/plain", + "format": "text/html", "language": "de", "type": "TextualBody", - "value": "Gänseliesel-Brunnen", + "value": "

Göttinger Marktplatz mit Gänseliesel Brunnen Wikipedia logo

", }, - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", - "motivation": "tagging", - "target": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1#xywh=265,661,1260,1239", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2/anno-1", + "motivation": "commenting", + "target": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1", "type": "Annotation", }, ], @@ -7400,10 +7396,10 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c }, ], "height": 3024, - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1", "items": [ { "body": { @@ -7420,9 +7416,9 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c "type": "Image", "width": 4032, }, - "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1/anno-1", "motivation": "painting", - "target": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", + "target": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1", "type": "Annotation", }, ], @@ -7442,104 +7438,23 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c } `; -exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json 1`] = ` +exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json 1`] = ` { "entities": { "Agent": {}, "Annotation": { - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image": { - "body": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master/full/max/0/default.jpg", - "type": "ContentResource", - }, - ], - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image", - "iiif-parser:hasPart": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1", - "type": "Annotation", - }, - ], - "motivation": [ - "painting", - ], - "target": { - "source": { - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", - "type": "Canvas", - }, - "type": "SpecificResource", - }, - "type": "Annotation", - }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image": { - "body": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master/full/max/0/default.jpg", - "type": "ContentResource", - }, - ], - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image", - "iiif-parser:hasPart": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1", - "type": "Annotation", - }, - ], - "motivation": [ - "painting", - ], - "target": { - "source": { - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", - "type": "Canvas", - }, - "type": "SpecificResource", - }, - "type": "Annotation", - }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image": { - "body": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master/full/max/0/default.jpg", - "type": "ContentResource", - }, - ], - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image", - "iiif-parser:hasPart": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1", - "type": "Annotation", - }, - ], - "motivation": [ - "painting", - ], - "target": { - "source": { - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", - "type": "Canvas", - }, - "type": "SpecificResource", - }, - "type": "Annotation", - }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image": { + "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image": { "body": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master/full/max/0/default.jpg", + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", "type": "ContentResource", }, ], - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image", + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", "iiif-parser:hasPart": [ { - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1", + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1", "type": "Annotation", }, ], @@ -7548,61 +7463,38 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap ], "target": { "source": { - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", "type": "Canvas", }, "type": "SpecificResource", }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image": { + "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag": { "body": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master/full/max/0/default.jpg", + "id": "vault://605b9d93", "type": "ContentResource", }, ], - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image", + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", "iiif-parser:hasPart": [ { - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1", + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1", "type": "Annotation", }, ], "motivation": [ - "painting", + "tagging", ], "target": { - "source": { - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", - "type": "Canvas", - }, - "type": "SpecificResource", - }, - "type": "Annotation", - }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image": { - "body": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master/full/max/0/default.jpg", - "type": "ContentResource", - }, - ], - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image", - "iiif-parser:hasPart": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p6/1", - "type": "Annotation", + "selector": { + "type": "FragmentSelector", + "value": "xywh=265,661,1260,1239", }, - ], - "motivation": [ - "painting", - ], - "target": { "source": { - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", "type": "Canvas", }, "type": "SpecificResource", @@ -7612,13 +7504,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap }, "AnnotationCollection": {}, "AnnotationPage": { - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1": { + "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1": { "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1", + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image", + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", "type": "Annotation", }, ], @@ -7634,13 +7526,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1": { + "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1": { "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1", + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image", + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", "type": "Annotation", }, ], @@ -7656,40 +7548,32 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1": { - "behavior": [], - "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1", - "items": [ + }, + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1": { + "accompanyingCanvas": null, + "annotations": [ { - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image", - "type": "Annotation", + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1", + "type": "AnnotationPage", }, ], - "label": null, - "metadata": [], - "provider": [], - "rendering": [], - "requiredStatement": null, - "rights": null, - "seeAlso": [], - "service": [], - "summary": null, - "thumbnail": [], - "type": "AnnotationPage", - }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1": { "behavior": [], + "duration": 0, + "height": 3024, "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1", + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image", - "type": "Annotation", + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1", + "type": "AnnotationPage", }, ], "label": null, "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, "provider": [], "rendering": [], "requiredStatement": null, @@ -7698,9 +7582,448 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "service": [], "summary": null, "thumbnail": [], - "type": "AnnotationPage", + "type": "Canvas", + "width": 4032, }, - "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1": { + }, + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", + "type": "Image", + }, + ], + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "vault://605b9d93": { + "format": "text/plain", + "id": "vault://605b9d93", + "iiif-parser:hasPart": [ + { + "id": "vault://605b9d93", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", + "type": "TextualBody", + }, + ], + "language": "de", + "type": "TextualBody", + "value": "Gänseliesel-Brunnen", + }, + }, + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json": { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", + "type": "Manifest", + }, + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", + "type": "Canvas", + }, + ], + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": {}, + "Selector": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + }, + }, + "mapping": { + "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag": "Annotation", + "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", + "vault://605b9d93": "ContentResource", + }, + "resource": { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json 2`] = ` +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json", + "items": [ + { + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1", + "items": [ + { + "body": { + "format": "text/plain", + "language": "de", + "type": "TextualBody", + "value": "Gänseliesel-Brunnen", + }, + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", + "motivation": "tagging", + "target": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1#xywh=265,661,1260,1239", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "height": 3024, + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1", + "items": [ + { + "body": { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 4032, + }, + ], + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/api/cookbook/recipe/0024-book-4-toc/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-1-21198-zz001d8m41_774608_master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-2-21198-zz001d8m5j_774612_master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-3-21198-zz001d8tm5_775004_master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-4-21198-zz001d8tnp_775007_master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-5-21198-zz001d8v6f_775077_master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/d3bbf5397c6df6b894c5991195c912ab-6-21198-zz001d8v7z_775085_master/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p6/1", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1": { "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1", @@ -20446,18 +20769,18 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap "entities": { "Agent": {}, "Annotation": { - "https://example.org/iiif/text-language/canvas1/page1/annotation1": { + "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1/annotation/1": { "body": [ { "id": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg", "type": "ContentResource", }, ], - "id": "https://example.org/iiif/text-language/canvas1/page1/annotation1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1/annotation/1", "iiif-parser:hasPart": [ { - "id": "https://example.org/iiif/text-language/canvas1/page1/annotation1", - "iiif-parser:partOf": "https://example.org/iiif/text-language/canvas1/page1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1/annotation/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1", "type": "Annotation", }, ], @@ -20466,7 +20789,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap ], "target": { "source": { - "id": "https://example.org/iiif/text-language/canvas1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1", "type": "Canvas", }, "type": "SpecificResource", @@ -20476,13 +20799,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap }, "AnnotationCollection": {}, "AnnotationPage": { - "https://example.org/iiif/text-language/canvas1/page1": { + "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1": { "behavior": [], "homepage": [], - "id": "https://example.org/iiif/text-language/canvas1/page1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1", "items": [ { - "id": "https://example.org/iiif/text-language/canvas1/page1/annotation1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1/annotation/1", "type": "Annotation", }, ], @@ -20500,17 +20823,17 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap }, }, "Canvas": { - "https://example.org/iiif/text-language/canvas1": { + "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1": { "accompanyingCanvas": null, "annotations": [], "behavior": [], "duration": 0, "height": 991, "homepage": [], - "id": "https://example.org/iiif/text-language/canvas1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1", "items": [ { - "id": "https://example.org/iiif/text-language/canvas1/page1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1", "type": "AnnotationPage", }, ], @@ -20539,7 +20862,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap "iiif-parser:hasPart": [ { "id": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg", - "iiif-parser:partOf": "https://example.org/iiif/text-language/canvas1/page1/annotation1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1/annotation/1", "type": "Image", }, ], @@ -20547,23 +20870,23 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap }, }, "Manifest": { - "https://example.org/iiif/text-language/manifest": { + "https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, "annotations": [], "behavior": [], "homepage": [], - "id": "https://example.org/iiif/text-language/manifest", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json", "iiif-parser:hasPart": [ { - "id": "https://example.org/iiif/text-language/manifest", - "iiif-parser:partOf": "https://example.org/iiif/text-language/manifest", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json", "type": "Manifest", }, ], "items": [ { - "id": "https://example.org/iiif/text-language/canvas1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1", "type": "Canvas", }, ], @@ -20618,14 +20941,14 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap "Service": {}, }, "mapping": { - "https://example.org/iiif/text-language/canvas1": "Canvas", - "https://example.org/iiif/text-language/canvas1/page1": "AnnotationPage", - "https://example.org/iiif/text-language/canvas1/page1/annotation1": "Annotation", - "https://example.org/iiif/text-language/manifest": "Manifest", + "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1/annotation/1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json": "Manifest", "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg": "ContentResource", }, "resource": { - "id": "https://example.org/iiif/text-language/manifest", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json", "type": "Manifest", }, } @@ -20634,14 +20957,14 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json 2`] = ` { "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://example.org/iiif/text-language/manifest", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json", "items": [ { "height": 991, - "id": "https://example.org/iiif/text-language/canvas1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1", "items": [ { - "id": "https://example.org/iiif/text-language/canvas1/page1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1", "items": [ { "body": { @@ -20649,9 +20972,9 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap "id": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg", "type": "Image", }, - "id": "https://example.org/iiif/text-language/canvas1/page1/annotation1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1/annotation/1", "motivation": "painting", - "target": "https://example.org/iiif/text-language/canvas1", + "target": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1", "type": "Annotation", }, ], @@ -22636,56 +22959,292 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_2-manifes "seeAlso": [], "service": [], "summary": null, - "thumbnail": [], - "type": "Canvas", - "width": 1286, + "thumbnail": [], + "type": "Canvas", + "width": 1286, + }, + }, + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg": { + "format": "image/jpeg", + "height": 1765, + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "type": "Image", + }, + ], + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1286, + }, + }, + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json": { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "type": "Manifest", + }, + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "type": "Canvas", + }, + ], + "label": { + "en": [ + "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + ], + }, + "metadata": [], + "navDate": "1986-01-01T00:00:00+00:00", + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": {}, + "Selector": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/": { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/", + "profile": "level1", + "type": "ImageService3", + }, + }, + }, + "mapping": { + "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg": "ContentResource", + }, + "resource": { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_2-manifest https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json 2`] = ` +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "items": [ + { + "height": 1765, + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", + "items": [ + { + "body": { + "format": "image/jpeg", + "height": 1765, + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1286, + }, + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "1986 Map, recto and verso, with a date of publication", + ], + }, + "type": "Canvas", + "width": 1286, + }, + ], + "label": { + "en": [ + "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + ], + }, + "navDate": "1986-01-01T00:00:00+00:00", + "type": "Manifest", +} +`; + +exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate-collection https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": {}, + "AnnotationCollection": {}, + "AnnotationPage": {}, + "Canvas": {}, + "Collection": { + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json": { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", + "type": "Collection", + }, + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "label": { + "en": [ + "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + ], + }, + "navDate": "1986-01-01T00:00:00+00:00", + "type": "Manifest", + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "label": { + "en": [ + "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + ], + }, + "navDate": "1987-01-01T00:00:00+00:00", + "type": "Manifest", + }, + ], + "label": { + "en": [ + "Chesapeake and Ohio Canal map and guide pamphlets", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Collection", + "viewingDirection": "left-to-right", }, }, - "Collection": {}, "ContentResource": { - "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg": { + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": { "format": "image/jpeg", - "height": 1765, - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg", + "height": 300, + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", "iiif-parser:hasPart": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", "type": "Image", }, ], "service": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/", + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", "profile": "level1", "type": "ImageService3", }, ], "type": "Image", - "width": 1286, + "width": 221, }, }, "Manifest": { + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "items": [], + "label": { + "en": [ + "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + ], + }, + "metadata": [], + "navDate": "1987-01-01T00:00:00+00:00", + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json": { - "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, "annotations": [], "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", - "iiif-parser:hasPart": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", - "type": "Manifest", - }, - ], - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", - "type": "Canvas", - }, - ], + "items": [], "label": { "en": [ "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", @@ -22712,131 +23271,183 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_2-manifes }, "Range": {}, "Selector": {}, - "Service": { - "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/": { - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/", - "profile": "level1", - "type": "ImageService3", - }, - }, + "Service": {}, }, "mapping": { - "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image": "Annotation", - "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json": "Collection", + "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json": "Manifest", "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json": "Manifest", - "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1": "AnnotationPage", - "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": "ContentResource", }, "resource": { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", - "type": "Manifest", + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", + "type": "Collection", }, } `; -exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_2-manifest https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json 2`] = ` +exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate-collection https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json 2`] = ` { "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", "items": [ { - "height": 1765, - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", - "items": [ + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "label": { + "en": [ + "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + ], + }, + "navDate": "1986-01-01T00:00:00+00:00", + "type": "Manifest", + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "label": { + "en": [ + "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + ], + }, + "navDate": "1987-01-01T00:00:00+00:00", + "type": "Manifest", + }, + ], + "label": { + "en": [ + "Chesapeake and Ohio Canal map and guide pamphlets", + ], + }, + "thumbnail": [ + { + "format": "image/jpeg", + "height": 300, + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "service": [ { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", - "items": [ - { - "body": { - "format": "image/jpeg", - "height": 1765, - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg", - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/", - "profile": "level1", - "type": "ImageService3", - }, - ], - "type": "Image", - "width": 1286, - }, - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", - "motivation": "painting", - "target": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", - "type": "Annotation", - }, - ], - "type": "AnnotationPage", + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", + "profile": "level1", + "type": "ImageService3", }, ], - "label": { - "en": [ - "1986 Map, recto and verso, with a date of publication", + "type": "Image", + "width": 221, + }, + ], + "type": "Collection", +} +`; + +exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json 1`] = ` +{ + "entities": { + "Agent": { + "https://id.loc.gov/authorities/n79055331": { + "homepage": [ + { + "id": "https://digital.library.ucla.edu/", + "type": "ContentResource", + }, + ], + "id": "https://id.loc.gov/authorities/n79055331", + "iiif-parser:hasPart": [ + { + "id": "https://id.loc.gov/authorities/n79055331", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", + "type": "Agent", + }, + ], + "label": { + "en": [ + "UCLA Library", + ], + }, + "logo": [ + { + "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png", + "type": "ContentResource", + }, + ], + "seeAlso": [ + { + "id": "https://id.loc.gov/authorities/names/n79055331.madsxml.xml", + "type": "ContentResource", + }, + ], + "type": "Agent", + }, + }, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", }, - "type": "Canvas", - "width": 1286, }, - ], - "label": { - "en": [ - "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", - ], - }, - "navDate": "1986-01-01T00:00:00+00:00", - "type": "Manifest", -} -`; - -exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate-collection https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json 1`] = ` -{ - "entities": { - "Agent": {}, - "Annotation": {}, - "AnnotationCollection": {}, - "AnnotationPage": {}, - "Canvas": {}, - "Collection": { - "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json": { - "@context": "http://iiif.io/api/presentation/3/context.json", + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0": { "accompanyingCanvas": null, "annotations": [], "behavior": [], + "duration": 0, + "height": 5312, "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", - "iiif-parser:hasPart": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", - "type": "Collection", - }, - ], + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", - "label": { - "en": [ - "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", - ], - }, - "navDate": "1986-01-01T00:00:00+00:00", - "type": "Manifest", - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", - "label": { - "en": [ - "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", - ], - }, - "navDate": "1987-01-01T00:00:00+00:00", - "type": "Manifest", + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1", + "type": "AnnotationPage", }, ], "label": { "en": [ - "Chesapeake and Ohio Canal map and guide pamphlets", + "front cover with color bar", ], }, "metadata": [], @@ -22849,59 +23460,144 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate-collection ht "rights": null, "seeAlso": [], "service": [], - "services": [], "summary": null, - "thumbnail": [ + "thumbnail": [], + "type": "Canvas", + "width": 4520, + }, + }, + "Collection": {}, + "ContentResource": { + "https://digital.library.ucla.edu/": { + "format": "text/html", + "id": "https://digital.library.ucla.edu/", + "iiif-parser:hasPart": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", - "type": "ContentResource", + "id": "https://digital.library.ucla.edu/", + "iiif-parser:partOf": "https://id.loc.gov/authorities/n79055331", + "type": "Text", }, ], - "type": "Collection", - "viewingDirection": "left-to-right", + "label": { + "en": [ + "UCLA Library Digital Collections", + ], + }, + "language": [ + "en", + ], + "type": "Text", }, - }, - "ContentResource": { - "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": { + "https://id.loc.gov/authorities/names/n79055331.madsxml.xml": { + "format": "application/xml", + "id": "https://id.loc.gov/authorities/names/n79055331.madsxml.xml", + "iiif-parser:hasPart": [ + { + "id": "https://id.loc.gov/authorities/names/n79055331.madsxml.xml", + "iiif-parser:partOf": "https://id.loc.gov/authorities/n79055331", + "type": "Dataset", + }, + ], + "label": { + "en": [ + "US Library of Congress data about the UCLA Library", + ], + }, + "profile": "http://www.loc.gov/mads/v2", + "type": "Dataset", + }, + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg": { "format": "image/jpeg", - "height": 300, - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "height": 5312, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", "iiif-parser:hasPart": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", "type": "Image", }, ], "service": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", "profile": "level1", "type": "ImageService3", }, ], "type": "Image", - "width": 221, + "width": 4520, + }, + "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png": { + "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png", + "iiif-parser:partOf": "https://id.loc.gov/authorities/n79055331", + "type": "Image", + }, + ], + "service": [ + { + "height": 502, + "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2", + "profile": "level2", + "sizes": [ + { + "height": 126, + "width": 300, + }, + { + "height": 251, + "width": 600, + }, + { + "height": 502, + "width": 1200, + }, + ], + "type": "ImageService3", + "width": 1200, + }, + ], + "type": "Image", }, }, "Manifest": { - "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json": { + "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json": { + "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, "annotations": [], "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", - "items": [], + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", + "type": "Manifest", + }, + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", + "type": "Canvas", + }, + ], "label": { "en": [ - "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + "Playbill Cover", ], }, "metadata": [], - "navDate": "1987-01-01T00:00:00+00:00", + "navDate": null, "partOf": [], "placeholderCanvas": null, - "provider": [], + "provider": [ + { + "id": "https://id.loc.gov/authorities/n79055331", + "type": "Agent", + }, + ], "rendering": [], "requiredStatement": null, "rights": null, @@ -22910,37 +23606,11 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate-collection ht "services": [], "start": null, "structures": [], - "summary": null, - "thumbnail": [], - "type": "Manifest", - "viewingDirection": "left-to-right", - }, - "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json": { - "accompanyingCanvas": null, - "annotations": [], - "behavior": [], - "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", - "items": [], - "label": { + "summary": { "en": [ - "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + "Cover of playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV, and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", ], }, - "metadata": [], - "navDate": "1986-01-01T00:00:00+00:00", - "partOf": [], - "placeholderCanvas": null, - "provider": [], - "rendering": [], - "requiredStatement": null, - "rights": null, - "seeAlso": [], - "service": [], - "services": [], - "start": null, - "structures": [], - "summary": null, "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", @@ -22948,124 +23618,203 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate-collection ht }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full": { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { - "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json": "Collection", - "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json": "Manifest", - "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json": "Manifest", - "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg": "ContentResource", + "https://digital.library.ucla.edu/": "ContentResource", + "https://id.loc.gov/authorities/n79055331": "Agent", + "https://id.loc.gov/authorities/names/n79055331.madsxml.xml": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0": "Canvas", + "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg": "ContentResource", + "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png": "ContentResource", }, "resource": { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", - "type": "Collection", + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", + "type": "Manifest", }, } `; -exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate-collection https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json 2`] = ` +exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json 2`] = ` { "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", - "label": { - "en": [ - "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", - ], - }, - "navDate": "1986-01-01T00:00:00+00:00", - "type": "Manifest", - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "height": 5312, + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1", + "items": [ + { + "body": { + "format": "image/jpeg", + "height": 5312, + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4520, + }, + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], "label": { "en": [ - "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", + "front cover with color bar", ], }, - "navDate": "1987-01-01T00:00:00+00:00", - "type": "Manifest", + "type": "Canvas", + "width": 4520, }, ], "label": { "en": [ - "Chesapeake and Ohio Canal map and guide pamphlets", + "Playbill Cover", ], }, - "thumbnail": [ + "provider": [ { - "format": "image/jpeg", - "height": 300, - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", - "service": [ + "homepage": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", - "profile": "level1", - "type": "ImageService3", + "format": "text/html", + "id": "https://digital.library.ucla.edu/", + "label": { + "en": [ + "UCLA Library Digital Collections", + ], + }, + "language": [ + "en", + ], + "type": "Text", }, ], - "type": "Image", - "width": 221, + "id": "https://id.loc.gov/authorities/n79055331", + "label": { + "en": [ + "UCLA Library", + ], + }, + "logo": [ + { + "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png", + "service": [ + { + "height": 502, + "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2", + "profile": "level2", + "sizes": [ + { + "height": 126, + "width": 300, + }, + { + "height": 251, + "width": 600, + }, + { + "height": 502, + "width": 1200, + }, + ], + "type": "ImageService3", + "width": 1200, + }, + ], + "type": "Image", + }, + ], + "seeAlso": [ + { + "format": "application/xml", + "id": "https://id.loc.gov/authorities/names/n79055331.madsxml.xml", + "label": { + "en": [ + "US Library of Congress data about the UCLA Library", + ], + }, + "profile": "http://www.loc.gov/mads/v2", + "type": "Dataset", + }, + ], + "type": "Agent", }, ], - "type": "Collection", + "summary": { + "en": [ + "Cover of playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV, and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", + ], + }, + "type": "Manifest", } `; -exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json 1`] = ` +exports[`Cookbook > Testing normalize %p (%p) 0240-navPlace-on-canvases https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json 1`] = ` { "entities": { - "Agent": { - "https://id.loc.gov/authorities/n79055331": { - "homepage": [ + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/1": { + "body": [ { - "id": "https://digital.library.ucla.edu/", + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg", "type": "ContentResource", }, ], - "id": "https://id.loc.gov/authorities/n79055331", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/1", "iiif-parser:hasPart": [ { - "id": "https://id.loc.gov/authorities/n79055331", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", - "type": "Agent", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/1", + "type": "Annotation", }, ], - "label": { - "en": [ - "UCLA Library", - ], - }, - "logo": [ - { - "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png", - "type": "ContentResource", - }, + "motivation": [ + "painting", ], - "seeAlso": [ - { - "id": "https://id.loc.gov/authorities/names/n79055331.madsxml.xml", - "type": "ContentResource", + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1", + "type": "Canvas", }, - ], - "type": "Agent", + "type": "SpecificResource", + }, + "type": "Annotation", }, - }, - "Annotation": { - "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image": { + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/2": { "body": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", + "id": "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1/full/max/0/default.jpg", "type": "ContentResource", }, ], - "id": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/2", "iiif-parser:hasPart": [ { - "id": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/2", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/2", "type": "Annotation", }, ], @@ -23074,7 +23823,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/ ], "target": { "source": { - "id": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2", "type": "Canvas", }, "type": "SpecificResource", @@ -23084,13 +23833,35 @@ exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/ }, "AnnotationCollection": {}, "AnnotationPage": { - "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1": { + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/1": { "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/2": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/2", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/2", "type": "Annotation", }, ], @@ -23108,27 +23879,54 @@ exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/ }, }, "Canvas": { - "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0": { + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1": { "accompanyingCanvas": null, "annotations": [], "behavior": [], "duration": 0, - "height": 5312, + "height": 3000, "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/1", "type": "AnnotationPage", }, ], "label": { "en": [ - "front cover with color bar", + "Front of Bronze", ], }, "metadata": [], "navDate": null, + "navPlace": { + "features": [ + { + "geometry": { + "coordinates": [ + -118.4745559, + 34.0776376, + ], + "type": "Point", + }, + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature/1", + "properties": { + "label": { + "en": [ + "Current Location of the Laocoön Bronze", + ], + "it": [ + "Ubicazione attuale del Bronzo Laocoonte e i suoi figli", + ], + }, + }, + "type": "Feature", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature-collection/1", + "type": "FeatureCollection", + }, "partOf": [], "placeholderCanvas": null, "provider": [], @@ -23140,141 +23938,150 @@ exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/ "summary": null, "thumbnail": [], "type": "Canvas", - "width": 4520, + "width": 2315, }, - }, - "Collection": {}, - "ContentResource": { - "https://digital.library.ucla.edu/": { - "format": "text/html", - "id": "https://digital.library.ucla.edu/", - "iiif-parser:hasPart": [ + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 0, + "height": 3259, + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2", + "items": [ { - "id": "https://digital.library.ucla.edu/", - "iiif-parser:partOf": "https://id.loc.gov/authorities/n79055331", - "type": "Text", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/2", + "type": "AnnotationPage", }, ], "label": { "en": [ - "UCLA Library Digital Collections", + "Painting", ], }, - "language": [ - "en", - ], - "type": "Text", - }, - "https://id.loc.gov/authorities/names/n79055331.madsxml.xml": { - "format": "application/xml", - "id": "https://id.loc.gov/authorities/names/n79055331.madsxml.xml", - "iiif-parser:hasPart": [ - { - "id": "https://id.loc.gov/authorities/names/n79055331.madsxml.xml", - "iiif-parser:partOf": "https://id.loc.gov/authorities/n79055331", - "type": "Dataset", - }, - ], - "label": { - "en": [ - "US Library of Congress data about the UCLA Library", + "metadata": [], + "navDate": null, + "navPlace": { + "features": [ + { + "geometry": { + "coordinates": [ + -77.0199025, + 38.8920717, + ], + "type": "Point", + }, + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature/2", + "properties": { + "label": { + "en": [ + "Current Location of Painting", + ], + }, + }, + "type": "Feature", + }, ], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature-collection/2", + "type": "FeatureCollection", }, - "profile": "http://www.loc.gov/mads/v2", - "type": "Dataset", + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 4096, }, - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg": { - "format": "image/jpeg", - "height": 5312, - "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", + }, + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg": { + "format": "image/jpg", + "height": 3000, + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg", "iiif-parser:hasPart": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/1", "type": "Image", }, ], "service": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", "profile": "level1", "type": "ImageService3", }, ], "type": "Image", - "width": 4520, + "width": 2315, }, - "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png": { - "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png", + "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1/full/max/0/default.jpg": { + "format": "image/jpg", + "height": 3259, + "id": "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1/full/max/0/default.jpg", "iiif-parser:hasPart": [ { - "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png", - "iiif-parser:partOf": "https://id.loc.gov/authorities/n79055331", + "id": "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/2", "type": "Image", }, ], "service": [ { - "height": 502, - "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2", - "profile": "level2", - "sizes": [ - { - "height": 126, - "width": 300, - }, - { - "height": 251, - "width": 600, - }, - { - "height": 502, - "width": 1200, - }, - ], + "id": "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1", + "profile": "level1", "type": "ImageService3", - "width": 1200, }, ], "type": "Image", + "width": 4096, }, }, "Manifest": { - "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json": { - "@context": "http://iiif.io/api/presentation/3/context.json", + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json": { + "@context": [ + "http://iiif.io/api/extension/navplace/context.json", + "http://iiif.io/api/presentation/3/context.json", + ], "accompanyingCanvas": null, "annotations": [], "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json", "iiif-parser:hasPart": [ { - "id": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", - "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json", "type": "Manifest", }, ], "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1", + "type": "Canvas", + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2", "type": "Canvas", }, ], "label": { "en": [ - "Playbill Cover", + "Laocöon, geolocated sculpture and painting.", ], }, "metadata": [], "navDate": null, "partOf": [], "placeholderCanvas": null, - "provider": [ - { - "id": "https://id.loc.gov/authorities/n79055331", - "type": "Agent", - }, - ], + "provider": [], "rendering": [], "requiredStatement": null, "rights": null, @@ -23283,11 +24090,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/ "services": [], "start": null, "structures": [], - "summary": { - "en": [ - "Cover of playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV, and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", - ], - }, + "summary": null, "thumbnail": [], "type": "Manifest", "viewingDirection": "left-to-right", @@ -23296,61 +24099,69 @@ exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/ "Range": {}, "Selector": {}, "Service": { - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full": { - "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", + "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon": { + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1": { + "id": "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1", "profile": "level1", "type": "ImageService3", }, }, }, "mapping": { - "https://digital.library.ucla.edu/": "ContentResource", - "https://id.loc.gov/authorities/n79055331": "Agent", - "https://id.loc.gov/authorities/names/n79055331.madsxml.xml": "ContentResource", - "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image": "Annotation", - "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0": "Canvas", - "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json": "Manifest", - "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1": "AnnotationPage", - "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg": "ContentResource", - "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/2": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/2": "Annotation", + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2": "Canvas", + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json": "Manifest", + "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1/full/max/0/default.jpg": "ContentResource", }, "resource": { - "id": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json 2`] = ` +exports[`Cookbook > Testing normalize %p (%p) 0240-navPlace-on-canvases https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json 2`] = ` { - "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0234-provider/manifest.json", + "@context": [ + "http://iiif.io/api/extension/navplace/context.json", + "http://iiif.io/api/presentation/3/context.json", + ], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json", "items": [ { - "height": 5312, - "id": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", + "height": 3000, + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/1", "items": [ { "body": { - "format": "image/jpeg", - "height": 5312, - "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full/full/max/0/default.jpg", + "format": "image/jpg", + "height": 3000, + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg", "service": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001_full", + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", "profile": "level1", "type": "ImageService3", }, ], "type": "Image", - "width": 4520, + "width": 2315, }, - "id": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/1", "motivation": "painting", - "target": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", + "target": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1", "type": "Annotation", }, ], @@ -23359,89 +24170,106 @@ exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/ ], "label": { "en": [ - "front cover with color bar", + "Front of Bronze", + ], + }, + "navPlace": { + "features": [ + { + "geometry": { + "coordinates": [ + -118.4745559, + 34.0776376, + ], + "type": "Point", + }, + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature/1", + "properties": { + "label": { + "en": [ + "Current Location of the Laocoön Bronze", + ], + "it": [ + "Ubicazione attuale del Bronzo Laocoonte e i suoi figli", + ], + }, + }, + "type": "Feature", + }, ], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature-collection/1", + "type": "FeatureCollection", }, "type": "Canvas", - "width": 4520, + "width": 2315, }, - ], - "label": { - "en": [ - "Playbill Cover", - ], - }, - "provider": [ { - "homepage": [ + "height": 3259, + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2", + "items": [ { - "format": "text/html", - "id": "https://digital.library.ucla.edu/", - "label": { - "en": [ - "UCLA Library Digital Collections", - ], - }, - "language": [ - "en", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/2", + "items": [ + { + "body": { + "format": "image/jpg", + "height": 3259, + "id": "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1/full/max/0/default.jpg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4096, + }, + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/2", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2", + "type": "Annotation", + }, ], - "type": "Text", + "type": "AnnotationPage", }, ], - "id": "https://id.loc.gov/authorities/n79055331", "label": { "en": [ - "UCLA Library", + "Painting", ], }, - "logo": [ - { - "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2/full/full/0/default.png", - "service": [ - { - "height": 502, - "id": "https://iiif.library.ucla.edu/iiif/2/UCLA-Library-Logo-double-line-2", - "profile": "level2", - "sizes": [ - { - "height": 126, - "width": 300, - }, - { - "height": 251, - "width": 600, - }, - { - "height": 502, - "width": 1200, - }, + "navPlace": { + "features": [ + { + "geometry": { + "coordinates": [ + -77.0199025, + 38.8920717, ], - "type": "ImageService3", - "width": 1200, + "type": "Point", }, - ], - "type": "Image", - }, - ], - "seeAlso": [ - { - "format": "application/xml", - "id": "https://id.loc.gov/authorities/names/n79055331.madsxml.xml", - "label": { - "en": [ - "US Library of Congress data about the UCLA Library", - ], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature/2", + "properties": { + "label": { + "en": [ + "Current Location of Painting", + ], + }, + }, + "type": "Feature", }, - "profile": "http://www.loc.gov/mads/v2", - "type": "Dataset", - }, - ], - "type": "Agent", + ], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature-collection/2", + "type": "FeatureCollection", + }, + "type": "Canvas", + "width": 4096, }, ], - "summary": { + "label": { "en": [ - "Cover of playbill for \\"Akiba gongen kaisen-banashi,\\" \\"Futatsu chōchō kuruwa nikki\\" and \\"Godairiki koi no fūjime\\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV, and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest.", + "Laocöon, geolocated sculpture and painting.", ], }, "type": "Manifest", @@ -23460,7 +24288,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt "type": "ContentResource", }, { - "id": "vault://0e748e5d", + "id": "vault://7dc03413", "type": "ContentResource", }, ], @@ -23623,19 +24451,19 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt "type": "Image", "width": 4032, }, - "vault://0e748e5d": { + "vault://7dc03413": { "format": "text/plain", - "id": "vault://0e748e5d", + "id": "vault://7dc03413", "iiif-parser:hasPart": [ { - "id": "vault://0e748e5d", + "id": "vault://7dc03413", "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", "type": "TextualBody", }, ], "language": "de", "type": "TextualBody", - "value": "Gänsenliesel-Brunnen", + "value": "Gänseliesel-Brunnen", }, "vault://cf7d210d": { "id": "vault://cf7d210d", @@ -23713,7 +24541,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1": "AnnotationPage", "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1": "AnnotationPage", "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", - "vault://0e748e5d": "ContentResource", + "vault://7dc03413": "ContentResource", "vault://cf7d210d": "ContentResource", }, "resource": { @@ -23743,7 +24571,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt "format": "text/plain", "language": "de", "type": "TextualBody", - "value": "Gänsenliesel-Brunnen", + "value": "Gänseliesel-Brunnen", }, ], "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", @@ -23833,7 +24661,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg": { "body": [ { - "id": "vault://b71e460e", + "id": "vault://605b9d93", "type": "ContentResource", }, ], @@ -23966,19 +24794,19 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht "type": "Image", "width": 4032, }, - "vault://b71e460e": { + "vault://605b9d93": { "format": "text/plain", - "id": "vault://b71e460e", + "id": "vault://605b9d93", "iiif-parser:hasPart": [ { - "id": "vault://b71e460e", + "id": "vault://605b9d93", "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", "type": "TextualBody", }, ], "language": "de", "type": "TextualBody", - "value": "Gänsenliessel-Brunnen", + "value": "Gänseliesel-Brunnen", }, }, "Manifest": { @@ -24044,7 +24872,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1": "AnnotationPage", "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1": "AnnotationPage", "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", - "vault://b71e460e": "ContentResource", + "vault://605b9d93": "ContentResource", }, "resource": { "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json", @@ -24068,7 +24896,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht "format": "text/plain", "language": "de", "type": "TextualBody", - "value": "Gänsenliessel-Brunnen", + "value": "Gänseliesel-Brunnen", }, "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", "motivation": "tagging", diff --git a/__tests__/presentation-3-parser/to-ref.tests.ts b/__tests__/presentation-3-parser/to-ref.tests.ts new file mode 100644 index 0000000..f213ca4 --- /dev/null +++ b/__tests__/presentation-3-parser/to-ref.tests.ts @@ -0,0 +1,19 @@ +import { toRef } from '../../src/shared/to-ref'; + +describe('toRef()', function () { + const supportedRefs = [ + // + ['https://example.org/manifest-1', 'Manifest'], + [{ id: 'https://example.org/manifest-1', type: 'unknown' }, 'Manifest'], + [{ id: 'https://example.org/manifest-1', type: 'Manifest' }, undefined], + [{ id: 'https://example.org/manifest-1', type: 'Manifest', label: { en: ['Not seen'] } }, undefined], + [{ '@id': 'https://example.org/manifest-1', '@type': 'Manifest' }, undefined], + [{ '@id': 'https://example.org/manifest-1', '@type': 'sc:Manifest' }, undefined], + [{ type: 'SpecificResource', source: 'https://example.org/manifest-1' }, 'Manifest'], + [{ type: 'SpecificResource', source: { id: 'https://example.org/manifest-1', type: 'Manifest' } }], + ]; + + test.each(supportedRefs as [any, any][])('Testing toRef(%s, %s)', async (ref, type) => { + expect(toRef(ref, type)).toEqual({ id: 'https://example.org/manifest-1', type: 'Manifest' }); + }); +}); diff --git a/fixtures/cookbook/0002-mvm-audio.json b/fixtures/cookbook/0002-mvm-audio.json index c2d41ac..8927b42 100644 --- a/fixtures/cookbook/0002-mvm-audio.json +++ b/fixtures/cookbook/0002-mvm-audio.json @@ -27,7 +27,7 @@ "format": "audio/mp4", "duration": 1985.024 }, - "target": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page" + "target": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas" } ] } diff --git a/fixtures/cookbook/0019-html-in-annotations.json b/fixtures/cookbook/0019-html-in-annotations.json new file mode 100644 index 0000000..f16c187 --- /dev/null +++ b/fixtures/cookbook/0019-html-in-annotations.json @@ -0,0 +1,66 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1", + "type": "Canvas", + "height": 3024, + "width": 4032, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1/anno-1", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 3024, + "width": 4032, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1" + } + ] + } + ], + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2/anno-1", + "type": "Annotation", + "motivation": "commenting", + "body": { + "type": "TextualBody", + "language": "de", + "format": "text/html", + "value": "

Göttinger Marktplatz mit Gänseliesel Brunnen Wikipedia logo

" + }, + "target": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0118_multivalue.json b/fixtures/cookbook/0118_multivalue.json index 8b7c64d..7648c1e 100644 --- a/fixtures/cookbook/0118_multivalue.json +++ b/fixtures/cookbook/0118_multivalue.json @@ -1,6 +1,6 @@ { "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://example.org/iiif/text-language/manifest", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json", "type": "Manifest", "label": { "fr": [ @@ -33,17 +33,17 @@ }, "items": [ { - "id": "https://example.org/iiif/text-language/canvas1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1", "type": "Canvas", "width": 1114, "height": 991, "items": [ { - "id": "https://example.org/iiif/text-language/canvas1/page1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1", "type": "AnnotationPage", "items": [ { - "id": "https://example.org/iiif/text-language/canvas1/page1/annotation1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1/annotation/1", "type": "Annotation", "motivation": "painting", "body": { @@ -51,7 +51,7 @@ "type": "Image", "format": "image/jpeg" }, - "target": "https://example.org/iiif/text-language/canvas1" + "target": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1" } ] } diff --git a/fixtures/cookbook/0240-navPlace-on-canvases.json b/fixtures/cookbook/0240-navPlace-on-canvases.json new file mode 100644 index 0000000..00c407d --- /dev/null +++ b/fixtures/cookbook/0240-navPlace-on-canvases.json @@ -0,0 +1,144 @@ +{ + "@context": [ + "http://iiif.io/api/extension/navplace/context.json", + "http://iiif.io/api/presentation/3/context.json" + ], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Laocöon, geolocated sculpture and painting." + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1", + "type": "Canvas", + "height": 3000, + "width": 2315, + "label": { + "en": [ + "Front of Bronze" + ] + }, + "navPlace": { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature-collection/1", + "type": "FeatureCollection", + "features": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature/1", + "type": "Feature", + "properties": { + "label": { + "en": [ + "Current Location of the Laocoön Bronze" + ], + "it": [ + "Ubicazione attuale del Bronzo Laocoonte e i suoi figli" + ] + } + }, + "geometry": { + "type": "Point", + "coordinates": [ + -118.4745559, + 34.0776376 + ] + } + } + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/1", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpg", + "height": 3000, + "width": 2315, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2", + "type": "Canvas", + "height": 3259, + "width": 4096, + "label": { + "en": [ + "Painting" + ] + }, + "navPlace": { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature-collection/2", + "type": "FeatureCollection", + "features": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature/2", + "type": "Feature", + "properties": { + "label": { + "en": [ + "Current Location of Painting" + ] + } + }, + "geometry": { + "type": "Point", + "coordinates": [ + -77.0199025, + 38.8920717 + ] + } + } + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/2", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/2", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpg", + "height": 3259, + "width": 4096, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0258-tagging-external-resource.json b/fixtures/cookbook/0258-tagging-external-resource.json index c46fb70..d72ab65 100644 --- a/fixtures/cookbook/0258-tagging-external-resource.json +++ b/fixtures/cookbook/0258-tagging-external-resource.json @@ -57,7 +57,7 @@ }, { "type": "TextualBody", - "value": "Gänsenliesel-Brunnen", + "value": "Gänseliesel-Brunnen", "format": "text/plain", "language": "de" } diff --git a/fixtures/cookbook/0261-non-rectangular-commenting.json b/fixtures/cookbook/0261-non-rectangular-commenting.json index 10a063e..c517ad2 100644 --- a/fixtures/cookbook/0261-non-rectangular-commenting.json +++ b/fixtures/cookbook/0261-non-rectangular-commenting.json @@ -52,7 +52,7 @@ "motivation": "tagging", "body": { "type": "TextualBody", - "value": "Gänsenliessel-Brunnen", + "value": "Gänseliesel-Brunnen", "language": "de", "format": "text/plain" }, diff --git a/fixtures/cookbook/_index.json b/fixtures/cookbook/_index.json index fad18cd..ae738a4 100644 --- a/fixtures/cookbook/_index.json +++ b/fixtures/cookbook/_index.json @@ -23,6 +23,10 @@ "id": "0009-book-1", "url": "https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json" }, + "0019-html-in-annotations": { + "id": "0019-html-in-annotations", + "url": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json" + }, "0007-string-formats": { "id": "0007-string-formats", "url": "https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json" @@ -147,6 +151,14 @@ "id": "0154-geo-extension", "url": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json" }, + "0240-navPlace-on-canvases": { + "id": "0240-navPlace-on-canvases", + "url": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json" + }, + "0230-navdate-navdate-collection": { + "id": "0230-navdate-navdate-collection", + "url": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json" + }, "0040-image-rotation-service-manifest-service": { "id": "0040-image-rotation-service-manifest-service", "url": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json" @@ -155,14 +167,18 @@ "id": "0010-book-2-viewing-direction-manifest-rtl", "url": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json" }, - "0230-navdate-navdate-collection": { - "id": "0230-navdate-navdate-collection", - "url": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json" + "0230-navdate-navdate_map_2-manifest": { + "id": "0230-navdate-navdate_map_2-manifest", + "url": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json" }, "0030-multi-volume-collection": { "id": "0030-multi-volume-collection", "url": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json" }, + "0011-book-3-behavior-manifest-continuous": { + "id": "0011-book-3-behavior-manifest-continuous", + "url": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json" + }, "0040-image-rotation-service-manifest-css": { "id": "0040-image-rotation-service-manifest-css", "url": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json" @@ -171,14 +187,6 @@ "id": "0010-book-2-viewing-direction-manifest-ttb", "url": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json" }, - "0011-book-3-behavior-manifest-continuous": { - "id": "0011-book-3-behavior-manifest-continuous", - "url": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json" - }, - "0230-navdate-navdate_map_2-manifest": { - "id": "0230-navdate-navdate_map_2-manifest", - "url": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json" - }, "0030-multi-volume-manifest_v1": { "id": "0030-multi-volume-manifest_v1", "url": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json" diff --git a/package.json b/package.json index 732b1e9..f92cc91 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "@hyperion-framework/validator": "^1.1.0", "@typescript-eslint/eslint-plugin": "^5.9.1", "@typescript-eslint/parser": "^5.9.1", + "@vitest/coverage-c8": "^0.25.2", "chalk": "^5.0.1", "dts-bundle-generator": "^6.13.0", "eslint": "^8.7.0", @@ -76,10 +77,10 @@ "eslint-plugin-prettier": "^4.0.0", "execa": "^6.1.0", "node-fetch": "^3.2.9", - "tslib": "^2.4.0", - "typescript": "^4.7.4", "prettier": "^2.5.1", "terser": "^5.15.0", + "tslib": "^2.4.0", + "typescript": "^4.7.4", "vite": "^3.1.3", "vitest": "^0.23.4" }, diff --git a/src/presentation-3/index.ts b/src/presentation-3/index.ts index af5698c..5050d96 100644 --- a/src/presentation-3/index.ts +++ b/src/presentation-3/index.ts @@ -5,3 +5,8 @@ export * from './serialize'; export * from './serialize-presentation-2'; export * from './serialize-presentation-3'; export * from './utilities'; + +// Export some shared utilities +export * from '../shared/to-ref'; +export * from '../shared/compress-specific-resource'; +export * from '../shared/is-specific-resource'; diff --git a/src/presentation-3/serialize-presentation-3.ts b/src/presentation-3/serialize-presentation-3.ts index 604cfa0..001539b 100644 --- a/src/presentation-3/serialize-presentation-3.ts +++ b/src/presentation-3/serialize-presentation-3.ts @@ -211,7 +211,12 @@ export const serializeConfigPresentation3: SerializeConfig = { const resolvedBody = yield entity.body; - return [...entries, ['body', resolvedBody.length === 1 ? resolvedBody[0] : resolvedBody]]; + return [ + ...entries, + ...(yield* descriptiveProperties(entity as any)), + ...(yield* linkingProperties(entity)), + ['body', resolvedBody.length === 1 ? resolvedBody[0] : resolvedBody], + ]; }, ContentResource: function* (entity: any) { diff --git a/src/presentation-3/traverse.ts b/src/presentation-3/traverse.ts index 4fe4e40..278d275 100644 --- a/src/presentation-3/traverse.ts +++ b/src/presentation-3/traverse.ts @@ -20,6 +20,7 @@ import { } from '@iiif/presentation-3'; import { isSpecificResource } from '../shared/is-specific-resource'; import { ensureArray } from '../shared/ensure-array'; +import { compose } from '../shared/compose'; export const types = [ 'Collection', @@ -240,7 +241,7 @@ export class Traverse { if (resource.navPlace) { resource.navPlace = this.traverseGeoJson(resource.navPlace, resource); } - return resource.navPlace; + return resource; } traverseManifestItems(manifest: Manifest): Manifest { @@ -257,18 +258,17 @@ export class Traverse { return manifest; } + _traverseManifest = compose( + this.traverseManifestItems.bind(this), + this.traverseLinking.bind(this), + this.traverseDescriptive.bind(this), + this.traverseLinkedCanvases.bind(this), + this.traverseManifestStructures.bind(this), + this.traverseInlineAnnotationPages.bind(this) + ); + traverseManifest(manifest: Manifest, parent?: any): Manifest { - return this.traverseType( - this.traverseInlineAnnotationPages( - this.traverseManifestStructures( - this.traverseLinkedCanvases( - this.traverseDescriptive(this.traverseLinking(this.traverseManifestItems(manifest))) - ) - ) - ), - { parent }, - this.traversals.manifest - ); + return this.traverseType(this._traverseManifest(manifest), { parent }, this.traversals.manifest); } traverseCanvasItems(canvas: Canvas): Canvas { @@ -292,14 +292,16 @@ export class Traverse { return resource; } + _traverseCanvas = compose( + this.traverseCanvasItems.bind(this), + this.traverseLinking.bind(this), + this.traverseDescriptive.bind(this), + this.traverseLinkedCanvases.bind(this), + this.traverseInlineAnnotationPages.bind(this) + ); + traverseCanvas(canvas: Canvas, parent?: any): Canvas { - return this.traverseType( - this.traverseInlineAnnotationPages( - this.traverseLinkedCanvases(this.traverseDescriptive(this.traverseLinking(this.traverseCanvasItems(canvas)))) - ), - { parent }, - this.traversals.canvas - ); + return this.traverseType(this._traverseCanvas(canvas), { parent }, this.traversals.canvas); } traverseAnnotationPageItems(annotationPage: AnnotationPage): AnnotationPage { @@ -311,9 +313,15 @@ export class Traverse { return annotationPage; } + _traverseAnnotationPage = compose( + this.traverseAnnotationPageItems.bind(this), + this.traverseLinking.bind(this), + this.traverseDescriptive.bind(this) + ); + traverseAnnotationPage(annotationPageJson: AnnotationPage, parent?: any): AnnotationPage { return this.traverseType( - this.traverseDescriptive(this.traverseLinking(this.traverseAnnotationPageItems(annotationPageJson) as any)), + this._traverseAnnotationPage(annotationPageJson), { parent }, this.traversals.annotationPage ); @@ -440,12 +448,15 @@ export class Traverse { return range; } + _traverseRange = compose( + this.traverseRangeRanges.bind(this), + this.traverseLinking.bind(this), + this.traverseDescriptive.bind(this), + this.traverseLinkedCanvases.bind(this) + ); + traverseRange(range: Range, parent?: any): Range { - return this.traverseType( - this.traverseLinkedCanvases(this.traverseDescriptive(this.traverseLinking(this.traverseRangeRanges(range)))), - { parent }, - this.traversals.range - ); + return this.traverseType(this._traverseRange(range), { parent }, this.traversals.range); } traverseAgent(agent: ResourceProvider, parent?: any) { diff --git a/src/presentation-3/utilities.ts b/src/presentation-3/utilities.ts index df120a0..59989c7 100644 --- a/src/presentation-3/utilities.ts +++ b/src/presentation-3/utilities.ts @@ -1,4 +1,5 @@ import { CompatibleStore, NormalizedEntity } from './serialize'; +import { toRef } from '../shared/to-ref'; export const WILDCARD = {}; export const HAS_PART = 'iiif-parser:hasPart'; @@ -23,19 +24,24 @@ export function isWildcard(object: any) { export function resolveIfExists( state: CompatibleStore, - url: string, + urlOrResource: any, parent?: any ): readonly [T | undefined, T | undefined] { - const request = state.requests[url]; + const ref = toRef(urlOrResource); + if (!ref) { + return [undefined, undefined]; + } + + const request = state.requests[ref.id]; // Return the resource. - const resourceType = state.mapping[url]; + const resourceType = state.mapping[ref.id] || ref.type; if (!resourceType || (request && request.resourceUri && !state.entities[resourceType][request.resourceUri])) { // Continue refetching resource, this is an invalid state. return [undefined, undefined]; } - const fullEntity: any = state.entities[resourceType][request ? request.resourceUri : url] as T; + const fullEntity: any = state.entities[resourceType][request ? request.resourceUri : ref.id] as T; - if (fullEntity[HAS_PART]) { + if (fullEntity && fullEntity[HAS_PART]) { const framing = fullEntity[HAS_PART].find((t: any) => { return parent ? t[PART_OF] === parent.id : t[PART_OF] === fullEntity.id; }); diff --git a/src/shared/compose.ts b/src/shared/compose.ts new file mode 100644 index 0000000..d509487 --- /dev/null +++ b/src/shared/compose.ts @@ -0,0 +1,3 @@ +export function compose(...fns: any[]): (input: T) => T { + return (arg: any) => fns.reduce((a, f) => f(a), arg) as any as T; +} diff --git a/src/shared/to-ref.ts b/src/shared/to-ref.ts new file mode 100644 index 0000000..0c88688 --- /dev/null +++ b/src/shared/to-ref.ts @@ -0,0 +1,31 @@ +import { Reference } from '@iiif/presentation-3'; +import { isSpecificResource } from './is-specific-resource'; + +export function toRef(reference: any, _typeHint?: T): Reference | undefined { + const type = (_typeHint || 'unknown') as T; + + if (!reference) { + return undefined; + } + + if (typeof reference === 'string') { + return { id: reference, type }; + } + + if (isSpecificResource(reference)) { + return toRef(reference.source, _typeHint); + } + + let _type = type && type !== 'unknown' ? type : (reference as any).type || (reference as any)['@type']; + const _id = (reference as any).id || (reference as any)['@id']; + + if (_type.indexOf(':') !== -1) { + _type = _type.split(':').pop(); + } + + if (_id && _type) { + return { id: _id, type: _type }; + } + + return undefined; +} diff --git a/yarn.lock b/yarn.lock index 7e037a5..2b2897e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,11 +2,26 @@ # yarn lockfile v1 +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@esbuild/android-arm@0.15.14": + version "0.15.14" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.14.tgz#5d0027f920eeeac313c01fd6ecb8af50c306a466" + integrity sha512-+Rb20XXxRGisNu2WmNKk+scpanb7nL5yhuI1KR9wQFiC43ddPj/V1fmNyzlFC9bKiG4mYzxW7egtoHVcynr+OA== + "@esbuild/android-arm@0.15.9": version "0.15.9" resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.9.tgz#7e1221604ab88ed5021ead74fa8cca4405e1e431" integrity sha512-VZPy/ETF3fBG5PiinIkA0W/tlsvlEgJccyN2DzWZEl0DlVKRbu91PvY2D6Lxgluj4w9QtYHjOWjAT44C+oQ+EQ== +"@esbuild/linux-loong64@0.15.14": + version "0.15.14" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.14.tgz#1221684955c44385f8af34f7240088b7dc08d19d" + integrity sha512-eQi9rosGNVQFJyJWV0HCA5WZae/qWIQME7s8/j8DMvnylfBv62Pbu+zJ2eUDqNf2O4u3WB+OEXyfkpBoe194sg== + "@esbuild/linux-loong64@0.15.9": version "0.15.9" resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.9.tgz#b658a97babf1f40783354af7039b84c3fdfc3fc3" @@ -84,6 +99,11 @@ dependencies: "@types/geojson" "^7946.0.10" +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + "@jridgewell/gen-mapping@^0.3.0": version "0.3.2" resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" @@ -93,7 +113,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@^3.0.3": +"@jridgewell/resolve-uri@3.1.0", "@jridgewell/resolve-uri@^3.0.3": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== @@ -111,11 +131,19 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== +"@jridgewell/trace-mapping@^0.3.12": + version "0.3.17" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + "@jridgewell/trace-mapping@^0.3.9": version "0.3.15" resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774" @@ -176,6 +204,11 @@ resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.10.tgz#6dfbf5ea17142f7f9a043809f1cd4c448cb68249" integrity sha512-Nmh0K3iWQJzniTuPRcJn5hxXkfB1T1pgB89SBig5PlJQU5yocazeu4jATJlaA0GYFKWMqDdvYemoSnF2pXgLVA== +"@types/istanbul-lib-coverage@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + "@types/json-schema@^7.0.9": version "7.0.11" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" @@ -281,11 +314,24 @@ "@typescript-eslint/types" "5.38.1" eslint-visitor-keys "^3.3.0" +"@vitest/coverage-c8@^0.25.2": + version "0.25.2" + resolved "https://registry.yarnpkg.com/@vitest/coverage-c8/-/coverage-c8-0.25.2.tgz#b642f609d61dde410fb163c1f6cc6a0183896deb" + integrity sha512-qKsiUJh3bjbB5Q229CbxEWCqiDBwvIrcZ9OOuQdMEC0pce3/LlTUK3+K3hd7WqAYEbbiqXfC5MVMKHZkV82PgA== + dependencies: + c8 "^7.12.0" + vitest "0.25.2" + acorn-jsx@^5.3.2: version "5.3.2" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== +acorn-walk@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + acorn@^8.5.0, acorn@^8.8.0: version "8.8.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" @@ -373,6 +419,24 @@ buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +c8@^7.12.0: + version "7.12.0" + resolved "https://registry.yarnpkg.com/c8/-/c8-7.12.0.tgz#402db1c1af4af5249153535d1c84ad70c5c96b14" + integrity sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@istanbuljs/schema" "^0.1.3" + find-up "^5.0.0" + foreground-child "^2.0.0" + istanbul-lib-coverage "^3.2.0" + istanbul-lib-report "^3.0.0" + istanbul-reports "^3.1.4" + rimraf "^3.0.2" + test-exclude "^6.0.0" + v8-to-istanbul "^9.0.0" + yargs "^16.2.0" + yargs-parser "^20.2.9" + call-bind@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" @@ -470,12 +534,17 @@ concat-stream@^1.6.0, concat-stream@^1.6.2: readable-stream "^2.2.2" typedarray "^0.0.6" +convert-source-map@^1.6.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + core-util-is@~1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== -cross-spawn@^7.0.2, cross-spawn@^7.0.3: +cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -545,101 +614,201 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +esbuild-android-64@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.14.tgz#114e55b0d58fb7b45d7fa3d93516bd13fc8869cc" + integrity sha512-HuilVIb4rk9abT4U6bcFdU35UHOzcWVGLSjEmC58OVr96q5UiRqzDtWjPlCMugjhgUGKEs8Zf4ueIvYbOStbIg== + esbuild-android-64@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.9.tgz#4a7eb320ca8d3a305f14792061fd9614ccebb7c0" integrity sha512-HQCX7FJn9T4kxZQkhPjNZC7tBWZqJvhlLHPU2SFzrQB/7nDXjmTIFpFTjt7Bd1uFpeXmuwf5h5fZm+x/hLnhbw== +esbuild-android-arm64@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.14.tgz#8541f38a9aacf88e574fb13f5ad4ca51a04c12bb" + integrity sha512-/QnxRVxsR2Vtf3XottAHj7hENAMW2wCs6S+OZcAbc/8nlhbAL/bCQRCVD78VtI5mdwqWkVi3wMqM94kScQCgqg== + esbuild-android-arm64@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.9.tgz#c948e5686df20857ad361ec67e070d40d7cab985" integrity sha512-E6zbLfqbFVCNEKircSHnPiSTsm3fCRxeIMPfrkS33tFjIAoXtwegQfVZqMGR0FlsvVxp2NEDOUz+WW48COCjSg== +esbuild-darwin-64@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.14.tgz#b40b334db81ff1e3677a6712b23761748a157c57" + integrity sha512-ToNuf1uifu8hhwWvoZJGCdLIX/1zpo8cOGnT0XAhDQXiKOKYaotVNx7pOVB1f+wHoWwTLInrOmh3EmA7Fd+8Vg== + esbuild-darwin-64@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.9.tgz#25f564fa4b39c1cec84dc46bce5634fdbce1d5e4" integrity sha512-gI7dClcDN/HHVacZhTmGjl0/TWZcGuKJ0I7/xDGJwRQQn7aafZGtvagOFNmuOq+OBFPhlPv1T6JElOXb0unkSQ== +esbuild-darwin-arm64@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.14.tgz#44b5c1477bb7bdb852dd905e906f68765e2828bc" + integrity sha512-KgGP+y77GszfYJgceO0Wi/PiRtYo5y2Xo9rhBUpxTPaBgWDJ14gqYN0+NMbu+qC2fykxXaipHxN4Scaj9tUS1A== + esbuild-darwin-arm64@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.9.tgz#60faea3ed95d15239536aa88d06bb82b29278a86" integrity sha512-VZIMlcRN29yg/sv7DsDwN+OeufCcoTNaTl3Vnav7dL/nvsApD7uvhVRbgyMzv0zU/PP0xRhhIpTyc7lxEzHGSw== +esbuild-freebsd-64@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.14.tgz#8c57315d238690f34b6ed0c94e5cfc04c858247a" + integrity sha512-xr0E2n5lyWw3uFSwwUXHc0EcaBDtsal/iIfLioflHdhAe10KSctV978Te7YsfnsMKzcoGeS366+tqbCXdqDHQA== + esbuild-freebsd-64@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.9.tgz#0339ef1c90a919175e7816788224517896657a0e" integrity sha512-uM4z5bTvuAXqPxrI204txhlsPIolQPWRMLenvGuCPZTnnGlCMF2QLs0Plcm26gcskhxewYo9LkkmYSS5Czrb5A== +esbuild-freebsd-arm64@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.14.tgz#2e92acca09258daa849e635565f52469266f0b7b" + integrity sha512-8XH96sOQ4b1LhMlO10eEWOjEngmZ2oyw3pW4o8kvBcpF6pULr56eeYVP5radtgw54g3T8nKHDHYEI5AItvskZg== + esbuild-freebsd-arm64@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.9.tgz#32abfc0be3ae3dd38e5a86a9beadbbcf592f1b57" integrity sha512-HHDjT3O5gWzicGdgJ5yokZVN9K9KG05SnERwl9nBYZaCjcCgj/sX8Ps1jvoFSfNCO04JSsHSOWo4qvxFuj8FoA== +esbuild-linux-32@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.14.tgz#ca5ed3e9dff82df486ddde362d7e00775a597dfd" + integrity sha512-6ssnvwaTAi8AzKN8By2V0nS+WF5jTP7SfuK6sStGnDP7MCJo/4zHgM9oE1eQTS2jPmo3D673rckuCzRlig+HMA== + esbuild-linux-32@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.9.tgz#93581348a4da7ed2b29bc5539f2605ad7fcee77b" integrity sha512-AQIdE8FugGt1DkcekKi5ycI46QZpGJ/wqcMr7w6YUmOmp2ohQ8eO4sKUsOxNOvYL7hGEVwkndSyszR6HpVHLFg== +esbuild-linux-64@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.14.tgz#42952e1d08a299d5f573c567639fb37b033befbf" + integrity sha512-ONySx3U0wAJOJuxGUlXBWxVKFVpWv88JEv0NZ6NlHknmDd1yCbf4AEdClSgLrqKQDXYywmw4gYDvdLsS6z0hcw== + esbuild-linux-64@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.9.tgz#0d171e7946c95d0d3ed4826026af2c5632d7dcc4" integrity sha512-4RXjae7g6Qs7StZyiYyXTZXBlfODhb1aBVAjd+ANuPmMhWthQilWo7rFHwJwL7DQu1Fjej2sODAVwLbcIVsAYQ== +esbuild-linux-arm64@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.14.tgz#0c0d788099703327ec0ae70758cb2639ef6c5d88" + integrity sha512-kle2Ov6a1e5AjlHlMQl1e+c4myGTeggrRzArQFmWp6O6JoqqB9hT+B28EW4tjFWgV/NxUq46pWYpgaWXsXRPAg== + esbuild-linux-arm64@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.9.tgz#9838795a3720cbe736d3bc20621bd366eac22f24" integrity sha512-a+bTtxJmYmk9d+s2W4/R1SYKDDAldOKmWjWP0BnrWtDbvUBNOm++du0ysPju4mZVoEFgS1yLNW+VXnG/4FNwdQ== +esbuild-linux-arm@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.14.tgz#751a5ca5042cd60f669b07c3bcec3dd6c4f8151c" + integrity sha512-D2LImAIV3QzL7lHURyCHBkycVFbKwkDb1XEUWan+2fb4qfW7qAeUtul7ZIcIwFKZgPcl+6gKZmvLgPSj26RQ2Q== + esbuild-linux-arm@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.9.tgz#dce96cd817bc7376f6af3967649c4ab1f2f79506" integrity sha512-3Zf2GVGUOI7XwChH3qrnTOSqfV1V4CAc/7zLVm4lO6JT6wbJrTgEYCCiNSzziSju+J9Jhf9YGWk/26quWPC6yQ== +esbuild-linux-mips64le@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.14.tgz#da8ac35f2704de0b52bf53a99c12f604fbe9b916" + integrity sha512-FVdMYIzOLXUq+OE7XYKesuEAqZhmAIV6qOoYahvUp93oXy0MOVTP370ECbPfGXXUdlvc0TNgkJa3YhEwyZ6MRA== + esbuild-linux-mips64le@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.9.tgz#0335a0739e61aa97cb9b4a018e3facfcca9cdcfd" integrity sha512-Zn9HSylDp89y+TRREMDoGrc3Z4Hs5u56ozZLQCiZAUx2+HdbbXbWdjmw3FdTJ/i7t5Cew6/Q+6kfO3KCcFGlyw== +esbuild-linux-ppc64le@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.14.tgz#a315b5016917429080c3d32e03319f1ff876ac55" + integrity sha512-2NzH+iuzMDA+jjtPjuIz/OhRDf8tzbQ1tRZJI//aT25o1HKc0reMMXxKIYq/8nSHXiJSnYV4ODzTiv45s+h73w== + esbuild-linux-ppc64le@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.9.tgz#18482afb95b8a705e2da0a59d7131bff221281f9" integrity sha512-OEiOxNAMH9ENFYqRsWUj3CWyN3V8P3ZXyfNAtX5rlCEC/ERXrCEFCJji/1F6POzsXAzxvUJrTSTCy7G6BhA6Fw== +esbuild-linux-riscv64@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.14.tgz#9f2e0a935e5086d398fc19c7ff5d217bfefe3e12" + integrity sha512-VqxvutZNlQxmUNS7Ac+aczttLEoHBJ9e3OYGqnULrfipRvG97qLrAv9EUY9iSrRKBqeEbSvS9bSfstZqwz0T4Q== + esbuild-linux-riscv64@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.9.tgz#03b6f9708272c117006b9ce1c9ae8aab91b5a5b6" integrity sha512-ukm4KsC3QRausEFjzTsOZ/qqazw0YvJsKmfoZZm9QW27OHjk2XKSQGGvx8gIEswft/Sadp03/VZvAaqv5AIwNA== +esbuild-linux-s390x@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.14.tgz#53108112faff5a4e1bad17f7b0b0ffa1df4b7efb" + integrity sha512-+KVHEUshX5n6VP6Vp/AKv9fZIl5kr2ph8EUFmQUJnDpHwcfTSn2AQgYYm0HTBR2Mr4d0Wlr0FxF/Cs5pbFgiOw== + esbuild-linux-s390x@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.9.tgz#65fb645623d575780f155f0ee52935e62f9cca4f" integrity sha512-uDOQEH55wQ6ahcIKzQr3VyjGc6Po/xblLGLoUk3fVL1qjlZAibtQr6XRfy5wPJLu/M2o0vQKLq4lyJ2r1tWKcw== +esbuild-netbsd-64@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.14.tgz#5330efc41fe4f1c2bab5462bcfe7a4ffce7ba00a" + integrity sha512-6D/dr17piEgevIm1xJfZP2SjB9Z+g8ERhNnBdlZPBWZl+KSPUKLGF13AbvC+nzGh8IxOH2TyTIdRMvKMP0nEzQ== + esbuild-netbsd-64@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.9.tgz#7894297bb9e11f3d2f6f31efecd1be4e181f0d54" integrity sha512-yWgxaYTQz+TqX80wXRq6xAtb7GSBAp6gqLKfOdANg9qEmAI1Bxn04IrQr0Mzm4AhxvGKoHzjHjMgXbCCSSDxcw== +esbuild-openbsd-64@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.14.tgz#ee64944d863e937611fc31adf349e9bb4f5f7eac" + integrity sha512-rREQBIlMibBetgr2E9Lywt2Qxv2ZdpmYahR4IUlAQ1Efv/A5gYdO0/VIN3iowDbCNTLxp0bb57Vf0LFcffD6kA== + esbuild-openbsd-64@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.9.tgz#0f9d4c6b6772ae50d491d68ad4cc028300dda7c0" integrity sha512-JmS18acQl4iSAjrEha1MfEmUMN4FcnnrtTaJ7Qg0tDCOcgpPPQRLGsZqhes0vmx8VA6IqRyScqXvaL7+Q0Uf3A== +esbuild-sunos-64@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.14.tgz#29b0b20de6fe6ef50f9fbe533ec20dc4b595f9aa" + integrity sha512-DNVjSp/BY4IfwtdUAvWGIDaIjJXY5KI4uD82+15v6k/w7px9dnaDaJJ2R6Mu+KCgr5oklmFc0KjBjh311Gxl9Q== + esbuild-sunos-64@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.9.tgz#c32b7ce574b08f814de810ce7c1e34b843768126" integrity sha512-UKynGSWpzkPmXW3D2UMOD9BZPIuRaSqphxSCwScfEE05Be3KAmvjsBhht1fLzKpiFVJb0BYMd4jEbWMyJ/z1hQ== +esbuild-windows-32@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.14.tgz#05e9b159d664809f7a4a8a68ed048d193457b27d" + integrity sha512-pHBWrcA+/oLgvViuG9FO3kNPO635gkoVrRQwe6ZY1S0jdET07xe2toUvQoJQ8KT3/OkxqUasIty5hpuKFLD+eg== + esbuild-windows-32@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.9.tgz#37a8f7cfccdb2177cd46613a1a1e1fcb419d36df" integrity sha512-aqXvu4/W9XyTVqO/hw3rNxKE1TcZiEYHPsXM9LwYmKSX9/hjvfIJzXwQBlPcJ/QOxedfoMVH0YnhhQ9Ffb0RGA== +esbuild-windows-64@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.14.tgz#d5ae086728ab30b72969e40ed0a7a0d9082f2cdd" + integrity sha512-CszIGQVk/P8FOS5UgAH4hKc9zOaFo69fe+k1rqgBHx3CSK3Opyk5lwYriIamaWOVjBt7IwEP6NALz+tkVWdFog== + esbuild-windows-64@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.9.tgz#5fe1e76fc13dd7f520febecaea110b6f1649c7b2" integrity sha512-zm7h91WUmlS4idMtjvCrEeNhlH7+TNOmqw5dJPJZrgFaxoFyqYG6CKDpdFCQXdyKpD5yvzaQBOMVTCBVKGZDEg== +esbuild-windows-arm64@0.15.14: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.14.tgz#8eb50ab9a0ecaf058593fbad17502749306f801d" + integrity sha512-KW9W4psdZceaS9A7Jsgl4WialOznSURvqX/oHZk3gOP7KbjtHLSsnmSvNdzagGJfxbAe30UVGXRe8q8nDsOSQw== + esbuild-windows-arm64@0.15.9: version "0.15.9" resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.9.tgz#98504428f7ba7d2cfc11940be68ee1139173fdce" @@ -673,6 +842,34 @@ esbuild@^0.15.6: esbuild-windows-64 "0.15.9" esbuild-windows-arm64 "0.15.9" +esbuild@^0.15.9: + version "0.15.14" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.14.tgz#09202b811f1710363d5088a3401a351351c79875" + integrity sha512-pJN8j42fvWLFWwSMG4luuupl2Me7mxciUOsMegKvwCmhEbJ2covUdFnihxm0FMIBV+cbwbtMoHgMCCI+pj1btQ== + optionalDependencies: + "@esbuild/android-arm" "0.15.14" + "@esbuild/linux-loong64" "0.15.14" + esbuild-android-64 "0.15.14" + esbuild-android-arm64 "0.15.14" + esbuild-darwin-64 "0.15.14" + esbuild-darwin-arm64 "0.15.14" + esbuild-freebsd-64 "0.15.14" + esbuild-freebsd-arm64 "0.15.14" + esbuild-linux-32 "0.15.14" + esbuild-linux-64 "0.15.14" + esbuild-linux-arm "0.15.14" + esbuild-linux-arm64 "0.15.14" + esbuild-linux-mips64le "0.15.14" + esbuild-linux-ppc64le "0.15.14" + esbuild-linux-riscv64 "0.15.14" + esbuild-linux-s390x "0.15.14" + esbuild-netbsd-64 "0.15.14" + esbuild-openbsd-64 "0.15.14" + esbuild-sunos-64 "0.15.14" + esbuild-windows-32 "0.15.14" + esbuild-windows-64 "0.15.14" + esbuild-windows-arm64 "0.15.14" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -910,6 +1107,14 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787" integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ== +foreground-child@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-2.0.0.tgz#71b32800c9f15aa8f2f83f4a6bd9bff35d861a53" + integrity sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA== + dependencies: + cross-spawn "^7.0.0" + signal-exit "^3.0.2" + form-data@^2.2.0: version "2.5.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" @@ -984,7 +1189,7 @@ glob-parent@^6.0.1: dependencies: is-glob "^4.0.3" -glob@^7.1.3: +glob@^7.1.3, glob@^7.1.4: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -1055,6 +1260,11 @@ he@^1.2.0: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + http-basic@^8.1.1: version "8.1.3" resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" @@ -1159,6 +1369,28 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz#189e7909d0a39fa5a3dfad5b03f71947770191d3" + integrity sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw== + +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" + +istanbul-reports@^3.1.4: + version "3.1.5" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.5.tgz#cc9a6ab25cb25659810e4785ed9d9fb742578bae" + integrity sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + js-sdsl@^4.1.4: version "4.1.4" resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.1.4.tgz#78793c90f80e8430b7d8dc94515b6c77d98a26a6" @@ -1230,6 +1462,13 @@ lru-cache@^6.0.0: dependencies: yallist "^4.0.0" +make-dir@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -1426,6 +1665,15 @@ postcss@^8.4.16: picocolors "^1.0.0" source-map-js "^1.0.2" +postcss@^8.4.18: + version "8.4.19" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.19.tgz#61178e2add236b17351897c8bcc0b4c8ecab56fc" + integrity sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -1521,6 +1769,13 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" +rollup@^2.79.1: + version "2.79.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.79.1.tgz#bedee8faef7c9f93a2647ac0108748f497f081c7" + integrity sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw== + optionalDependencies: + fsevents "~2.3.2" + rollup@~2.78.0: version "2.78.1" resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.78.1.tgz#52fe3934d9c83cb4f7c4cb5fb75d88591be8648f" @@ -1545,6 +1800,11 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +semver@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + semver@^7.3.7: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" @@ -1573,7 +1833,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.7: +signal-exit@^3.0.2, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== @@ -1596,7 +1856,7 @@ source-map-support@~0.5.20: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0: +source-map@^0.6.0, source-map@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -1634,7 +1894,7 @@ strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== -strip-literal@^0.4.1: +strip-literal@^0.4.1, strip-literal@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-0.4.2.tgz#4f9fa6c38bb157b924e9ace7155ebf8a2342cbcf" integrity sha512-pv48ybn4iE1O9RLgCAN0iU4Xv7RlBTiit6DKmMiErbs9x1wH6vXBs45tWc0H5wUIF6TLTrKweqkmYF/iraQKNw== @@ -1679,6 +1939,15 @@ terser@^5.15.0: commander "^2.20.0" source-map-support "~0.5.20" +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -1706,6 +1975,11 @@ tinybench@^2.1.5: resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.1.5.tgz#6864341415ff0f912ed160cfd90b7f833ece674c" integrity sha512-ak+PZZEuH3mw6CCFOgf5S90YH0MARnZNhxjhjguAmoJimEMAJuNip/rJRd6/wyylHItomVpKTzZk9zrhTrQCoQ== +tinybench@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.3.1.tgz#14f64e6b77d7ef0b1f6ab850c7a808c6760b414d" + integrity sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA== + tinypool@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.3.0.tgz#c405d8b743509fc28ea4ca358433190be654f819" @@ -1789,6 +2063,15 @@ util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== +v8-to-istanbul@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.0.1.tgz#b6f994b0b5d4ef255e17a0d17dc444a9f5132fa4" + integrity sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + "vite@^2.9.12 || ^3.0.0-0", vite@^3.1.3: version "3.1.4" resolved "https://registry.yarnpkg.com/vite/-/vite-3.1.4.tgz#b75824b819d8354a6f36e4b988943c7e4947e155" @@ -1801,6 +2084,38 @@ util-deprecate@~1.0.1: optionalDependencies: fsevents "~2.3.2" +vite@^3.0.0: + version "3.2.4" + resolved "https://registry.yarnpkg.com/vite/-/vite-3.2.4.tgz#d8c7892dd4268064e04fffbe7d866207dd24166e" + integrity sha512-Z2X6SRAffOUYTa+sLy3NQ7nlHFU100xwanq1WDwqaiFiCe+25zdxP1TfCS5ojPV2oDDcXudHIoPnI1Z/66B7Yw== + dependencies: + esbuild "^0.15.9" + postcss "^8.4.18" + resolve "^1.22.1" + rollup "^2.79.1" + optionalDependencies: + fsevents "~2.3.2" + +vitest@0.25.2: + version "0.25.2" + resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.25.2.tgz#b8afd2ad4ea3c759f383792b5c3a2998ceb15fcc" + integrity sha512-qqkzfzglEFbQY7IGkgSJkdOhoqHjwAao/OrphnHboeYHC5JzsVFoLCaB2lnAy8krhj7sbrFTVRApzpkTOeuDWQ== + dependencies: + "@types/chai" "^4.3.3" + "@types/chai-subset" "^1.3.3" + "@types/node" "*" + acorn "^8.8.0" + acorn-walk "^8.2.0" + chai "^4.3.6" + debug "^4.3.4" + local-pkg "^0.4.2" + source-map "^0.6.1" + strip-literal "^0.4.2" + tinybench "^2.3.1" + tinypool "^0.3.0" + tinyspy "^1.0.2" + vite "^3.0.0" + vitest@^0.23.4: version "0.23.4" resolved "https://registry.yarnpkg.com/vitest/-/vitest-0.23.4.tgz#7ebea620f203f4df09a27ca17819dc9da61f88ef" @@ -1920,11 +2235,29 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== +yargs-parser@^20.2.2, yargs-parser@^20.2.9: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + yargs-parser@^21.0.0: version "21.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + yargs@^17.2.1: version "17.5.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" From 491cd16e91262c604a2c0b124ae3e41b27d7ca47 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Thu, 23 Mar 2023 15:49:26 +0000 Subject: [PATCH 27/44] Added annotation.body parsing --- .../{upgrade-test.ts => upgrade.test.ts} | 0 .../__snapshots__/cookbook.tests.ts.snap | 2770 ++++++++++++++--- .../__snapshots__/normalize.test.ts.snap | 585 ++++ .../presentation-3-parser/cookbook.tests.ts | 19 +- ...traverse-test.ts => iiif-traverse.test.ts} | 0 .../{normalize-test.ts => normalize.test.ts} | 20 +- ...{serializer-test.ts => serializer.test.ts} | 1 - .../presentation-3-parser/utilities.test.ts | 19 + fixtures/cookbook/0001-mvm-image.json | 2 +- fixtures/cookbook/0002-mvm-audio.json | 2 +- ...0010-book-2-viewing-direction-manifest-rtl | 213 -- ...0010-book-2-viewing-direction-manifest-ttb | 174 -- .../0011-book-3-behavior-manifest-continuous | 171 - .../0011-book-3-behavior-manifest-individuals | 171 - .../cookbook/0019-html-in-annotations.json | 66 + .../cookbook/0030-multi-volume-collection | 33 - .../cookbook/0030-multi-volume-manifest_v1 | 211 -- .../cookbook/0030-multi-volume-manifest_v2 | 211 -- .../0040-image-rotation-service-manifest-css | 59 - ...0-image-rotation-service-manifest-css.json | 1 + ...40-image-rotation-service-manifest-service | 60 - fixtures/cookbook/0047-homepage.json | 66 + fixtures/cookbook/0118_multivalue.json | 10 +- .../cookbook/0219-using-caption-file.json | 42 +- .../cookbook/0230-navdate-navdate-collection | 48 - .../0230-navdate-navdate_map_1-manifest | 52 - .../0230-navdate-navdate_map_2-manifest | 52 - .../cookbook/0240-navPlace-on-canvases.json | 144 + .../0258-tagging-external-resource.json | 2 +- .../0261-non-rectangular-commenting.json | 2 +- fixtures/cookbook/0299-region.json | 55 + .../cookbook/0326-annotating-image-layer.json | 103 + fixtures/cookbook/_index.json | 52 +- .../presentation-2/wellcome-collection.json | 27 + fixtures/presentation-3/exhibition-1.json | 665 ++++ .../presentation-3/wellcome-collection.json | 187 ++ scripts/update-cookbook.mjs | 2 +- .../serialize-presentation-3.ts | 31 +- src/presentation-3/traverse.ts | 24 +- src/shared/compress-specific-resource.ts | 10 +- 40 files changed, 4390 insertions(+), 1972 deletions(-) rename __tests__/presentation-2-parser/{upgrade-test.ts => upgrade.test.ts} (100%) create mode 100644 __tests__/presentation-3-parser/__snapshots__/normalize.test.ts.snap rename __tests__/presentation-3-parser/{iiif-traverse-test.ts => iiif-traverse.test.ts} (100%) rename __tests__/presentation-3-parser/{normalize-test.ts => normalize.test.ts} (96%) rename __tests__/presentation-3-parser/{serializer-test.ts => serializer.test.ts} (99%) delete mode 100644 fixtures/cookbook/0010-book-2-viewing-direction-manifest-rtl delete mode 100644 fixtures/cookbook/0010-book-2-viewing-direction-manifest-ttb delete mode 100644 fixtures/cookbook/0011-book-3-behavior-manifest-continuous delete mode 100644 fixtures/cookbook/0011-book-3-behavior-manifest-individuals create mode 100644 fixtures/cookbook/0019-html-in-annotations.json delete mode 100644 fixtures/cookbook/0030-multi-volume-collection delete mode 100644 fixtures/cookbook/0030-multi-volume-manifest_v1 delete mode 100644 fixtures/cookbook/0030-multi-volume-manifest_v2 delete mode 100644 fixtures/cookbook/0040-image-rotation-service-manifest-css delete mode 100644 fixtures/cookbook/0040-image-rotation-service-manifest-service create mode 100644 fixtures/cookbook/0047-homepage.json delete mode 100644 fixtures/cookbook/0230-navdate-navdate-collection delete mode 100644 fixtures/cookbook/0230-navdate-navdate_map_1-manifest delete mode 100644 fixtures/cookbook/0230-navdate-navdate_map_2-manifest create mode 100644 fixtures/cookbook/0240-navPlace-on-canvases.json create mode 100644 fixtures/cookbook/0299-region.json create mode 100644 fixtures/cookbook/0326-annotating-image-layer.json create mode 100644 fixtures/presentation-2/wellcome-collection.json create mode 100644 fixtures/presentation-3/exhibition-1.json create mode 100644 fixtures/presentation-3/wellcome-collection.json diff --git a/__tests__/presentation-2-parser/upgrade-test.ts b/__tests__/presentation-2-parser/upgrade.test.ts similarity index 100% rename from __tests__/presentation-2-parser/upgrade-test.ts rename to __tests__/presentation-2-parser/upgrade.test.ts diff --git a/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap b/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap index 6ea4727..b83cf0e 100644 --- a/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap @@ -109,7 +109,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0001-mvm-image https://iiif.io/api ], "label": { "en": [ - "Image 1", + "Single Image Example", ], }, "metadata": [], @@ -184,7 +184,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0001-mvm-image https://iiif.io/api ], "label": { "en": [ - "Image 1", + "Single Image Example", ], }, "type": "Manifest", @@ -209,7 +209,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0002-mvm-audio https://iiif.io/api ], "target": { "source": { - "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page", + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas", "type": "Canvas", }, "type": "SpecificResource", @@ -360,7 +360,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0002-mvm-audio https://iiif.io/api }, "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page/annotation", "motivation": "painting", - "target": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page", + "target": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas", "type": "Annotation", }, ], @@ -6478,6 +6478,294 @@ exports[`Cookbook > Testing normalize %p (%p) 0017-transcription-av https://iiif } `; +exports[`Cookbook > Testing normalize %p (%p) 0019-html-in-annotations https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1/anno-1": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1/anno-1", + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2/anno-1": { + "body": [ + { + "id": "vault://8c31cd02", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2/anno-1", + "motivation": [ + "commenting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1/anno-1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2/anno-1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + }, + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3024, + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 4032, + }, + }, + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "vault://8c31cd02": { + "format": "text/html", + "id": "vault://8c31cd02", + "language": "de", + "type": "TextualBody", + "value": "

Göttinger Marktplatz mit Gänseliesel Brunnen Wikipedia logo

", + }, + }, + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json": { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1", + "type": "Canvas", + }, + ], + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": {}, + "Selector": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + }, + }, + "mapping": { + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1/anno-1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2/anno-1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json": "Manifest", + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", + "vault://8c31cd02": "ContentResource", + }, + "resource": { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook > Testing normalize %p (%p) 0019-html-in-annotations https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json 2`] = ` +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json", + "items": [ + { + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2", + "items": [ + { + "body": { + "format": "text/html", + "language": "de", + "type": "TextualBody", + "value": "

Göttinger Marktplatz mit Gänseliesel Brunnen Wikipedia logo

", + }, + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2/anno-1", + "motivation": "commenting", + "target": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "height": 3024, + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1", + "items": [ + { + "body": { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1/anno-1", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 4032, + }, + ], + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "type": "Manifest", +} +`; + exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/cookbook/recipe/0021-tagging/manifest.json 1`] = ` { "entities": { @@ -14313,7 +14601,12 @@ exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manife "body": [ { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1", - "type": "ContentResource", + "source": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", + "type": "ContentResource", + }, + "styleClass": "rotated", + "type": "SpecificResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", @@ -14397,23 +14690,19 @@ exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manife }, "Collection": {}, "ContentResource": { - "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1": { - "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1", - "source": { - "format": "image/jpeg", - "height": 2105, - "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", - "profile": "level1", - "type": "ImageService3", - }, - ], - "width": 1523, - }, - "styleClass": "rotated", - "type": "SpecificResource", + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg": { + "format": "image/jpeg", + "height": 2105, + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1523, }, }, "Manifest": { @@ -14456,14 +14745,20 @@ exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manife }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image": "Annotation", - "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1": "ContentResource", "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1": "Canvas", "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json": "Manifest", "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg": "ContentResource", }, "resource": { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json", @@ -14498,6 +14793,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manife "type": "ImageService3", }, ], + "type": "Image", "width": 1523, }, "styleClass": "rotated", @@ -14543,7 +14839,16 @@ exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manife "body": [ { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image", - "type": "ContentResource", + "selector": { + "@context": "http://iiif.io/api/annex/openannotation/context.json", + "rotation": "90", + "type": "iiif:ImageApiSelector", + }, + "source": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", + "type": "ContentResource", + }, + "type": "SpecificResource", }, ], "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", @@ -14623,28 +14928,19 @@ exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manife }, "Collection": {}, "ContentResource": { - "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image": { - "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image", - "selector": { - "@context": "http://iiif.io/api/annex/openannotation/context.json", - "rotation": "90", - "type": "iiif:ImageApiSelector", - }, - "source": { - "format": "image/jpeg", - "height": 2105, - "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1", - "profile": "level1", - "type": "ImageService3", - }, - ], - "type": "Image", - "width": 1523, - }, - "type": "SpecificResource", + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg": { + "format": "image/jpeg", + "height": 2105, + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 1523, }, }, "Manifest": { @@ -14687,14 +14983,20 @@ exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manife }, "Range": {}, "Selector": {}, - "Service": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1": { + "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1", + "profile": "level1", + "type": "ImageService3", + }, + }, }, "mapping": { "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image": "Annotation", - "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image": "ContentResource", "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1": "Canvas", "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ": "Manifest", "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg": "ContentResource", }, "resource": { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ", @@ -15592,6 +15894,262 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api } `; +exports[`Cookbook > Testing normalize %p (%p) 0047-homepage https://iiif.io/api/cookbook/recipe/0047-homepage/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1/page/1/annotation/1": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/!500,500/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1/page/1/annotation/1", + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1/page/1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1/page/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1/page/1/annotation/1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + }, + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 0, + "height": 3000, + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1/page/1", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "Front", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 2315, + }, + }, + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/!500,500/0/default.jpg": { + "format": "image/jpeg", + "height": 3000, + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/!500,500/0/default.jpg", + "service": [ + { + "@id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", + "@type": "ImageService3", + "profile": "http://iiif.io/api/image/2/level1.json", + }, + ], + "type": "Image", + "width": 2315, + }, + "https://www.getty.edu/art/collection/object/103RQQ": { + "format": "text/html", + "id": "https://www.getty.edu/art/collection/object/103RQQ", + "label": { + "en": [ + "Home page at the Getty Museum Collection", + ], + }, + "language": [ + "en", + ], + "type": "Text", + }, + }, + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0047-homepage/manifest.json": { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [ + { + "id": "https://www.getty.edu/art/collection/object/103RQQ", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/manifest.json", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1", + "type": "Canvas", + }, + ], + "label": { + "none": [ + "Laocöon", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": {}, + "Selector": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon": { + "@id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", + "@type": "ImageService3", + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService3", + }, + }, + }, + "mapping": { + "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1/page/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1/page/1/annotation/1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0047-homepage/manifest.json": "Manifest", + "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/!500,500/0/default.jpg": "ContentResource", + "https://www.getty.edu/art/collection/object/103RQQ": "ContentResource", + }, + "resource": { + "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook > Testing normalize %p (%p) 0047-homepage https://iiif.io/api/cookbook/recipe/0047-homepage/manifest.json 2`] = ` +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "homepage": [ + { + "format": "text/html", + "id": "https://www.getty.edu/art/collection/object/103RQQ", + "label": { + "en": [ + "Home page at the Getty Museum Collection", + ], + }, + "language": [ + "en", + ], + "type": "Text", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/manifest.json", + "items": [ + { + "height": 3000, + "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1/page/1", + "items": [ + { + "body": { + "format": "image/jpeg", + "height": 3000, + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/!500,500/0/default.jpg", + "service": [ + { + "@id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", + "@type": "ImageService3", + "profile": "http://iiif.io/api/image/2/level1.json", + }, + ], + "type": "Image", + "width": 2315, + }, + "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1/page/1/annotation/1", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "Front", + ], + }, + "type": "Canvas", + "width": 2315, + }, + ], + "label": { + "none": [ + "Laocöon", + ], + }, + "type": "Manifest", +} +`; + exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json 1`] = ` { "entities": { @@ -18542,20 +19100,20 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap "entities": { "Agent": {}, "Annotation": { - "https://example.org/iiif/text-language/canvas1/page1/annotation1": { + "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1/annotation/1": { "body": [ { "id": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg", "type": "ContentResource", }, ], - "id": "https://example.org/iiif/text-language/canvas1/page1/annotation1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1/annotation/1", "motivation": [ "painting", ], "target": { "source": { - "id": "https://example.org/iiif/text-language/canvas1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1", "type": "Canvas", }, "type": "SpecificResource", @@ -18565,13 +19123,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap }, "AnnotationCollection": {}, "AnnotationPage": { - "https://example.org/iiif/text-language/canvas1/page1": { + "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1": { "behavior": [], "homepage": [], - "id": "https://example.org/iiif/text-language/canvas1/page1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1", "items": [ { - "id": "https://example.org/iiif/text-language/canvas1/page1/annotation1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1/annotation/1", "type": "Annotation", }, ], @@ -18589,17 +19147,17 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap }, }, "Canvas": { - "https://example.org/iiif/text-language/canvas1": { + "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1": { "accompanyingCanvas": null, "annotations": [], "behavior": [], "duration": 0, "height": 991, "homepage": [], - "id": "https://example.org/iiif/text-language/canvas1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1", "items": [ { - "id": "https://example.org/iiif/text-language/canvas1/page1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1", "type": "AnnotationPage", }, ], @@ -18629,16 +19187,16 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap }, }, "Manifest": { - "https://example.org/iiif/text-language/manifest": { + "https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, "annotations": [], "behavior": [], "homepage": [], - "id": "https://example.org/iiif/text-language/manifest", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json", "items": [ { - "id": "https://example.org/iiif/text-language/canvas1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1", "type": "Canvas", }, ], @@ -18693,14 +19251,14 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap "Service": {}, }, "mapping": { - "https://example.org/iiif/text-language/canvas1": "Canvas", - "https://example.org/iiif/text-language/canvas1/page1": "AnnotationPage", - "https://example.org/iiif/text-language/canvas1/page1/annotation1": "Annotation", - "https://example.org/iiif/text-language/manifest": "Manifest", + "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1/annotation/1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json": "Manifest", "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg": "ContentResource", }, "resource": { - "id": "https://example.org/iiif/text-language/manifest", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json", "type": "Manifest", }, } @@ -18709,14 +19267,14 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json 2`] = ` { "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://example.org/iiif/text-language/manifest", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json", "items": [ { "height": 991, - "id": "https://example.org/iiif/text-language/canvas1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1", "items": [ { - "id": "https://example.org/iiif/text-language/canvas1/page1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1", "items": [ { "body": { @@ -18724,9 +19282,9 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap "id": "https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Whistlers_Mother_high_res.jpg/1114px-Whistlers_Mother_high_res.jpg", "type": "Image", }, - "id": "https://example.org/iiif/text-language/canvas1/page1/annotation1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1/annotation/1", "motivation": "painting", - "target": "https://example.org/iiif/text-language/canvas1", + "target": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1", "type": "Annotation", }, ], @@ -20240,33 +20798,313 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ } `; -exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_1-manifest https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json 1`] = ` +exports[`Cookbook > Testing normalize %p (%p) 0219-using-caption-file https://iiif.io/api/cookbook/recipe/0219-using-caption-file/manifest.json 1`] = ` { "entities": { "Agent": {}, "Annotation": { - "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image": { + "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page/annotation1": { "body": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4", "type": "ContentResource", }, ], - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page/annotation1", "motivation": [ "painting", ], "target": { "source": { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas", "type": "Canvas", }, "type": "SpecificResource", }, "type": "Annotation", }, - }, - "AnnotationCollection": {}, + "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2/a1": { + "body": [ + { + "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/lunchroom_manners.vtt", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2/a1", + "motivation": [ + "supplementing", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page/annotation1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2/a1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + }, + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 572.034, + "height": 360, + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 480, + }, + }, + "Collection": {}, + "ContentResource": { + "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4": { + "duration": 572.034, + "format": "video/mp4", + "height": 360, + "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4", + "type": "Video", + "width": 480, + }, + "https://fixtures.iiif.io/video/indiana/lunchroom_manners/lunchroom_manners.vtt": { + "format": "text/vtt", + "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/lunchroom_manners.vtt", + "label": { + "en": [ + "Captions in WebVTT format", + ], + }, + "language": "en", + "type": "Text", + }, + }, + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/manifest.json": { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/manifest.json", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas", + "type": "Canvas", + }, + ], + "label": { + "en": [ + "Lunchroom Manners", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": {}, + "Selector": {}, + "Service": {}, + }, + "mapping": { + "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4": "ContentResource", + "https://fixtures.iiif.io/video/indiana/lunchroom_manners/lunchroom_manners.vtt": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas": "Canvas", + "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page/annotation1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2/a1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/manifest.json": "Manifest", + }, + "resource": { + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook > Testing normalize %p (%p) 0219-using-caption-file https://iiif.io/api/cookbook/recipe/0219-using-caption-file/manifest.json 2`] = ` +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/manifest.json", + "items": [ + { + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2", + "items": [ + { + "body": { + "format": "text/vtt", + "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/lunchroom_manners.vtt", + "label": { + "en": [ + "Captions in WebVTT format", + ], + }, + "language": "en", + "type": "Text", + }, + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2/a1", + "motivation": "supplementing", + "target": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "duration": 572.034, + "height": 360, + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page", + "items": [ + { + "body": { + "duration": 572.034, + "format": "video/mp4", + "height": 360, + "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4", + "type": "Video", + "width": 480, + }, + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page/annotation1", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 480, + }, + ], + "label": { + "en": [ + "Lunchroom Manners", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_1-manifest https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": {}, "AnnotationPage": { "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1": { "behavior": [], @@ -21278,53 +22116,526 @@ exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/ } `; -exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json 1`] = ` +exports[`Cookbook > Testing normalize %p (%p) 0240-navPlace-on-canvases https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json 1`] = ` { "entities": { "Agent": {}, "Annotation": { - "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata": { + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/1": { "body": [ { - "id": "vault://cf7d210d", - "type": "ContentResource", - }, - { - "id": "vault://0e748e5d", + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg", "type": "ContentResource", }, ], - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/1", "motivation": [ - "tagging", + "painting", ], "target": { - "selector": { - "type": "FragmentSelector", - "value": "xywh=749,1054,338,460", - }, "source": { - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1", "type": "Canvas", }, "type": "SpecificResource", }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image": { + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/2": { "body": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "id": "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1/full/max/0/default.jpg", "type": "ContentResource", }, ], - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/2", "motivation": [ "painting", ], "target": { "source": { - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/2": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/2", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/2", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + }, + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 0, + "height": 3000, + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/1", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Front of Bronze", + ], + }, + "metadata": [], + "navDate": null, + "navPlace": { + "features": [ + { + "geometry": { + "coordinates": [ + -118.4745559, + 34.0776376, + ], + "type": "Point", + }, + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature/1", + "properties": { + "label": { + "en": [ + "Current Location of the Laocoön Bronze", + ], + "it": [ + "Ubicazione attuale del Bronzo Laocoonte e i suoi figli", + ], + }, + }, + "type": "Feature", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature-collection/1", + "type": "FeatureCollection", + }, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 2315, + }, + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 0, + "height": 3259, + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/2", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Painting", + ], + }, + "metadata": [], + "navDate": null, + "navPlace": { + "features": [ + { + "geometry": { + "coordinates": [ + -77.0199025, + 38.8920717, + ], + "type": "Point", + }, + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature/2", + "properties": { + "label": { + "en": [ + "Current Location of Painting", + ], + }, + }, + "type": "Feature", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature-collection/2", + "type": "FeatureCollection", + }, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 4096, + }, + }, + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg": { + "format": "image/jpg", + "height": 3000, + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2315, + }, + "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1/full/max/0/default.jpg": { + "format": "image/jpg", + "height": 3259, + "id": "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1/full/max/0/default.jpg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4096, + }, + }, + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json": { + "@context": [ + "http://iiif.io/api/extension/navplace/context.json", + "http://iiif.io/api/presentation/3/context.json", + ], + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1", + "type": "Canvas", + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2", + "type": "Canvas", + }, + ], + "label": { + "en": [ + "Laocöon, geolocated sculpture and painting.", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": {}, + "Selector": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon": { + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1": { + "id": "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1", + "profile": "level1", + "type": "ImageService3", + }, + }, + }, + "mapping": { + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/2": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/2": "Annotation", + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2": "Canvas", + "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json": "Manifest", + "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1/full/max/0/default.jpg": "ContentResource", + }, + "resource": { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook > Testing normalize %p (%p) 0240-navPlace-on-canvases https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json 2`] = ` +{ + "@context": [ + "http://iiif.io/api/extension/navplace/context.json", + "http://iiif.io/api/presentation/3/context.json", + ], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json", + "items": [ + { + "height": 3000, + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/1", + "items": [ + { + "body": { + "format": "image/jpg", + "height": 3000, + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2315, + }, + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/1", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Front of Bronze", + ], + }, + "navPlace": { + "features": [ + { + "geometry": { + "coordinates": [ + -118.4745559, + 34.0776376, + ], + "type": "Point", + }, + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature/1", + "properties": { + "label": { + "en": [ + "Current Location of the Laocoön Bronze", + ], + "it": [ + "Ubicazione attuale del Bronzo Laocoonte e i suoi figli", + ], + }, + }, + "type": "Feature", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature-collection/1", + "type": "FeatureCollection", + }, + "type": "Canvas", + "width": 2315, + }, + { + "height": 3259, + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/2", + "items": [ + { + "body": { + "format": "image/jpg", + "height": 3259, + "id": "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1/full/max/0/default.jpg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4096, + }, + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/2", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Painting", + ], + }, + "navPlace": { + "features": [ + { + "geometry": { + "coordinates": [ + -77.0199025, + 38.8920717, + ], + "type": "Point", + }, + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature/2", + "properties": { + "label": { + "en": [ + "Current Location of Painting", + ], + }, + }, + "type": "Feature", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature-collection/2", + "type": "FeatureCollection", + }, + "type": "Canvas", + "width": 4096, + }, + ], + "label": { + "en": [ + "Laocöon, geolocated sculpture and painting.", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata": { + "body": [ + { + "source": { + "id": "http://www.wikidata.org/entity/Q18624915", + "type": "ContentResource", + }, + "type": "SpecificResource", + }, + { + "id": "vault://7dc03413", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", + "motivation": [ + "tagging", + ], + "target": { + "selector": { + "type": "FragmentSelector", + "value": "xywh=749,1054,338,460", + }, + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image", + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", "type": "Canvas", }, "type": "SpecificResource", @@ -21337,10 +22648,605 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1": { "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1", + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + }, + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3024, + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 4032, + }, + }, + "Collection": {}, + "ContentResource": { + "http://www.wikidata.org/entity/Q18624915": { + "id": "http://www.wikidata.org/entity/Q18624915", + "type": "ContentResource", + }, + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "vault://7dc03413": { + "format": "text/plain", + "id": "vault://7dc03413", + "language": "de", + "type": "TextualBody", + "value": "Gänseliesel-Brunnen", + }, + }, + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json": { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "type": "Canvas", + }, + ], + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": {}, + "Selector": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + }, + }, + "mapping": { + "http://www.wikidata.org/entity/Q18624915": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata": "Annotation", + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", + "vault://7dc03413": "ContentResource", + }, + "resource": { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json 2`] = ` +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json", + "items": [ + { + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1", + "items": [ + { + "body": [ + { + "source": "http://www.wikidata.org/entity/Q18624915", + "type": "SpecificResource", + }, + { + "format": "text/plain", + "language": "de", + "type": "TextualBody", + "value": "Gänseliesel-Brunnen", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", + "motivation": "tagging", + "target": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1#xywh=749,1054,338,460", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "height": 3024, + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1", + "items": [ + { + "body": { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 4032, + }, + ], + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image", + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg": { + "body": [ + { + "id": "vault://605b9d93", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", + "motivation": [ + "tagging", + ], + "target": { + "selector": { + "type": "SvgSelector", + "value": "", + }, + "source": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + }, + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3024, + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 4032, + }, + }, + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "vault://605b9d93": { + "format": "text/plain", + "id": "vault://605b9d93", + "language": "de", + "type": "TextualBody", + "value": "Gänseliesel-Brunnen", + }, + }, + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json": { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image", + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "type": "Canvas", + }, + ], + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": {}, + "Selector": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + }, + }, + "mapping": { + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg": "Annotation", + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", + "vault://605b9d93": "ContentResource", + }, + "resource": { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json 2`] = ` +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json", + "items": [ + { + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1", + "items": [ + { + "body": { + "format": "text/plain", + "language": "de", + "type": "TextualBody", + "value": "Gänseliesel-Brunnen", + }, + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", + "motivation": "tagging", + "target": { + "selector": { + "type": "SvgSelector", + "value": "", + }, + "source": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "type": "SpecificResource", + }, + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "height": 3024, + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1", + "items": [ + { + "body": { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image", + "motivation": "painting", + "target": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "type": "Canvas", + "width": 4032, + }, + ], + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "type": "Manifest", +} +`; + +exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1", + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1": { + "body": [ + { + "id": "vault://929e073a", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1", + "motivation": [ + "commenting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1", "type": "Annotation", }, ], @@ -21356,13 +23262,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1": { + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2": { "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1", + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1", "type": "Annotation", }, ], @@ -21380,11 +23286,11 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt }, }, "Canvas": { - "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1": { + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1": { "accompanyingCanvas": null, "annotations": [ { - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1", + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2", "type": "AnnotationPage", }, ], @@ -21392,10 +23298,10 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt "duration": 0, "height": 3024, "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1", + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1", "type": "AnnotationPage", }, ], @@ -21432,30 +23338,25 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt "type": "Image", "width": 4032, }, - "vault://0e748e5d": { + "vault://929e073a": { "format": "text/plain", - "id": "vault://0e748e5d", + "id": "vault://929e073a", "language": "de", "type": "TextualBody", - "value": "Gänsenliesel-Brunnen", - }, - "vault://cf7d210d": { - "id": "vault://cf7d210d", - "source": "http://www.wikidata.org/entity/Q18624915", - "type": "SpecificResource", + "value": "Göttinger Marktplatz mit Gänseliesel Brunnen", }, }, "Manifest": { - "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json": { + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, "annotations": [], "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", "type": "Canvas", }, ], @@ -21494,49 +23395,42 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt }, }, "mapping": { - "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata": "Annotation", - "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image": "Annotation", - "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1": "Canvas", - "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json": "Manifest", - "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1": "AnnotationPage", - "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json": "Manifest", "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", - "vault://0e748e5d": "ContentResource", - "vault://cf7d210d": "ContentResource", + "vault://929e073a": "ContentResource", }, "resource": { - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json 2`] = ` +exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json 2`] = ` { "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json", "items": [ { "annotations": [ { - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1", + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2", "items": [ { - "body": [ - { - "source": "http://www.wikidata.org/entity/Q18624915", - "type": "SpecificResource", - }, - { - "format": "text/plain", - "language": "de", - "type": "TextualBody", - "value": "Gänsenliesel-Brunnen", - }, - ], - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", - "motivation": "tagging", - "target": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1#xywh=749,1054,338,460", + "body": { + "format": "text/plain", + "language": "de", + "type": "TextualBody", + "value": "Göttinger Marktplatz mit Gänseliesel Brunnen", + }, + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1", + "motivation": "commenting", + "target": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", "type": "Annotation", }, ], @@ -21544,10 +23438,10 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt }, ], "height": 3024, - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1", + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1", "items": [ { "body": { @@ -21564,9 +23458,9 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt "type": "Image", "width": 4032, }, - "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image", + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1", "motivation": "painting", - "target": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "target": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", "type": "Annotation", }, ], @@ -21586,65 +23480,39 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt } `; -exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json 1`] = ` +exports[`Cookbook > Testing normalize %p (%p) 0269-embedded-or-referenced-annotations https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json 1`] = ` { "entities": { "Agent": {}, "Annotation": { - "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image": { + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1": { "body": [ { "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", "type": "ContentResource", }, ], - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image", + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1", "motivation": [ "painting", ], "target": { "source": { - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", "type": "Canvas", }, "type": "SpecificResource", }, "type": "Annotation", }, - "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg": { - "body": [ - { - "id": "vault://b71e460e", - "type": "ContentResource", - }, - ], - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", - "motivation": [ - "tagging", - ], - "target": { - "selector": { - "type": "SvgSelector", - "value": "", - }, - "source": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", - "type": "SpecificResource", - }, - "type": "Annotation", - }, }, "AnnotationCollection": {}, "AnnotationPage": { - "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1": { + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json": { "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image", - "type": "Annotation", - }, - ], + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json", + "items": [], "label": null, "metadata": [], "provider": [], @@ -21657,13 +23525,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1": { + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1": { "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1", + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1", "type": "Annotation", }, ], @@ -21681,11 +23549,11 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht }, }, "Canvas": { - "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1": { + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1": { "accompanyingCanvas": null, "annotations": [ { - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1", + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json", "type": "AnnotationPage", }, ], @@ -21693,10 +23561,10 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht "duration": 0, "height": 3024, "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1", + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1", "type": "AnnotationPage", }, ], @@ -21733,25 +23601,18 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht "type": "Image", "width": 4032, }, - "vault://b71e460e": { - "format": "text/plain", - "id": "vault://b71e460e", - "language": "de", - "type": "TextualBody", - "value": "Gänsenliessel-Brunnen", - }, }, "Manifest": { - "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json": { + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, "annotations": [], "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", "type": "Canvas", }, ], @@ -21790,60 +23651,37 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht }, }, "mapping": { - "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image": "Annotation", - "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg": "Annotation", - "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1": "Canvas", - "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json": "Manifest", - "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1": "AnnotationPage", - "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1": "Annotation", + "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json": "Manifest", "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", - "vault://b71e460e": "ContentResource", }, "resource": { - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json 2`] = ` +exports[`Cookbook > Testing normalize %p (%p) 0269-embedded-or-referenced-annotations https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json 2`] = ` { "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json", "items": [ { "annotations": [ { - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1", - "items": [ - { - "body": { - "format": "text/plain", - "language": "de", - "type": "TextualBody", - "value": "Gänsenliessel-Brunnen", - }, - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", - "motivation": "tagging", - "target": { - "selector": { - "type": "SvgSelector", - "value": "", - }, - "source": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", - "type": "SpecificResource", - }, - "type": "Annotation", - }, - ], + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json", "type": "AnnotationPage", }, ], "height": 3024, - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1", + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1", "items": [ { "body": { @@ -21860,9 +23698,9 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht "type": "Image", "width": 4032, }, - "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image", + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1", "motivation": "painting", - "target": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "target": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", "type": "Annotation", }, ], @@ -21882,45 +23720,34 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht } `; -exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json 1`] = ` +exports[`Cookbook > Testing normalize %p (%p) 0299-region https://iiif.io/api/cookbook/recipe/0299-region/manifest.json 1`] = ` { "entities": { "Agent": {}, "Annotation": { - "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1": { + "https://iiif.io/api/cookbook/recipe/0299-region/annotation/p0001-image": { "body": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "type": "ContentResource", + "id": "https://iiif.io/api/cookbook/recipe/0299-region/body/b1", + "selector": { + "@context": "http://iiif.io/api/annex/openannotation/context.json", + "region": "1768,2423,1768,2080", + "type": "iiif:ImageApiSelector", + }, + "source": { + "id": "https://iiif.io/api/image/3.0/example/reference/4ce82cef49fb16798f4c2440307c3d6f-newspaper-p2/full/max/0/default.jpg", + "type": "ContentResource", + }, + "type": "SpecificResource", }, ], - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1", + "id": "https://iiif.io/api/cookbook/recipe/0299-region/annotation/p0001-image", "motivation": [ "painting", ], "target": { "source": { - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", - "type": "Canvas", - }, - "type": "SpecificResource", - }, - "type": "Annotation", - }, - "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1": { - "body": [ - { - "id": "vault://929e073a", - "type": "ContentResource", - }, - ], - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1", - "motivation": [ - "commenting", - ], - "target": { - "source": { - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", + "id": "https://iiif.io/api/cookbook/recipe/0299-region/canvas/p1", "type": "Canvas", }, "type": "SpecificResource", @@ -21930,35 +23757,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https: }, "AnnotationCollection": {}, "AnnotationPage": { - "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1": { - "behavior": [], - "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1", - "type": "Annotation", - }, - ], - "label": null, - "metadata": [], - "provider": [], - "rendering": [], - "requiredStatement": null, - "rights": null, - "seeAlso": [], - "service": [], - "summary": null, - "thumbnail": [], - "type": "AnnotationPage", - }, - "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2": { + "https://iiif.io/api/cookbook/recipe/0299-region/page/p1/1": { "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2", + "id": "https://iiif.io/api/cookbook/recipe/0299-region/page/p1/1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1", + "id": "https://iiif.io/api/cookbook/recipe/0299-region/annotation/p0001-image", "type": "Annotation", }, ], @@ -21976,22 +23781,17 @@ exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https: }, }, "Canvas": { - "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1": { + "https://iiif.io/api/cookbook/recipe/0299-region/canvas/p1": { "accompanyingCanvas": null, - "annotations": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2", - "type": "AnnotationPage", - }, - ], + "annotations": [], "behavior": [], "duration": 0, - "height": 3024, + "height": 2080, "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", + "id": "https://iiif.io/api/cookbook/recipe/0299-region/canvas/p1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1", + "id": "https://iiif.io/api/cookbook/recipe/0299-region/page/p1/1", "type": "AnnotationPage", }, ], @@ -22009,50 +23809,43 @@ exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https: "summary": null, "thumbnail": [], "type": "Canvas", - "width": 4032, + "width": 1768, }, }, "Collection": {}, "ContentResource": { - "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": { + "https://iiif.io/api/image/3.0/example/reference/4ce82cef49fb16798f4c2440307c3d6f-newspaper-p2/full/max/0/default.jpg": { "format": "image/jpeg", - "height": 3024, - "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "height": 4999, + "id": "https://iiif.io/api/image/3.0/example/reference/4ce82cef49fb16798f4c2440307c3d6f-newspaper-p2/full/max/0/default.jpg", "service": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "id": "https://iiif.io/api/image/3.0/example/reference/4ce82cef49fb16798f4c2440307c3d6f-newspaper-p2", "profile": "level1", "type": "ImageService3", }, - ], - "type": "Image", - "width": 4032, - }, - "vault://929e073a": { - "format": "text/plain", - "id": "vault://929e073a", - "language": "de", - "type": "TextualBody", - "value": "Göttinger Marktplatz mit Gänseliesel Brunnen", + ], + "type": "Image", + "width": 3536, }, }, "Manifest": { - "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json": { + "https://iiif.io/api/cookbook/recipe/0299-region/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, "annotations": [], "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0299-region/manifest.json", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", + "id": "https://iiif.io/api/cookbook/recipe/0299-region/canvas/p1", "type": "Canvas", }, ], "label": { "en": [ - "Picture of Göttingen taken during the 2019 IIIF Conference", + "Berliner Tageblatt article, 'Ein neuer Sicherungsplan?'", ], }, "metadata": [], @@ -22077,80 +23870,66 @@ exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https: "Range": {}, "Selector": {}, "Service": { - "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen": { - "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "https://iiif.io/api/image/3.0/example/reference/4ce82cef49fb16798f4c2440307c3d6f-newspaper-p2": { + "id": "https://iiif.io/api/image/3.0/example/reference/4ce82cef49fb16798f4c2440307c3d6f-newspaper-p2", "profile": "level1", "type": "ImageService3", }, }, }, "mapping": { - "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1": "Canvas", - "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1": "AnnotationPage", - "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1": "Annotation", - "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2": "AnnotationPage", - "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1": "Annotation", - "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json": "Manifest", - "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", - "vault://929e073a": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0299-region/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0299-region/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0299-region/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0299-region/page/p1/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/4ce82cef49fb16798f4c2440307c3d6f-newspaper-p2/full/max/0/default.jpg": "ContentResource", }, "resource": { - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0299-region/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json 2`] = ` +exports[`Cookbook > Testing normalize %p (%p) 0299-region https://iiif.io/api/cookbook/recipe/0299-region/manifest.json 2`] = ` { "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0299-region/manifest.json", "items": [ { - "annotations": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2", - "items": [ - { - "body": { - "format": "text/plain", - "language": "de", - "type": "TextualBody", - "value": "Göttinger Marktplatz mit Gänseliesel Brunnen", - }, - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1", - "motivation": "commenting", - "target": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", - "type": "Annotation", - }, - ], - "type": "AnnotationPage", - }, - ], - "height": 3024, - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", + "height": 2080, + "id": "https://iiif.io/api/cookbook/recipe/0299-region/canvas/p1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1", + "id": "https://iiif.io/api/cookbook/recipe/0299-region/page/p1/1", "items": [ { "body": { - "format": "image/jpeg", - "height": 3024, - "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", - "profile": "level1", - "type": "ImageService3", - }, - ], - "type": "Image", - "width": 4032, + "id": "https://iiif.io/api/cookbook/recipe/0299-region/body/b1", + "selector": { + "@context": "http://iiif.io/api/annex/openannotation/context.json", + "region": "1768,2423,1768,2080", + "type": "iiif:ImageApiSelector", + }, + "source": { + "format": "image/jpeg", + "height": 4999, + "id": "https://iiif.io/api/image/3.0/example/reference/4ce82cef49fb16798f4c2440307c3d6f-newspaper-p2/full/max/0/default.jpg", + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4ce82cef49fb16798f4c2440307c3d6f-newspaper-p2", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3536, + }, + "type": "SpecificResource", }, - "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1", + "id": "https://iiif.io/api/cookbook/recipe/0299-region/annotation/p0001-image", "motivation": "painting", - "target": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", + "target": "https://iiif.io/api/cookbook/recipe/0299-region/canvas/p1", "type": "Annotation", }, ], @@ -22158,51 +23937,78 @@ exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https: }, ], "type": "Canvas", - "width": 4032, + "width": 1768, }, ], "label": { "en": [ - "Picture of Göttingen taken during the 2019 IIIF Conference", + "Berliner Tageblatt article, 'Ein neuer Sicherungsplan?'", ], }, "type": "Manifest", } `; -exports[`Cookbook > Testing normalize %p (%p) 0269-embedded-or-referenced-annotations https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json 1`] = ` +exports[`Cookbook > Testing normalize %p (%p) 0326-annotating-image-layer https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/manifest.json 1`] = ` { "entities": { "Agent": {}, "Annotation": { - "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1": { + "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/annotation/p0001-image": { "body": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "id": "vault://6e534aac", "type": "ContentResource", }, ], - "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1", + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/annotation/p0001-image", "motivation": [ "painting", ], "target": { "source": { - "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/canvas/p1", "type": "Canvas", }, "type": "SpecificResource", }, "type": "Annotation", }, + "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/annotation/p0002-tag": { + "body": [ + { + "id": "vault://14f7ebdc", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/annotation/p0002-tag", + "motivation": [ + "tagging", + ], + "target": { + "selector": { + "region": "810,900,260,370", + "size": "2000,1271", + "type": "ImageApiSelector", + }, + "source": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", + "type": "SpecificResource", + }, + "type": "Annotation", + }, }, "AnnotationCollection": {}, "AnnotationPage": { - "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json": { + "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/page/p1/1": { "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json", - "items": [], + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/page/p1/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/annotation/p0001-image", + "type": "Annotation", + }, + ], "label": null, "metadata": [], "provider": [], @@ -22215,13 +24021,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0269-embedded-or-referenced-annota "thumbnail": [], "type": "AnnotationPage", }, - "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1": { + "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/page/p2/1": { "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1", + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/page/p2/1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1", + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/annotation/p0002-tag", "type": "Annotation", }, ], @@ -22239,22 +24045,17 @@ exports[`Cookbook > Testing normalize %p (%p) 0269-embedded-or-referenced-annota }, }, "Canvas": { - "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1": { + "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/canvas/p1": { "accompanyingCanvas": null, - "annotations": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json", - "type": "AnnotationPage", - }, - ], + "annotations": [], "behavior": [], "duration": 0, - "height": 3024, + "height": 1271, "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/canvas/p1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1", + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/page/p1/1", "type": "AnnotationPage", }, ], @@ -22272,43 +24073,94 @@ exports[`Cookbook > Testing normalize %p (%p) 0269-embedded-or-referenced-annota "summary": null, "thumbnail": [], "type": "Canvas", - "width": 4032, + "width": 2000, }, }, "Collection": {}, "ContentResource": { - "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": { + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg": { "format": "image/jpeg", - "height": 3024, - "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "height": 1271, + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", + "label": { + "en": [ + "Natural Light", + ], + }, "service": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural", "profile": "level1", "type": "ImageService3", }, ], "type": "Image", - "width": 4032, + "width": 2000, + }, + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/2000,1271/0/default.jpg": { + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/page/p2/1", + "type": "AnnotationPage", + }, + ], + "format": "image/jpeg", + "height": 1271, + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/2000,1271/0/default.jpg", + "label": { + "en": [ + "X-ray", + ], + }, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2000, + }, + "vault://14f7ebdc": { + "format": "text/plain", + "id": "vault://14f7ebdc", + "language": "en", + "type": "TextualBody", + "value": "A group of skulls.", + }, + "vault://6e534aac": { + "id": "vault://6e534aac", + "items": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", + "type": "ContentResource", + }, + { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/2000,1271/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Choice", }, }, "Manifest": { - "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json": { + "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/manifest.json": { "@context": "http://iiif.io/api/presentation/3/context.json", "accompanyingCanvas": null, "annotations": [], "behavior": [], "homepage": [], - "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/manifest.json", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/canvas/p1", "type": "Canvas", }, ], "label": { "en": [ - "Picture of Göttingen taken during the 2019 IIIF Conference", + "Choice Example with layer specific annotation", ], }, "metadata": [], @@ -22333,64 +24185,124 @@ exports[`Cookbook > Testing normalize %p (%p) 0269-embedded-or-referenced-annota "Range": {}, "Selector": {}, "Service": { - "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen": { - "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural": { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray": { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", "profile": "level1", "type": "ImageService3", }, }, }, "mapping": { - "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json": "AnnotationPage", - "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1": "Canvas", - "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1": "AnnotationPage", - "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1": "Annotation", - "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json": "Manifest", - "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/annotation/p0002-tag": "Annotation", + "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/page/p1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/page/p2/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/2000,1271/0/default.jpg": "ContentResource", + "vault://14f7ebdc": "ContentResource", + "vault://6e534aac": "ContentResource", }, "resource": { - "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/manifest.json", "type": "Manifest", }, } `; -exports[`Cookbook > Testing normalize %p (%p) 0269-embedded-or-referenced-annotations https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json 2`] = ` +exports[`Cookbook > Testing normalize %p (%p) 0326-annotating-image-layer https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/manifest.json 2`] = ` { "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json", + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/manifest.json", "items": [ { - "annotations": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json", - "type": "AnnotationPage", - }, - ], - "height": 3024, - "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", + "height": 1271, + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/canvas/p1", "items": [ { - "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1", + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/page/p1/1", "items": [ { "body": { - "format": "image/jpeg", - "height": 3024, - "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", - "service": [ + "items": [ { - "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", - "profile": "level1", - "type": "ImageService3", + "format": "image/jpeg", + "height": 1271, + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", + "label": { + "en": [ + "Natural Light", + ], + }, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2000, + }, + { + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/page/p2/1", + "items": [ + { + "body": { + "format": "text/plain", + "language": "en", + "type": "TextualBody", + "value": "A group of skulls.", + }, + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/annotation/p0002-tag", + "motivation": "tagging", + "target": { + "selector": { + "region": "810,900,260,370", + "size": "2000,1271", + "type": "ImageApiSelector", + }, + "source": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", + "type": "SpecificResource", + }, + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "format": "image/jpeg", + "height": 1271, + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/2000,1271/0/default.jpg", + "label": { + "en": [ + "X-ray", + ], + }, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 2000, }, ], - "type": "Image", - "width": 4032, + "type": "Choice", }, - "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1", + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/annotation/p0001-image", "motivation": "painting", - "target": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", + "target": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/canvas/p1", "type": "Annotation", }, ], @@ -22398,12 +24310,12 @@ exports[`Cookbook > Testing normalize %p (%p) 0269-embedded-or-referenced-annota }, ], "type": "Canvas", - "width": 4032, + "width": 2000, }, ], "label": { "en": [ - "Picture of Göttingen taken during the 2019 IIIF Conference", + "Choice Example with layer specific annotation", ], }, "type": "Manifest", diff --git a/__tests__/presentation-3-parser/__snapshots__/normalize.test.ts.snap b/__tests__/presentation-3-parser/__snapshots__/normalize.test.ts.snap new file mode 100644 index 0000000..d0ca790 --- /dev/null +++ b/__tests__/presentation-3-parser/__snapshots__/normalize.test.ts.snap @@ -0,0 +1,585 @@ +// Vitest Snapshot v1 + +exports[`normalize > normalize 1`] = ` +{ + "Agent": {}, + "Annotation": { + "https://example.org/iiif/book1/annotation/p0001-image": { + "body": [ + { + "id": "http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png", + "type": "ContentResource", + }, + ], + "id": "https://example.org/iiif/book1/annotation/p0001-image", + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://example.org/iiif/book1/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": {}, + "AnnotationPage": { + "https://example.org/iiif/book1/page/p1/1": { + "behavior": [], + "homepage": [], + "id": "https://example.org/iiif/book1/page/p1/1", + "items": [ + { + "id": "https://example.org/iiif/book1/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + }, + "Canvas": { + "https://example.org/iiif/book1/canvas/p1": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 0, + "height": 1800, + "homepage": [], + "id": "https://example.org/iiif/book1/canvas/p1", + "items": [ + { + "id": "https://example.org/iiif/book1/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 1200, + }, + }, + "Collection": {}, + "ContentResource": { + "http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png": { + "format": "image/png", + "height": 1800, + "id": "http://iiif.io/api/presentation/2.1/example/fixtures/resources/page1-full.png", + "type": "Image", + "width": 1200, + }, + "http://myhomepage.com": { + "id": "http://myhomepage.com", + "type": "ContentResource", + }, + }, + "Manifest": { + "https://example.org/iiif/book1/manifest": { + "@context": [ + "http://www.w3.org/ns/anno.jsonld", + "http://iiif.io/api/presentation/{{ page.major }}/context.json", + ], + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [ + { + "id": "http://myhomepage.com", + "type": "ContentResource", + }, + ], + "id": "https://example.org/iiif/book1/manifest", + "items": [ + { + "id": "https://example.org/iiif/book1/canvas/p1", + "type": "Canvas", + }, + ], + "label": { + "en": [ + "Image 1", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": {}, + "Selector": {}, + "Service": {}, +} +`; + +exports[`normalize > normalize full example from specification 1`] = ` +{ + "Agent": { + "https://example.org/about": { + "homepage": [ + { + "id": "https://example.org/", + "type": "ContentResource", + }, + ], + "id": "https://example.org/about", + "label": { + "en": [ + "Example Organization", + ], + }, + "logo": [ + { + "id": "https://example.org/service/inst1/full/max/0/default.png", + "type": "ContentResource", + }, + ], + "seeAlso": [ + { + "id": "https://data.example.org/about/us.jsonld", + "type": "ContentResource", + }, + ], + "type": "Agent", + }, + }, + "Annotation": {}, + "AnnotationCollection": {}, + "AnnotationPage": { + "https://example.org/iiif/book1/annotations/p1": { + "behavior": [], + "homepage": [], + "id": "https://example.org/iiif/book1/annotations/p1", + "items": [], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + }, + "Canvas": { + "https://example.org/iiif/book1/canvas/p1": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 0, + "height": 0, + "homepage": [], + "id": "https://example.org/iiif/book1/canvas/p1", + "items": [], + "label": { + "none": [ + "p. 1", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 0, + }, + "https://example.org/iiif/book1/canvas/p2": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 0, + "height": 0, + "homepage": [], + "id": "https://example.org/iiif/book1/canvas/p2", + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 0, + }, + }, + "Collection": { + "https://example.org/collections/books/": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://example.org/collections/books/", + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "summary": null, + "thumbnail": [], + "type": "Collection", + "viewingDirection": "left-to-right", + }, + }, + "ContentResource": { + "https://data.example.org/about/us.jsonld": { + "format": "application/ld+json", + "id": "https://data.example.org/about/us.jsonld", + "profile": "https://schema.org/", + "type": "Dataset", + }, + "https://example.org/": { + "format": "text/html", + "id": "https://example.org/", + "label": { + "en": [ + "Example Organization Homepage", + ], + }, + "type": "Text", + }, + "https://example.org/iiif/book1.pdf": { + "format": "application/pdf", + "id": "https://example.org/iiif/book1.pdf", + "label": { + "en": [ + "Download as PDF", + ], + }, + "type": "Text", + }, + "https://example.org/iiif/book1/page1/full/80,100/0/default.jpg": { + "format": "image/jpeg", + "id": "https://example.org/iiif/book1/page1/full/80,100/0/default.jpg", + "service": [ + { + "id": "https://example.org/iiif/book1/page1", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + }, + "https://example.org/info/book1/": { + "format": "text/html", + "id": "https://example.org/info/book1/", + "label": { + "en": [ + "Home page for Book 1", + ], + }, + "type": "Text", + }, + "https://example.org/library/catalog/book1.xml": { + "format": "text/xml", + "id": "https://example.org/library/catalog/book1.xml", + "profile": "https://example.org/profiles/bibliographic", + "type": "Dataset", + }, + "https://example.org/service/inst1/full/max/0/default.png": { + "format": "image/png", + "id": "https://example.org/service/inst1/full/max/0/default.png", + "service": [ + { + "id": "https://example.org/service/inst1", + "profile": "level2", + "type": "ImageService3", + }, + ], + "type": "Image", + }, + }, + "Manifest": { + "https://example.org/iiif/book1/manifest": { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://example.org/iiif/book1/annotations/p1", + "type": "AnnotationPage", + }, + ], + "behavior": [ + "paged", + ], + "homepage": [ + { + "id": "https://example.org/info/book1/", + "type": "ContentResource", + }, + ], + "id": "https://example.org/iiif/book1/manifest", + "items": [ + { + "id": "https://example.org/iiif/book1/canvas/p1", + "type": "Canvas", + }, + ], + "label": { + "en": [ + "Book 1", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Author", + ], + }, + "value": { + "none": [ + "Anne Author", + ], + }, + }, + { + "label": { + "en": [ + "Published", + ], + }, + "value": { + "en": [ + "Paris, circa 1400", + ], + "fr": [ + "Paris, environ 1400", + ], + }, + }, + { + "label": { + "en": [ + "Notes", + ], + }, + "value": { + "en": [ + "Text of note 1", + "Text of note 2", + ], + }, + }, + { + "label": { + "en": [ + "Source", + ], + }, + "value": { + "none": [ + "From: Some Collection", + ], + }, + }, + ], + "navDate": "1856-01-01T00:00:00Z", + "partOf": [ + { + "id": "https://example.org/collections/books/", + "type": "Collection", + }, + ], + "placeholderCanvas": null, + "provider": [ + { + "id": "https://example.org/about", + "type": "Agent", + }, + ], + "rendering": [ + { + "id": "https://example.org/iiif/book1.pdf", + "type": "ContentResource", + }, + ], + "requiredStatement": { + "label": { + "en": [ + "Attribution", + ], + }, + "value": { + "en": [ + "Provided by Example Organization", + ], + }, + }, + "rights": "http://creativecommons.org/licenses/by/4.0/", + "seeAlso": [ + { + "id": "https://example.org/library/catalog/book1.xml", + "type": "ContentResource", + }, + ], + "service": [ + { + "id": "https://example.org/service/example", + "profile": "https://example.org/docs/example-service.html", + "type": "ExampleExtensionService", + }, + ], + "services": [ + { + "@id": "https://example.org/iiif/auth/login", + "@type": "AuthCookieService1", + "label": "Login to Example Institution", + "profile": "http://iiif.io/api/auth/1/login", + "service": [ + { + "@id": "https://example.org/iiif/auth/token", + "@type": "AuthTokenService1", + "profile": "http://iiif.io/api/auth/1/token", + }, + ], + }, + ], + "start": { + "selector": undefined, + "source": { + "id": "https://example.org/iiif/book1/canvas/p2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "structures": [ + { + "id": "https://example.org/iiif/book1/range/top", + "type": "Range", + }, + ], + "summary": { + "en": [ + "Book 1, written by Anne Author, published in Paris around 1400.", + ], + }, + "thumbnail": [ + { + "id": "https://example.org/iiif/book1/page1/full/80,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Manifest", + "viewingDirection": "right-to-left", + }, + }, + "Range": { + "https://example.org/iiif/book1/range/top": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://example.org/iiif/book1/range/top", + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + }, + "Selector": {}, + "Service": { + "https://example.org/iiif/auth/login": { + "@id": "https://example.org/iiif/auth/login", + "@type": "AuthCookieService1", + "id": "https://example.org/iiif/auth/login", + "label": "Login to Example Institution", + "profile": "http://iiif.io/api/auth/1/login", + "service": [ + { + "id": "https://example.org/iiif/auth/token", + "type": "AuthTokenService1", + }, + ], + "type": "AuthCookieService1", + }, + "https://example.org/iiif/auth/token": { + "@id": "https://example.org/iiif/auth/token", + "@type": "AuthTokenService1", + "id": "https://example.org/iiif/auth/token", + "profile": "http://iiif.io/api/auth/1/token", + "type": "AuthTokenService1", + }, + "https://example.org/service/example": { + "id": "https://example.org/service/example", + "profile": "https://example.org/docs/example-service.html", + "type": "ExampleExtensionService", + }, + }, +} +`; diff --git a/__tests__/presentation-3-parser/cookbook.tests.ts b/__tests__/presentation-3-parser/cookbook.tests.ts index a990edb..9a79755 100644 --- a/__tests__/presentation-3-parser/cookbook.tests.ts +++ b/__tests__/presentation-3-parser/cookbook.tests.ts @@ -5,8 +5,8 @@ import { join } from 'path'; const { readFile } = promises; import { normalize, serialize, serializeConfigPresentation3 } from '../../src/presentation-3'; -const prWaitingForMerge = [ - '0219-using-caption-file', // https://github.com/IIIF/cookbook-recipes/pull/340 +const prWaitingForMerge: string[] = [ + // '0219-using-caption-file', // https://github.com/IIIF/cookbook-recipes/pull/340 ]; describe('Cookbook', function () { @@ -31,18 +31,11 @@ describe('Cookbook', function () { result.resource, serializeConfigPresentation3 ); - expect( - serialize( - { - mapping: result.mapping, - entities: result.entities, - requests: {}, - }, - result.resource, - serializeConfigPresentation3 - ) - ).toMatchSnapshot(); + expect(reserialized).toMatchSnapshot(); expect(reserialized).toEqual(original); + + // Immutability: + // expect(manifest).toEqual(original); }); }); diff --git a/__tests__/presentation-3-parser/iiif-traverse-test.ts b/__tests__/presentation-3-parser/iiif-traverse.test.ts similarity index 100% rename from __tests__/presentation-3-parser/iiif-traverse-test.ts rename to __tests__/presentation-3-parser/iiif-traverse.test.ts diff --git a/__tests__/presentation-3-parser/normalize-test.ts b/__tests__/presentation-3-parser/normalize.test.ts similarity index 96% rename from __tests__/presentation-3-parser/normalize-test.ts rename to __tests__/presentation-3-parser/normalize.test.ts index 70d6e56..c0e4bdd 100644 --- a/__tests__/presentation-3-parser/normalize-test.ts +++ b/__tests__/presentation-3-parser/normalize.test.ts @@ -4,6 +4,7 @@ import manifestFixture from '../../fixtures/2-to-3-converted/manifests/iiif.io__ import blManifestWithRanges from '../../fixtures/presentation-3/bl-ranges.json'; import p2ManifestWithStart from '../../fixtures/presentation-2/bl-manifest.json'; import manifestWithStartFixture from '../../fixtures/presentation-3/start-canvas.json'; +import manifestExhibition from '../../fixtures/presentation-3/exhibition-1.json'; import { Manifest } from '@iiif/presentation-3'; describe('normalize', () => { @@ -309,12 +310,12 @@ describe('normalize', () => { expect(range.type).toEqual('Range'); expect(range.items[0].type).toEqual('SpecificResource'); expect(range.items[0]).toMatchInlineSnapshot(` - Object { - "selector": Object { + { + "selector": { "type": "FragmentSelector", "value": "t=0,1398.84", }, - "source": Object { + "source": { "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b", "type": "Canvas", }, @@ -333,9 +334,9 @@ describe('normalize', () => { const result = normalize(p3manifest); expect(((result.entities.Manifest as any)[p3manifest.id] as Manifest).start).toMatchInlineSnapshot(` - Object { + { "selector": undefined, - "source": Object { + "source": { "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100022545254.0x000002", "type": "Canvas", }, @@ -357,4 +358,13 @@ describe('normalize', () => { height: 4612, }); }); + + test('normalize complex manifest', () => { + const db = normalize(manifestExhibition) as any; + + // expect(db.entities.Canvas) + const canvas = + db.entities.Annotation['https://heritage.tudelft.nl/iiif/inventing-creativity/annotation/92fab8fb-2fff-9abe-f901-f07122318a1c']; + // console.log(canvas); + }); }); diff --git a/__tests__/presentation-3-parser/serializer-test.ts b/__tests__/presentation-3-parser/serializer.test.ts similarity index 99% rename from __tests__/presentation-3-parser/serializer-test.ts rename to __tests__/presentation-3-parser/serializer.test.ts index 4c153e5..7a7e82a 100644 --- a/__tests__/presentation-3-parser/serializer-test.ts +++ b/__tests__/presentation-3-parser/serializer.test.ts @@ -219,7 +219,6 @@ describe('serializer', () => { "annotations": [ { "id": "https://example.org/iiif/book1/annotations/p1", - "items": [], "type": "AnnotationPage", }, ], diff --git a/__tests__/presentation-3-parser/utilities.test.ts b/__tests__/presentation-3-parser/utilities.test.ts index 22a1d9a..1fe9c34 100644 --- a/__tests__/presentation-3-parser/utilities.test.ts +++ b/__tests__/presentation-3-parser/utilities.test.ts @@ -51,4 +51,23 @@ describe('Misc Utilites', function () { } `); }); + + test('compressSpecificResource (single content resource)', () => { + const state: SpecificResource = { + type: 'SpecificResource', + source: { + id: 'https://exameple.org/link-to-something', + type: 'ContentResource', + }, + }; + + const compressed = compressSpecificResource(state, { allowSourceString: true, allowString: false }); + + expect(compressed).toMatchInlineSnapshot(` + { + "source": "https://exameple.org/link-to-something", + "type": "SpecificResource", + } + `); + }); }); diff --git a/fixtures/cookbook/0001-mvm-image.json b/fixtures/cookbook/0001-mvm-image.json index 03b10fc..e7008fa 100644 --- a/fixtures/cookbook/0001-mvm-image.json +++ b/fixtures/cookbook/0001-mvm-image.json @@ -4,7 +4,7 @@ "type": "Manifest", "label": { "en": [ - "Image 1" + "Single Image Example" ] }, "items": [ diff --git a/fixtures/cookbook/0002-mvm-audio.json b/fixtures/cookbook/0002-mvm-audio.json index c2d41ac..8927b42 100644 --- a/fixtures/cookbook/0002-mvm-audio.json +++ b/fixtures/cookbook/0002-mvm-audio.json @@ -27,7 +27,7 @@ "format": "audio/mp4", "duration": 1985.024 }, - "target": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page" + "target": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas" } ] } diff --git a/fixtures/cookbook/0010-book-2-viewing-direction-manifest-rtl b/fixtures/cookbook/0010-book-2-viewing-direction-manifest-rtl deleted file mode 100644 index 3e60f37..0000000 --- a/fixtures/cookbook/0010-book-2-viewing-direction-manifest-rtl +++ /dev/null @@ -1,213 +0,0 @@ -{ - "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json", - "type": "Manifest", - "label": { - "en": [ - "Book with Right-to-Left Viewing Direction" - ] - }, - "summary": { - "en": [ - "Playbill for \"Akiba gongen kaisen-banashi,\" \"Futatsu chōchō kuruwa nikki\" and \"Godairiki koi no fūjime\" performed at the Chikugo Theater in Osaka from the fifth month of Kaei 2 (May, 1849); main actors: Gadō Kataoka II, Ebizō Ichikawa VI, Kitō Sawamura II, Daigorō Mimasu IV and Karoku Nakamura I; on front cover: producer Mominosuke Ichikawa's crest." - ] - }, - "viewingDirection": "right-to-left", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1", - "type": "Canvas", - "label": { - "en": [ - "front cover" - ] - }, - "width": 3497, - "height": 4823, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p1/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0001-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 4823, - "width": 3497, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_001", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2", - "type": "Canvas", - "label": { - "en": [ - "pages 1–2" - ] - }, - "width": 6062, - "height": 4804, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p2/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0002-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 6062, - "height": 4804, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_002", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3", - "type": "Canvas", - "label": { - "en": [ - "pages 3–4" - ] - }, - "width": 6127, - "height": 4776, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p3/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0003-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 6127, - "height": 4776, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_003", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4", - "type": "Canvas", - "label": { - "en": [ - "pages 5–6" - ] - }, - "width": 6124, - "height": 4751, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p4/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0004-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 6124, - "height": 4751, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_004", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5", - "type": "Canvas", - "label": { - "en": [ - "back cover" - ] - }, - "width": 3510, - "height": 4808, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p5/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0005-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 3510, - "height": 4808, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/4f92cceb12dd53b52433425ce44308c7-ucla_bib1987273_no001_rs_005", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/fixtures/cookbook/0010-book-2-viewing-direction-manifest-ttb b/fixtures/cookbook/0010-book-2-viewing-direction-manifest-ttb deleted file mode 100644 index cb12739..0000000 --- a/fixtures/cookbook/0010-book-2-viewing-direction-manifest-ttb +++ /dev/null @@ -1,174 +0,0 @@ -{ - "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json", - "type": "Manifest", - "label": { - "en": [ - "Diary with Top-to-Bottom Viewing Direction" - ] - }, - "summary": { - "en": [ - "William Lewis Sachtleben was an American long-distance cyclist who rode across Asia from Istanbul to Peking in 1891 to 1892 with Thomas Gaskell Allen Jr., his classmate from Washington University. This was part of a longer journey that began the day after they had graduated from college, when they travelled to New York and on to Liverpool; in all they travelled 15,044 miles by bicycle, 'the longest continuous land journey ever made around the world' as reported in their book Across Asia on a bicycle (1895). Sachtleben documented his travels with photographs and diaries, the latter of which he numbered sequentially. The diary of notebook 'No. 10' covers a portion of their journey through the Armenian area of Turkey from April 12 to May 9 (there is a 2-page reading list at the end). During this time they rode from Ankara (Angora in the diary) to Sivas, where they stayed for ten days while Allen had a bout of typhoid fever, and the first half of a ten-day excursion to Merzifon (Mersovan in the diary), taken by Sachtleben to give Allen additional time to recover." - ] - }, - "viewingDirection": "top-to-bottom", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1", - "type": "Canvas", - "label": { - "en": [ - "image 1" - ] - }, - "width": 2251, - "height": 3152, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v1/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 2251, - "height": 3152, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_02", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2", - "type": "Canvas", - "label": { - "en": [ - "image 2" - ] - }, - "width": 2268, - "height": 3135, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v2/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0002-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 2268, - "height": 3135, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_03", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3", - "type": "Canvas", - "label": { - "en": [ - "image 3" - ] - }, - "width": 2274, - "height": 3135, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v3/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0003-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 2274, - "height": 3135, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_04", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4", - "type": "Canvas", - "label": { - "en": [ - "image 4" - ] - }, - "width": 2268, - "height": 3135, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v4/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0004-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 2268, - "height": 3135, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/9ee11092dfd2782634f5e8e2c87c16d5-uclamss_1841_diary_07_05", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/fixtures/cookbook/0011-book-3-behavior-manifest-continuous b/fixtures/cookbook/0011-book-3-behavior-manifest-continuous deleted file mode 100644 index 6430ccb..0000000 --- a/fixtures/cookbook/0011-book-3-behavior-manifest-continuous +++ /dev/null @@ -1,171 +0,0 @@ -{ - "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json", - "type": "Manifest", - "label": { - "gez": [ - "Ms. 21 Māzemurā Dāwit, Asmat [መዝሙረ ዳዊት]" - ] - }, - "behavior": [ - "continuous" - ], - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1", - "type": "Canvas", - "label": { - "en": [ - "Section 1 [Recto]" - ] - }, - "width": 11368, - "height": 1592, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s1/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0001-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 11368, - "height": 1592, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmd9_1300412_master", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2", - "type": "Canvas", - "label": { - "en": [ - "Section 2 [Recto]" - ] - }, - "width": 11608, - "height": 1536, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s2/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0002-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 11608, - "height": 1536, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmft_1300418_master", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3", - "type": "Canvas", - "label": { - "en": [ - "Section 3 [Recto]" - ] - }, - "width": 10576, - "height": 1504, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s3/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0003-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 10576, - "height": 1504, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmgb_1300426_master", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4", - "type": "Canvas", - "label": { - "en": [ - "Section 4 [Recto]" - ] - }, - "width": 2488, - "height": 1464, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s4/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0004-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 2488, - "height": 1464, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/8c169124171e6b2253b698a22a938f07-21198-zz001hbmhv_1300436_master", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/fixtures/cookbook/0011-book-3-behavior-manifest-individuals b/fixtures/cookbook/0011-book-3-behavior-manifest-individuals deleted file mode 100644 index c43ce03..0000000 --- a/fixtures/cookbook/0011-book-3-behavior-manifest-individuals +++ /dev/null @@ -1,171 +0,0 @@ -{ - "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json", - "type": "Manifest", - "label": { - "ca": [ - "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466." - ] - }, - "behavior": [ - "individuals" - ], - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1", - "type": "Canvas", - "label": { - "en": [ - "inside cover; 1r" - ] - }, - "width": 3375, - "height": 2250, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v1/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 3375, - "height": 2250, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2", - "type": "Canvas", - "label": { - "en": [ - "2v, 3r" - ] - }, - "width": 3375, - "height": 2250, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v2/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0002-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 3375, - "height": 2250, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-1-21198-zz00022882-1-master", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3", - "type": "Canvas", - "label": { - "en": [ - "3v, 4r" - ] - }, - "width": 3375, - "height": 2250, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v3/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0003-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 3375, - "height": 2250, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-2-21198-zz000228b3-1-master", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4", - "type": "Canvas", - "label": { - "en": [ - "4v, 5r" - ] - }, - "width": 3375, - "height": 2250, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v4/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0004-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 3375, - "height": 2250, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-3-21198-zz000228d4-1-master", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/fixtures/cookbook/0019-html-in-annotations.json b/fixtures/cookbook/0019-html-in-annotations.json new file mode 100644 index 0000000..f16c187 --- /dev/null +++ b/fixtures/cookbook/0019-html-in-annotations.json @@ -0,0 +1,66 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1", + "type": "Canvas", + "height": 3024, + "width": 4032, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1/anno-1", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 3024, + "width": 4032, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1" + } + ] + } + ], + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2/anno-1", + "type": "Annotation", + "motivation": "commenting", + "body": { + "type": "TextualBody", + "language": "de", + "format": "text/html", + "value": "

Göttinger Marktplatz mit Gänseliesel Brunnen Wikipedia logo

" + }, + "target": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0030-multi-volume-collection b/fixtures/cookbook/0030-multi-volume-collection deleted file mode 100644 index 0854aa1..0000000 --- a/fixtures/cookbook/0030-multi-volume-collection +++ /dev/null @@ -1,33 +0,0 @@ -{ - "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json", - "type": "Collection", - "label": { - "jp": [ - "青楼絵本年中行事 [Seirō ehon nenjū gyōji]" - ] - }, - "behavior": [ - "multi-part" - ], - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", - "type": "Manifest", - "label": { - "jp": [ - "巻 1 [Vol. 1]" - ] - } - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", - "type": "Manifest", - "label": { - "jp": [ - "巻 2 [Vol. 2]" - ] - } - } - ] -} \ No newline at end of file diff --git a/fixtures/cookbook/0030-multi-volume-manifest_v1 b/fixtures/cookbook/0030-multi-volume-manifest_v1 deleted file mode 100644 index 004ca15..0000000 --- a/fixtures/cookbook/0030-multi-volume-manifest_v1 +++ /dev/null @@ -1,211 +0,0 @@ -{ - "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", - "type": "Manifest", - "label": { - "en": [ - "Seirō ehon nenjū gyōji : kan 1 | 青楼絵本年中行事 : 巻 1" - ] - }, - "behavior": [ - "individuals" - ], - "viewingDirection": "right-to-left", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", - "type": "Canvas", - "label": { - "en": [ - "Front cover" - ] - }, - "height": 5730, - "width": 4301, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 5730, - "width": 4301, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_001", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", - "type": "Canvas", - "label": { - "en": [ - "Page spread 1" - ] - }, - "height": 5702, - "width": 7451, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 5702, - "width": 7451, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_002", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", - "type": "Canvas", - "label": { - "en": [ - "Page spread 2" - ] - }, - "height": 5702, - "width": 7451, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 5702, - "width": 7451, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_003", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", - "type": "Canvas", - "label": { - "en": [ - "Page spread 3" - ] - }, - "height": 5702, - "width": 7451, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 5702, - "width": 7451, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_007", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", - "type": "Canvas", - "label": { - "en": [ - "Page spread 4" - ] - }, - "height": 5702, - "width": 7451, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 5702, - "width": 7451, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/5b0b39c2bf5591d21d807f9aadb437fa-uclaeal_wahon_A06_bib1974505_vol01_008", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/fixtures/cookbook/0030-multi-volume-manifest_v2 b/fixtures/cookbook/0030-multi-volume-manifest_v2 deleted file mode 100644 index d169872..0000000 --- a/fixtures/cookbook/0030-multi-volume-manifest_v2 +++ /dev/null @@ -1,211 +0,0 @@ -{ - "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", - "type": "Manifest", - "label": { - "en": [ - "Seirō ehon nenjū gyōji : kan 2 | 青楼絵本年中行事 : 巻 2" - ] - }, - "behavior": [ - "individuals" - ], - "viewingDirection": "right-to-left", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", - "type": "Canvas", - "label": { - "en": [ - "Front cover" - ] - }, - "height": 5745, - "width": 4114, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 5745, - "width": 4114, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_001", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", - "type": "Canvas", - "label": { - "en": [ - "Page spread 1" - ] - }, - "height": 5745, - "width": 7253, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 5745, - "width": 7253, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_002", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", - "type": "Canvas", - "label": { - "en": [ - "Page spread 2" - ] - }, - "height": 5745, - "width": 7253, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 5745, - "width": 7253, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_003", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", - "type": "Canvas", - "label": { - "en": [ - "Page spread 3" - ] - }, - "height": 5745, - "width": 7253, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 5745, - "width": 7253, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_004", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4" - } - ] - } - ] - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", - "type": "Canvas", - "label": { - "en": [ - "Page spread 4" - ] - }, - "height": 5745, - "width": 7253, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 5745, - "width": 7253, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/ecbc73b7cd459faf609e54eb4305da1f-uclaeal_wahon_A06_bib1974505_vol02_005", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/fixtures/cookbook/0040-image-rotation-service-manifest-css b/fixtures/cookbook/0040-image-rotation-service-manifest-css deleted file mode 100644 index dfbd4ea..0000000 --- a/fixtures/cookbook/0040-image-rotation-service-manifest-css +++ /dev/null @@ -1,59 +0,0 @@ -{ - "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json", - "type": "Manifest", - "label": { - "ca": [ - "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466." - ] - }, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", - "type": "Canvas", - "label": { - "en": [ - "inside cover; 1r" - ] - }, - "width": 2105, - "height": 1523, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", - "type": "Annotation", - "motivation": "painting", - "stylesheet": { - "type": "CssStylesheet", - "value": ".rotated { transform-origin: center; transform: rotate(90deg); }" - }, - "body": { - "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/sr1", - "type": "SpecificResource", - "styleClass": "rotated", - "source": { - "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", - "format": "image/jpeg", - "width": 1523, - "height": 2105, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-master", - "type": "ImageService3", - "profile": "level1" - } - ] - } - }, - "target": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/fixtures/cookbook/0040-image-rotation-service-manifest-css.json b/fixtures/cookbook/0040-image-rotation-service-manifest-css.json index dfbd4ea..3afffbc 100644 --- a/fixtures/cookbook/0040-image-rotation-service-manifest-css.json +++ b/fixtures/cookbook/0040-image-rotation-service-manifest-css.json @@ -37,6 +37,7 @@ "styleClass": "rotated", "source": { "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", + "type": "Image", "format": "image/jpeg", "width": 1523, "height": 2105, diff --git a/fixtures/cookbook/0040-image-rotation-service-manifest-service b/fixtures/cookbook/0040-image-rotation-service-manifest-service deleted file mode 100644 index b606027..0000000 --- a/fixtures/cookbook/0040-image-rotation-service-manifest-service +++ /dev/null @@ -1,60 +0,0 @@ -{ - "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json ", - "type": "Manifest", - "label": { - "ca": [ - "[Conoximent de las orines] Ihesus, Ihesus. En nom de Deu et dela beneyeta sa mare e de tots los angels i archangels e de tots los sants e santes de paradis yo micer Johannes comense aquest libre de reseptes en l’ayn Mi 466." - ] - }, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", - "type": "Canvas", - "label": { - "en": [ - "inside cover; 1r" - ] - }, - "width": 2105, - "height": 1523, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/body/v0001-image", - "type": "SpecificResource", - "source": { - "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "width": 1523, - "height": 2105, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/85a96c630f077e6ac6cb984f1b752bbf-0-21198-zz00022840-1-page1", - "type": "ImageService3", - "profile": "level1" - } - ] - }, - "selector": { - "@context": "http://iiif.io/api/annex/openannotation/context.json", - "type": "iiif:ImageApiSelector", - "rotation": "90" - } - }, - "target": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/fixtures/cookbook/0047-homepage.json b/fixtures/cookbook/0047-homepage.json new file mode 100644 index 0000000..4708c7f --- /dev/null +++ b/fixtures/cookbook/0047-homepage.json @@ -0,0 +1,66 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/manifest.json", + "type": "Manifest", + "label": { + "none": [ + "Laocöon" + ] + }, + "homepage": [ + { + "id": "https://www.getty.edu/art/collection/object/103RQQ", + "type": "Text", + "label": { + "en": [ + "Home page at the Getty Museum Collection" + ] + }, + "format": "text/html", + "language": [ + "en" + ] + } + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1", + "type": "Canvas", + "label": { + "none": [ + "Front" + ] + }, + "height": 3000, + "width": 2315, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1/page/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1/page/1/annotation/1", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/!500,500/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "service": [ + { + "@id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", + "@type": "ImageService3", + "profile": "http://iiif.io/api/image/2/level1.json" + } + ], + "height": 3000, + "width": 2315 + }, + "target": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0118_multivalue.json b/fixtures/cookbook/0118_multivalue.json index 8b7c64d..7648c1e 100644 --- a/fixtures/cookbook/0118_multivalue.json +++ b/fixtures/cookbook/0118_multivalue.json @@ -1,6 +1,6 @@ { "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://example.org/iiif/text-language/manifest", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/manifest.json", "type": "Manifest", "label": { "fr": [ @@ -33,17 +33,17 @@ }, "items": [ { - "id": "https://example.org/iiif/text-language/canvas1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1", "type": "Canvas", "width": 1114, "height": 991, "items": [ { - "id": "https://example.org/iiif/text-language/canvas1/page1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1", "type": "AnnotationPage", "items": [ { - "id": "https://example.org/iiif/text-language/canvas1/page1/annotation1", + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1/annotation/1", "type": "Annotation", "motivation": "painting", "body": { @@ -51,7 +51,7 @@ "type": "Image", "format": "image/jpeg" }, - "target": "https://example.org/iiif/text-language/canvas1" + "target": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1" } ] } diff --git a/fixtures/cookbook/0219-using-caption-file.json b/fixtures/cookbook/0219-using-caption-file.json index e881c6c..3c00b24 100644 --- a/fixtures/cookbook/0219-using-caption-file.json +++ b/fixtures/cookbook/0219-using-caption-file.json @@ -23,16 +23,14 @@ "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page/annotation1", "type": "Annotation", "motivation": "painting", - "body": [ - { - "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4", - "type": "Video", - "height": 360, - "width": 480, - "duration": 572.034, - "format": "video/mp4" - } - ], + "body": { + "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/high/lunchroom_manners_1024kb.mp4", + "type": "Video", + "height": 360, + "width": 480, + "duration": 572.034, + "format": "video/mp4" + }, "target": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas" } ] @@ -47,19 +45,17 @@ "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2/a1", "type": "Annotation", "motivation": "supplementing", - "body": [ - { - "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/lunchroom_manners.vtt", - "type": "Text", - "format": "text/vtt", - "label": { - "en": [ - "Captions in WebVTT format" - ] - }, - "language": "en" - } - ], + "body": { + "id": "https://fixtures.iiif.io/video/indiana/lunchroom_manners/lunchroom_manners.vtt", + "type": "Text", + "format": "text/vtt", + "label": { + "en": [ + "Captions in WebVTT format" + ] + }, + "language": "en" + }, "target": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas" } ] diff --git a/fixtures/cookbook/0230-navdate-navdate-collection b/fixtures/cookbook/0230-navdate-navdate-collection deleted file mode 100644 index 9c25cd7..0000000 --- a/fixtures/cookbook/0230-navdate-navdate-collection +++ /dev/null @@ -1,48 +0,0 @@ -{ - "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json", - "type": "Collection", - "label": { - "en": [ - "Chesapeake and Ohio Canal map and guide pamphlets" - ] - }, - "thumbnail": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 300, - "width": 221, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674", - "profile": "level1", - "type": "ImageService3" - } - ] - } - ], - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", - "type": "Manifest", - "label": { - "en": [ - "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide" - ] - }, - "navDate": "1986-01-01T00:00:00+00:00" - }, - { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", - "type": "Manifest", - "label": { - "en": [ - "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide" - ] - }, - "navDate": "1987-01-01T00:00:00+00:00" - } - ] -} \ No newline at end of file diff --git a/fixtures/cookbook/0230-navdate-navdate_map_1-manifest b/fixtures/cookbook/0230-navdate-navdate_map_1-manifest deleted file mode 100644 index 935bed2..0000000 --- a/fixtures/cookbook/0230-navdate-navdate_map_1-manifest +++ /dev/null @@ -1,52 +0,0 @@ -{ - "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", - "type": "Manifest", - "label": { - "en": [ - "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide" - ] - }, - "navDate": "1987-01-01T00:00:00+00:00", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", - "type": "Canvas", - "label": { - "en": [ - "1987 Map, recto and verso, with a date of publication" - ] - }, - "height": 7072, - "width": 5212, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 7072, - "width": 5212, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-88695674/", - "profile": "level1", - "type": "ImageService3" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/fixtures/cookbook/0230-navdate-navdate_map_2-manifest b/fixtures/cookbook/0230-navdate-navdate_map_2-manifest deleted file mode 100644 index e2c9a30..0000000 --- a/fixtures/cookbook/0230-navdate-navdate_map_2-manifest +++ /dev/null @@ -1,52 +0,0 @@ -{ - "@context": "http://iiif.io/api/presentation/3/context.json", - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", - "type": "Manifest", - "label": { - "en": [ - "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide" - ] - }, - "navDate": "1986-01-01T00:00:00+00:00", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", - "type": "Canvas", - "label": { - "en": [ - "1986 Map, recto and verso, with a date of publication" - ] - }, - "height": 1765, - "width": 1286, - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", - "type": "AnnotationPage", - "items": [ - { - "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", - "type": "Annotation", - "motivation": "painting", - "body": { - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/full/max/0/default.jpg", - "type": "Image", - "format": "image/jpeg", - "height": 1765, - "width": 1286, - "service": [ - { - "id": "https://iiif.io/api/image/3.0/example/reference/43153e2ec7531f14dd1c9b2fc401678a-87691274-1986/", - "profile": "level1", - "type": "ImageService3" - } - ] - }, - "target": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1" - } - ] - } - ] - } - ] -} \ No newline at end of file diff --git a/fixtures/cookbook/0240-navPlace-on-canvases.json b/fixtures/cookbook/0240-navPlace-on-canvases.json new file mode 100644 index 0000000..00c407d --- /dev/null +++ b/fixtures/cookbook/0240-navPlace-on-canvases.json @@ -0,0 +1,144 @@ +{ + "@context": [ + "http://iiif.io/api/extension/navplace/context.json", + "http://iiif.io/api/presentation/3/context.json" + ], + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Laocöon, geolocated sculpture and painting." + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1", + "type": "Canvas", + "height": 3000, + "width": 2315, + "label": { + "en": [ + "Front of Bronze" + ] + }, + "navPlace": { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature-collection/1", + "type": "FeatureCollection", + "features": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature/1", + "type": "Feature", + "properties": { + "label": { + "en": [ + "Current Location of the Laocoön Bronze" + ], + "it": [ + "Ubicazione attuale del Bronzo Laocoonte e i suoi figli" + ] + } + }, + "geometry": { + "type": "Point", + "coordinates": [ + -118.4745559, + 34.0776376 + ] + } + } + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/1", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpg", + "height": 3000, + "width": 2315, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/28473c77da3deebe4375c3a50572d9d3-laocoon", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1" + } + ] + } + ] + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2", + "type": "Canvas", + "height": 3259, + "width": 4096, + "label": { + "en": [ + "Painting" + ] + }, + "navPlace": { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature-collection/2", + "type": "FeatureCollection", + "features": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/feature/2", + "type": "Feature", + "properties": { + "label": { + "en": [ + "Current Location of Painting" + ] + } + }, + "geometry": { + "type": "Point", + "coordinates": [ + -77.0199025, + 38.8920717 + ] + } + } + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/2", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/2", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpg", + "height": 3259, + "width": 4096, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/58763298b61c2a99f78ff94d8364c639-laocoon_1946_18_1", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0258-tagging-external-resource.json b/fixtures/cookbook/0258-tagging-external-resource.json index c46fb70..d72ab65 100644 --- a/fixtures/cookbook/0258-tagging-external-resource.json +++ b/fixtures/cookbook/0258-tagging-external-resource.json @@ -57,7 +57,7 @@ }, { "type": "TextualBody", - "value": "Gänsenliesel-Brunnen", + "value": "Gänseliesel-Brunnen", "format": "text/plain", "language": "de" } diff --git a/fixtures/cookbook/0261-non-rectangular-commenting.json b/fixtures/cookbook/0261-non-rectangular-commenting.json index 10a063e..c517ad2 100644 --- a/fixtures/cookbook/0261-non-rectangular-commenting.json +++ b/fixtures/cookbook/0261-non-rectangular-commenting.json @@ -52,7 +52,7 @@ "motivation": "tagging", "body": { "type": "TextualBody", - "value": "Gänsenliessel-Brunnen", + "value": "Gänseliesel-Brunnen", "language": "de", "format": "text/plain" }, diff --git a/fixtures/cookbook/0299-region.json b/fixtures/cookbook/0299-region.json new file mode 100644 index 0000000..7e56992 --- /dev/null +++ b/fixtures/cookbook/0299-region.json @@ -0,0 +1,55 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0299-region/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Berliner Tageblatt article, 'Ein neuer Sicherungsplan?'" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0299-region/canvas/p1", + "type": "Canvas", + "height": 2080, + "width": 1768, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0299-region/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0299-region/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "id": "https://iiif.io/api/cookbook/recipe/0299-region/body/b1", + "type": "SpecificResource", + "source": { + "id": "https://iiif.io/api/image/3.0/example/reference/4ce82cef49fb16798f4c2440307c3d6f-newspaper-p2/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 4999, + "width": 3536, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4ce82cef49fb16798f4c2440307c3d6f-newspaper-p2", + "profile": "level1", + "type": "ImageService3" + } + ] + }, + "selector": { + "@context": "http://iiif.io/api/annex/openannotation/context.json", + "type": "iiif:ImageApiSelector", + "region": "1768,2423,1768,2080" + } + }, + "target": "https://iiif.io/api/cookbook/recipe/0299-region/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/0326-annotating-image-layer.json b/fixtures/cookbook/0326-annotating-image-layer.json new file mode 100644 index 0000000..c610ca6 --- /dev/null +++ b/fixtures/cookbook/0326-annotating-image-layer.json @@ -0,0 +1,103 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/manifest.json", + "type": "Manifest", + "label": { + "en": [ + "Choice Example with layer specific annotation" + ] + }, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/canvas/p1", + "type": "Canvas", + "height": 1271, + "width": 2000, + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/page/p1/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/annotation/p0001-image", + "type": "Annotation", + "motivation": "painting", + "body": { + "type": "Choice", + "items": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural/full/max/0/default.jpg", + "type": "Image", + "label": { + "en": [ + "Natural Light" + ] + }, + "format": "image/jpeg", + "height": 1271, + "width": 2000, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-natural", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/2000,1271/0/default.jpg", + "type": "Image", + "label": { + "en": [ + "X-ray" + ] + }, + "format": "image/jpeg", + "height": 1271, + "width": 2000, + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", + "type": "ImageService3", + "profile": "level1" + } + ], + "annotations": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/page/p2/1", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/annotation/p0002-tag", + "type": "Annotation", + "motivation": "tagging", + "body": { + "type": "TextualBody", + "value": "A group of skulls.", + "language": "en", + "format": "text/plain" + }, + "target": { + "type": "SpecificResource", + "source": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray", + "selector": { + "type": "ImageApiSelector", + "region": "810,900,260,370", + "size": "2000,1271" + } + } + } + ] + } + ] + } + ] + }, + "target": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/canvas/p1" + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/fixtures/cookbook/_index.json b/fixtures/cookbook/_index.json index db2d8aa..02f5e18 100644 --- a/fixtures/cookbook/_index.json +++ b/fixtures/cookbook/_index.json @@ -23,6 +23,14 @@ "id": "0009-book-1", "url": "https://iiif.io/api/cookbook/recipe/0009-book-1/manifest.json" }, + "0019-html-in-annotations": { + "id": "0019-html-in-annotations", + "url": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/manifest.json" + }, + "0299-region": { + "id": "0299-region", + "url": "https://iiif.io/api/cookbook/recipe/0299-region/manifest.json" + }, "0007-string-formats": { "id": "0007-string-formats", "url": "https://iiif.io/api/cookbook/recipe/0007-string-formats/manifest.json" @@ -51,6 +59,10 @@ "id": "0046-rendering", "url": "https://iiif.io/api/cookbook/recipe/0046-rendering/manifest.json" }, + "0047-homepage": { + "id": "0047-homepage", + "url": "https://iiif.io/api/cookbook/recipe/0047-homepage/manifest.json" + }, "0053-seeAlso": { "id": "0053-seeAlso", "url": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/manifest.json" @@ -139,6 +151,10 @@ "id": "0269-embedded-or-referenced-annotations", "url": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/manifest.json" }, + "0326-annotating-image-layer": { + "id": "0326-annotating-image-layer", + "url": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/manifest.json" + }, "0139-geolocate-canvas-fragment": { "id": "0139-geolocate-canvas-fragment", "url": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/manifest.json" @@ -147,46 +163,50 @@ "id": "0154-geo-extension", "url": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/manifest.json" }, + "0240-navPlace-on-canvases": { + "id": "0240-navPlace-on-canvases", + "url": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/manifest.json" + }, "0010-book-2-viewing-direction-manifest-rtl": { "id": "0010-book-2-viewing-direction-manifest-rtl", "url": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-rtl.json" }, - "0230-navdate-navdate-collection": { - "id": "0230-navdate-navdate-collection", - "url": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json" - }, - "0040-image-rotation-service-manifest-service": { - "id": "0040-image-rotation-service-manifest-service", - "url": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json" - }, "0011-book-3-behavior-manifest-continuous": { "id": "0011-book-3-behavior-manifest-continuous", "url": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-continuous.json" }, + "0230-navdate-navdate-collection": { + "id": "0230-navdate-navdate-collection", + "url": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate-collection.json" + }, "0030-multi-volume-collection": { "id": "0030-multi-volume-collection", "url": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/collection.json" }, + "0040-image-rotation-service-manifest-service": { + "id": "0040-image-rotation-service-manifest-service", + "url": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-service.json" + }, "0010-book-2-viewing-direction-manifest-ttb": { "id": "0010-book-2-viewing-direction-manifest-ttb", "url": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/manifest-ttb.json" }, - "0230-navdate-navdate_map_2-manifest": { - "id": "0230-navdate-navdate_map_2-manifest", - "url": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json" - }, - "0040-image-rotation-service-manifest-css": { - "id": "0040-image-rotation-service-manifest-css", - "url": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json" - }, "0011-book-3-behavior-manifest-individuals": { "id": "0011-book-3-behavior-manifest-individuals", "url": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/manifest-individuals.json" }, + "0230-navdate-navdate_map_2-manifest": { + "id": "0230-navdate-navdate_map_2-manifest", + "url": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json" + }, "0030-multi-volume-manifest_v1": { "id": "0030-multi-volume-manifest_v1", "url": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json" }, + "0040-image-rotation-service-manifest-css": { + "id": "0040-image-rotation-service-manifest-css", + "url": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/manifest-css.json" + }, "0230-navdate-navdate_map_1-manifest": { "id": "0230-navdate-navdate_map_1-manifest", "url": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json" diff --git a/fixtures/presentation-2/wellcome-collection.json b/fixtures/presentation-2/wellcome-collection.json new file mode 100644 index 0000000..cfeda7b --- /dev/null +++ b/fixtures/presentation-2/wellcome-collection.json @@ -0,0 +1,27 @@ +{ + "@id": "https://iiif.wellcomecollection.org/presentation/v2/collections/genres/Abstracts", + "@type": "sc:Collection", + "label": "Genre: Abstracts", + "members": [ + { + "@id": "https://iiif.wellcomecollection.org/presentation/v2/b29011577", + "@type": "sc:Manifest", + "label": "Titres et travaux scientifiques du Dr F. Lejars." + }, + { + "@id": "https://iiif.wellcomecollection.org/presentation/v2/b32183859", + "@type": "sc:Manifest", + "label": "Annotated bibliography on vital and health statistics." + }, + { + "@id": "https://iiif.wellcomecollection.org/presentation/v2/b21782763", + "@type": "sc:Manifest", + "label": "Notice sur les travaux scientifiques de M. Henri Becquerel." + }, + { + "@id": "https://iiif.wellcomecollection.org/presentation/v2/b29011553", + "@type": "sc:Manifest", + "label": "Notice sur les titres et travaux scientifiques de M. Louis Lapicque." + } + ] +} diff --git a/fixtures/presentation-3/exhibition-1.json b/fixtures/presentation-3/exhibition-1.json new file mode 100644 index 0000000..e90bd50 --- /dev/null +++ b/fixtures/presentation-3/exhibition-1.json @@ -0,0 +1,665 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "type": "Manifest", + "label": { + "en": [ + "Inventing Creativity" + ] + }, + "items": [ + { + "label": { + "en": [ + "Constructing the Creative Personality" + ] + }, + "height": 1000, + "width": 1000, + "type": "Canvas", + "items": [ + { + "type": "AnnotationPage", + "items": [ + { + "motivation": "painting", + "type": "Annotation", + "body": { + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/annotation/92fab8fb-2fff-9abe-f901-f07122318a1c/specificResource", + "type": "SpecificResource", + "source": { + "id": "https://dlc.services/iiif-img/7/21/bdd5d699-94f9-465c-ae4a-d5d209f3c270/full/full/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 6036, + "width": 8174, + "label": { + "en": [ + "-" + ] + }, + "service": { + "type": "ImageService2", + "id": "https://dlc.services/iiif-img/7/21/bdd5d699-94f9-465c-ae4a-d5d209f3c270", + "protocol": "http://iiif.io/api/image", + "width": 8174, + "height": 6036, + "tiles": [ + { + "width": 256, + "height": 256, + "scaleFactors": [ + 1, + 2, + 4, + 8, + 16, + 32 + ] + } + ], + "sizes": [ + { + "width": 1024, + "height": 756 + }, + { + "width": 400, + "height": 295 + }, + { + "width": 200, + "height": 148 + }, + { + "width": 100, + "height": 74 + } + ], + "profile": [ + "http://iiif.io/api/image/2/level1.json", + { + "formats": [ + "jpg" + ], + "qualities": [ + "native", + "color", + "gray" + ], + "supports": [ + "regionByPct", + "sizeByForcedWh", + "sizeByWh", + "sizeAboveFull", + "rotationBy90s", + "mirroring", + "gray" + ] + } + ] + } + }, + "selector": { + "@context": "http://iiif.io/api/annex/openannotation/context.json", + "type": "iiif:ImageApiSelector", + "region": "4164,352,3702,5420" + } + }, + "thumbnail": [ + { + "id": "https://dlc.services/thumbs/7/21/bdd5d699-94f9-465c-ae4a-d5d209f3c270/full/full/0/default.jpg", + "type": "Image", + "service": { + "type": "ImageService2", + "id": "https://dlc.services/thumbs/7/21/bdd5d699-94f9-465c-ae4a-d5d209f3c270", + "protocol": "http://iiif.io/api/image", + "profile": [ + "http://iiif.io/api/image/2/level0.json", + { + "formats": [ + "jpg" + ], + "qualities": [ + "color" + ], + "supports": [ + "sizeByWhListed" + ] + } + ], + "width": 1024, + "height": 756, + "sizes": [ + { + "width": 100, + "height": 74 + }, + { + "width": 200, + "height": 148 + }, + { + "width": 400, + "height": 295 + }, + { + "width": 1024, + "height": 756 + } + ] + } + } + ], + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/annotation/92fab8fb-2fff-9abe-f901-f07122318a1c", + "target": "https://heritage.tudelft.nl/iiif/inventing-creativity/canvas/66dc7c31-e263-79bc-08a7-43a5f6e6ad59#xywh=124,624,205,298", + "summary": { + "en": [ + "Researchers found that people they deemed creative preferred messy and asymmetrical figures, while randomly selected university students tended to prefer simple, linear, and sym­metrical figures. The psychologists concluded creative people had a higher “tolerance for ambiguity,” though the result might also have been because the creative group, which included successful architects and writers, was more likely to have a learned taste for modern art." + ] + }, + "label": { + "en": [ + "Sidney J. Parnes and Harold F. Harding eds., The Sourcebook for Creative Thinking, 1962" + ] + } + }, + { + "motivation": "painting", + "type": "Annotation", + "body": { + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/annotation/27efc122-6e41-0792-dcfe-aa001147d254/specificResource", + "type": "SpecificResource", + "source": { + "id": "https://dlc.services/iiif-img/7/21/9be87962-0977-4b05-9012-c3a0061ced9f/full/full/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 6237, + "width": 8713, + "label": { + "en": [ + "-" + ] + }, + "service": { + "type": "ImageService2", + "id": "https://dlc.services/iiif-img/7/21/9be87962-0977-4b05-9012-c3a0061ced9f", + "protocol": "http://iiif.io/api/image", + "width": 8713, + "height": 6237, + "tiles": [ + { + "width": 256, + "height": 256, + "scaleFactors": [ + 1, + 2, + 4, + 8, + 16, + 32, + 64 + ] + } + ], + "sizes": [ + { + "width": 1024, + "height": 733 + }, + { + "width": 400, + "height": 286 + }, + { + "width": 200, + "height": 143 + }, + { + "width": 100, + "height": 72 + } + ], + "profile": [ + "http://iiif.io/api/image/2/level1.json", + { + "formats": [ + "jpg" + ], + "qualities": [ + "native", + "color", + "gray" + ], + "supports": [ + "regionByPct", + "sizeByForcedWh", + "sizeByWh", + "sizeAboveFull", + "rotationBy90s", + "mirroring", + "gray" + ] + } + ] + } + }, + "selector": { + "@context": "http://iiif.io/api/annex/openannotation/context.json", + "type": "iiif:ImageApiSelector", + "region": "4415,422,3758,5440" + } + }, + "thumbnail": [ + { + "id": "https://dlc.services/thumbs/7/21/9be87962-0977-4b05-9012-c3a0061ced9f/full/full/0/default.jpg", + "type": "Image", + "service": { + "type": "ImageService2", + "id": "https://dlc.services/thumbs/7/21/9be87962-0977-4b05-9012-c3a0061ced9f", + "protocol": "http://iiif.io/api/image", + "profile": [ + "http://iiif.io/api/image/2/level0.json", + { + "formats": [ + "jpg" + ], + "qualities": [ + "color" + ], + "supports": [ + "sizeByWhListed" + ] + } + ], + "width": 1024, + "height": 733, + "sizes": [ + { + "width": 100, + "height": 72 + }, + { + "width": 200, + "height": 143 + }, + { + "width": 400, + "height": 286 + }, + { + "width": 1024, + "height": 733 + } + ] + } + } + ], + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/annotation/27efc122-6e41-0792-dcfe-aa001147d254", + "target": "https://heritage.tudelft.nl/iiif/inventing-creativity/canvas/66dc7c31-e263-79bc-08a7-43a5f6e6ad59#xywh=365,622,205,296", + "label": { + "en": [ + "Sidney J. Parnes and Harold F. Harding eds., The Sourcebook for Creative Thinking, 1962" + ] + }, + "summary": { + "en": [ + "Traditionally, psychologists used ink blot tests to peer into peoples’ subconscious. Creativity researchers were interested not in the underlying meaning of what their subjects saw in the random shapes but rather their originality, which researchers quantified to calculate a measure of creative ability." + ] + } + }, + { + "motivation": "painting", + "type": "Annotation", + "body": { + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/annotation/3c6f823d-4999-2cd7-d7a8-3ff9209f6dee/specificResource", + "type": "SpecificResource", + "source": { + "id": "https://dlc.services/iiif-img/7/21/4ae24fbb-cc11-4dbd-ae68-2a2951380b04/full/full/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 6452, + "width": 8840, + "label": { + "en": [ + "-" + ] + }, + "service": { + "type": "ImageService2", + "id": "https://dlc.services/iiif-img/7/21/4ae24fbb-cc11-4dbd-ae68-2a2951380b04", + "protocol": "http://iiif.io/api/image", + "width": 8840, + "height": 6452, + "tiles": [ + { + "width": 256, + "height": 256, + "scaleFactors": [ + 1, + 2, + 4, + 8, + 16, + 32, + 64 + ] + } + ], + "sizes": [ + { + "width": 1024, + "height": 747 + }, + { + "width": 400, + "height": 292 + }, + { + "width": 200, + "height": 146 + }, + { + "width": 100, + "height": 73 + } + ], + "profile": [ + "http://iiif.io/api/image/2/level1.json", + { + "formats": [ + "jpg" + ], + "qualities": [ + "native", + "color", + "gray" + ], + "supports": [ + "regionByPct", + "sizeByForcedWh", + "sizeByWh", + "sizeAboveFull", + "rotationBy90s", + "mirroring", + "gray" + ] + } + ] + } + }, + "selector": { + "@context": "http://iiif.io/api/annex/openannotation/context.json", + "type": "iiif:ImageApiSelector", + "region": "4479,548,3718,5404" + } + }, + "thumbnail": [ + { + "id": "https://dlc.services/thumbs/7/21/4ae24fbb-cc11-4dbd-ae68-2a2951380b04/full/full/0/default.jpg", + "type": "Image", + "service": { + "type": "ImageService2", + "id": "https://dlc.services/thumbs/7/21/4ae24fbb-cc11-4dbd-ae68-2a2951380b04", + "protocol": "http://iiif.io/api/image", + "profile": [ + "http://iiif.io/api/image/2/level0.json", + { + "formats": [ + "jpg" + ], + "qualities": [ + "color" + ], + "supports": [ + "sizeByWhListed" + ] + } + ], + "width": 1024, + "height": 747, + "sizes": [ + { + "width": 100, + "height": 73 + }, + { + "width": 200, + "height": 146 + }, + { + "width": 400, + "height": 292 + }, + { + "width": 1024, + "height": 747 + } + ] + } + } + ], + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/annotation/3c6f823d-4999-2cd7-d7a8-3ff9209f6dee", + "target": "https://heritage.tudelft.nl/iiif/inventing-creativity/canvas/66dc7c31-e263-79bc-08a7-43a5f6e6ad59#xywh=603,622,203,293", + "label": { + "en": [ + "Sidney J. Parnes and Harold F. Harding eds., The Sourcebook for Creative Thinking, 1962" + ] + }, + "summary": { + "en": [ + "Drawing completion tests were commonly used in creativity studies. Although creativity and art were closely associated, these tests were scored not on the test-taker’s artistic ability, but rather on the originality and elaborateness of their responses." + ] + } + }, + { + "motivation": "painting", + "type": "Annotation", + "body": { + "id": "https://dlc.services/iiif-img/7/21/00298292-8c7a-4939-b153-bef45c24160a/full/full/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "height": 6423, + "width": 8722, + "label": { + "en": [ + "-" + ] + }, + "service": [ + { + "type": "ImageService2", + "id": "https://dlc.services/iiif-img/7/21/00298292-8c7a-4939-b153-bef45c24160a", + "protocol": "http://iiif.io/api/image", + "width": 8722, + "height": 6423, + "tiles": [ + { + "width": 256, + "height": 256, + "scaleFactors": [ + 1, + 2, + 4, + 8, + 16, + 32, + 64 + ] + } + ], + "sizes": [ + { + "width": 1024, + "height": 754 + }, + { + "width": 400, + "height": 295 + }, + { + "width": 200, + "height": 147 + }, + { + "width": 100, + "height": 74 + } + ], + "profile": [ + "http://iiif.io/api/image/2/level1.json", + { + "formats": [ + "jpg" + ], + "qualities": [ + "native", + "color", + "gray" + ], + "supports": [ + "regionByPct", + "sizeByForcedWh", + "sizeByWh", + "sizeAboveFull", + "rotationBy90s", + "mirroring", + "gray" + ] + } + ] + } + ] + }, + "thumbnail": [ + { + "id": "https://dlc.services/thumbs/7/21/00298292-8c7a-4939-b153-bef45c24160a/full/full/0/default.jpg", + "type": "Image", + "service": { + "type": "ImageService2", + "id": "https://dlc.services/thumbs/7/21/00298292-8c7a-4939-b153-bef45c24160a", + "protocol": "http://iiif.io/api/image", + "profile": [ + "http://iiif.io/api/image/2/level0.json", + { + "formats": [ + "jpg" + ], + "qualities": [ + "color" + ], + "supports": [ + "sizeByWhListed" + ] + } + ], + "width": 1024, + "height": 754, + "sizes": [ + { + "width": 100, + "height": 74 + }, + { + "width": 200, + "height": 147 + }, + { + "width": 400, + "height": 295 + }, + { + "width": 1024, + "height": 754 + } + ] + } + } + ], + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/annotation/742f09f4-1005-6fb1-0a56-7b2967a9c627", + "target": "https://heritage.tudelft.nl/iiif/inventing-creativity/canvas/66dc7c31-e263-79bc-08a7-43a5f6e6ad59#xywh=77,21,787,577", + "summary": { + "en": [ + "Researchers at Berkeley’s IPAR asked subjects to create mosaics with colored tiles. The examples on the left were produced by the “non-creative” control group of randomly selected students, while those on the right were produced by prominent figures rated highly creative by their peers. The researchers concluded that creative people naturally prefer asymmetrical figures." + ] + }, + "label": { + "en": [ + "Sidney J. Parnes and Harold F. Harding eds., The Sourcebook for Creative Thinking, 1962" + ] + } + } + ], + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/list/a9af9f68-5adb-0db6-3826-40b3c8e3ffaf" + } + ], + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/canvas/66dc7c31-e263-79bc-08a7-43a5f6e6ad59", + "behavior": [ + "w-6", + "h-6" + ], + "annotations": [ + { + "type": "AnnotationPage", + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/canvas/66dc7c31-e263-79bc-08a7-43a5f6e6ad59/annotations", + "items": [ + { + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/canvas/66dc7c31-e263-79bc-08a7-43a5f6e6ad59/annotations/35", + "type": "Annotation", + "motivation": "describing", + "target": { + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/annotation/92fab8fb-2fff-9abe-f901-f07122318a1c", + "type": "Annotation" + } + }, + { + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/canvas/66dc7c31-e263-79bc-08a7-43a5f6e6ad59/annotations/36", + "type": "Annotation", + "motivation": "describing", + "target": { + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/annotation/27efc122-6e41-0792-dcfe-aa001147d254", + "type": "Annotation" + } + }, + { + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/canvas/66dc7c31-e263-79bc-08a7-43a5f6e6ad59/annotations/37", + "type": "Annotation", + "motivation": "describing", + "target": { + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/annotation/3c6f823d-4999-2cd7-d7a8-3ff9209f6dee", + "type": "Annotation" + } + }, + { + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/canvas/66dc7c31-e263-79bc-08a7-43a5f6e6ad59/annotations/38", + "type": "Annotation", + "motivation": "describing", + "target": { + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/annotation/742f09f4-1005-6fb1-0a56-7b2967a9c627", + "type": "Annotation" + } + } + ] + } + ] + } + ], + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/manifest", + "homepage": [ + { + "id": "https://heritage.tudelft.nl/nl/exhibitions/inventing-creativity", + "type": "Text", + "format": "text/html", + "language": [ + "nl" + ] + }, + { + "id": "https://heritage.tudelft.nl/en/exhibitions/inventing-creativity", + "type": "Text", + "format": "text/html", + "language": [ + "en" + ] + } + ] +} diff --git a/fixtures/presentation-3/wellcome-collection.json b/fixtures/presentation-3/wellcome-collection.json new file mode 100644 index 0000000..b7ec87e --- /dev/null +++ b/fixtures/presentation-3/wellcome-collection.json @@ -0,0 +1,187 @@ +{ + "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Abstracts", + "type": "Collection", + "label": { + "none": [ + "Genre: Abstracts" + ] + }, + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b29011577", + "type": "Manifest", + "label": { + "none": [ + "Titres et travaux scientifiques du Dr F. Lejars." + ] + }, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b29011577_0003.jp2/full/79,100/0/default.jpg", + "type": "Image", + "width": 79, + "height": 100, + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b29011577_0003.jp2", + "@type": "ImageService2", + "profile": "http://iiif.io/api/image/2/level0.json", + "width": 805, + "height": 1024, + "sizes": [ + { + "width": 79, + "height": 100 + }, + { + "width": 157, + "height": 200 + }, + { + "width": 314, + "height": 400 + }, + { + "width": 805, + "height": 1024 + } + ] + } + ] + } + ] + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b32183859", + "type": "Manifest", + "label": { + "none": [ + "Annotated bibliography on vital and health statistics." + ] + }, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b32183859_0007.jp2/full/67,100/0/default.jpg", + "type": "Image", + "width": 67, + "height": 100, + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b32183859_0007.jp2", + "@type": "ImageService2", + "profile": "http://iiif.io/api/image/2/level0.json", + "width": 685, + "height": 1024, + "sizes": [ + { + "width": 67, + "height": 100 + }, + { + "width": 134, + "height": 200 + }, + { + "width": 268, + "height": 400 + }, + { + "width": 685, + "height": 1024 + } + ] + } + ] + } + ] + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b21782763", + "type": "Manifest", + "label": { + "none": [ + "Notice sur les travaux scientifiques de M. Henri Becquerel." + ] + }, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b21782763_0005.jp2/full/72,100/0/default.jpg", + "type": "Image", + "width": 72, + "height": 100, + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b21782763_0005.jp2", + "@type": "ImageService2", + "profile": "http://iiif.io/api/image/2/level0.json", + "width": 741, + "height": 1024, + "sizes": [ + { + "width": 72, + "height": 100 + }, + { + "width": 145, + "height": 200 + }, + { + "width": 289, + "height": 400 + }, + { + "width": 741, + "height": 1024 + } + ] + } + ] + } + ] + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b29011553", + "type": "Manifest", + "label": { + "none": [ + "Notice sur les titres et travaux scientifiques de M. Louis Lapicque." + ] + }, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b29011553_0003.jp2/full/80,100/0/default.jpg", + "type": "Image", + "width": 80, + "height": 100, + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b29011553_0003.jp2", + "@type": "ImageService2", + "profile": "http://iiif.io/api/image/2/level0.json", + "width": 817, + "height": 1024, + "sizes": [ + { + "width": 80, + "height": 100 + }, + { + "width": 160, + "height": 200 + }, + { + "width": 319, + "height": 400 + }, + { + "width": 817, + "height": 1024 + } + ] + } + ] + } + ] + } + ] +} diff --git a/scripts/update-cookbook.mjs b/scripts/update-cookbook.mjs index 7aa3a94..f531237 100644 --- a/scripts/update-cookbook.mjs +++ b/scripts/update-cookbook.mjs @@ -66,7 +66,7 @@ async function main() { const fileNameWithExtension = filenameParts[filenameParts.length - 1]; if (fileNameWithExtension.endsWith('.json')) { const fileName = fileNameWithExtension.slice(0, -5); - await writeFile(join(cwd(), `fixtures/cookbook`, `${key}-${fileName}`), + await writeFile(join(cwd(), `fixtures/cookbook`, `${key}-${fileName}.json`), await (await fetch(`https://iiif.io/api/cookbook/recipe/${key}/${href}`)).text() ); diff --git a/src/presentation-3/serialize-presentation-3.ts b/src/presentation-3/serialize-presentation-3.ts index 6e55007..0baa597 100644 --- a/src/presentation-3/serialize-presentation-3.ts +++ b/src/presentation-3/serialize-presentation-3.ts @@ -2,6 +2,7 @@ import { SerializeConfig, UNSET, UNWRAP } from './serialize'; import { ImageService2, ImageService3, ResourceProvider, TechnicalProperties } from '@iiif/presentation-3'; import { compressSpecificResource } from '../shared/compress-specific-resource'; import { DescriptiveNormalized, LinkingNormalized } from '@iiif/presentation-3-normalized'; +import { isSpecificResource } from '../shared/is-specific-resource'; function technicalProperties(entity: Partial): Array<[keyof TechnicalProperties, any]> { return [ @@ -203,7 +204,35 @@ export const serializeConfigPresentation3: SerializeConfig = { return key !== 'body'; }); - const resolvedBody = yield entity.body; + let resolvedBody: any = undefined; + + if (Array.isArray(entity.body)) { + const resolved = []; + for (const body of entity.body as any[]) { + if (body && isSpecificResource(body)) { + const single = { + ...(body as any), + }; + + single.source = yield body.source; + resolved.push(compressSpecificResource(single, { allowSourceString: true })); + } else { + resolved.push(yield body); + } + } + resolvedBody = resolved; + } else { + if (entity.body && isSpecificResource(entity.body)) { + resolvedBody = { + ...(entity.body as any), + }; + resolvedBody.source = yield (entity.body as any).source; + } else { + resolvedBody = yield entity.body; + } + } + + // const resolvedBody = yield entity.body; return [...entries, ['body', resolvedBody.length === 1 ? resolvedBody[0] : resolvedBody]]; }, diff --git a/src/presentation-3/traverse.ts b/src/presentation-3/traverse.ts index 8bd2ad8..e73d85b 100644 --- a/src/presentation-3/traverse.ts +++ b/src/presentation-3/traverse.ts @@ -322,22 +322,6 @@ export class Traverse { return annotation; } - /* - traverseAnnotationTarget(annotation: Annotation): Annotation { - if (Array.isArray(annotation.target)) { - annotation.target = annotation.target.map( - (annotationBody: ContentResource): ContentResource => { - return this.traverseContentResource(annotationBody); - } - ); - } else if (annotation.target) { - annotation.target = this.traverseContentResource(annotation.target); - } - - return annotation; - } - */ - traverseLinkedCanvases(json: T): T { if (json.placeholderCanvas) { json.placeholderCanvas = this.traverseCanvas(json.placeholderCanvas); @@ -353,8 +337,6 @@ export class Traverse { // @todo traverseAnnotationSelector traverseAnnotation(annotationJson: Annotation): Annotation { return this.traverseType( - // Disabled these for now. - // this.traverseAnnotationTarget(this.traverseLinking(this.traverseAnnotationBody(annotationJson))), this.traverseLinking(this.traverseAnnotationBody(annotationJson)), this.traversals.annotation ); @@ -380,6 +362,10 @@ export class Traverse { }); } + if (isSpecificResource(contentResourceJson)) { + return this.traverseSpecificResource(contentResourceJson, 'ContentResource'); + } + return this.traverseType( // This needs an `any` because of the scope of W3C annotation bodies (covered by ContentResource). // ContentResources are permitted to have a `.annotations` property, so we can pass it as any for this @@ -401,6 +387,8 @@ export class Traverse { source: typeHint === 'Canvas' || source.type === 'Canvas' ? this.traverseType(source, this.traversals.canvas) + : typeHint === 'ContentResource' + ? this.traverseContentResource(source) : this.traverseUnknown(source, typeHint), }, this.traversals.specificResource diff --git a/src/shared/compress-specific-resource.ts b/src/shared/compress-specific-resource.ts index 437b0c2..346e074 100644 --- a/src/shared/compress-specific-resource.ts +++ b/src/shared/compress-specific-resource.ts @@ -24,8 +24,16 @@ export function compressSpecificResource( (keys.length === 2 && target.type && target.source) || (keys.length === 3 && target.type && target.source && keys.indexOf('selector') !== -1 && !target.selector) ) { + if (allowString) { + return target.source.id; + } + + if (target.source.type === 'ContentResource') { + return { type: 'SpecificResource', source: target.source.id }; + } + // If all we have is the wrapped source, just return the ID. - return allowString ? target.source.id : target.source; + return target.source; } if (target.selector) { if ( From f79ae6b2be02ebe8d8d9a5ceea0aa276cf0ef76b Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Thu, 23 Mar 2023 17:37:27 +0000 Subject: [PATCH 28/44] Additional smoke tests --- .../__snapshots__/smoke.tests.ts.snap | 21278 ++++++++++++++++ .../presentation-3-parser/serializer.test.ts | 1 + .../presentation-3-parser/smoke.tests.ts | 109 + fixtures/presentation-3/bodleian.json | 465 + fixtures/presentation-3/ocean-liners.json | 68 +- .../presentation-3/wellcome-collection.json | 1 + fixtures/presentation-3/wellcome-p3-2.json | 1560 +- fixtures/presentation-3/wellcome-p3.json | 604 +- src/presentation-3/normalize.ts | 13 +- .../serialize-presentation-2.ts | 7 +- .../serialize-presentation-3.ts | 3 +- 11 files changed, 23619 insertions(+), 490 deletions(-) create mode 100644 __tests__/presentation-3-parser/__snapshots__/smoke.tests.ts.snap create mode 100644 __tests__/presentation-3-parser/smoke.tests.ts create mode 100644 fixtures/presentation-3/bodleian.json diff --git a/__tests__/presentation-3-parser/__snapshots__/smoke.tests.ts.snap b/__tests__/presentation-3-parser/__snapshots__/smoke.tests.ts.snap new file mode 100644 index 0000000..31a7b2c --- /dev/null +++ b/__tests__/presentation-3-parser/__snapshots__/smoke.tests.ts.snap @@ -0,0 +1,21278 @@ +// Vitest Snapshot v1 + +exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/accompanying-canvas.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio": { + "body": [ + { + "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + }, + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 0, + "height": 998, + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "First page of score for Gustav Mahler, Symphony No. 3", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 772, + }, + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1": { + "accompanyingCanvas": { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying", + "type": "Canvas", + }, + "annotations": [], + "behavior": [], + "duration": 1985.024, + "height": 0, + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Gustav Mahler, Symphony No. 3, CD 1", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 0, + }, + }, + "Collection": {}, + "ContentResource": { + "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4": { + "duration": 1985.024, + "format": "video/mp4", + "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", + "iiif-parser:hasPart": [ + { + "id": "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio", + "type": "Sound", + }, + ], + "type": "Sound", + }, + "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg": { + "format": "image/jpeg", + "height": 998, + "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image", + "type": "Image", + }, + ], + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 772, + }, + }, + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json": { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json", + "type": "Manifest", + }, + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1", + "type": "Canvas", + }, + ], + "label": { + "en": [ + "Partial audio recording of Gustav Mahler's _Symphony No. 3_", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": {}, + "Selector": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0": { + "id": "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0", + "profile": "level1", + "type": "ImageService3", + }, + }, + }, + "mapping": { + "https://fixtures.iiif.io/audio/indiana/mahler-symphony-3/CD1/medium/128Kbps.mp4": "ContentResource", + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying": "Canvas", + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio": "Annotation", + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json": "Manifest", + "https://iiif.io/api/image/3.0/example/reference/4b45bba3ea612ee46f5371ce84dbcd89-mahler-0/full/,998/0/default.jpg": "ContentResource", + }, + "resource": { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/bl-ranges.json 1`] = ` +{ + "entities": { + "Agent": { + "https://www.bl.uk/about-us": { + "homepage": [ + { + "id": "https://www.bl.uk/", + "type": "ContentResource", + }, + ], + "id": "https://www.bl.uk/about-us", + "iiif-parser:hasPart": [ + { + "id": "https://www.bl.uk/about-us", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/manifest.json", + "type": "Agent", + }, + ], + "label": { + "en": [ + "The British Library", + ], + }, + "logo": [ + { + "id": "https://www.bl.uk/images/bl_logo_100.gif", + "type": "ContentResource", + }, + ], + "seeAlso": [], + "type": "Agent", + }, + }, + "Annotation": { + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/a1/a1": { + "body": [ + { + "id": "https://iiif-commons.github.io/iiif-av-component/examples/data/bl/sounds-tests/posters/world.jpg", + "type": "ContentResource", + }, + ], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/a1/a1", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/a1/a1", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/a1", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/poster", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004/anno1/1": { + "body": [ + { + "id": "vault://4f90752b", + "type": "ContentResource", + }, + ], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004/anno1/1", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004/anno1/1", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004/anno1", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "seeAlso": [ + { + "id": "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000032.dat", + "type": "ContentResource", + }, + ], + "target": { + "selector": { + "type": "FragmentSelector", + "value": "t=0,2023.56", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005/anno2/1": { + "body": [ + { + "id": "vault://3f476ceb", + "type": "ContentResource", + }, + ], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005/anno2/1", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005/anno2/1", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005/anno2", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "seeAlso": [ + { + "id": "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000034.dat", + "type": "ContentResource", + }, + ], + "target": { + "selector": { + "type": "FragmentSelector", + "value": "t=0,1760.04", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007/anno3/1": { + "body": [ + { + "id": "vault://73ce47ab", + "type": "ContentResource", + }, + ], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007/anno3/1", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007/anno3/1", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007/anno3", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "seeAlso": [ + { + "id": "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000036.dat", + "type": "ContentResource", + }, + ], + "target": { + "selector": { + "type": "FragmentSelector", + "value": "t=0,1392.56", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008/anno4/1": { + "body": [ + { + "id": "vault://a894ff6b", + "type": "ContentResource", + }, + ], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008/anno4/1", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008/anno4/1", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008/anno4", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "seeAlso": [ + { + "id": "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000038.dat", + "type": "ContentResource", + }, + ], + "target": { + "selector": { + "type": "FragmentSelector", + "value": "t=0,1404.92", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a/anno5/1": { + "body": [ + { + "id": "vault://3093138b", + "type": "ContentResource", + }, + ], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a/anno5/1", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a/anno5/1", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a/anno5", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "seeAlso": [ + { + "id": "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x00003a.dat", + "type": "ContentResource", + }, + ], + "target": { + "selector": { + "type": "FragmentSelector", + "value": "t=0,1406.32", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b/anno6/1": { + "body": [ + { + "id": "vault://c74ef3cb", + "type": "ContentResource", + }, + ], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b/anno6/1", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b/anno6/1", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b/anno6", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "seeAlso": [ + { + "id": "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x00003c.dat", + "type": "ContentResource", + }, + ], + "target": { + "selector": { + "type": "FragmentSelector", + "value": "t=0,1398.84", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": {}, + "AnnotationPage": { + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/a1": { + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/a1", + "items": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/a1/a1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004/anno1": { + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004/anno1", + "items": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004/anno1/1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005/anno2": { + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005/anno2", + "items": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005/anno2/1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007/anno3": { + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007/anno3", + "items": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007/anno3/1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008/anno4": { + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008/anno4", + "items": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008/anno4/1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a/anno5": { + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a/anno5", + "items": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a/anno5/1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b/anno6": { + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b/anno6", + "items": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b/anno6/1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + }, + "Canvas": { + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/poster": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 0, + "height": 962, + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/poster", + "items": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/a1", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "world", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 962, + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 2023.56, + "height": 0, + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004", + "items": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004/anno1", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Tape 1 Side 1", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 0, + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 1760.04, + "height": 0, + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005", + "items": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005/anno2", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Tape 1 Side 2", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 0, + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 1392.56, + "height": 0, + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007", + "items": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007/anno3", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Tape 2 Side 1", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 0, + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 1404.92, + "height": 0, + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008", + "items": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008/anno4", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Tape 2 Side 2", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 0, + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 1406.32, + "height": 0, + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a", + "items": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a/anno5", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Tape 3 Side 1", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 0, + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 1398.84, + "height": 0, + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b", + "items": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b/anno6", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Tape 3 Side 2", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 0, + }, + }, + "Collection": {}, + "ContentResource": { + "http://access.bl.uk/item/viewer/ark:/81055/vdc_100052320369.0x000002": { + "format": "text/html", + "id": "http://access.bl.uk/item/viewer/ark:/81055/vdc_100052320369.0x000002", + "iiif-parser:hasPart": [ + { + "id": "http://access.bl.uk/item/viewer/ark:/81055/vdc_100052320369.0x000002", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/manifest.json", + "type": "Text", + }, + ], + "label": { + "en": [ + "View at the British Library", + ], + }, + "type": "Text", + }, + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000002/top": { + "format": "audio/mp4", + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000002/top", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000002/top", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top", + "type": "Audio", + }, + ], + "label": { + "en": [ + "Download this recording", + ], + }, + "type": "Audio", + }, + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000c": { + "format": "audio/mp4", + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000c", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000c", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000c", + "type": "Audio", + }, + ], + "label": { + "en": [ + "Download this recording", + ], + }, + "type": "Audio", + }, + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000d": { + "format": "audio/mp4", + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000d", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000d", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000d", + "type": "Audio", + }, + ], + "label": { + "en": [ + "Download this recording", + ], + }, + "type": "Audio", + }, + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000e": { + "format": "audio/mp4", + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000e", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000e", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000e", + "type": "Audio", + }, + ], + "label": { + "en": [ + "Download this recording", + ], + }, + "type": "Audio", + }, + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000f": { + "format": "audio/mp4", + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000f", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000f", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000f", + "type": "Audio", + }, + ], + "label": { + "en": [ + "Download this recording", + ], + }, + "type": "Audio", + }, + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000016": { + "format": "audio/mp4", + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000016", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000016", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000016", + "type": "Audio", + }, + ], + "label": { + "en": [ + "Download this recording", + ], + }, + "type": "Audio", + }, + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000018": { + "format": "audio/mp4", + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000018", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000018", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000018", + "type": "Audio", + }, + ], + "label": { + "en": [ + "Download this recording", + ], + }, + "type": "Audio", + }, + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001a": { + "format": "audio/mp4", + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001a", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001a", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001a", + "type": "Audio", + }, + ], + "label": { + "en": [ + "Download this recording", + ], + }, + "type": "Audio", + }, + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001b": { + "format": "audio/mp4", + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001b", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001b", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001b", + "type": "Audio", + }, + ], + "label": { + "en": [ + "Download this recording", + ], + }, + "type": "Audio", + }, + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001c": { + "format": "audio/mp4", + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001c", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001c", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001c", + "type": "Audio", + }, + ], + "label": { + "en": [ + "Download this recording", + ], + }, + "type": "Audio", + }, + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001d": { + "format": "audio/mp4", + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001d", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001d", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001d", + "type": "Audio", + }, + ], + "label": { + "en": [ + "Download this recording", + ], + }, + "type": "Audio", + }, + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000024": { + "format": "audio/mp4", + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000024", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000024", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000024", + "type": "Audio", + }, + ], + "label": { + "en": [ + "Download this recording", + ], + }, + "type": "Audio", + }, + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000026": { + "format": "audio/mp4", + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000026", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000026", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000026", + "type": "Audio", + }, + ], + "label": { + "en": [ + "Download this recording", + ], + }, + "type": "Audio", + }, + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000028": { + "format": "audio/mp4", + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000028", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000028", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000028", + "type": "Audio", + }, + ], + "label": { + "en": [ + "Download this recording", + ], + }, + "type": "Audio", + }, + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00002a": { + "format": "audio/mp4", + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00002a", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00002a", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002a", + "type": "Audio", + }, + ], + "label": { + "en": [ + "Download this recording", + ], + }, + "type": "Audio", + }, + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00002c": { + "format": "audio/mp4", + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00002c", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00002c", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002c", + "type": "Audio", + }, + ], + "label": { + "en": [ + "Download this recording", + ], + }, + "type": "Audio", + }, + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00002e": { + "format": "audio/mp4", + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00002e", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00002e", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002e", + "type": "Audio", + }, + ], + "label": { + "en": [ + "Download this recording", + ], + }, + "type": "Audio", + }, + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000033/index.m3u8": { + "format": "vnd.apple.mpegURL", + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000033/index.m3u8", + "service": [ + { + "id": "https://api.bl.uk/media/hls/ark:/81055/vdc_100052320369.0x000033/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + ], + "type": "Audio", + }, + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000033/manifest.mpd": { + "format": "application/dash+xml", + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000033/manifest.mpd", + "service": [ + { + "id": "https://api.bl.uk/media/dash/ark:/81055/vdc_100052320369.0x000033/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + ], + "type": "Audio", + }, + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000035/index.m3u8": { + "format": "vnd.apple.mpegURL", + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000035/index.m3u8", + "service": [ + { + "id": "https://api.bl.uk/media/hls/ark:/81055/vdc_100052320369.0x000035/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + ], + "type": "Audio", + }, + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000035/manifest.mpd": { + "format": "application/dash+xml", + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000035/manifest.mpd", + "service": [ + { + "id": "https://api.bl.uk/media/dash/ark:/81055/vdc_100052320369.0x000035/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + ], + "type": "Audio", + }, + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000037/index.m3u8": { + "format": "vnd.apple.mpegURL", + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000037/index.m3u8", + "service": [ + { + "id": "https://api.bl.uk/media/hls/ark:/81055/vdc_100052320369.0x000037/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + ], + "type": "Audio", + }, + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000037/manifest.mpd": { + "format": "application/dash+xml", + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000037/manifest.mpd", + "service": [ + { + "id": "https://api.bl.uk/media/dash/ark:/81055/vdc_100052320369.0x000037/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + ], + "type": "Audio", + }, + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000039/index.m3u8": { + "format": "vnd.apple.mpegURL", + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000039/index.m3u8", + "service": [ + { + "id": "https://api.bl.uk/media/hls/ark:/81055/vdc_100052320369.0x000039/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + ], + "type": "Audio", + }, + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000039/manifest.mpd": { + "format": "application/dash+xml", + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000039/manifest.mpd", + "service": [ + { + "id": "https://api.bl.uk/media/dash/ark:/81055/vdc_100052320369.0x000039/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + ], + "type": "Audio", + }, + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x00003b/index.m3u8": { + "format": "vnd.apple.mpegURL", + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x00003b/index.m3u8", + "service": [ + { + "id": "https://api.bl.uk/media/hls/ark:/81055/vdc_100052320369.0x00003b/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + ], + "type": "Audio", + }, + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x00003b/manifest.mpd": { + "format": "application/dash+xml", + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x00003b/manifest.mpd", + "service": [ + { + "id": "https://api.bl.uk/media/dash/ark:/81055/vdc_100052320369.0x00003b/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + ], + "type": "Audio", + }, + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x00003d/index.m3u8": { + "format": "vnd.apple.mpegURL", + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x00003d/index.m3u8", + "service": [ + { + "id": "https://api.bl.uk/media/hls/ark:/81055/vdc_100052320369.0x00003d/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + ], + "type": "Audio", + }, + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x00003d/manifest.mpd": { + "format": "application/dash+xml", + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x00003d/manifest.mpd", + "service": [ + { + "id": "https://api.bl.uk/media/dash/ark:/81055/vdc_100052320369.0x00003d/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + ], + "type": "Audio", + }, + "https://iiif-commons.github.io/iiif-av-component/examples/data/bl/sounds-tests/posters/world.jpg": { + "format": "image/jpeg", + "height": 962, + "id": "https://iiif-commons.github.io/iiif-av-component/examples/data/bl/sounds-tests/posters/world.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-commons.github.io/iiif-av-component/examples/data/bl/sounds-tests/posters/world.jpg", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/a1/a1", + "type": "Image", + }, + ], + "type": "Image", + "width": 962, + }, + "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000032.dat": { + "format": "application/octet-stream", + "id": "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000032.dat", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000032.dat", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004/anno1/1", + "type": "Dataset", + }, + ], + "profile": "http://waveform.prototyping.bbc.co.uk", + "type": "Dataset", + }, + "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000034.dat": { + "format": "application/octet-stream", + "id": "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000034.dat", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000034.dat", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005/anno2/1", + "type": "Dataset", + }, + ], + "profile": "http://waveform.prototyping.bbc.co.uk", + "type": "Dataset", + }, + "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000036.dat": { + "format": "application/octet-stream", + "id": "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000036.dat", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000036.dat", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007/anno3/1", + "type": "Dataset", + }, + ], + "profile": "http://waveform.prototyping.bbc.co.uk", + "type": "Dataset", + }, + "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000038.dat": { + "format": "application/octet-stream", + "id": "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000038.dat", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000038.dat", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008/anno4/1", + "type": "Dataset", + }, + ], + "profile": "http://waveform.prototyping.bbc.co.uk", + "type": "Dataset", + }, + "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x00003a.dat": { + "format": "application/octet-stream", + "id": "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x00003a.dat", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x00003a.dat", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a/anno5/1", + "type": "Dataset", + }, + ], + "profile": "http://waveform.prototyping.bbc.co.uk", + "type": "Dataset", + }, + "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x00003c.dat": { + "format": "application/octet-stream", + "id": "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x00003c.dat", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x00003c.dat", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b/anno6/1", + "type": "Dataset", + }, + ], + "profile": "http://waveform.prototyping.bbc.co.uk", + "type": "Dataset", + }, + "https://www.bl.uk/": { + "format": "text/html", + "id": "https://www.bl.uk/", + "iiif-parser:hasPart": [ + { + "id": "https://www.bl.uk/", + "iiif-parser:partOf": "https://www.bl.uk/about-us", + "type": "Text", + }, + ], + "label": { + "en": [ + "The British Library", + ], + }, + "type": "Text", + }, + "https://www.bl.uk/images/bl_logo_100.gif": { + "format": "image/gif", + "id": "https://www.bl.uk/images/bl_logo_100.gif", + "iiif-parser:hasPart": [ + { + "id": "https://www.bl.uk/images/bl_logo_100.gif", + "iiif-parser:partOf": "https://www.bl.uk/about-us", + "type": "Image", + }, + ], + "type": "Image", + }, + "vault://3093138b": { + "id": "vault://3093138b", + "iiif-parser:hasPart": [ + { + "id": "vault://3093138b", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a/anno5/1", + "type": "Choice", + }, + ], + "items": [ + { + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x00003b/manifest.mpd", + "type": "ContentResource", + }, + { + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x00003b/index.m3u8", + "type": "ContentResource", + }, + ], + "type": "Choice", + }, + "vault://3f476ceb": { + "id": "vault://3f476ceb", + "iiif-parser:hasPart": [ + { + "id": "vault://3f476ceb", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005/anno2/1", + "type": "Choice", + }, + ], + "items": [ + { + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000035/manifest.mpd", + "type": "ContentResource", + }, + { + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000035/index.m3u8", + "type": "ContentResource", + }, + ], + "type": "Choice", + }, + "vault://4f90752b": { + "id": "vault://4f90752b", + "iiif-parser:hasPart": [ + { + "id": "vault://4f90752b", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004/anno1/1", + "type": "Choice", + }, + ], + "items": [ + { + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000033/manifest.mpd", + "type": "ContentResource", + }, + { + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000033/index.m3u8", + "type": "ContentResource", + }, + ], + "type": "Choice", + }, + "vault://73ce47ab": { + "id": "vault://73ce47ab", + "iiif-parser:hasPart": [ + { + "id": "vault://73ce47ab", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007/anno3/1", + "type": "Choice", + }, + ], + "items": [ + { + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000037/manifest.mpd", + "type": "ContentResource", + }, + { + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000037/index.m3u8", + "type": "ContentResource", + }, + ], + "type": "Choice", + }, + "vault://a894ff6b": { + "id": "vault://a894ff6b", + "iiif-parser:hasPart": [ + { + "id": "vault://a894ff6b", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008/anno4/1", + "type": "Choice", + }, + ], + "items": [ + { + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000039/manifest.mpd", + "type": "ContentResource", + }, + { + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000039/index.m3u8", + "type": "ContentResource", + }, + ], + "type": "Choice", + }, + "vault://c74ef3cb": { + "id": "vault://c74ef3cb", + "iiif-parser:hasPart": [ + { + "id": "vault://c74ef3cb", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b/anno6/1", + "type": "Choice", + }, + ], + "items": [ + { + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x00003d/manifest.mpd", + "type": "ContentResource", + }, + { + "id": "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x00003d/index.m3u8", + "type": "ContentResource", + }, + ], + "type": "Choice", + }, + }, + "Manifest": { + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/manifest.json": { + "@context": [ + "http://iiif.io/api/auth/1/context.json", + "http://www.w3.org/ns/anno.jsonld", + "http://iiif.io/api/presentation/3/context.json", + ], + "accompanyingCanvas": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/poster", + "type": "Canvas", + }, + "annotations": [], + "behavior": [ + "auto-advance", + ], + "homepage": [ + { + "id": "http://access.bl.uk/item/viewer/ark:/81055/vdc_100052320369.0x000002", + "type": "ContentResource", + }, + ], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/manifest.json", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/manifest.json", + "type": "Manifest", + }, + ], + "items": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004", + "type": "Canvas", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005", + "type": "Canvas", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007", + "type": "Canvas", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008", + "type": "Canvas", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a", + "type": "Canvas", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b", + "type": "Canvas", + }, + ], + "label": { + "en": [ + "C733/48 C733/49 C733/50 [Recordings in Soqotri / 'Survey' recordings in English]", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Full title", + ], + }, + "value": { + "en": [ + "[Recordings in Soqotri / 'Survey' recordings in English]", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "T.M. Johnstone Middle Eastern Language recordings", + ], + }, + }, + { + "label": { + "en": [ + "Format", + ], + }, + "value": { + "en": [ + "3 tape reels 9 cm 4.75 cm/sec mono", + ], + }, + }, + { + "label": { + "en": [ + "Usage", + ], + }, + "value": { + "en": [ + "Rights unassigned - staff access only", + ], + }, + }, + { + "label": { + "en": [ + "Held by", + ], + }, + "value": { + "en": [ + "The British Library", + ], + }, + }, + { + "label": { + "en": [ + "Digitised by", + ], + }, + "value": { + "en": [ + "The British Library, 2017", + ], + }, + }, + { + "label": { + "en": [ + "Digitisation funded by", + ], + }, + "value": { + "en": [ + "National Lottery Heritage Fund", + ], + }, + }, + { + "label": { + "en": [ + "Identifier", + ], + }, + "value": { + "en": [ + "C733/48-C733/50", + ], + }, + }, + { + "label": { + "en": [ + "Shelfmark", + ], + }, + "value": { + "en": [ + "C733/48", + ], + }, + }, + { + "label": { + "en": [ + "Link to catalogue", + ], + }, + "value": { + "en": [ + "View the catalogue record", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [ + { + "id": "https://www.bl.uk/about-us", + "type": "Agent", + }, + ], + "rendering": [], + "requiredStatement": { + "label": { + "en": [ + "Usage", + ], + }, + "value": { + "en": [ + "Please read the full information about this object
Rights unassigned - staff access only
", + ], + }, + }, + "rights": null, + "seeAlso": [], + "service": [ + { + "description": "Some portions of this recording may be unavailable due to rights restrictions.", + "header": "Please Log-In", + "id": "https://api.bl.uk/auth/iiif/login", + "label": "Login to The British Library", + "profile": "http://iiif.io/api/auth/1/login", + "service": [ + { + "id": "https://api.bl.uk/auth/iiif/token", + "profile": "http://iiif.io/api/auth/1/token", + "type": "AuthTokenService1", + }, + ], + "type": "AuthCookieService1", + }, + { + "id": "http://access.bl.uk/item/share/ark:/81055/vdc_100052320369.0x000002", + "profile": "http://universalviewer.io/share-extensions-profile", + "type": "Service", + }, + ], + "services": [], + "start": null, + "structures": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top", + "type": "Range", + }, + ], + "summary": null, + "thumbnail": [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": { + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top", + "items": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000c", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000016", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000016/nn3", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000018", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001a", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000024", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000024/nn6", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000026", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000028", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000028/nn8", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002a", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002a/nn9", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002c", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top/nn9", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002e", + "type": "Range", + }, + ], + "label": { + "en": [ + "[Recordings in Soqotri / 'Survey' recordings in English]", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Full title", + ], + }, + "value": { + "en": [ + "[Recordings in Soqotri / 'Survey' recordings in English]", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "T.M. Johnstone Middle Eastern Language recordings", + ], + }, + }, + { + "label": { + "en": [ + "Format", + ], + }, + "value": { + "en": [ + "3 tape reels 9 cm 4.75 cm/sec mono", + ], + }, + }, + { + "label": { + "en": [ + "Usage", + ], + }, + "value": { + "en": [ + "Rights unassigned - staff access only", + ], + }, + }, + { + "label": { + "en": [ + "Held by", + ], + }, + "value": { + "en": [ + "The British Library", + ], + }, + }, + { + "label": { + "en": [ + "Digitised by", + ], + }, + "value": { + "en": [ + "The British Library, 2017", + ], + }, + }, + { + "label": { + "en": [ + "Digitisation funded by", + ], + }, + "value": { + "en": [ + "National Lottery Heritage Fund", + ], + }, + }, + { + "label": { + "en": [ + "Identifier", + ], + }, + "value": { + "en": [ + "C733/48-C733/50", + ], + }, + }, + { + "label": { + "en": [ + "Shelfmark", + ], + }, + "value": { + "en": [ + "C733/48", + ], + }, + }, + { + "label": { + "en": [ + "Link to catalogue", + ], + }, + "value": { + "en": [ + "View the catalogue record", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000002/top", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top/nn9": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [ + "no-nav", + ], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top/nn9", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top/nn9", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=1346.4,1406.32", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004#t=0,2023.56": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004#t=0,2023.56", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004#t=0,2023.56", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000d", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005#t=0,1760.04": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005#t=0,1760.04", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005#t=0,1760.04", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000e", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=0,0.36": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=0,0.36", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=0,0.36", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000c/nn3", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=0.36,484.8": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=0.36,484.8", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=0.36,484.8", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000f", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=1027,1392.56": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=1027,1392.56", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=1027,1392.56", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001b", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=487.56,526.36": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=487.56,526.36", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=487.56,526.36", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000016", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=526.36,526.64": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=526.36,526.64", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=526.36,526.64", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000016/nn3", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=526.64,1026.48": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=526.64,1026.48", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=526.64,1026.48", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000018", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=0,259.8": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=0,259.8", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=0,259.8", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001b", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=259.8,260": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=259.8,260", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=259.8,260", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001b/nn2", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=260,276.24": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=260,276.24", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=260,276.24", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001c", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=276.24,277.44": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=276.24,277.44", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=276.24,277.44", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001c/nn3", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=277.44,821.36": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=277.44,821.36", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=277.44,821.36", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001d", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=821.76,992.32": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=821.76,992.32", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=821.76,992.32", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000024", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=992.32,992.96": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=992.32,992.96", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=992.32,992.96", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000024/nn6", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=992.96,1404.92": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=992.96,1404.92", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=992.96,1404.92", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000026", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=0,736": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=0,736", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=0,736", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000028", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=1158.84,1159.12": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=1158.84,1159.12", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=1158.84,1159.12", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002a/nn9", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=1159.12,1346.4": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=1159.12,1346.4", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=1159.12,1346.4", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002c", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=1346.4,1406.32": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=1346.4,1406.32", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=1346.4,1406.32", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top/nn9", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=1346.52,1406.32": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=1346.52,1406.32", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=1346.52,1406.32", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002e", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=736,736.72": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=736,736.72", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=736,736.72", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000028/nn8", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=736.72,1158.84": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=736.72,1158.84", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=736.72,1158.84", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002a", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b#t=0,1398.84": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b#t=0,1398.84", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b#t=0,1398.84", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002e", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000c": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000c", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000c", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top", + "type": "Range", + }, + ], + "items": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000d", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000e", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000c/nn3", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000f", + "type": "Range", + }, + ], + "label": { + "en": [ + "[A'raf Biladik]", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Full title", + ], + }, + "value": { + "en": [ + "[A'raf Biladik]", + ], + }, + }, + { + "label": { + "en": [ + "Creator", + ], + }, + "value": { + "en": [ + "Wazir Al-Nubi, Ibrahim", + "Botting, Douglas", + "Bin Ali, Thani", + "Johnstone, Thomas Muir,", + ], + }, + }, + { + "label": { + "en": [ + "Date", + ], + }, + "value": { + "en": [ + "1967 (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Soqotra, Aden Governorate Aden Governorate, Soqotra (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Yemen (Socotra) Yemen Oman (place of origin)", + ], + }, + }, + { + "label": { + "en": [ + "Duration", + ], + }, + "value": { + "en": [ + "1 hr. 11 min. 09 sec.", + ], + }, + }, + { + "label": { + "en": [ + "Language", + ], + }, + "value": { + "en": [ + "sqt gdq ara", + ], + }, + }, + { + "label": { + "en": [ + "Culture", + ], + }, + "value": { + "en": [ + "Soqotri Mehri", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "T.M. Johnstone Middle Eastern Language recordings", + ], + }, + }, + { + "label": { + "en": [ + "Held by", + ], + }, + "value": { + "en": [ + "The British Library", + ], + }, + }, + { + "label": { + "en": [ + "Identifier", + ], + }, + "value": { + "en": [ + "C733/48 S1-C733/49 S1 C1", + ], + }, + }, + { + "label": { + "en": [ + "Shelfmark", + ], + }, + "value": { + "en": [ + "C733/48", + ], + }, + }, + { + "label": { + "en": [ + "Link to catalogue", + ], + }, + "value": { + "en": [ + "View the catalogue record", + ], + }, + }, + { + "label": { + "en": [ + "Description", + ], + }, + "value": { + "en": [ + "Information on speakers and content was provided by Dr. Miranda Morris. Individual items described separately Ibrahim Wazir al-Nubi reads a passage called 'A'raf Biladik' [knowledge of homeland], in Soqotri and Arabic, and Thani Bin Ali reads the same extract in Mehri. The voice that can be heard introducing is likely to be Major P.G. Boxhall. Sheikh Ibrahim Wazir Al-Nubi was the minister/scribe of the Sultan at the time the recording was made. Thani Bin Ali was a medical assistant on Soqotra. Recording likely to have been made during the 1967 expedition to Soqotra, of which Johnstone was a member. The expedition was led by Major P. G. Boxall, and sponsored by Admiral Sir Michael Le Fanu. The group comprised of civilian and service members, and included experts on languages, geology, entomology, botany, medicine, and archaeology, as well as military field survey temas of the Royal Navy and the Royal Engineers. They also conducted a coastal hydrographic survey [information from Doe 1992, which can be found at YK.1992.b.6319]. Recording date based on date of Boxhall's expedition to Soqotra. Information on contributors, and location recording is not described on the box, cassette, or documentation", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000c", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000c/nn3": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [ + "no-nav", + ], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000c/nn3", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000c/nn3", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000c", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=0,0.36", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000d": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000d", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000d", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000c", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=0,2023.56", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "en": [ + "[A'raf Biladik, Soqotri]", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Full title", + ], + }, + "value": { + "en": [ + "[A'raf Biladik, Soqotri]", + ], + }, + }, + { + "label": { + "en": [ + "Creator", + ], + }, + "value": { + "en": [ + "Wazir Al-Nubi, Ibrahim", + "Johnstone, Thomas Muir,", + ], + }, + }, + { + "label": { + "en": [ + "Date", + ], + }, + "value": { + "en": [ + "1967 (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Soqotra, Aden Governorate Soqotra, Aden Governorate (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Yemen (Socotra) Yemen (place of origin)", + ], + }, + }, + { + "label": { + "en": [ + "Duration", + ], + }, + "value": { + "en": [ + "33 min. 44 sec.", + ], + }, + }, + { + "label": { + "en": [ + "Language", + ], + }, + "value": { + "en": [ + "sqt ara", + ], + }, + }, + { + "label": { + "en": [ + "Culture", + ], + }, + "value": { + "en": [ + "Soqotri", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "T.M. Johnstone Middle Eastern Language recordings", + ], + }, + }, + { + "label": { + "en": [ + "Held by", + ], + }, + "value": { + "en": [ + "The British Library", + ], + }, + }, + { + "label": { + "en": [ + "Identifier", + ], + }, + "value": { + "en": [ + "C733/48 S1", + ], + }, + }, + { + "label": { + "en": [ + "Shelfmark", + ], + }, + "value": { + "en": [ + "C733/48", + ], + }, + }, + { + "label": { + "en": [ + "Link to catalogue", + ], + }, + "value": { + "en": [ + "View the catalogue record", + ], + }, + }, + { + "label": { + "en": [ + "Description", + ], + }, + "value": { + "en": [ + "Information on speakers and content was provided by Dr. Miranda Morris. Ibrahim Wazir al-Nubi reads a passage called 'A'raf Biladik' [knowledge of homeland], in Soqotri and Arabic. The voice that can be heard introducing the recording is likely to be Major P.G. Boxhall. Sheikh Ibrahim Wazir Al-Nubi was the minister/scribe of the Sultan at the time the recording was made. Recording likely to have been made during the 1967 expedition to Soqotra, of which Johnstone was a member. The expedition was led by Major P. G. Boxall, and sponsored by Admiral Sir Michael Le Fanu. The group comprised of civilian and service members, and included experts on languages, geology, entomology, botany, medicine, and archaeology, as well as military field survey temas of the Royal Navy and the Royal Engineers. They also conducted a coastal hydrographic survey [information from Doe 1992, which can be found at YK.1992.b.6319]. Recording date based on date of Boxhall's expedition to Soqotra. Recording location based on languages spoken Information on contributors, and location recording is not described on the box, cassette, or documentation", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000d", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000e": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000e", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000e", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000c", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=0,1760.04", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "en": [ + "[A'raf Biladik, Mehri]", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Full title", + ], + }, + "value": { + "en": [ + "[A'raf Biladik, Mehri]", + ], + }, + }, + { + "label": { + "en": [ + "Creator", + ], + }, + "value": { + "en": [ + "unidentified", + "Johnstone, Thomas Muir,", + ], + }, + }, + { + "label": { + "en": [ + "Date", + ], + }, + "value": { + "en": [ + "1967 (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Soqotra, Aden Governorate (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Yemen (Socotra) (place of origin)", + ], + }, + }, + { + "label": { + "en": [ + "Duration", + ], + }, + "value": { + "en": [ + "29 min. 20 sec.", + ], + }, + }, + { + "label": { + "en": [ + "Language", + ], + }, + "value": { + "en": [ + "gdq", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "T.M. Johnstone Middle Eastern Language recordings", + ], + }, + }, + { + "label": { + "en": [ + "Held by", + ], + }, + "value": { + "en": [ + "The British Library", + ], + }, + }, + { + "label": { + "en": [ + "Identifier", + ], + }, + "value": { + "en": [ + "C733/48 S2", + ], + }, + }, + { + "label": { + "en": [ + "Shelfmark", + ], + }, + "value": { + "en": [ + "C733/48", + ], + }, + }, + { + "label": { + "en": [ + "Link to catalogue", + ], + }, + "value": { + "en": [ + "View the catalogue record", + ], + }, + }, + { + "label": { + "en": [ + "Description", + ], + }, + "value": { + "en": [ + "Information on speakers and content was provided by Dr. Miranda Morris. Contains recitations of 'A'raf Biladik' ['knowledge of homeland' - unidentified] in Mehri. The voice introducing the recording is likely to be Major P.G. Boxhall. Recording likely to have been made during the 1967 expedition to Soqotra, of which Johnstone was a member. The expedition was led by Major P. G. Boxall, and sponsored by Admiral Sir Michael Le Fanu. The group comprised of civilian and service members, and included experts on languages, geology, entomology, botany, medicine, and archaeology, as well as military field survey temas of the Royal Navy and the Royal Engineers. They also conducted a coastal hydrographic survey [information from Doe 1992, which can be found at YK.1992.b.6319]. Recording date based on date of Boxhall's expedition to Soqotra. Information on contributors, and location of recording is not described on the box, cassette, or documentation", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000e", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000f": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000f", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000f", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000c", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=0.36,484.8", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "en": [ + "[A'raf Biladik, Soqotri, page 4]", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Full title", + ], + }, + "value": { + "en": [ + "[A'raf Biladik, Soqotri, page 4]", + ], + }, + }, + { + "label": { + "en": [ + "Creator", + ], + }, + "value": { + "en": [ + "Bin Ali, Thani", + "Johnstone, Thomas Muir,", + "Johnstone, Thomas Muir,", + ], + }, + }, + { + "label": { + "en": [ + "Date", + ], + }, + "value": { + "en": [ + "1967 (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Aden Governorate, Soqotra? (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Yemen (Socotra) Yemen (place of origin)", + ], + }, + }, + { + "label": { + "en": [ + "Duration", + ], + }, + "value": { + "en": [ + "8 min. 05 sec.", + ], + }, + }, + { + "label": { + "en": [ + "Language", + ], + }, + "value": { + "en": [ + "sqt", + ], + }, + }, + { + "label": { + "en": [ + "Culture", + ], + }, + "value": { + "en": [ + "Soqotri", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "T.M. Johnstone Middle Eastern Language recordings", + ], + }, + }, + { + "label": { + "en": [ + "Held by", + ], + }, + "value": { + "en": [ + "The British Library", + ], + }, + }, + { + "label": { + "en": [ + "Identifier", + ], + }, + "value": { + "en": [ + "C733/49 S1 C1", + ], + }, + }, + { + "label": { + "en": [ + "Shelfmark", + ], + }, + "value": { + "en": [ + "C733/49", + ], + }, + }, + { + "label": { + "en": [ + "Link to catalogue", + ], + }, + "value": { + "en": [ + "View the catalogue record", + ], + }, + }, + { + "label": { + "en": [ + "Description", + ], + }, + "value": { + "en": [ + "Contains a recitation of 'page 4' of 'A'raf Biladik' ['knowledge of homeland' - unidentified] in Soqotri by Thani Bin Ali, introduced by a speaker likely to be Major P.G. Boxhall. Recording likely to have been made during the 1967 expedition to Soqotra, of which Johnstone was a member. The expedition was led by Major P. G. Boxall, and sponsored by Admiral Sir Michael Le Fanu. The group comprised of civilian and service members, and included experts on languages, geology, entomology, botany, medicine, and archaeology, as well as military field survey temas of the Royal Navy and the Royal Engineers. They also conducted a coastal hydrographic survey [information from Doe 1992, which can be found at YK.1992.b.6319]. Thani Bin Ali is a medical assistant on Soqotra. Recording date based on date of Boxhall's expedition to Soqotra. Information on contributors and content transcribed by ear Recording date based on the date written on the box for C733/48 Recording location based on languages spoken Information on contributors, and location recording is not described on the box, cassette, or documentation", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000f", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000016": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000016", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000016", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=487.56,526.36", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "en": [ + "[Translation of Arabic to Soqotri]", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Full title", + ], + }, + "value": { + "en": [ + "[Translation of Arabic to Soqotri]", + ], + }, + }, + { + "label": { + "en": [ + "Creator", + ], + }, + "value": { + "en": [ + "Suleiman", + "Hadrami Bedouin League member", + "Johnstone, Thomas Muir,", + "Johnstone, Thomas Muir,", + ], + }, + }, + { + "label": { + "en": [ + "Date", + ], + }, + "value": { + "en": [ + "1967 (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Soqotra, Aden Governorate (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Yemen (Socotra) (place of origin)", + ], + }, + }, + { + "label": { + "en": [ + "Duration", + ], + }, + "value": { + "en": [ + "0 min. 39 sec.", + ], + }, + }, + { + "label": { + "en": [ + "Language", + ], + }, + "value": { + "en": [ + "ara", + ], + }, + }, + { + "label": { + "en": [ + "Culture", + ], + }, + "value": { + "en": [ + "Soqotri", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "T.M. Johnstone Middle Eastern Language recordings", + ], + }, + }, + { + "label": { + "en": [ + "Held by", + ], + }, + "value": { + "en": [ + "The British Library", + ], + }, + }, + { + "label": { + "en": [ + "Identifier", + ], + }, + "value": { + "en": [ + "C733/49 S1 C2", + ], + }, + }, + { + "label": { + "en": [ + "Shelfmark", + ], + }, + "value": { + "en": [ + "C733/49", + ], + }, + }, + { + "label": { + "en": [ + "Link to catalogue", + ], + }, + "value": { + "en": [ + "View the catalogue record", + ], + }, + }, + { + "label": { + "en": [ + "Description", + ], + }, + "value": { + "en": [ + "Recording likely to have been made during the 1967 expedition to Soqotra, of which Johnstone was a member. The expedition was led by Major P. G. Boxall, and sponsored by Admiral Sir Michael Le Fanu. The group comprised of civilian and service members, and included experts on languages, geology, entomology, botany, medicine, and archaeology, as well as military field survey temas of the Royal Navy and the Royal Engineers. They also conducted a coastal hydrographic survey [information from Doe 1992, which can be found at YK.1992.b.6319]. Information on contributors and content transcribed by ear Recording date based on date of Boxhall's expedition to Soqotra. Title transcribed by ear, but does not seem to match the content, which is the two men having a brief discussion in Arabic Information on contributors, and location of recording is not described on the box, cassette, or documentation", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000016", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000016/nn3": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [ + "no-nav", + ], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000016/nn3", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000016/nn3", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=526.36,526.64", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000018": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000018", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000018", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=526.64,1026.48", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "en": [ + "[Medical interview in Arabic and Soqotri]", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Full title", + ], + }, + "value": { + "en": [ + "[Medical interview in Arabic and Soqotri]", + ], + }, + }, + { + "label": { + "en": [ + "Creator", + ], + }, + "value": { + "en": [ + "unidentified", + "Corporal Goldberg", + "unidentified", + "Suleiman", + "Johnstone, Thomas Muir,", + ], + }, + }, + { + "label": { + "en": [ + "Date", + ], + }, + "value": { + "en": [ + "1967 (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Soqotra, Aden Governorate (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Yemen (Socotra) (place of origin)", + ], + }, + }, + { + "label": { + "en": [ + "Duration", + ], + }, + "value": { + "en": [ + "8 min. 20 sec.", + ], + }, + }, + { + "label": { + "en": [ + "Language", + ], + }, + "value": { + "en": [ + "sqt ara", + ], + }, + }, + { + "label": { + "en": [ + "Culture", + ], + }, + "value": { + "en": [ + "Soqotri", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "T.M. Johnstone Middle Eastern Language recordings", + ], + }, + }, + { + "label": { + "en": [ + "Held by", + ], + }, + "value": { + "en": [ + "The British Library", + ], + }, + }, + { + "label": { + "en": [ + "Identifier", + ], + }, + "value": { + "en": [ + "C733/49 S1 C3", + ], + }, + }, + { + "label": { + "en": [ + "Shelfmark", + ], + }, + "value": { + "en": [ + "C733/49", + ], + }, + }, + { + "label": { + "en": [ + "Link to catalogue", + ], + }, + "value": { + "en": [ + "View the catalogue record", + ], + }, + }, + { + "label": { + "en": [ + "Description", + ], + }, + "value": { + "en": [ + "Names and content transcribed by ear Corporal Goldberg interviews a patient, a Bedouin child who is very sick. Johstone speaks in Arabic to Suleiman, one of the Sultan's bodyguards, who translates into Soqotri for the benefit of the Bedouin man and his child. There is a description of fire treatment as medicine to cure the boy. Recording likely to have been made during the 1967 expedition to Soqotra, of which Johnstone was a member. The expedition was led by Major P. G. Boxall, and sponsored by Admiral Sir Michael Le Fanu. The group comprised of civilian and service members, and included experts on languages, geology, entomology, botany, medicine, and archaeology, as well as military field survey temas of the Royal Navy and the Royal Engineers. They also conducted a coastal hydrographic survey [information from Doe 1992, which can be found at YK.1992.b.6319]. Recording date based on date of Boxhall's expedition to Soqotra. Recording location based on languages spoken Information on contributors, and location recording is not described on the box, cassette, or documentation", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000018", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001a": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001a", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001a", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top", + "type": "Range", + }, + ], + "items": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001b", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001b/nn2", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001c", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001c/nn3", + "type": "Range", + }, + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001d", + "type": "Range", + }, + ], + "label": { + "en": [ + "[Arabic to Soqotri translations]", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Full title", + ], + }, + "value": { + "en": [ + "[Arabic to Soqotri translations]", + ], + }, + }, + { + "label": { + "en": [ + "Creator", + ], + }, + "value": { + "en": [ + "Suleiman", + "unidentified", + "Johnstone, Thomas Muir,", + ], + }, + }, + { + "label": { + "en": [ + "Date", + ], + }, + "value": { + "en": [ + "1967 (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Soqotra, Aden Governorate (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Yemen (Socotra) (place of origin)", + ], + }, + }, + { + "label": { + "en": [ + "Duration", + ], + }, + "value": { + "en": [ + "19 min. 47 sec.", + ], + }, + }, + { + "label": { + "en": [ + "Language", + ], + }, + "value": { + "en": [ + "ara sqt", + ], + }, + }, + { + "label": { + "en": [ + "Culture", + ], + }, + "value": { + "en": [ + "Soqotri", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "T.M. Johnstone Middle Eastern Language recordings", + ], + }, + }, + { + "label": { + "en": [ + "Held by", + ], + }, + "value": { + "en": [ + "The British Library", + ], + }, + }, + { + "label": { + "en": [ + "Identifier", + ], + }, + "value": { + "en": [ + "C733/49 S1 C4-S2 C3", + ], + }, + }, + { + "label": { + "en": [ + "Shelfmark", + ], + }, + "value": { + "en": [ + "C733/49", + ], + }, + }, + { + "label": { + "en": [ + "Link to catalogue", + ], + }, + "value": { + "en": [ + "View the catalogue record", + ], + }, + }, + { + "label": { + "en": [ + "Description", + ], + }, + "value": { + "en": [ + "Individual items described separately Suleiman is described as 'one of the Sultan's bodyguards' Various recordings of Arabic - Soqotri translations made with Suleiman Recording likely to have been made during the 1967 expedition to Soqotra, of which Johnstone was a member. The expedition was led by Major P. G. Boxall, and sponsored by Admiral Sir Michael Le Fanu. The group comprised of civilian and service members, and included experts on languages, geology, entomology, botany, medicine, and archaeology, as well as military field survey temas of the Royal Navy and the Royal Engineers. They also conducted a coastal hydrographic survey [information from Doe 1992, which can be found at YK.1992.b.6319]. Information on contributors and content transcribed by ear from English and Arabic Recording date based on date of Boxhall's expedition to Soqotra. Information on contributors, and location of recording is not described on the box, cassette, or documentation", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001a", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001b": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001b", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001b", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001a", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=1027,1392.56", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + { + "selector": { + "type": "FragmentSelector", + "value": "t=0,259.8", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "en": [ + "[Single-word translation of Arabic to Soqotri]", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Full title", + ], + }, + "value": { + "en": [ + "[Single-word translation of Arabic to Soqotri]", + ], + }, + }, + { + "label": { + "en": [ + "Creator", + ], + }, + "value": { + "en": [ + "Suleiman", + "Johnstone, Thomas Muir,", + ], + }, + }, + { + "label": { + "en": [ + "Date", + ], + }, + "value": { + "en": [ + "1967 (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Soqotra, Aden Governorate (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Yemen (Socotra) (place of origin)", + ], + }, + }, + { + "label": { + "en": [ + "Duration", + ], + }, + "value": { + "en": [ + "10 min. 25 sec.", + ], + }, + }, + { + "label": { + "en": [ + "Language", + ], + }, + "value": { + "en": [ + "ara sqt", + ], + }, + }, + { + "label": { + "en": [ + "Culture", + ], + }, + "value": { + "en": [ + "Soqotri", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "T.M. Johnstone Middle Eastern Language recordings", + ], + }, + }, + { + "label": { + "en": [ + "Held by", + ], + }, + "value": { + "en": [ + "The British Library", + ], + }, + }, + { + "label": { + "en": [ + "Identifier", + ], + }, + "value": { + "en": [ + "C733/49 S1 C4-S2 C1", + ], + }, + }, + { + "label": { + "en": [ + "Shelfmark", + ], + }, + "value": { + "en": [ + "C733/49", + ], + }, + }, + { + "label": { + "en": [ + "Link to catalogue", + ], + }, + "value": { + "en": [ + "View the catalogue record", + ], + }, + }, + { + "label": { + "en": [ + "Description", + ], + }, + "value": { + "en": [ + "Suleiman is described as 'one of the Sultan's bodyguards' Contains Soqotri translations of the Arabic words for 'tall', 'short', 'sea', 'eat', 'house', 'homeland', 'town', 'sun', 'walk', 'mountain', 'far', 'near', 'bread', 'daughter', 'head', 'chest', 'eye', 'eyebrow', 'tongue', 'ghee', 'milk', 'chicken', 'dog', 'camel', 'fire', 'donkey', as well as numbers, and some unidentified words. Recording likely to have been made during the 1967 expedition to Soqotra, of which Johnstone was a member. The expedition was led by Major P. G. Boxall, and sponsored by Admiral Sir Michael Le Fanu. The group comprised of civilian and service members, and included experts on languages, geology, entomology, botany, medicine, and archaeology, as well as military field survey temas of the Royal Navy and the Royal Engineers. They also conducted a coastal hydrographic survey [information from Doe 1992, which can be found at YK.1992.b.6319]. Recording date based on date of Boxhall's expedition to Soqotra. Information on contributors and content transcribed by ear from English and Arabic Information on contributors, and location of recording is not described on the box, cassette, or documentation", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001b", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001b/nn2": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [ + "no-nav", + ], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001b/nn2", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001b/nn2", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001a", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=259.8,260", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001c": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001c", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001c", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001a", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=260,276.24", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "en": [ + "[Pronunciation of lateral s]", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Full title", + ], + }, + "value": { + "en": [ + "[Pronunciation of lateral s]", + ], + }, + }, + { + "label": { + "en": [ + "Creator", + ], + }, + "value": { + "en": [ + "Suleiman", + "Johnstone, Thomas Muir,", + ], + }, + }, + { + "label": { + "en": [ + "Date", + ], + }, + "value": { + "en": [ + "1967 (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Soqotra, Aden Governorate (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Yemen (Socotra) (place of origin)", + ], + }, + }, + { + "label": { + "en": [ + "Duration", + ], + }, + "value": { + "en": [ + "0 min. 17 sec.", + ], + }, + }, + { + "label": { + "en": [ + "Language", + ], + }, + "value": { + "en": [ + "sqt", + ], + }, + }, + { + "label": { + "en": [ + "Culture", + ], + }, + "value": { + "en": [ + "Soqotri", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "T.M. Johnstone Middle Eastern Language recordings", + ], + }, + }, + { + "label": { + "en": [ + "Held by", + ], + }, + "value": { + "en": [ + "The British Library", + ], + }, + }, + { + "label": { + "en": [ + "Identifier", + ], + }, + "value": { + "en": [ + "C733/49 S2 C2", + ], + }, + }, + { + "label": { + "en": [ + "Shelfmark", + ], + }, + "value": { + "en": [ + "C733/49", + ], + }, + }, + { + "label": { + "en": [ + "Link to catalogue", + ], + }, + "value": { + "en": [ + "View the catalogue record", + ], + }, + }, + { + "label": { + "en": [ + "Description", + ], + }, + "value": { + "en": [ + "Suleiman is described as 'one of the Sultan's bodyguards' Pronunciation of lateral s, or 'ɮ' being pronounced by Suleiman [voice identified by ear] Recording likely to have been made during the 1967 expedition to Soqotra, of which Johnstone was a member. The expedition was led by Major P. G. Boxall, and sponsored by Admiral Sir Michael Le Fanu. The group comprised of civilian and service members, and included experts on languages, geology, entomology, botany, medicine, and archaeology, as well as military field survey temas of the Royal Navy and the Royal Engineers. They also conducted a coastal hydrographic survey [information from Doe 1992, which can be found at YK.1992.b.6319]. Information on contributors and content transcribed by ear Recording date based on date of Boxhall's expedition to Soqotra. Information on contributors, and location of recording is not described on the box, cassette, or documentation", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001c", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001c/nn3": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [ + "no-nav", + ], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001c/nn3", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001c/nn3", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001a", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=276.24,277.44", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001d": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001d", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001d", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001a", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=277.44,821.36", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "en": [ + "[Medical phrases]", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Full title", + ], + }, + "value": { + "en": [ + "[Medical phrases]", + ], + }, + }, + { + "label": { + "en": [ + "Creator", + ], + }, + "value": { + "en": [ + "Suleiman", + "Johnstone, Thomas Muir,", + "Johnstone, Thomas Muir,", + ], + }, + }, + { + "label": { + "en": [ + "Date", + ], + }, + "value": { + "en": [ + "1967 (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Soqotra, Aden Governorate (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Yemen (Socotra) (place of origin)", + ], + }, + }, + { + "label": { + "en": [ + "Duration", + ], + }, + "value": { + "en": [ + "9 min. 04 sec.", + ], + }, + }, + { + "label": { + "en": [ + "Language", + ], + }, + "value": { + "en": [ + "ara sqt", + ], + }, + }, + { + "label": { + "en": [ + "Culture", + ], + }, + "value": { + "en": [ + "Soqotri", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "T.M. Johnstone Middle Eastern Language recordings", + ], + }, + }, + { + "label": { + "en": [ + "Held by", + ], + }, + "value": { + "en": [ + "The British Library", + ], + }, + }, + { + "label": { + "en": [ + "Identifier", + ], + }, + "value": { + "en": [ + "C733/49 S2 C3", + ], + }, + }, + { + "label": { + "en": [ + "Shelfmark", + ], + }, + "value": { + "en": [ + "C733/49", + ], + }, + }, + { + "label": { + "en": [ + "Link to catalogue", + ], + }, + "value": { + "en": [ + "View the catalogue record", + ], + }, + }, + { + "label": { + "en": [ + "Description", + ], + }, + "value": { + "en": [ + "Suleiman is described as 'one of the Sultan's bodyguards' Medical phrases translated from Arabic to Soqotri Recording likely to have been made during the 1967 expedition to Soqotra, of which Johnstone was a member. The expedition was led by Major P. G. Boxall, and sponsored by Admiral Sir Michael Le Fanu. The group comprised of civilian and service members, and included experts on languages, geology, entomology, botany, medicine, and archaeology, as well as military field survey teams of the Royal Navy and the Royal Engineers. They also conducted a coastal hydrographic survey [information from Doe 1992, which can be found at YK.1992.b.6319]. Information on contributors and content transcribed by ear Recording date based on date of Boxhall's expedition to Soqotra. Recording location based on language spoken Information on contributors, and location of recording is not described on the box, cassette, or documentation", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001d", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000024": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000024", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000024", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=821.76,992.32", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "en": [ + "Arabic/Soqotri [Mu'allaqat of the Imru Al-Qays]", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Full title", + ], + }, + "value": { + "en": [ + "Arabic/Soqotri [Mu'allaqat of the Imru Al-Qays]", + ], + }, + }, + { + "label": { + "en": [ + "Creator", + ], + }, + "value": { + "en": [ + "unidentified", + "Johnstone, Thomas Muir,", + ], + }, + }, + { + "label": { + "en": [ + "Date", + ], + }, + "value": { + "en": [ + "1967 (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Soqotra, Aden Governorate (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Yemen (Socotra) (place of origin)", + ], + }, + }, + { + "label": { + "en": [ + "Duration", + ], + }, + "value": { + "en": [ + "2 min. 51 sec.", + ], + }, + }, + { + "label": { + "en": [ + "Language", + ], + }, + "value": { + "en": [ + "sqt ara", + ], + }, + }, + { + "label": { + "en": [ + "Culture", + ], + }, + "value": { + "en": [ + "Soqotri", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "T.M. Johnstone Middle Eastern Language recordings", + ], + }, + }, + { + "label": { + "en": [ + "Held by", + ], + }, + "value": { + "en": [ + "The British Library", + ], + }, + }, + { + "label": { + "en": [ + "Identifier", + ], + }, + "value": { + "en": [ + "C733/49 S2 C4", + ], + }, + }, + { + "label": { + "en": [ + "Shelfmark", + ], + }, + "value": { + "en": [ + "C733/49", + ], + }, + }, + { + "label": { + "en": [ + "Link to catalogue", + ], + }, + "value": { + "en": [ + "View the catalogue record", + ], + }, + }, + { + "label": { + "en": [ + "Description", + ], + }, + "value": { + "en": [ + "The first few lines of the Mu'allaqat of the Imru Al-Qays in Arabic and Soqotri Recording likely to have been made during the 1967 expedition to Soqotra, of which Johnstone was a member. The expedition was led by Major P. G. Boxall, and sponsored by Admiral Sir Michael Le Fanu. The group comprised of civilian and service members, and included experts on languages, geology, entomology, botany, medicine, and archaeology, as well as military field survey teams of the Royal Navy and the Royal Engineers. They also conducted a coastal hydrographic survey [information from Doe 1992, which can be found at YK.1992.b.6319]. Same speaker as C733/49 C5 [identified by ear] Recording date based on date of Boxhall's expedition to Soqotra. Information on contributors, and location recording is not described on the box, cassette, or documentation", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000024", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000024/nn6": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [ + "no-nav", + ], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000024/nn6", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000024/nn6", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=992.32,992.96", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000026": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000026", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000026", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=992.96,1404.92", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "en": [ + "Arabic/Soqotri [Page 121]", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Full title", + ], + }, + "value": { + "en": [ + "Arabic/Soqotri [Page 121]", + ], + }, + }, + { + "label": { + "en": [ + "Creator", + ], + }, + "value": { + "en": [ + "unidentified", + "Johnstone, Thomas Muir,", + ], + }, + }, + { + "label": { + "en": [ + "Date", + ], + }, + "value": { + "en": [ + "1967 (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Soqotra, Aden Governorate (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Yemen (Socotra) (place of origin)", + ], + }, + }, + { + "label": { + "en": [ + "Duration", + ], + }, + "value": { + "en": [ + "6 min. 52 sec.", + ], + }, + }, + { + "label": { + "en": [ + "Language", + ], + }, + "value": { + "en": [ + "sqt ara", + ], + }, + }, + { + "label": { + "en": [ + "Culture", + ], + }, + "value": { + "en": [ + "Soqotri", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "T.M. Johnstone Middle Eastern Language recordings", + ], + }, + }, + { + "label": { + "en": [ + "Held by", + ], + }, + "value": { + "en": [ + "The British Library", + ], + }, + }, + { + "label": { + "en": [ + "Identifier", + ], + }, + "value": { + "en": [ + "C733/49 S2 C5", + ], + }, + }, + { + "label": { + "en": [ + "Shelfmark", + ], + }, + "value": { + "en": [ + "C733/49", + ], + }, + }, + { + "label": { + "en": [ + "Link to catalogue", + ], + }, + "value": { + "en": [ + "View the catalogue record", + ], + }, + }, + { + "label": { + "en": [ + "Description", + ], + }, + "value": { + "en": [ + "'Phrases from page 121 translated from Arabic into Soqotri' [transcribed by ear] Same speaker as C733/49 C4 [identified by ear] Recording likely to have been made during the 1967 expedition to Soqotra, of which Johnstone was a member. The expedition was led by Major P. G. Boxall, and sponsored by Admiral Sir Michael Le Fanu. The group comprised of civilian and service members, and included experts on languages, geology, entomology, botany, medicine, and archaeology, as well as military field survey teams of the Royal Navy and the Royal Engineers. They also conducted a coastal hydrographic survey [information from Doe 1992, which can be found at YK.1992.b.6319]. Recording date based on date of Boxhall's expedition to Soqotra. Information on contributors, and location recording is not described on the box, cassette, or documentation", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000026", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000028": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000028", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000028", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=0,736", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "en": [ + "[Phrases from Arabic to Soqotri]", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Full title", + ], + }, + "value": { + "en": [ + "[Phrases from Arabic to Soqotri]", + ], + }, + }, + { + "label": { + "en": [ + "Creator", + ], + }, + "value": { + "en": [ + "unidentified", + "Johnstone, Thomas Muir,", + "Johnstone, Thomas Muir,", + ], + }, + }, + { + "label": { + "en": [ + "Date", + ], + }, + "value": { + "en": [ + "1965-12? (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Abd Al-Kuri, Soqotra Archipelago, Aden Governorate? (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Yemen (Socotra) Yemen (place of origin)", + ], + }, + }, + { + "label": { + "en": [ + "Duration", + ], + }, + "value": { + "en": [ + "12 min. 16 sec.", + ], + }, + }, + { + "label": { + "en": [ + "Language", + ], + }, + "value": { + "en": [ + "sqt ara", + ], + }, + }, + { + "label": { + "en": [ + "Culture", + ], + }, + "value": { + "en": [ + "Soqotri", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "T.M. Johnstone Middle Eastern Language recordings", + ], + }, + }, + { + "label": { + "en": [ + "Held by", + ], + }, + "value": { + "en": [ + "The British Library", + ], + }, + }, + { + "label": { + "en": [ + "Identifier", + ], + }, + "value": { + "en": [ + "C733/50 S1 C1", + ], + }, + }, + { + "label": { + "en": [ + "Shelfmark", + ], + }, + "value": { + "en": [ + "C733/50", + ], + }, + }, + { + "label": { + "en": [ + "Link to catalogue", + ], + }, + "value": { + "en": [ + "View the catalogue record", + ], + }, + }, + { + "label": { + "en": [ + "Description", + ], + }, + "value": { + "en": [ + "'Phrases from Arabic to Soqotri' (transcribed by ear) Recording date based on note on box for C733/48 Recording location based on languages spoken, and on note on box for C733/15 Information on contributors is not described on the box, cassette, or documentation", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000028", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000028/nn8": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [ + "no-nav", + ], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000028/nn8", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000028/nn8", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=736,736.72", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002a": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002a", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002a", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=736.72,1158.84", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "en": [ + "[Soqotri songs]", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Full title", + ], + }, + "value": { + "en": [ + "[Soqotri songs]", + ], + }, + }, + { + "label": { + "en": [ + "Creator", + ], + }, + "value": { + "en": [ + "unidentified", + "unidentified", + "Johnstone, Thomas Muir,", + ], + }, + }, + { + "label": { + "en": [ + "Date", + ], + }, + "value": { + "en": [ + "1967 (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Soqotra, Aden Governorate (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Yemen (Socotra) (place of origin)", + ], + }, + }, + { + "label": { + "en": [ + "Duration", + ], + }, + "value": { + "en": [ + "7 min. 02 sec.", + ], + }, + }, + { + "label": { + "en": [ + "Language", + ], + }, + "value": { + "en": [ + "sqt ara", + ], + }, + }, + { + "label": { + "en": [ + "Culture", + ], + }, + "value": { + "en": [ + "Soqotri", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "T.M. Johnstone Middle Eastern Language recordings", + ], + }, + }, + { + "label": { + "en": [ + "Held by", + ], + }, + "value": { + "en": [ + "The British Library", + ], + }, + }, + { + "label": { + "en": [ + "Identifier", + ], + }, + "value": { + "en": [ + "C733/50 S1 C2", + ], + }, + }, + { + "label": { + "en": [ + "Shelfmark", + ], + }, + "value": { + "en": [ + "C733/50", + ], + }, + }, + { + "label": { + "en": [ + "Link to catalogue", + ], + }, + "value": { + "en": [ + "View the catalogue record", + ], + }, + }, + { + "label": { + "en": [ + "Description", + ], + }, + "value": { + "en": [ + "Information on content and speakers was provided by Dr. Miranda Morris Soqotri songs and poetry with Arabic translation, and some talk. The songs/poem is followed by someone speaking in Soqotri. After he sings, he demands to be paid 20 shillings as he is a good man. He says ‘tell me! How many camels do you want?’ and says he has been with other foreigners, travelled, with a compass, been to many places, ‘I’m a good man, employ me!’. Finally, there is a brief fragment of a 'translation of an Arabic text into Mahri' [identified by ear]. Recording likely to have been made during the 1967 expedition to Soqotra, of which Johnstone was a member. The expedition was led by Major P. G. Boxall, and sponsored by Admiral Sir Michael Le Fanu. The group comprised of civilian and service members, and included experts on languages, geology, entomology, botany, medicine, and archaeology, as well as military field survey teams of the Royal Navy and the Royal Engineers. They also conducted a coastal hydrographic survey [information from Doe 1992, which can be found at YK.1992.b.6319]. Recording date based on date of Boxhall's expedition to Soqotra. Information on contributors, and location recording is not described on the box, cassette, or documentation", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00002a", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002a/nn9": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [ + "no-nav", + ], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002a/nn9", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002a/nn9", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=1158.84,1159.12", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002c": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002c", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002c", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=1159.12,1346.4", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "en": [ + "[Arabic/Mahri translation]", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Full title", + ], + }, + "value": { + "en": [ + "[Arabic/Mahri translation]", + ], + }, + }, + { + "label": { + "en": [ + "Creator", + ], + }, + "value": { + "en": [ + "unidentified", + "Johnstone, Thomas Muir,", + ], + }, + }, + { + "label": { + "en": [ + "Date", + ], + }, + "value": { + "en": [ + "1967 (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Soqotra, Aden Governorate (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Yemen (Socotra) (place of origin)", + ], + }, + }, + { + "label": { + "en": [ + "Duration", + ], + }, + "value": { + "en": [ + "3 min. 07 sec.", + ], + }, + }, + { + "label": { + "en": [ + "Language", + ], + }, + "value": { + "en": [ + "gdq ara", + ], + }, + }, + { + "label": { + "en": [ + "Culture", + ], + }, + "value": { + "en": [ + "Mehri", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "T.M. Johnstone Middle Eastern Language recordings", + ], + }, + }, + { + "label": { + "en": [ + "Held by", + ], + }, + "value": { + "en": [ + "The British Library", + ], + }, + }, + { + "label": { + "en": [ + "Identifier", + ], + }, + "value": { + "en": [ + "C733/50 S1 C3", + ], + }, + }, + { + "label": { + "en": [ + "Shelfmark", + ], + }, + "value": { + "en": [ + "C733/50", + ], + }, + }, + { + "label": { + "en": [ + "Link to catalogue", + ], + }, + "value": { + "en": [ + "View the catalogue record", + ], + }, + }, + { + "label": { + "en": [ + "Description", + ], + }, + "value": { + "en": [ + "A translation of an Arabic text into Mehri Recording likely to have been made during the 1967 expedition to Soqotra, of which Johnstone was a member. The expedition was led by Major P. G. Boxall, and sponsored by Admiral Sir Michael Le Fanu. The group comprised of civilian and service members, and included experts on languages, geology, entomology, botany, medicine, and archaeology, as well as military field survey teams of the Royal Navy and the Royal Engineers. They also conducted a coastal hydrographic survey [information from Doe 1992, which can be found at YK.1992.b.6319]. Recording date based on date of Boxhall's expedition to Soqotra. Information on contributors, and location recording is not described on the box, cassette, or documentation", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00002c", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002e": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002e", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002e", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top", + "type": "Range", + }, + ], + "items": [ + { + "selector": { + "type": "FragmentSelector", + "value": "t=0,1398.84", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + { + "selector": { + "type": "FragmentSelector", + "value": "t=1346.52,1406.32", + }, + "source": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "en": [ + "['Survey' recordings]", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Full title", + ], + }, + "value": { + "en": [ + "['Survey' recordings]", + ], + }, + }, + { + "label": { + "en": [ + "Creator", + ], + }, + "value": { + "en": [ + "unidentified", + "Johnstone, Thomas Muir,", + ], + }, + }, + { + "label": { + "en": [ + "Date", + ], + }, + "value": { + "en": [ + "not before 1966-01-16 (recorded)", + ], + }, + }, + { + "label": { + "en": [ + "Place of creation", + ], + }, + "value": { + "en": [ + "Yemen (Socotra) (place of origin)", + ], + }, + }, + { + "label": { + "en": [ + "Duration", + ], + }, + "value": { + "en": [ + "24 min. 18 sec.", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "T.M. Johnstone Middle Eastern Language recordings", + ], + }, + }, + { + "label": { + "en": [ + "Held by", + ], + }, + "value": { + "en": [ + "The British Library", + ], + }, + }, + { + "label": { + "en": [ + "Identifier", + ], + }, + "value": { + "en": [ + "C733/50 S2 C1; S1 C4", + ], + }, + }, + { + "label": { + "en": [ + "Shelfmark", + ], + }, + "value": { + "en": [ + "C733/50", + ], + }, + }, + { + "label": { + "en": [ + "Link to catalogue", + ], + }, + "value": { + "en": [ + "View the catalogue record", + ], + }, + }, + { + "label": { + "en": [ + "Description", + ], + }, + "value": { + "en": [ + "An expedition member reads his field diary, including geological information and anecdotes of the group's travels Recording date based on the dates announced in the recording", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [ + { + "id": "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00002e", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + }, + "Selector": {}, + "Service": { + "http://access.bl.uk/item/share/ark:/81055/vdc_100052320369.0x000002": { + "id": "http://access.bl.uk/item/share/ark:/81055/vdc_100052320369.0x000002", + "profile": "http://universalviewer.io/share-extensions-profile", + "type": "Service", + }, + "https://api.bl.uk/auth/iiif/login": { + "description": "Some portions of this recording may be unavailable due to rights restrictions.", + "header": "Please Log-In", + "id": "https://api.bl.uk/auth/iiif/login", + "label": "Login to The British Library", + "profile": "http://iiif.io/api/auth/1/login", + "service": [ + { + "id": "https://api.bl.uk/auth/iiif/token", + "type": "AuthTokenService1", + }, + ], + "type": "AuthCookieService1", + }, + "https://api.bl.uk/auth/iiif/token": { + "id": "https://api.bl.uk/auth/iiif/token", + "profile": "http://iiif.io/api/auth/1/token", + "type": "AuthTokenService1", + }, + "https://api.bl.uk/media/dash/ark:/81055/vdc_100052320369.0x000033/probe.json": { + "id": "https://api.bl.uk/media/dash/ark:/81055/vdc_100052320369.0x000033/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + "https://api.bl.uk/media/dash/ark:/81055/vdc_100052320369.0x000035/probe.json": { + "id": "https://api.bl.uk/media/dash/ark:/81055/vdc_100052320369.0x000035/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + "https://api.bl.uk/media/dash/ark:/81055/vdc_100052320369.0x000037/probe.json": { + "id": "https://api.bl.uk/media/dash/ark:/81055/vdc_100052320369.0x000037/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + "https://api.bl.uk/media/dash/ark:/81055/vdc_100052320369.0x000039/probe.json": { + "id": "https://api.bl.uk/media/dash/ark:/81055/vdc_100052320369.0x000039/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + "https://api.bl.uk/media/dash/ark:/81055/vdc_100052320369.0x00003b/probe.json": { + "id": "https://api.bl.uk/media/dash/ark:/81055/vdc_100052320369.0x00003b/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + "https://api.bl.uk/media/dash/ark:/81055/vdc_100052320369.0x00003d/probe.json": { + "id": "https://api.bl.uk/media/dash/ark:/81055/vdc_100052320369.0x00003d/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + "https://api.bl.uk/media/hls/ark:/81055/vdc_100052320369.0x000033/probe.json": { + "id": "https://api.bl.uk/media/hls/ark:/81055/vdc_100052320369.0x000033/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + "https://api.bl.uk/media/hls/ark:/81055/vdc_100052320369.0x000035/probe.json": { + "id": "https://api.bl.uk/media/hls/ark:/81055/vdc_100052320369.0x000035/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + "https://api.bl.uk/media/hls/ark:/81055/vdc_100052320369.0x000037/probe.json": { + "id": "https://api.bl.uk/media/hls/ark:/81055/vdc_100052320369.0x000037/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + "https://api.bl.uk/media/hls/ark:/81055/vdc_100052320369.0x000039/probe.json": { + "id": "https://api.bl.uk/media/hls/ark:/81055/vdc_100052320369.0x000039/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + "https://api.bl.uk/media/hls/ark:/81055/vdc_100052320369.0x00003b/probe.json": { + "id": "https://api.bl.uk/media/hls/ark:/81055/vdc_100052320369.0x00003b/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + "https://api.bl.uk/media/hls/ark:/81055/vdc_100052320369.0x00003d/probe.json": { + "id": "https://api.bl.uk/media/hls/ark:/81055/vdc_100052320369.0x00003d/probe.json", + "profile": "http://iiif.io/api/auth/1/probe", + "type": "AuthProbeService1", + }, + }, + }, + "mapping": { + "http://access.bl.uk/item/viewer/ark:/81055/vdc_100052320369.0x000002": "ContentResource", + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000002/top": "ContentResource", + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000c": "ContentResource", + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000d": "ContentResource", + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000e": "ContentResource", + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00000f": "ContentResource", + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000016": "ContentResource", + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000018": "ContentResource", + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001a": "ContentResource", + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001b": "ContentResource", + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001c": "ContentResource", + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00001d": "ContentResource", + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000024": "ContentResource", + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000026": "ContentResource", + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x000028": "ContentResource", + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00002a": "ContentResource", + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00002c": "ContentResource", + "https://api.bl.uk/item/download/ark:/81055/vdc_100052320369.0x000002/ark:/81055/vdc_100052320369.0x00002e": "ContentResource", + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000033/index.m3u8": "ContentResource", + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000033/manifest.mpd": "ContentResource", + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000035/index.m3u8": "ContentResource", + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000035/manifest.mpd": "ContentResource", + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000037/index.m3u8": "ContentResource", + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000037/manifest.mpd": "ContentResource", + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000039/index.m3u8": "ContentResource", + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x000039/manifest.mpd": "ContentResource", + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x00003b/index.m3u8": "ContentResource", + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x00003b/manifest.mpd": "ContentResource", + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x00003d/index.m3u8": "ContentResource", + "https://api.bl.uk/media/iiif/ark:/81055/vdc_100052320369.0x00003d/manifest.mpd": "ContentResource", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/a1": "AnnotationPage", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/a1/a1": "Annotation", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/poster": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/manifest.json": "Manifest", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/top/nn9": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004#t=0,2023.56": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004/anno1": "AnnotationPage", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004/anno1/1": "Annotation", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005#t=0,1760.04": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005/anno2": "AnnotationPage", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005/anno2/1": "Annotation", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=0,0.36": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=0.36,484.8": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=1027,1392.56": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=487.56,526.36": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=526.36,526.64": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007#t=526.64,1026.48": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007/anno3": "AnnotationPage", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007/anno3/1": "Annotation", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=0,259.8": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=259.8,260": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=260,276.24": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=276.24,277.44": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=277.44,821.36": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=821.76,992.32": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=992.32,992.96": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008#t=992.96,1404.92": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008/anno4": "AnnotationPage", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008/anno4/1": "Annotation", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=0,736": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=1158.84,1159.12": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=1159.12,1346.4": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=1346.4,1406.32": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=1346.52,1406.32": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=736,736.72": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a#t=736.72,1158.84": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a/anno5": "AnnotationPage", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a/anno5/1": "Annotation", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b#t=0,1398.84": "Canvas", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b/anno6": "AnnotationPage", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b/anno6/1": "Annotation", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000c": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000c/nn3": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000d": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000e": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000f": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000016": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000016/nn3": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000018": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001a": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001b": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001b/nn2": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001c": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001c/nn3": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00001d": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000024": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000024/nn6": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000026": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000028": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000028/nn8": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002a": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002a/nn9": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002c": "Range", + "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00002e": "Range", + "https://iiif-commons.github.io/iiif-av-component/examples/data/bl/sounds-tests/posters/world.jpg": "ContentResource", + "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000032.dat": "ContentResource", + "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000034.dat": "ContentResource", + "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000036.dat": "ContentResource", + "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x000038.dat": "ContentResource", + "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x00003a.dat": "ContentResource", + "https://iiif-waveforms.s3.amazonaws.com/vdc_100052320369.0x00003c.dat": "ContentResource", + "https://www.bl.uk/": "ContentResource", + "https://www.bl.uk/about-us": "Agent", + "https://www.bl.uk/images/bl_logo_100.gif": "ContentResource", + "vault://3093138b": "ContentResource", + "vault://3f476ceb": "ContentResource", + "vault://4f90752b": "ContentResource", + "vault://73ce47ab": "ContentResource", + "vault://a894ff6b": "ContentResource", + "vault://c74ef3cb": "ContentResource", + }, + "resource": { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/has-part.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + }, + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 0, + "height": 3024, + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Canvas with a single IIIF image", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 4032, + }, + }, + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": { + "format": "image/jpeg", + "height": 3024, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "@explicit": true, + "format": {}, + "height": {}, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", + "service": {}, + "type": "Image", + "width": {}, + }, + { + "@explicit": true, + "format": {}, + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "type": "Image", + }, + ], + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 4032, + }, + }, + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json": { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", + "type": "Manifest", + }, + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "type": "Canvas", + }, + ], + "label": { + "en": [ + "Picture of Göttingen taken during the 2019 IIIF Conference", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": {}, + "Selector": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen": { + "id": "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen", + "profile": "level1", + "type": "ImageService3", + }, + }, + }, + "mapping": { + "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/918ecd18c2592080851777620de9bcb5-gottingen/full/max/0/default.jpg": "ContentResource", + }, + "resource": { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/ocean-liners.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.vam.ac.uk/collections/O1023003/anno/a1": { + "body": [ + { + "id": "https://framemark.vam.ac.uk/collections/2013GU2911/full/full/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.vam.ac.uk/collections/O1023003/anno/a1", + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a1": { + "body": [ + { + "id": "vault://9db702ac", + "type": "ContentResource", + }, + ], + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a1", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1", + "type": "Annotation", + }, + ], + "motivation": [ + "describing", + ], + "target": { + "selector": { + "type": "FragmentSelector", + "value": "xywh=1800,2000,500,500", + }, + "source": { + "id": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a10": { + "body": [ + { + "id": "vault://cd5ac71c", + "type": "ContentResource", + }, + ], + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a10", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a10", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1", + "type": "Annotation", + }, + ], + "motivation": [ + "describing", + ], + "target": { + "selector": { + "type": "FragmentSelector", + "value": "xywh=1500,3250,100,200", + }, + "source": { + "id": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a2": { + "body": [ + { + "id": "vault://273a0e05", + "type": "ContentResource", + }, + ], + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a2", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1", + "type": "Annotation", + }, + ], + "motivation": [ + "describing", + ], + "target": { + "selector": { + "type": "FragmentSelector", + "value": "xywh=3000,2100,100,200", + }, + "source": { + "id": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a3": { + "body": [ + { + "id": "vault://7ef24143", + "type": "ContentResource", + }, + ], + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a3", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a3", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1", + "type": "Annotation", + }, + ], + "motivation": [ + "describing", + ], + "target": { + "selector": { + "type": "FragmentSelector", + "value": "xywh=2000,2800,400,400", + }, + "source": { + "id": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a4": { + "body": [ + { + "id": "vault://eb28a21a", + "type": "ContentResource", + }, + ], + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a4", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a4", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1", + "type": "Annotation", + }, + ], + "motivation": [ + "describing", + ], + "target": { + "selector": { + "type": "FragmentSelector", + "value": "xywh=1400,2500,100,200", + }, + "source": { + "id": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a5": { + "body": [ + { + "id": "vault://49c80c4f", + "type": "ContentResource", + }, + ], + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a5", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a5", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1", + "type": "Annotation", + }, + ], + "motivation": [ + "describing", + ], + "target": { + "selector": { + "type": "FragmentSelector", + "value": "xywh=2450,3800,100,200", + }, + "source": { + "id": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a6": { + "body": [ + { + "id": "vault://f2184d89", + "type": "ContentResource", + }, + ], + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a6", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a6", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1", + "type": "Annotation", + }, + ], + "motivation": [ + "describing", + ], + "target": { + "selector": { + "type": "FragmentSelector", + "value": "xywh=800,3500,100,200", + }, + "source": { + "id": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a7": { + "body": [ + { + "id": "vault://9a81c074", + "type": "ContentResource", + }, + ], + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a7", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a7", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1", + "type": "Annotation", + }, + ], + "motivation": [ + "describing", + ], + "target": { + "selector": { + "type": "FragmentSelector", + "value": "xywh=2500,4500,500,800", + }, + "source": { + "id": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a8": { + "body": [ + { + "id": "vault://457d03bf", + "type": "ContentResource", + }, + ], + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a8", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a8", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1", + "type": "Annotation", + }, + ], + "motivation": [ + "describing", + ], + "target": { + "selector": { + "type": "FragmentSelector", + "value": "xywh=3000,4000,100,200", + }, + "source": { + "id": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a9": { + "body": [ + { + "id": "vault://c83a324b", + "type": "ContentResource", + }, + ], + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a9", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a9", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1", + "type": "Annotation", + }, + ], + "motivation": [ + "describing", + ], + "target": { + "selector": { + "type": "FragmentSelector", + "value": "xywh=2100,4000,100,200", + }, + "source": { + "id": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1", + "items": [ + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a1", + "type": "Annotation", + }, + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a2", + "type": "Annotation", + }, + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a3", + "type": "Annotation", + }, + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a4", + "type": "Annotation", + }, + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a5", + "type": "Annotation", + }, + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a6", + "type": "Annotation", + }, + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a7", + "type": "Annotation", + }, + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a8", + "type": "Annotation", + }, + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a9", + "type": "Annotation", + }, + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a10", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "vault://e29cf2aa": { + "behavior": [], + "homepage": [], + "id": "vault://e29cf2aa", + "items": [ + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/anno/a1", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + }, + "Canvas": { + "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 6000, + "homepage": [], + "id": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0", + "items": [ + { + "id": "vault://e29cf2aa", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Object image 0", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 3788, + }, + }, + "Collection": {}, + "ContentResource": { + "https://collections.vam.ac.uk/item/O1023003.jsonld": { + "@format": "application/ld+json", + "id": "https://collections.vam.ac.uk/item/O1023003.jsonld", + "iiif-parser:hasPart": [ + { + "id": "https://collections.vam.ac.uk/item/O1023003.jsonld", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/manifest.json", + "type": "Dataset", + }, + ], + "type": "Dataset", + }, + "https://framemark.vam.ac.uk/collections/2013GU2911/full/full/0/default.jpg": { + "format": "image/jpeg", + "height": 6000, + "id": "https://framemark.vam.ac.uk/collections/2013GU2911/full/full/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://framemark.vam.ac.uk/collections/2013GU2911/full/full/0/default.jpg", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/anno/a1", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://framemark.vam.ac.uk/collections/2013GU2911", + "@type": "ImageService2", + "profile": "level1", + }, + ], + "type": "Image", + "width": 3788, + }, + "vault://273a0e05": { + "format": "text/html", + "id": "vault://273a0e05", + "iiif-parser:hasPart": [ + { + "id": "vault://273a0e05", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a2", + "type": "TextualBody", + }, + ], + "type": "TextualBody", + "value": "

Garden lounge

“As cool, as restful, as any terrace overlooking a rose-garden.” (The New Art of Going Abroad, 1929). Overlooking the sea and decorated with palms, the garden lounge was a fashionable place to have tea and was sometimes used for dancing.

Photograph from The New Art of Going Abroad, 1929, US. National Art Library: 38041986015030. © Victoria and Albert Museum, London

", + }, + "vault://457d03bf": { + "format": "text/html", + "id": "vault://457d03bf", + "iiif-parser:hasPart": [ + { + "id": "vault://457d03bf", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a8", + "type": "TextualBody", + }, + ], + "type": "TextualBody", + "value": "

Stores

Ocean liners required huge quantities of food, enough for all crew and passengers – the equivalent to feeding a floating city. Cunard catered for varied tastes. Provisions for one trip included 500 sheep kidneys, 400 ox tails, 800 tongues and large quantities of frogs’ legs, as well as geese, turkey, duck, game and “75 heads of cattle and calfs”.

", + }, + "vault://49c80c4f": { + "format": "text/html", + "id": "vault://49c80c4f", + "iiif-parser:hasPart": [ + { + "id": "vault://49c80c4f", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a5", + "type": "TextualBody", + }, + ], + "type": "TextualBody", + "value": "

Third-class dining saloon

While extravagant dishes and refined delicacies were served in first class, third-class meals were less sophisticated. A third-class lunch on a Cunard ship in the 1920s could include rice soup, boiled haddock or braised beef with cabbage, boiled potatoes, bread and ‘cabin biscuits’, followed by bread and butter pudding. To save space, passengers sat at long communal tables on chairs bolted to the floor, in case of bad weather.

", + }, + "vault://7ef24143": { + "format": "text/html", + "id": "vault://7ef24143", + "iiif-parser:hasPart": [ + { + "id": "vault://7ef24143", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a3", + "type": "TextualBody", + }, + ], + "type": "TextualBody", + "value": "

First-class restaurant

Dining on ocean liners was a radically different experience depending on the class of travel. In first class, the Aquitania’s Louis XVI-style dining room offered seating in small isolated groups, echoing elegant restaurants on land. The ship’s architect, Arthur Davis, explained that a “cheerful room with comfortable surroundings” was a necessary distraction from “the often very unpleasant conditions” at sea.

Photograph from The New Art of Going Abroad, 1929, US. National Art Library: 38041986015030. © Victoria and Albert Museum, London

", + }, + "vault://9a81c074": { + "format": "text/html", + "id": "vault://9a81c074", + "iiif-parser:hasPart": [ + { + "id": "vault://9a81c074", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a7", + "type": "TextualBody", + }, + ], + "type": "TextualBody", + "value": "

Boiler room

In 1919 the Aquitania was refitted and converted from coal-burning to oil-burning engines, which meant fewer crew were required to labour in the engine room.

", + }, + "vault://9db702ac": { + "format": "text/html", + "id": "vault://9db702ac", + "iiif-parser:hasPart": [ + { + "id": "vault://9db702ac", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a1", + "type": "TextualBody", + }, + ], + "type": "TextualBody", + "value": "

First-class lounge

First-class public rooms were located in the centre of the ship – the most stable and comfortable areas on board. The Aquitania's opulent interiors were inspired by classical architecture – spot the Ionic columns in the lounge. Architect Arthur Davis recommended the use of plaster and papier-mâché for ceilings, domes, and other decorative moulding, but advised against using marble and brickwork, as these would make the ship top-heavy.

Photograph from The New Art of Going Abroad, 1929, US. National Art Library: 38041986015030. © Victoria and Albert Museum, London

", + }, + "vault://c83a324b": { + "format": "text/html", + "id": "vault://c83a324b", + "iiif-parser:hasPart": [ + { + "id": "vault://c83a324b", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a9", + "type": "TextualBody", + }, + ], + "type": "TextualBody", + "value": "

Baggage

Passengers travelling for weeks or months would bring a huge number of trunks, most of which were kept in the baggage store deep in the hull of the ship. Cabins could only accommodate smaller trunks. Louis Vuitton designed the ‘steamer trunk’ specifically to fit under a first-class cabin bed. The baggage store was opened daily so that maids or stewards could collect personal items that were needed during the voyage.

", + }, + "vault://cd5ac71c": { + "format": "text/html", + "id": "vault://cd5ac71c", + "iiif-parser:hasPart": [ + { + "id": "vault://cd5ac71c", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a10", + "type": "TextualBody", + }, + ], + "type": "TextualBody", + "value": "

Second-class dining saloon

The second-class spaces, like first class, were decorated in a neo-classical style. “The second-class accommodation on the vessel, though not so sumptuous as the first-class, is still very elaborate and comfortable”, explained the architect. “The dining-room, no less than 104 ft in length and extending across the whole width of the ship, is decorated with paintings adapted from panels by Pergolesi”– the 18th-century decorative artist. (Arthur Davis, The Architectural Review, April 1914)

", + }, + "vault://eb28a21a": { + "format": "text/html", + "id": "vault://eb28a21a", + "iiif-parser:hasPart": [ + { + "id": "vault://eb28a21a", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a4", + "type": "TextualBody", + }, + ], + "type": "TextualBody", + "value": "

First-class state room

The Aquitania’s first-class cabins were designed by architect Arthur Davis, whose firm, Mewès and Davis Architects, had decorated the famously opulent Ritz hotels in Paris and London. The cabins were “as spacious as a bedroom at the Ritz or the Barclay. The walls are panelled in grey silk. The carpets are vibrant blue and yellow, as are also the striped silk chair coverings. Note the bath – just off-stage, and the electric heater”. (The New Art of Going Abroad, 1929).

Photograph from The New Art of Going Abroad, 1929, US. National Art Library: 38041986015030. © Victoria and Albert Museum, London

", + }, + "vault://f2184d89": { + "format": "text/html", + "id": "vault://f2184d89", + "iiif-parser:hasPart": [ + { + "id": "vault://f2184d89", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a6", + "type": "TextualBody", + }, + ], + "type": "TextualBody", + "value": "

Third-class four berth room

Liners were strictly organised spaces which reflected social hierarchies. Although people travelling in third class could account for 60% of the total number of passengers, they were segregated into a relatively small space in the lower decks of the ship, close to the noisy engine room. These four-berth rooms had none of the luxurious furnishings or fabrics found in first class, but they were an improvement on the communal sleeping quarters provided for steerage-class passengers on earlier liners.

", + }, + }, + "Manifest": { + "https://iiif.vam.ac.uk/collections/O1023003/manifest.json": { + "@context": [ + "http://iiif.io/api/presentation/3/context.json", + "http://www.w3.org/ns.anno.jsonld", + ], + "accompanyingCanvas": null, + "annotations": [], + "behavior": [ + "individuals", + ], + "homepage": [], + "id": "https://iiif.vam.ac.uk/collections/O1023003/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/manifest.json", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/manifest.json", + "type": "Manifest", + }, + ], + "items": [ + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0", + "type": "Canvas", + }, + ], + "label": { + "en": [ + "Cunard Line - to all parts of the world", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Museum number", + ], + }, + "value": { + "en": [ + "E.1829-2004", + ], + }, + }, + { + "label": { + "en": [ + "title", + ], + }, + "value": { + "en": [ + "Cunard Line - to all parts of the world", + ], + }, + }, + { + "label": { + "en": [ + "Descriptive Line", + ], + }, + "value": { + "en": [ + "Chromolithograph travel poster for \\"Cunard Line - to all parts of the world\\", depicting a cross section of the Aquitania at sea, printed by Thos. Forman & Sons, Nottingham, ca. 1920.", + ], + }, + }, + { + "label": { + "en": [ + "Collection", + ], + }, + "value": { + "en": [ + "PDP", + ], + }, + }, + { + "label": { + "en": [ + "Place", + ], + }, + "value": { + "en": [ + "Nottingham (printed)", + ], + }, + }, + { + "label": { + "en": [ + "Materials & Techniques", + ], + }, + "value": { + "en": [ + "chromolithograph", + ], + }, + }, + { + "label": { + "en": [ + "Date", + ], + }, + "value": { + "en": [ + "ca. 1920 (made)", + ], + }, + }, + { + "label": { + "en": [ + "Categories", + ], + }, + "value": { + "en": [ + "Posters;Boats and ships;Tourism & Travel", + ], + }, + }, + { + "label": { + "en": [ + "Description", + ], + }, + "value": { + "en": [ + "Chromolithograph travel poster for \\"Cunard Line - to all parts of the world\\", depicting a cross section of the Aquitania at sea, printed by Thos. Forman & Sons, Nottingham, ca. 1920.", + ], + }, + }, + ], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://collections.vam.ac.uk/item/O1023003.jsonld", + "type": "ContentResource", + }, + ], + "service": [], + "services": [], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": {}, + "Selector": {}, + "Service": { + "https://framemark.vam.ac.uk/collections/2013GU2911": { + "@id": "https://framemark.vam.ac.uk/collections/2013GU2911", + "@type": "ImageService2", + "id": "https://framemark.vam.ac.uk/collections/2013GU2911", + "profile": "level1", + "type": "ImageService2", + }, + }, + }, + "mapping": { + "https://collections.vam.ac.uk/item/O1023003.jsonld": "ContentResource", + "https://framemark.vam.ac.uk/collections/2013GU2911/full/full/0/default.jpg": "ContentResource", + "https://iiif.vam.ac.uk/collections/O1023003/anno/a1": "Annotation", + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1": "AnnotationPage", + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a1": "Annotation", + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a10": "Annotation", + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a2": "Annotation", + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a3": "Annotation", + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a4": "Annotation", + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a5": "Annotation", + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a6": "Annotation", + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a7": "Annotation", + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a8": "Annotation", + "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a9": "Annotation", + "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0": "Canvas", + "https://iiif.vam.ac.uk/collections/O1023003/manifest.json": "Manifest", + "vault://273a0e05": "ContentResource", + "vault://457d03bf": "ContentResource", + "vault://49c80c4f": "ContentResource", + "vault://7ef24143": "ContentResource", + "vault://9a81c074": "ContentResource", + "vault://9db702ac": "ContentResource", + "vault://c83a324b": "ContentResource", + "vault://cd5ac71c": "ContentResource", + "vault://e29cf2aa": "AnnotationPage", + "vault://eb28a21a": "ContentResource", + "vault://f2184d89": "ContentResource", + }, + "resource": { + "id": "https://iiif.vam.ac.uk/collections/O1023003/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/start-canvas.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image": { + "body": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1": { + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + }, + "Canvas": { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 0, + "height": 4613, + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Blank page", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 3204, + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 0, + "height": 4612, + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json", + "type": "Canvas", + }, + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Frontispiece", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 3186, + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 0, + "height": 4613, + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Title page", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 3204, + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 0, + "height": 4578, + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Blank page", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 3174, + }, + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "duration": 0, + "height": 4632, + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5", + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1", + "type": "AnnotationPage", + }, + ], + "label": { + "en": [ + "Bookplate", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "Canvas", + "width": 3198, + }, + }, + "Collection": {}, + "ContentResource": { + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg": { + "format": "image/jpeg", + "height": 4613, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image", + "type": "Image", + }, + ], + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3204, + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg": { + "format": "image/jpeg", + "height": 4612, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image", + "type": "Image", + }, + ], + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3186, + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg": { + "format": "image/jpeg", + "height": 4613, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image", + "type": "Image", + }, + ], + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3204, + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg": { + "format": "image/jpeg", + "height": 4578, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image", + "type": "Image", + }, + ], + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3174, + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg": { + "format": "image/jpeg", + "height": 4632, + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image", + "type": "Image", + }, + ], + "service": [ + { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22", + "profile": "level1", + "type": "ImageService3", + }, + ], + "type": "Image", + "width": 3198, + }, + }, + "Manifest": { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json": { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json", + "type": "Manifest", + }, + ], + "items": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1", + "type": "Canvas", + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", + "type": "Canvas", + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3", + "type": "Canvas", + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4", + "type": "Canvas", + }, + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5", + "type": "Canvas", + }, + ], + "label": { + "en": [ + "Multiple Related Images (Book, etc.)", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "start": { + "selector": undefined, + "source": { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "structures": [], + "summary": null, + "thumbnail": [], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": {}, + "Selector": {}, + "Service": { + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21", + "profile": "level1", + "type": "ImageService3", + }, + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22": { + "id": "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22", + "profile": "level1", + "type": "ImageService3", + }, + }, + }, + "mapping": { + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image": "Annotation", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1": "Canvas", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2": "Canvas", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3": "Canvas", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4": "Canvas", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5": "Canvas", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json": "Manifest", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1": "AnnotationPage", + "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1": "AnnotationPage", + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f18/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f19/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f20/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f21/full/max/0/default.jpg": "ContentResource", + "https://iiif.io/api/image/3.0/example/reference/59d09e6773341f28ea166e9f3c1e674f-gallica_ark_12148_bpt6k1526005v_f22/full/max/0/default.jpg": "ContentResource", + }, + "resource": { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/manifest.json", + "type": "Manifest", + }, +} +`; + +exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-collection.json 1`] = ` +{ + "entities": { + "Agent": {}, + "Annotation": {}, + "AnnotationCollection": {}, + "AnnotationPage": {}, + "Canvas": {}, + "Collection": { + "https://iiif.wellcomecollection.org/presentation/collections/genres/Abstracts": { + "@context": "http://iiif.io/api/presentation/3/context.json", + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Abstracts", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Abstracts", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/collections/genres/Abstracts", + "type": "Collection", + }, + ], + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b29011577", + "label": { + "none": [ + "Titres et travaux scientifiques du Dr F. Lejars.", + ], + }, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b29011577_0003.jp2/full/79,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Manifest", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b32183859", + "label": { + "none": [ + "Annotated bibliography on vital and health statistics.", + ], + }, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b32183859_0007.jp2/full/67,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Manifest", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b21782763", + "label": { + "none": [ + "Notice sur les travaux scientifiques de M. Henri Becquerel.", + ], + }, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b21782763_0005.jp2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Manifest", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b29011553", + "label": { + "none": [ + "Notice sur les titres et travaux scientifiques de M. Louis Lapicque.", + ], + }, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b29011553_0003.jp2/full/80,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Manifest", + }, + ], + "label": { + "none": [ + "Genre: Abstracts", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "summary": null, + "thumbnail": [], + "type": "Collection", + "viewingDirection": "left-to-right", + }, + }, + "ContentResource": { + "https://iiif.wellcomecollection.org/thumbs/b21782763_0005.jp2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b21782763_0005.jp2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b21782763_0005.jp2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b21782763", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b21782763_0005.jp2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 145, + }, + { + "height": 400, + "width": 289, + }, + { + "height": 1024, + "width": 741, + }, + ], + "width": 741, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b29011553_0003.jp2/full/80,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b29011553_0003.jp2/full/80,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b29011553_0003.jp2/full/80,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b29011553", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b29011553_0003.jp2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 80, + }, + { + "height": 200, + "width": 160, + }, + { + "height": 400, + "width": 319, + }, + { + "height": 1024, + "width": 817, + }, + ], + "width": 817, + }, + ], + "type": "Image", + "width": 80, + }, + "https://iiif.wellcomecollection.org/thumbs/b29011577_0003.jp2/full/79,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b29011577_0003.jp2/full/79,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b29011577_0003.jp2/full/79,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b29011577", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b29011577_0003.jp2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 79, + }, + { + "height": 200, + "width": 157, + }, + { + "height": 400, + "width": 314, + }, + { + "height": 1024, + "width": 805, + }, + ], + "width": 805, + }, + ], + "type": "Image", + "width": 79, + }, + "https://iiif.wellcomecollection.org/thumbs/b32183859_0007.jp2/full/67,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b32183859_0007.jp2/full/67,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b32183859_0007.jp2/full/67,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b32183859", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b32183859_0007.jp2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 67, + }, + { + "height": 200, + "width": 134, + }, + { + "height": 400, + "width": 268, + }, + { + "height": 1024, + "width": 685, + }, + ], + "width": 685, + }, + ], + "type": "Image", + "width": 67, + }, + }, + "Manifest": { + "https://iiif.wellcomecollection.org/presentation/b21782763": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b21782763", + "items": [], + "label": { + "none": [ + "Notice sur les travaux scientifiques de M. Henri Becquerel.", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b21782763_0005.jp2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + "https://iiif.wellcomecollection.org/presentation/b29011553": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b29011553", + "items": [], + "label": { + "none": [ + "Notice sur les titres et travaux scientifiques de M. Louis Lapicque.", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b29011553_0003.jp2/full/80,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + "https://iiif.wellcomecollection.org/presentation/b29011577": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b29011577", + "items": [], + "label": { + "none": [ + "Titres et travaux scientifiques du Dr F. Lejars.", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b29011577_0003.jp2/full/79,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + "https://iiif.wellcomecollection.org/presentation/b32183859": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b32183859", + "items": [], + "label": { + "none": [ + "Annotated bibliography on vital and health statistics.", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b32183859_0007.jp2/full/67,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": {}, + "Selector": {}, + "Service": {}, + }, + "mapping": { + "https://iiif.wellcomecollection.org/presentation/b21782763": "Manifest", + "https://iiif.wellcomecollection.org/presentation/b29011553": "Manifest", + "https://iiif.wellcomecollection.org/presentation/b29011577": "Manifest", + "https://iiif.wellcomecollection.org/presentation/b32183859": "Manifest", + "https://iiif.wellcomecollection.org/presentation/collections/genres/Abstracts": "Collection", + "https://iiif.wellcomecollection.org/thumbs/b21782763_0005.jp2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b29011553_0003.jp2/full/80,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b29011577_0003.jp2/full/79,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b32183859_0007.jp2/full/67,100/0/default.jpg": "ContentResource", + }, + "resource": { + "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Abstracts", + "type": "Collection", + }, +} +`; + +exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1`] = ` +{ + "entities": { + "Agent": { + "https://wellcomecollection.org": { + "homepage": [ + { + "id": "https://wellcomecollection.org/works", + "type": "ContentResource", + }, + ], + "id": "https://wellcomecollection.org", + "iiif-parser:hasPart": [ + { + "id": "https://wellcomecollection.org", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "Agent", + }, + ], + "label": { + "en": [ + "Wellcome Collection", + "183 Euston Road", + "London NW1 2BE UK", + "T +44 (0)20 7611 8722", + "E library@wellcomecollection.org", + "https://wellcomecollection.org", + ], + }, + "logo": [ + { + "id": "https://iiif-test.wellcomecollection.org/logos/wellcome-collection-black.png", + "type": "ContentResource", + }, + ], + "seeAlso": [], + "type": "Agent", + }, + }, + "Annotation": { + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2/painting/anno": { + "body": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0001.jp2/full/620,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2/painting/anno", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2/painting/anno": { + "body": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0002.jp2/full/605,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2/painting/anno", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2/painting/anno": { + "body": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0003.jp2/full/620,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2/painting/anno", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2/painting/anno": { + "body": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0004.jp2/full/619,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2/painting/anno", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2/painting/anno": { + "body": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0005.jp2/full/620,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2/painting/anno", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2/painting/anno": { + "body": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0006.jp2/full/619,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2/painting/anno", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2/painting/anno": { + "body": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0007.jp2/full/620,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2/painting/anno", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2/painting/anno": { + "body": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0008.jp2/full/619,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2/painting/anno", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2/painting/anno": { + "body": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0009.jp2/full/620,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2/painting/anno", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2/painting/anno": { + "body": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0010.jp2/full/618,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2/painting/anno", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/all/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/all/line", + "items": [], + "label": { + "en": [ + "All OCR-derived annotations for b28857021", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0001.jp2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0001.jp2/line", + "items": [], + "label": { + "en": [ + "Text of page -", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0002.jp2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0002.jp2/line", + "items": [], + "label": { + "en": [ + "Text of page -", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0003.jp2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0003.jp2/line", + "items": [], + "label": { + "en": [ + "Text of page -", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0004.jp2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0004.jp2/line", + "items": [], + "label": { + "en": [ + "Text of page 2", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0005.jp2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0005.jp2/line", + "items": [], + "label": { + "en": [ + "Text of page 3", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0006.jp2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0006.jp2/line", + "items": [], + "label": { + "en": [ + "Text of page 4", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0007.jp2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0007.jp2/line", + "items": [], + "label": { + "en": [ + "Text of page 5", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0008.jp2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0008.jp2/line", + "items": [], + "label": { + "en": [ + "Text of page 6", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0009.jp2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0009.jp2/line", + "items": [], + "label": { + "en": [ + "Text of page 7", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0010.jp2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0010.jp2/line", + "items": [], + "label": { + "en": [ + "Text of page -", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/images": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/images", + "items": [], + "label": { + "en": [ + "OCR-identified images and figures for b28857021", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2/painting", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2/painting", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2/painting", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2/painting", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2/painting", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2/painting", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2/painting", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2/painting", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2/painting", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2/painting", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + }, + "Canvas": { + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0001.jp2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 4412, + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "-", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0001.jp2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0001.jp2/full/61,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2670, + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0002.jp2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 4312, + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "-", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0002.jp2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0002.jp2/full/59,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2547, + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0003.jp2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 4357, + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "-", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0003.jp2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0003.jp2/full/61,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2637, + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0004.jp2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 4346, + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "2", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0004.jp2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0004.jp2/full/60,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2626, + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0005.jp2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 4357, + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "3", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0005.jp2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0005.jp2/full/61,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2637, + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0006.jp2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 4346, + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "4", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0006.jp2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0006.jp2/full/60,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2626, + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0007.jp2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 4357, + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "5", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0007.jp2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0007.jp2/full/61,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2637, + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0008.jp2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 4346, + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "6", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0008.jp2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0008.jp2/full/60,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2626, + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0009.jp2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 4357, + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "7", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0009.jp2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0009.jp2/full/61,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2637, + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0010.jp2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 4424, + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2", + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "-", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0010.jp2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0010.jp2/full/60,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2670, + }, + }, + "Collection": { + "https://iiif-test.wellcomecollection.org/presentation/collections/contributors/Llanwrtyd_Wells_(Wales)._Urban_District_Council.": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/contributors/Llanwrtyd_Wells_(Wales)._Urban_District_Council.", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/contributors/Llanwrtyd_Wells_(Wales)._Urban_District_Council.", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "Collection", + }, + ], + "items": [], + "label": { + "en": [ + "Contributor: Llanwrtyd Wells (Wales). Urban District Council.", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "summary": null, + "thumbnail": [], + "type": "Collection", + "viewingDirection": "left-to-right", + }, + "https://iiif-test.wellcomecollection.org/presentation/collections/genres/Annual_reports.": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/genres/Annual_reports.", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/genres/Annual_reports.", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "Collection", + }, + ], + "items": [], + "label": { + "en": [ + "Genre: Annual reports.", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "summary": null, + "thumbnail": [], + "type": "Collection", + "viewingDirection": "left-to-right", + }, + "https://iiif-test.wellcomecollection.org/presentation/collections/genres/Electronic_books.": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/genres/Electronic_books.", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/genres/Electronic_books.", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "Collection", + }, + ], + "items": [], + "label": { + "en": [ + "Genre: Electronic books.", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "summary": null, + "thumbnail": [], + "type": "Collection", + "viewingDirection": "left-to-right", + }, + "https://iiif-test.wellcomecollection.org/presentation/collections/genres/MOH_reports.": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/genres/MOH_reports.", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/genres/MOH_reports.", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "Collection", + }, + ], + "items": [], + "label": { + "en": [ + "Genre: MOH reports.", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "summary": null, + "thumbnail": [], + "type": "Collection", + "viewingDirection": "left-to-right", + }, + "https://iiif-test.wellcomecollection.org/presentation/collections/genres/Statistics.": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/genres/Statistics.", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/genres/Statistics.", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "Collection", + }, + ], + "items": [], + "label": { + "en": [ + "Genre: Statistics.", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "summary": null, + "thumbnail": [], + "type": "Collection", + "viewingDirection": "left-to-right", + }, + "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/dyss49dy": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/dyss49dy", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/dyss49dy", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "Collection", + }, + ], + "items": [], + "label": { + "en": [ + "Subject: Llanwrtyd Wells (Wales)", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "summary": null, + "thumbnail": [], + "type": "Collection", + "viewingDirection": "left-to-right", + }, + "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/p2mzt7rw": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/p2mzt7rw", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/p2mzt7rw", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "Collection", + }, + ], + "items": [], + "label": { + "en": [ + "Subject: Sanitation.", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "summary": null, + "thumbnail": [], + "type": "Collection", + "viewingDirection": "left-to-right", + }, + "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/pxxu6hsg": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/pxxu6hsg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/pxxu6hsg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "Collection", + }, + ], + "items": [], + "label": { + "en": [ + "Subject: Water Supply.", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "summary": null, + "thumbnail": [], + "type": "Collection", + "viewingDirection": "left-to-right", + }, + "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/tva37rme": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/tva37rme", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/tva37rme", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "Collection", + }, + ], + "items": [], + "label": { + "en": [ + "Subject: Public Health.", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "summary": null, + "thumbnail": [], + "type": "Collection", + "viewingDirection": "left-to-right", + }, + "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/xaqnqsbj": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/xaqnqsbj", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/xaqnqsbj", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "Collection", + }, + ], + "items": [], + "label": { + "en": [ + "Subject: Disease Outbreaks.", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "summary": null, + "thumbnail": [], + "type": "Collection", + "viewingDirection": "left-to-right", + }, + }, + "ContentResource": { + "https://api.wellcomecollection.org/catalogue/v2/works/rfm2hr8w": { + "format": "application/json", + "id": "https://api.wellcomecollection.org/catalogue/v2/works/rfm2hr8w", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/catalogue/v2/works/rfm2hr8w", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "Dataset", + }, + ], + "label": { + "en": [ + "Wellcome Collection Catalogue API", + ], + }, + "profile": "https://api.wellcomecollection.org/catalogue/v2/context.json", + "type": "Dataset", + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0001.jp2/full/620,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0001.jp2/full/620,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0001.jp2/full/620,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0001.jp2", + "@type": "ImageService2", + "height": 4412, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2670, + }, + ], + "type": "Image", + "width": 620, + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0002.jp2/full/605,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0002.jp2/full/605,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0002.jp2/full/605,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0002.jp2", + "@type": "ImageService2", + "height": 4312, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2547, + }, + ], + "type": "Image", + "width": 605, + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0003.jp2/full/620,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0003.jp2/full/620,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0003.jp2/full/620,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0003.jp2", + "@type": "ImageService2", + "height": 4357, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2637, + }, + ], + "type": "Image", + "width": 620, + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0004.jp2/full/619,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0004.jp2/full/619,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0004.jp2/full/619,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0004.jp2", + "@type": "ImageService2", + "height": 4346, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2626, + }, + ], + "type": "Image", + "width": 619, + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0005.jp2/full/620,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0005.jp2/full/620,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0005.jp2/full/620,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0005.jp2", + "@type": "ImageService2", + "height": 4357, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2637, + }, + ], + "type": "Image", + "width": 620, + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0006.jp2/full/619,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0006.jp2/full/619,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0006.jp2/full/619,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0006.jp2", + "@type": "ImageService2", + "height": 4346, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2626, + }, + ], + "type": "Image", + "width": 619, + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0007.jp2/full/620,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0007.jp2/full/620,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0007.jp2/full/620,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0007.jp2", + "@type": "ImageService2", + "height": 4357, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2637, + }, + ], + "type": "Image", + "width": 620, + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0008.jp2/full/619,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0008.jp2/full/619,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0008.jp2/full/619,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0008.jp2", + "@type": "ImageService2", + "height": 4346, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2626, + }, + ], + "type": "Image", + "width": 619, + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0009.jp2/full/620,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0009.jp2/full/620,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0009.jp2/full/620,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0009.jp2", + "@type": "ImageService2", + "height": 4357, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2637, + }, + ], + "type": "Image", + "width": 620, + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0010.jp2/full/618,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0010.jp2/full/618,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0010.jp2/full/618,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0010.jp2", + "@type": "ImageService2", + "height": 4424, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2670, + }, + ], + "type": "Image", + "width": 618, + }, + "https://dlcs.io/pdf/wellcome/pdf/6/b28857021": { + "format": "application/pdf", + "id": "https://dlcs.io/pdf/wellcome/pdf/6/b28857021", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/pdf/wellcome/pdf/6/b28857021", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "Text", + }, + ], + "label": { + "en": [ + "View as PDF", + ], + }, + "type": "Text", + }, + "https://dlcs.io/thumbs/wellcome/6/b28857021_0001.jp2/full/61,100/0/default.jpg": { + "height": 100, + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0001.jp2/full/61,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "@explicit": true, + "height": {}, + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0001.jp2/full/61,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2", + "service": [ + { + "@id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0001.jp2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 61, + }, + { + "height": 200, + "width": 121, + }, + { + "height": 400, + "width": 242, + }, + { + "height": 1024, + "width": 620, + }, + ], + "width": 620, + }, + ], + "type": "Image", + "width": {}, + }, + { + "@explicit": true, + "height": {}, + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0001.jp2/full/61,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "service": [ + { + "@id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0001.jp2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 61, + }, + { + "height": 200, + "width": 121, + }, + { + "height": 400, + "width": 242, + }, + { + "height": 1024, + "width": 620, + }, + ], + "width": 620, + }, + ], + "type": "Image", + "width": {}, + }, + ], + "service": [ + { + "@id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0001.jp2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 61, + }, + { + "height": 200, + "width": 121, + }, + { + "height": 400, + "width": 242, + }, + { + "height": 1024, + "width": 620, + }, + ], + "width": 620, + }, + { + "@id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0001.jp2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 61, + }, + { + "height": 200, + "width": 121, + }, + { + "height": 400, + "width": 242, + }, + { + "height": 1024, + "width": 620, + }, + ], + "width": 620, + }, + ], + "type": "Image", + "width": 61, + }, + "https://dlcs.io/thumbs/wellcome/6/b28857021_0002.jp2/full/59,100/0/default.jpg": { + "height": 100, + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0002.jp2/full/59,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0002.jp2/full/59,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0002.jp2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 59, + }, + { + "height": 200, + "width": 118, + }, + { + "height": 400, + "width": 236, + }, + { + "height": 1024, + "width": 605, + }, + ], + "width": 605, + }, + ], + "type": "Image", + "width": 59, + }, + "https://dlcs.io/thumbs/wellcome/6/b28857021_0003.jp2/full/61,100/0/default.jpg": { + "height": 100, + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0003.jp2/full/61,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0003.jp2/full/61,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0003.jp2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 61, + }, + { + "height": 200, + "width": 121, + }, + { + "height": 400, + "width": 242, + }, + { + "height": 1024, + "width": 620, + }, + ], + "width": 620, + }, + ], + "type": "Image", + "width": 61, + }, + "https://dlcs.io/thumbs/wellcome/6/b28857021_0004.jp2/full/60,100/0/default.jpg": { + "height": 100, + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0004.jp2/full/60,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0004.jp2/full/60,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0004.jp2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 60, + }, + { + "height": 200, + "width": 121, + }, + { + "height": 400, + "width": 242, + }, + { + "height": 1024, + "width": 619, + }, + ], + "width": 619, + }, + ], + "type": "Image", + "width": 60, + }, + "https://dlcs.io/thumbs/wellcome/6/b28857021_0005.jp2/full/61,100/0/default.jpg": { + "height": 100, + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0005.jp2/full/61,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0005.jp2/full/61,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0005.jp2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 61, + }, + { + "height": 200, + "width": 121, + }, + { + "height": 400, + "width": 242, + }, + { + "height": 1024, + "width": 620, + }, + ], + "width": 620, + }, + ], + "type": "Image", + "width": 61, + }, + "https://dlcs.io/thumbs/wellcome/6/b28857021_0006.jp2/full/60,100/0/default.jpg": { + "height": 100, + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0006.jp2/full/60,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0006.jp2/full/60,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0006.jp2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 60, + }, + { + "height": 200, + "width": 121, + }, + { + "height": 400, + "width": 242, + }, + { + "height": 1024, + "width": 619, + }, + ], + "width": 619, + }, + ], + "type": "Image", + "width": 60, + }, + "https://dlcs.io/thumbs/wellcome/6/b28857021_0007.jp2/full/61,100/0/default.jpg": { + "height": 100, + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0007.jp2/full/61,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0007.jp2/full/61,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0007.jp2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 61, + }, + { + "height": 200, + "width": 121, + }, + { + "height": 400, + "width": 242, + }, + { + "height": 1024, + "width": 620, + }, + ], + "width": 620, + }, + ], + "type": "Image", + "width": 61, + }, + "https://dlcs.io/thumbs/wellcome/6/b28857021_0008.jp2/full/60,100/0/default.jpg": { + "height": 100, + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0008.jp2/full/60,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0008.jp2/full/60,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0008.jp2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 60, + }, + { + "height": 200, + "width": 121, + }, + { + "height": 400, + "width": 242, + }, + { + "height": 1024, + "width": 619, + }, + ], + "width": 619, + }, + ], + "type": "Image", + "width": 60, + }, + "https://dlcs.io/thumbs/wellcome/6/b28857021_0009.jp2/full/61,100/0/default.jpg": { + "height": 100, + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0009.jp2/full/61,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0009.jp2/full/61,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0009.jp2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 61, + }, + { + "height": 200, + "width": 121, + }, + { + "height": 400, + "width": 242, + }, + { + "height": 1024, + "width": 620, + }, + ], + "width": 620, + }, + ], + "type": "Image", + "width": 61, + }, + "https://dlcs.io/thumbs/wellcome/6/b28857021_0010.jp2/full/60,100/0/default.jpg": { + "height": 100, + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0010.jp2/full/60,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0010.jp2/full/60,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0010.jp2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 60, + }, + { + "height": 200, + "width": 121, + }, + { + "height": 400, + "width": 241, + }, + { + "height": 1024, + "width": 618, + }, + ], + "width": 618, + }, + ], + "type": "Image", + "width": 60, + }, + "https://iiif-test.wellcomecollection.org/logos/wellcome-collection-black.png": { + "format": "image/png", + "id": "https://iiif-test.wellcomecollection.org/logos/wellcome-collection-black.png", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/logos/wellcome-collection-black.png", + "iiif-parser:partOf": "https://wellcomecollection.org", + "type": "Image", + }, + ], + "type": "Image", + }, + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0001.jp2": { + "format": "text/xml", + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0001.jp2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0001.jp2", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0002.jp2": { + "format": "text/xml", + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0002.jp2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0002.jp2", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0003.jp2": { + "format": "text/xml", + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0003.jp2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0003.jp2", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0004.jp2": { + "format": "text/xml", + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0004.jp2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0004.jp2", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0005.jp2": { + "format": "text/xml", + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0005.jp2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0005.jp2", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0006.jp2": { + "format": "text/xml", + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0006.jp2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0006.jp2", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0007.jp2": { + "format": "text/xml", + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0007.jp2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0007.jp2", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0008.jp2": { + "format": "text/xml", + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0008.jp2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0008.jp2", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0009.jp2": { + "format": "text/xml", + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0009.jp2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0009.jp2", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0010.jp2": { + "format": "text/xml", + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0010.jp2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0010.jp2", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://iiif-test.wellcomecollection.org/text/v1/b28857021": { + "format": "text/plain", + "id": "https://iiif-test.wellcomecollection.org/text/v1/b28857021", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/text/v1/b28857021", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "Text", + }, + ], + "label": { + "en": [ + "View raw text", + ], + }, + "type": "Text", + }, + "https://wellcomecollection.org/works": { + "format": "text/html", + "id": "https://wellcomecollection.org/works", + "iiif-parser:hasPart": [ + { + "id": "https://wellcomecollection.org/works", + "iiif-parser:partOf": "https://wellcomecollection.org", + "type": "Text", + }, + ], + "label": { + "en": [ + "Explore our collections", + ], + }, + "type": "Text", + }, + "https://wellcomecollection.org/works/rfm2hr8w": { + "format": "text/html", + "id": "https://wellcomecollection.org/works/rfm2hr8w", + "iiif-parser:hasPart": [ + { + "id": "https://wellcomecollection.org/works/rfm2hr8w", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "Text", + }, + ], + "label": { + "en": [ + "[Report 1960] / Medical Officer of Health, Llanwrtyd Wells U.D.C.", + ], + }, + "language": [ + "en", + ], + "type": "Text", + }, + }, + "Manifest": { + "https://iiif-test.wellcomecollection.org/presentation/b28857021": { + "@context": [ + "http://iiif.io/api/search/1/context.json", + "http://iiif.io/api/presentation/3/context.json", + ], + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/images", + "type": "AnnotationPage", + }, + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/all/line", + "type": "AnnotationPage", + }, + ], + "behavior": [ + "paged", + ], + "homepage": [ + { + "id": "https://wellcomecollection.org/works/rfm2hr8w", + "type": "ContentResource", + }, + ], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "Manifest", + }, + ], + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2", + "type": "Canvas", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2", + "type": "Canvas", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2", + "type": "Canvas", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2", + "type": "Canvas", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2", + "type": "Canvas", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2", + "type": "Canvas", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2", + "type": "Canvas", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2", + "type": "Canvas", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2", + "type": "Canvas", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2", + "type": "Canvas", + }, + ], + "label": { + "en": [ + "[Report 1960] / Medical Officer of Health, Llanwrtyd Wells U.D.C.", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Publication/creation", + ], + }, + "value": { + "none": [ + "1960", + ], + }, + }, + { + "label": { + "en": [ + "Contributors", + ], + }, + "value": { + "none": [ + "Llanwrtyd Wells (Wales). Urban District Council.", + ], + }, + }, + { + "label": { + "en": [ + "Type/technique", + ], + }, + "value": { + "en": [ + "Electronic books.", + "Annual reports.", + "MOH reports.", + "Statistics.", + ], + }, + }, + { + "label": { + "en": [ + "Subjects", + ], + }, + "value": { + "en": [ + "Disease Outbreaks.", + "Public Health.", + "Sanitation.", + "Water Supply.", + "Llanwrtyd Wells (Wales)", + ], + }, + }, + ], + "navDate": null, + "partOf": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/contributors/Llanwrtyd_Wells_(Wales)._Urban_District_Council.", + "type": "Collection", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/xaqnqsbj", + "type": "Collection", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/tva37rme", + "type": "Collection", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/p2mzt7rw", + "type": "Collection", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/pxxu6hsg", + "type": "Collection", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/dyss49dy", + "type": "Collection", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/genres/Electronic_books.", + "type": "Collection", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/genres/Annual_reports.", + "type": "Collection", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/genres/MOH_reports.", + "type": "Collection", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/collections/genres/Statistics.", + "type": "Collection", + }, + ], + "placeholderCanvas": null, + "provider": [ + { + "id": "https://wellcomecollection.org", + "type": "Agent", + }, + ], + "rendering": [ + { + "id": "https://dlcs.io/pdf/wellcome/pdf/6/b28857021", + "type": "ContentResource", + }, + { + "id": "https://iiif-test.wellcomecollection.org/text/v1/b28857021", + "type": "ContentResource", + }, + ], + "requiredStatement": { + "label": { + "en": [ + "Attribution and usage", + ], + }, + "value": { + "en": [ + "Wellcome Collection", + "You have permission to make copies of this work under a Creative Commons, Attribution license.

This licence permits unrestricted use, distribution, and reproduction in any medium, provided the original author and source are credited. See the Legal Code for further information.

Image source should be attributed as specified in the full catalogue record. If no source is given the image should be attributed to Wellcome Library.
", + ], + }, + }, + "rights": "https://creativecommons.org/licenses/by/4.0/", + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/catalogue/v2/works/rfm2hr8w", + "type": "ContentResource", + }, + ], + "service": [ + { + "@id": "https://iiif-test.wellcomecollection.org/search/v1/b28857021", + "@type": "SearchService1", + "label": "Search within this manifest", + "profile": "http://iiif.io/api/search/1/search", + "service": [ + { + "@id": "https://iiif-test.wellcomecollection.org/search/autocomplete/v1/b28857021", + "@type": "AutoCompleteService1", + "label": "Autocomplete words in this manifest", + "profile": "http://iiif.io/api/search/1/autocomplete", + }, + ], + }, + ], + "services": [ + { + "label": { + "en": [ + "Format: Monograph, Institution: n/a, Identifier: b28857021, Digicode: digmoh, Collection code: n/a", + ], + }, + "profile": "http://universalviewer.io/tracking-extensions-profile", + "type": "Text", + }, + { + "label": { + "en": [ + "open", + ], + }, + "profile": "http://wellcomelibrary.org/ld/iiif-ext/access-control-hints", + "type": "Text", + }, + ], + "start": null, + "structures": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/ranges/LOG_0001", + "type": "Range", + }, + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/ranges/LOG_0002", + "type": "Range", + }, + ], + "summary": null, + "thumbnail": [ + { + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0001.jp2/full/61,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": { + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/ranges/LOG_0001", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/ranges/LOG_0002", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/ranges/LOG_0001": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/ranges/LOG_0001", + "items": [ + { + "selector": undefined, + "source": { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "none": [ + "Cover", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif-test.wellcomecollection.org/presentation/b28857021/ranges/LOG_0002": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/ranges/LOG_0002", + "items": [ + { + "selector": undefined, + "source": { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "none": [ + "Cover", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + }, + "Selector": {}, + "Service": { + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0001.jp2": { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0001.jp2", + "@type": "ImageService2", + "height": 4412, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0001.jp2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2670, + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0002.jp2": { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0002.jp2", + "@type": "ImageService2", + "height": 4312, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0002.jp2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2547, + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0003.jp2": { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0003.jp2", + "@type": "ImageService2", + "height": 4357, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0003.jp2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2637, + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0004.jp2": { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0004.jp2", + "@type": "ImageService2", + "height": 4346, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0004.jp2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2626, + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0005.jp2": { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0005.jp2", + "@type": "ImageService2", + "height": 4357, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0005.jp2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2637, + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0006.jp2": { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0006.jp2", + "@type": "ImageService2", + "height": 4346, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0006.jp2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2626, + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0007.jp2": { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0007.jp2", + "@type": "ImageService2", + "height": 4357, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0007.jp2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2637, + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0008.jp2": { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0008.jp2", + "@type": "ImageService2", + "height": 4346, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0008.jp2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2626, + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0009.jp2": { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0009.jp2", + "@type": "ImageService2", + "height": 4357, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0009.jp2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2637, + }, + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0010.jp2": { + "@id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0010.jp2", + "@type": "ImageService2", + "height": 4424, + "id": "https://dlcs.io/iiif-img/wellcome/6/b28857021_0010.jp2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2670, + }, + "https://iiif-test.wellcomecollection.org/search/autocomplete/v1/b28857021": { + "@id": "https://iiif-test.wellcomecollection.org/search/autocomplete/v1/b28857021", + "@type": "AutoCompleteService1", + "id": "https://iiif-test.wellcomecollection.org/search/autocomplete/v1/b28857021", + "label": "Autocomplete words in this manifest", + "profile": "http://iiif.io/api/search/1/autocomplete", + "type": "AutoCompleteService1", + }, + "https://iiif-test.wellcomecollection.org/search/v1/b28857021": { + "@id": "https://iiif-test.wellcomecollection.org/search/v1/b28857021", + "@type": "SearchService1", + "id": "https://iiif-test.wellcomecollection.org/search/v1/b28857021", + "label": "Search within this manifest", + "profile": "http://iiif.io/api/search/1/search", + "service": [ + { + "id": "https://iiif-test.wellcomecollection.org/search/autocomplete/v1/b28857021", + "type": "AutoCompleteService1", + }, + ], + "type": "SearchService1", + }, + "undefined": { + "id": "https://iiif-parser/empty-service", + "label": { + "en": [ + "open", + ], + }, + "profile": "http://wellcomelibrary.org/ld/iiif-ext/access-control-hints", + "type": "Text", + }, + }, + }, + "mapping": { + "https://api.wellcomecollection.org/catalogue/v2/works/rfm2hr8w": "ContentResource", + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0001.jp2/full/620,1024/0/default.jpg": "ContentResource", + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0002.jp2/full/605,1024/0/default.jpg": "ContentResource", + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0003.jp2/full/620,1024/0/default.jpg": "ContentResource", + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0004.jp2/full/619,1024/0/default.jpg": "ContentResource", + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0005.jp2/full/620,1024/0/default.jpg": "ContentResource", + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0006.jp2/full/619,1024/0/default.jpg": "ContentResource", + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0007.jp2/full/620,1024/0/default.jpg": "ContentResource", + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0008.jp2/full/619,1024/0/default.jpg": "ContentResource", + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0009.jp2/full/620,1024/0/default.jpg": "ContentResource", + "https://dlcs.io/iiif-img/wellcome/6/b28857021_0010.jp2/full/618,1024/0/default.jpg": "ContentResource", + "https://dlcs.io/pdf/wellcome/pdf/6/b28857021": "ContentResource", + "https://dlcs.io/thumbs/wellcome/6/b28857021_0001.jp2/full/61,100/0/default.jpg": "ContentResource", + "https://dlcs.io/thumbs/wellcome/6/b28857021_0002.jp2/full/59,100/0/default.jpg": "ContentResource", + "https://dlcs.io/thumbs/wellcome/6/b28857021_0003.jp2/full/61,100/0/default.jpg": "ContentResource", + "https://dlcs.io/thumbs/wellcome/6/b28857021_0004.jp2/full/60,100/0/default.jpg": "ContentResource", + "https://dlcs.io/thumbs/wellcome/6/b28857021_0005.jp2/full/61,100/0/default.jpg": "ContentResource", + "https://dlcs.io/thumbs/wellcome/6/b28857021_0006.jp2/full/60,100/0/default.jpg": "ContentResource", + "https://dlcs.io/thumbs/wellcome/6/b28857021_0007.jp2/full/61,100/0/default.jpg": "ContentResource", + "https://dlcs.io/thumbs/wellcome/6/b28857021_0008.jp2/full/60,100/0/default.jpg": "ContentResource", + "https://dlcs.io/thumbs/wellcome/6/b28857021_0009.jp2/full/61,100/0/default.jpg": "ContentResource", + "https://dlcs.io/thumbs/wellcome/6/b28857021_0010.jp2/full/60,100/0/default.jpg": "ContentResource", + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/all/line": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0001.jp2/line": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0002.jp2/line": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0003.jp2/line": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0004.jp2/line": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0005.jp2/line": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0006.jp2/line": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0007.jp2/line": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0008.jp2/line": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0009.jp2/line": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0010.jp2/line": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/images": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/logos/wellcome-collection-black.png": "ContentResource", + "https://iiif-test.wellcomecollection.org/presentation/b28857021": "Manifest", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2": "Canvas", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2/painting": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2/painting/anno": "Annotation", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2": "Canvas", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2/painting": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2/painting/anno": "Annotation", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2": "Canvas", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2/painting": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2/painting/anno": "Annotation", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2": "Canvas", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2/painting": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2/painting/anno": "Annotation", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2": "Canvas", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2/painting": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2/painting/anno": "Annotation", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2": "Canvas", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2/painting": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2/painting/anno": "Annotation", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2": "Canvas", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2/painting": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2/painting/anno": "Annotation", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2": "Canvas", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2/painting": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2/painting/anno": "Annotation", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2": "Canvas", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2/painting": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2/painting/anno": "Annotation", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2": "Canvas", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2/painting": "AnnotationPage", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2/painting/anno": "Annotation", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/ranges/LOG_0001": "Range", + "https://iiif-test.wellcomecollection.org/presentation/b28857021/ranges/LOG_0002": "Range", + "https://iiif-test.wellcomecollection.org/presentation/collections/contributors/Llanwrtyd_Wells_(Wales)._Urban_District_Council.": "Collection", + "https://iiif-test.wellcomecollection.org/presentation/collections/genres/Annual_reports.": "Collection", + "https://iiif-test.wellcomecollection.org/presentation/collections/genres/Electronic_books.": "Collection", + "https://iiif-test.wellcomecollection.org/presentation/collections/genres/MOH_reports.": "Collection", + "https://iiif-test.wellcomecollection.org/presentation/collections/genres/Statistics.": "Collection", + "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/dyss49dy": "Collection", + "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/p2mzt7rw": "Collection", + "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/pxxu6hsg": "Collection", + "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/tva37rme": "Collection", + "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/xaqnqsbj": "Collection", + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0001.jp2": "ContentResource", + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0002.jp2": "ContentResource", + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0003.jp2": "ContentResource", + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0004.jp2": "ContentResource", + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0005.jp2": "ContentResource", + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0006.jp2": "ContentResource", + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0007.jp2": "ContentResource", + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0008.jp2": "ContentResource", + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0009.jp2": "ContentResource", + "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0010.jp2": "ContentResource", + "https://iiif-test.wellcomecollection.org/text/v1/b28857021": "ContentResource", + "https://wellcomecollection.org": "Agent", + "https://wellcomecollection.org/works": "ContentResource", + "https://wellcomecollection.org/works/rfm2hr8w": "ContentResource", + }, + "resource": { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "Manifest", + }, +} +`; + +exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json 1`] = ` +{ + "entities": { + "Agent": { + "https://wellcomecollection.org": { + "homepage": [ + { + "id": "https://wellcomecollection.org/works", + "type": "ContentResource", + }, + ], + "id": "https://wellcomecollection.org", + "iiif-parser:hasPart": [ + { + "id": "https://wellcomecollection.org", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723", + "type": "Agent", + }, + ], + "label": { + "en": [ + "Wellcome Collection", + "183 Euston Road", + "London NW1 2BE UK", + "T +44 (0)20 7611 8722", + "E library@wellcomecollection.org", + "https://wellcomecollection.org", + ], + }, + "logo": [ + { + "id": "https://iiif.wellcomecollection.org/logos/wellcome-collection-black.png", + "type": "ContentResource", + }, + ], + "seeAlso": [], + "type": "Agent", + }, + }, + "Annotation": { + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0001.JP2/full/742,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0002.JP2/full/751,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0003.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0004.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0005.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0006.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0007.JP2/full/752,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0008.JP2/full/750,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0009.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0010.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0011.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0012.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0013.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0014.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0015.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0016.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0017.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0018.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0019.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0020.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0021.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0022.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0023.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0024.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0025.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0026.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0027.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0028.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0029.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0030.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0031.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0032.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0033.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0034.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0035.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2/painting/anno": { + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0036.JP2/full/732,1024/0/default.jpg", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2/painting/anno", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2/painting/anno", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2/painting", + "type": "Annotation", + }, + ], + "motivation": [ + "painting", + ], + "target": { + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + }, + }, + "AnnotationCollection": {}, + "AnnotationPage": { + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0001.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0001.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page -", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0002.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0002.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page -", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0003.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0003.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page -", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0004.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0004.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page -", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0005.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0005.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 2", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0006.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0006.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 3", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0007.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0007.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 4", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0008.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0008.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 5", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0009.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0009.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 6", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0010.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0010.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 7", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0011.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0011.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 8", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0012.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0012.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 9", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0013.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0013.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 10", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0014.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0014.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 11", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0015.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0015.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 12", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0016.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0016.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 13", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0017.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0017.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 14", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0018.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0018.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 15", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0019.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0019.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 16", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0020.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0020.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 17", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0021.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0021.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 18", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0022.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0022.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 19", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0023.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0023.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 20", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0024.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0024.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 21", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0025.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0025.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 22", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0026.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0026.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 23", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0027.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0027.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 24", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0028.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0028.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 25", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0029.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0029.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 26", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0030.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0030.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 27", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0031.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0031.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 28", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0032.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0032.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 29", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0033.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0033.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 30", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0034.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0034.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page 31", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0035.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0035.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page -", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0036.JP2/line": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0036.JP2/line", + "items": [], + "label": { + "en": [ + "Text of page -", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/images": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/images", + "items": [], + "label": { + "en": [ + "OCR-identified images and figures for b18035723", + ], + }, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2/painting": { + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2/painting", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2/painting/anno", + "type": "Annotation", + }, + ], + "label": null, + "metadata": [], + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "summary": null, + "thumbnail": [], + "type": "AnnotationPage", + }, + }, + "Canvas": { + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0001.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3543, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "-", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0001.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0001.JP2/full/73,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2569, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0002.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3040, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "-", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0002.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0002.JP2/full/73,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2231, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0003.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "-", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0003.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0003.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0004.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "-", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0004.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0004.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0005.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "2", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0005.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0005.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0006.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "3", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0006.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0006.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0007.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 2736, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "4", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0007.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0007.JP2/full/73,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2008, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0008.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 2740, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "5", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0008.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0008.JP2/full/73,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2008, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0009.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "6", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0009.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0009.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0010.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "7", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0010.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0010.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0011.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "8", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0011.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0011.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0012.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "9", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0012.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0012.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0013.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "10", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0013.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0013.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0014.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "11", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0014.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0014.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0015.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "12", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0015.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0015.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0016.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "13", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0016.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0016.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0017.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "14", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0017.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0017.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0018.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "15", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0018.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0018.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0019.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "16", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0019.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0019.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0020.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "17", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0020.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0020.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0021.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "18", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0021.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0021.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0022.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "19", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0022.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0022.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0023.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "20", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0023.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0023.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0024.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "21", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0024.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0024.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0025.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "22", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0025.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0025.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0026.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "23", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0026.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0026.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0027.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "24", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0027.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0027.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0028.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "25", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0028.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0028.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0029.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "26", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0029.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0029.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0030.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "27", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0030.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0030.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0031.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "28", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0031.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0031.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0032.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "29", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0032.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0032.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0033.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "30", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0033.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0033.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0034.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "31", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0034.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0034.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0035.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "-", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0035.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0035.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2": { + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0036.JP2/line", + "type": "AnnotationPage", + }, + ], + "behavior": [], + "duration": 0, + "height": 3372, + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2/painting", + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "-", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0036.JP2", + "type": "ContentResource", + }, + ], + "service": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0036.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Canvas", + "width": 2411, + }, + }, + "Collection": { + "https://iiif.wellcomecollection.org/presentation/collections/contributors/xtwzf3g5": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/collections/contributors/xtwzf3g5", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/collections/contributors/xtwzf3g5", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723", + "type": "Collection", + }, + ], + "items": [], + "label": { + "en": [ + "Contributor: Bolle, Fritz.", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "summary": null, + "thumbnail": [], + "type": "Collection", + "viewingDirection": "left-to-right", + }, + "https://iiif.wellcomecollection.org/presentation/collections/genres/Pamphlets": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Pamphlets", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Pamphlets", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723", + "type": "Collection", + }, + ], + "items": [], + "label": { + "en": [ + "Genre: Pamphlets", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "summary": null, + "thumbnail": [], + "type": "Collection", + "viewingDirection": "left-to-right", + }, + "https://iiif.wellcomecollection.org/presentation/collections/subjects/hq8gcy73": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/collections/subjects/hq8gcy73", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/collections/subjects/hq8gcy73", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723", + "type": "Collection", + }, + ], + "items": [], + "label": { + "en": [ + "Subject: Genetics - history", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "services": [], + "summary": null, + "thumbnail": [], + "type": "Collection", + "viewingDirection": "left-to-right", + }, + }, + "ContentResource": { + "https://api.wellcomecollection.org/catalogue/v2/works/krqp99r9": { + "format": "application/json", + "id": "https://api.wellcomecollection.org/catalogue/v2/works/krqp99r9", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/catalogue/v2/works/krqp99r9", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723", + "type": "Dataset", + }, + ], + "label": { + "en": [ + "Wellcome Collection Catalogue API", + ], + }, + "profile": "https://api.wellcomecollection.org/catalogue/v2/context.json", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0001.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0001.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0001.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0002.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0002.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0002.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0003.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0003.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0003.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0004.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0004.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0004.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0005.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0005.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0005.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0006.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0006.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0006.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0007.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0007.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0007.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0008.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0008.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0008.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0009.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0009.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0009.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0010.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0010.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0010.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0011.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0011.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0011.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0012.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0012.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0012.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0013.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0013.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0013.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0014.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0014.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0014.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0015.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0015.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0015.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0016.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0016.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0016.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0017.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0017.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0017.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0018.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0018.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0018.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0019.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0019.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0019.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0020.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0020.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0020.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0021.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0021.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0021.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0022.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0022.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0022.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0023.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0023.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0023.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0024.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0024.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0024.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0025.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0025.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0025.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0026.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0026.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0026.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0027.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0027.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0027.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0028.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0028.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0028.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0029.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0029.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0029.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0030.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0030.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0030.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0031.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0031.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0031.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0032.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0032.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0032.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0033.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0033.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0033.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0034.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0034.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0034.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0035.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0035.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0035.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0036.JP2": { + "format": "text/xml", + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0036.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0036.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2", + "type": "Dataset", + }, + ], + "label": { + "none": [ + "METS-ALTO XML", + ], + }, + "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", + "type": "Dataset", + }, + "https://api.wellcomecollection.org/text/v1/b18035723": { + "format": "text/plain", + "id": "https://api.wellcomecollection.org/text/v1/b18035723", + "iiif-parser:hasPart": [ + { + "id": "https://api.wellcomecollection.org/text/v1/b18035723", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723", + "type": "Text", + }, + ], + "label": { + "en": [ + "View raw text", + ], + }, + "type": "Text", + }, + "https://iiif.wellcomecollection.org/image/b18035723_0001.JP2/full/742,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0001.JP2/full/742,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0001.JP2/full/742,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0001.JP2", + "@type": "ImageService2", + "height": 3543, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2569, + }, + ], + "type": "Image", + "width": 742, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0002.JP2/full/751,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0002.JP2/full/751,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0002.JP2/full/751,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0002.JP2", + "@type": "ImageService2", + "height": 3040, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2231, + }, + ], + "type": "Image", + "width": 751, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0003.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0003.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0003.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0003.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0004.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0004.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0004.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0004.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0005.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0005.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0005.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0005.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0006.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0006.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0006.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0006.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0007.JP2/full/752,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0007.JP2/full/752,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0007.JP2/full/752,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0007.JP2", + "@type": "ImageService2", + "height": 2736, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2008, + }, + ], + "type": "Image", + "width": 752, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0008.JP2/full/750,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0008.JP2/full/750,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0008.JP2/full/750,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0008.JP2", + "@type": "ImageService2", + "height": 2740, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2008, + }, + ], + "type": "Image", + "width": 750, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0009.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0009.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0009.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0009.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0010.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0010.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0010.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0010.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0011.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0011.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0011.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0011.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0012.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0012.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0012.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0012.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0013.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0013.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0013.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0013.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0014.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0014.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0014.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0014.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0015.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0015.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0015.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0015.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0016.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0016.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0016.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0016.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0017.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0017.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0017.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0017.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0018.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0018.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0018.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0018.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0019.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0019.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0019.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0019.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0020.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0020.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0020.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0020.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0021.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0021.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0021.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0021.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0022.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0022.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0022.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0022.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0023.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0023.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0023.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0023.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0024.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0024.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0024.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0024.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0025.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0025.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0025.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0025.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0026.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0026.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0026.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0026.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0027.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0027.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0027.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0027.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0028.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0028.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0028.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0028.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0029.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0029.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0029.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0029.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0030.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0030.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0030.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0030.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0031.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0031.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0031.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0031.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0032.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0032.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0032.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0032.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0033.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0033.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0033.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0033.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0034.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0034.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0034.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0034.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0035.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0035.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0035.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0035.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0036.JP2/full/732,1024/0/default.jpg": { + "format": "image/jpeg", + "height": 1024, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0036.JP2/full/732,1024/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/image/b18035723_0036.JP2/full/732,1024/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2/painting/anno", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0036.JP2", + "@type": "ImageService2", + "height": 3372, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2411, + }, + ], + "type": "Image", + "width": 732, + }, + "https://iiif.wellcomecollection.org/logos/wellcome-collection-black.png": { + "format": "image/png", + "id": "https://iiif.wellcomecollection.org/logos/wellcome-collection-black.png", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/logos/wellcome-collection-black.png", + "iiif-parser:partOf": "https://wellcomecollection.org", + "type": "Image", + }, + ], + "type": "Image", + }, + "https://iiif.wellcomecollection.org/pdf/b18035723": { + "format": "application/pdf", + "id": "https://iiif.wellcomecollection.org/pdf/b18035723", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/pdf/b18035723", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723", + "type": "Text", + }, + ], + "label": { + "en": [ + "View as PDF", + ], + }, + "type": "Text", + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0001.JP2/full/73,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0001.JP2/full/73,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0001.JP2/full/73,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0001.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 73, + }, + { + "height": 200, + "width": 145, + }, + { + "height": 400, + "width": 290, + }, + { + "height": 1024, + "width": 742, + }, + ], + "width": 742, + }, + ], + "type": "Image", + "width": 73, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0002.JP2/full/73,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0002.JP2/full/73,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0002.JP2/full/73,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0002.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 73, + }, + { + "height": 200, + "width": 147, + }, + { + "height": 400, + "width": 294, + }, + { + "height": 1024, + "width": 751, + }, + ], + "width": 751, + }, + ], + "type": "Image", + "width": 73, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0003.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0003.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0003.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0003.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0004.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0004.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "@explicit": true, + "height": {}, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0004.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2", + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0004.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": {}, + }, + { + "@explicit": true, + "height": {}, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0004.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723", + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0004.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": {}, + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0004.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0004.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0005.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0005.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0005.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0005.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0006.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0006.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0006.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0006.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0007.JP2/full/73,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0007.JP2/full/73,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0007.JP2/full/73,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0007.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 73, + }, + { + "height": 200, + "width": 147, + }, + { + "height": 400, + "width": 294, + }, + { + "height": 1024, + "width": 752, + }, + ], + "width": 752, + }, + ], + "type": "Image", + "width": 73, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0008.JP2/full/73,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0008.JP2/full/73,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0008.JP2/full/73,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0008.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 73, + }, + { + "height": 200, + "width": 147, + }, + { + "height": 400, + "width": 293, + }, + { + "height": 1024, + "width": 750, + }, + ], + "width": 750, + }, + ], + "type": "Image", + "width": 73, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0009.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0009.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0009.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0009.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0010.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0010.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0010.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0010.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0011.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0011.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0011.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0011.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0012.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0012.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0012.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0012.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0013.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0013.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0013.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0013.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0014.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0014.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0014.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0014.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0015.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0015.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0015.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0015.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0016.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0016.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0016.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0016.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0017.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0017.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0017.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0017.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0018.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0018.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0018.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0018.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0019.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0019.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0019.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0019.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0020.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0020.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0020.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0020.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0021.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0021.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0021.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0021.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0022.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0022.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0022.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0022.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0023.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0023.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0023.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0023.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0024.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0024.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0024.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0024.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0025.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0025.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0025.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0025.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0026.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0026.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0026.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0026.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0027.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0027.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0027.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0027.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0028.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0028.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0028.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0028.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0029.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0029.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0029.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0029.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0030.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0030.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0030.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0030.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0031.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0031.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0031.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0031.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0032.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0032.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0032.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0032.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0033.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0033.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0033.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0033.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0034.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0034.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0034.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0034.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0035.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0035.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0035.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0035.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://iiif.wellcomecollection.org/thumbs/b18035723_0036.JP2/full/72,100/0/default.jpg": { + "height": 100, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0036.JP2/full/72,100/0/default.jpg", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0036.JP2/full/72,100/0/default.jpg", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2", + "type": "Image", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0036.JP2", + "@type": "ImageService2", + "height": 1024, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 100, + "width": 72, + }, + { + "height": 200, + "width": 143, + }, + { + "height": 400, + "width": 286, + }, + { + "height": 1024, + "width": 732, + }, + ], + "width": 732, + }, + ], + "type": "Image", + "width": 72, + }, + "https://wellcomecollection.org/works": { + "format": "text/html", + "id": "https://wellcomecollection.org/works", + "iiif-parser:hasPart": [ + { + "id": "https://wellcomecollection.org/works", + "iiif-parser:partOf": "https://wellcomecollection.org", + "type": "Text", + }, + ], + "label": { + "en": [ + "Explore our collections", + ], + }, + "type": "Text", + }, + "https://wellcomecollection.org/works/krqp99r9": { + "format": "text/html", + "id": "https://wellcomecollection.org/works/krqp99r9", + "iiif-parser:hasPart": [ + { + "id": "https://wellcomecollection.org/works/krqp99r9", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723", + "type": "Text", + }, + ], + "label": { + "en": [ + "Wunder der Vererbung / von Fritz Bolle.", + ], + }, + "language": [ + "en", + ], + "type": "Text", + }, + }, + "Manifest": { + "https://iiif.wellcomecollection.org/presentation/b18035723": { + "@context": [ + "http://iiif.io/api/search/1/context.json", + "http://iiif.io/api/presentation/3/context.json", + ], + "accompanyingCanvas": null, + "annotations": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/images", + "type": "AnnotationPage", + }, + ], + "behavior": [ + "paged", + ], + "homepage": [ + { + "id": "https://wellcomecollection.org/works/krqp99r9", + "type": "ContentResource", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723", + "type": "Manifest", + }, + ], + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2", + "type": "Canvas", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2", + "type": "Canvas", + }, + ], + "label": { + "en": [ + "Wunder der Vererbung / von Fritz Bolle.", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Publication/creation", + ], + }, + "value": { + "none": [ + "Murnau ; München : Sebastian Lux, [1951]", + ], + }, + }, + { + "label": { + "en": [ + "Physical description", + ], + }, + "value": { + "en": [ + "31 pages : illustrations ; 15 cm.", + ], + }, + }, + { + "label": { + "en": [ + "Contributors", + ], + }, + "value": { + "none": [ + "Bolle, Fritz.", + ], + }, + }, + { + "label": { + "en": [ + "Type/technique", + ], + }, + "value": { + "en": [ + "Pamphlets", + ], + }, + }, + { + "label": { + "en": [ + "Subjects", + ], + }, + "value": { + "en": [ + "Genetics - history", + ], + }, + }, + { + "label": { + "en": [ + "Attribution and usage", + ], + }, + "value": { + "en": [ + "Wellcome Collection", + "You have permission to make copies of this work under a Creative Commons, Attribution, Non-commercial license.

Non-commercial use includes private study, academic research, teaching, and other activities that are not primarily intended for, or directed towards, commercial advantage or private monetary compensation. See the Legal Code for further information.

Image source should be attributed as specified in the full catalogue record. If no source is given the image should be attributed to Wellcome Collection.
", + ], + }, + }, + ], + "navDate": null, + "partOf": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/collections/contributors/xtwzf3g5", + "type": "Collection", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/collections/subjects/hq8gcy73", + "type": "Collection", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Pamphlets", + "type": "Collection", + }, + ], + "placeholderCanvas": null, + "provider": [ + { + "id": "https://wellcomecollection.org", + "type": "Agent", + }, + ], + "rendering": [ + { + "id": "https://iiif.wellcomecollection.org/pdf/b18035723", + "type": "ContentResource", + }, + { + "id": "https://api.wellcomecollection.org/text/v1/b18035723", + "type": "ContentResource", + }, + ], + "requiredStatement": null, + "rights": "http://creativecommons.org/licenses/by-nc/4.0/", + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/catalogue/v2/works/krqp99r9", + "type": "ContentResource", + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/search/v1/b18035723", + "@type": "SearchService1", + "label": "Search within this manifest", + "profile": "http://iiif.io/api/search/1/search", + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/search/autocomplete/v1/b18035723", + "@type": "AutoCompleteService1", + "label": "Autocomplete words in this manifest", + "profile": "http://iiif.io/api/search/1/autocomplete", + }, + ], + }, + ], + "services": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723#tracking", + "label": { + "en": [ + "Format: Monograph, Institution: n/a, Identifier: b18035723, Digicode: diggenetics, Collection code: n/a", + ], + }, + "profile": "http://universalviewer.io/tracking-extensions-profile", + "type": "Text", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723#timestamp", + "label": { + "none": [ + "2021-04-29T21:58:28.9247406Z", + ], + }, + "profile": "https://github.com/wellcomecollection/iiif-builder/build-timestamp", + "type": "Text", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723#accesscontrolhints", + "label": { + "en": [ + "open", + ], + }, + "profile": "http://wellcomelibrary.org/ld/iiif-ext/access-control-hints", + "type": "Text", + }, + ], + "start": null, + "structures": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/ranges/LOG_0001", + "type": "Range", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/ranges/LOG_0003", + "type": "Range", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/ranges/LOG_0002", + "type": "Range", + }, + ], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0004.JP2/full/72,100/0/default.jpg", + "type": "ContentResource", + }, + ], + "type": "Manifest", + "viewingDirection": "left-to-right", + }, + }, + "Range": { + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/ranges/LOG_0001", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/ranges/LOG_0002", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/ranges/LOG_0003", + "type": "Canvas", + }, + ], + "items": [], + "label": null, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Canvas", + "viewingDirection": "left-to-right", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/ranges/LOG_0001": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/ranges/LOG_0001", + "items": [ + { + "selector": undefined, + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "none": [ + "Front Cover", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/ranges/LOG_0002": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/ranges/LOG_0002", + "items": [ + { + "selector": undefined, + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "none": [ + "Back Cover", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723/ranges/LOG_0003": { + "accompanyingCanvas": null, + "annotations": [], + "behavior": [], + "homepage": [], + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/ranges/LOG_0003", + "items": [ + { + "selector": undefined, + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2", + "type": "Canvas", + }, + "type": "SpecificResource", + }, + ], + "label": { + "none": [ + "Title Page", + ], + }, + "metadata": [], + "navDate": null, + "partOf": [], + "placeholderCanvas": null, + "provider": [], + "rendering": [], + "requiredStatement": null, + "rights": null, + "seeAlso": [], + "service": [], + "start": null, + "summary": null, + "supplementary": null, + "thumbnail": [], + "type": "Range", + "viewingDirection": "left-to-right", + }, + }, + "Selector": {}, + "Service": { + "https://iiif.wellcomecollection.org/image/b18035723_0001.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0001.JP2", + "@type": "ImageService2", + "height": 3543, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0001.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2569, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0002.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0002.JP2", + "@type": "ImageService2", + "height": 3040, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0002.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2231, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0003.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0003.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0003.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0004.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0004.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0004.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0005.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0005.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0005.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0006.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0006.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0006.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0007.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0007.JP2", + "@type": "ImageService2", + "height": 2736, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0007.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2008, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0008.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0008.JP2", + "@type": "ImageService2", + "height": 2740, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0008.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2008, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0009.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0009.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0009.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0010.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0010.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0010.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0011.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0011.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0011.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0012.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0012.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0012.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0013.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0013.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0013.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0014.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0014.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0014.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0015.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0015.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0015.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0016.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0016.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0016.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0017.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0017.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0017.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0018.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0018.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0018.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0019.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0019.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0019.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0020.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0020.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0020.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0021.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0021.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0021.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0022.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0022.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0022.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0023.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0023.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0023.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0024.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0024.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0024.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0025.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0025.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0025.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0026.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0026.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0026.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0027.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0027.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0027.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0028.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0028.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0028.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0029.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0029.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0029.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0030.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0030.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0030.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0031.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0031.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0031.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0032.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0032.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0032.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0033.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0033.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0033.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0034.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0034.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0034.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0035.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0035.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0035.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/image/b18035723_0036.JP2": { + "@id": "https://iiif.wellcomecollection.org/image/b18035723_0036.JP2", + "@type": "ImageService2", + "height": 3372, + "id": "https://iiif.wellcomecollection.org/image/b18035723_0036.JP2", + "profile": "http://iiif.io/api/image/2/level1.json", + "type": "ImageService2", + "width": 2411, + }, + "https://iiif.wellcomecollection.org/presentation/b18035723#accesscontrolhints": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723#accesscontrolhints", + "label": { + "en": [ + "open", + ], + }, + "profile": "http://wellcomelibrary.org/ld/iiif-ext/access-control-hints", + "type": "Text", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723#timestamp": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723#timestamp", + "label": { + "none": [ + "2021-04-29T21:58:28.9247406Z", + ], + }, + "profile": "https://github.com/wellcomecollection/iiif-builder/build-timestamp", + "type": "Text", + }, + "https://iiif.wellcomecollection.org/presentation/b18035723#tracking": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723#tracking", + "label": { + "en": [ + "Format: Monograph, Institution: n/a, Identifier: b18035723, Digicode: diggenetics, Collection code: n/a", + ], + }, + "profile": "http://universalviewer.io/tracking-extensions-profile", + "type": "Text", + }, + "https://iiif.wellcomecollection.org/search/autocomplete/v1/b18035723": { + "@id": "https://iiif.wellcomecollection.org/search/autocomplete/v1/b18035723", + "@type": "AutoCompleteService1", + "id": "https://iiif.wellcomecollection.org/search/autocomplete/v1/b18035723", + "label": "Autocomplete words in this manifest", + "profile": "http://iiif.io/api/search/1/autocomplete", + "type": "AutoCompleteService1", + }, + "https://iiif.wellcomecollection.org/search/v1/b18035723": { + "@id": "https://iiif.wellcomecollection.org/search/v1/b18035723", + "@type": "SearchService1", + "id": "https://iiif.wellcomecollection.org/search/v1/b18035723", + "label": "Search within this manifest", + "profile": "http://iiif.io/api/search/1/search", + "service": [ + { + "id": "https://iiif.wellcomecollection.org/search/autocomplete/v1/b18035723", + "type": "AutoCompleteService1", + }, + ], + "type": "SearchService1", + }, + }, + }, + "mapping": { + "https://api.wellcomecollection.org/catalogue/v2/works/krqp99r9": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0001.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0002.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0003.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0004.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0005.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0006.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0007.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0008.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0009.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0010.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0011.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0012.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0013.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0014.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0015.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0016.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0017.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0018.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0019.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0020.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0021.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0022.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0023.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0024.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0025.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0026.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0027.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0028.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0029.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0030.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0031.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0032.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0033.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0034.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0035.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0036.JP2": "ContentResource", + "https://api.wellcomecollection.org/text/v1/b18035723": "ContentResource", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0001.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0002.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0003.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0004.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0005.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0006.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0007.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0008.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0009.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0010.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0011.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0012.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0013.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0014.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0015.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0016.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0017.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0018.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0019.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0020.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0021.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0022.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0023.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0024.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0025.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0026.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0027.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0028.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0029.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0030.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0031.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0032.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0033.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0034.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0035.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0036.JP2/line": "AnnotationPage", + "https://iiif.wellcomecollection.org/annotations/v3/b18035723/images": "AnnotationPage", + "https://iiif.wellcomecollection.org/image/b18035723_0001.JP2/full/742,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0002.JP2/full/751,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0003.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0004.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0005.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0006.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0007.JP2/full/752,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0008.JP2/full/750,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0009.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0010.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0011.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0012.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0013.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0014.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0015.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0016.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0017.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0018.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0019.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0020.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0021.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0022.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0023.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0024.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0025.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0026.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0027.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0028.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0029.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0030.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0031.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0032.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0033.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0034.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0035.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/image/b18035723_0036.JP2/full/732,1024/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/logos/wellcome-collection-black.png": "ContentResource", + "https://iiif.wellcomecollection.org/pdf/b18035723": "ContentResource", + "https://iiif.wellcomecollection.org/presentation/b18035723": "Manifest", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2": "Canvas", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b18035723/ranges/LOG_0001": "Range", + "https://iiif.wellcomecollection.org/presentation/b18035723/ranges/LOG_0002": "Range", + "https://iiif.wellcomecollection.org/presentation/b18035723/ranges/LOG_0003": "Range", + "https://iiif.wellcomecollection.org/presentation/collections/contributors/xtwzf3g5": "Collection", + "https://iiif.wellcomecollection.org/presentation/collections/genres/Pamphlets": "Collection", + "https://iiif.wellcomecollection.org/presentation/collections/subjects/hq8gcy73": "Collection", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0001.JP2/full/73,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0002.JP2/full/73,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0003.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0004.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0005.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0006.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0007.JP2/full/73,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0008.JP2/full/73,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0009.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0010.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0011.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0012.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0013.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0014.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0015.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0016.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0017.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0018.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0019.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0020.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0021.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0022.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0023.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0024.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0025.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0026.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0027.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0028.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0029.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0030.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0031.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0032.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0033.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0034.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0035.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/thumbs/b18035723_0036.JP2/full/72,100/0/default.jpg": "ContentResource", + "https://wellcomecollection.org": "Agent", + "https://wellcomecollection.org/works": "ContentResource", + "https://wellcomecollection.org/works/krqp99r9": "ContentResource", + }, + "resource": { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723", + "type": "Manifest", + }, +} +`; diff --git a/__tests__/presentation-3-parser/serializer.test.ts b/__tests__/presentation-3-parser/serializer.test.ts index 7a7e82a..86e045c 100644 --- a/__tests__/presentation-3-parser/serializer.test.ts +++ b/__tests__/presentation-3-parser/serializer.test.ts @@ -465,6 +465,7 @@ describe('serializer', () => { expect(serialized2).toMatchInlineSnapshot(` { + "@context": "http://iiif.io/api/presentation/2/context.json", "@id": "https://example.org/iiif/book1/manifest", "@type": "sc:Manifest", "attribution": "Provided by Example Organization", diff --git a/__tests__/presentation-3-parser/smoke.tests.ts b/__tests__/presentation-3-parser/smoke.tests.ts new file mode 100644 index 0000000..6a1eb02 --- /dev/null +++ b/__tests__/presentation-3-parser/smoke.tests.ts @@ -0,0 +1,109 @@ +import cookbookIndex from '../../fixtures/cookbook/_index.json'; +import { promises } from 'node:fs'; +import { cwd } from 'node:process'; +import { join } from 'path'; +const { readFile, readdir } = promises; +import { normalize, serialize, serializeConfigPresentation2, serializeConfigPresentation3 } from '../../src'; +import { expect } from 'vitest'; + +const skipThese: string[] = [ + // '0219-using-caption-file', // https://github.com/IIIF/cookbook-recipes/pull/340 + + // @todo + // - Bad service array + // - Strange Image service behaviour (id/type vs @id/@type) + // - BUG - annotation.target should have type if it's an annotation. + 'exhibition-1.json', + + // @todo + // - Has ImageService3 and ImageService2 with the same identifier :( + 'bodleian.json', +]; + +describe('Smoke tests', async function () { + const files = await readdir(join(cwd(), 'fixtures/presentation-3')); + const twoThreeConverted = await readdir(join(cwd(), 'fixtures/2-to-3-converted')); + const presentation2 = await readdir(join(cwd(), 'fixtures/presentation-2')); + + const tests = files.filter((item: string) => skipThese.indexOf(item) === -1).map((item) => [item]); + const twoThreeConvertedTests = twoThreeConverted + .filter((item: string) => item.endsWith('.json') && skipThese.indexOf(item) === -1) + .map((item) => [item]); + const presentation2Tests = presentation2 + .filter((item: string) => item.endsWith('.json') && skipThese.indexOf(item) === -1) + .map((item) => [item]); + + test.each(tests)('Smoke test: ./fixtures/presentation-3/%s', async (id) => { + const json = await readFile(join(cwd(), 'fixtures/presentation-3', `${id}`)); + const jsonString = json.toString(); + const manifest = JSON.parse(jsonString); + const original = JSON.parse(jsonString); + const result = normalize(manifest); + expect(result).toMatchSnapshot(); + + const reserialized = serialize( + { + mapping: result.mapping, + entities: result.entities, + requests: {}, + }, + result.resource, + serializeConfigPresentation3 + ); + + expect(reserialized).toEqual(original); + + // Immutability: + // expect(manifest).toEqual(original); + }); + test.each(twoThreeConvertedTests)('Smoke test: ./fixtures/2-to-3-converted/%s', async (id) => { + const json = await readFile(join(cwd(), 'fixtures/2-to-3-converted', `${id}`)); + const jsonString = json.toString(); + const manifest = JSON.parse(jsonString); + const original = JSON.parse(jsonString); + const result = normalize(manifest); + expect(result).toMatchSnapshot(); + + const reserialized = serialize( + { + mapping: result.mapping, + entities: result.entities, + requests: {}, + }, + result.resource, + serializeConfigPresentation3 + ); + + expect(reserialized).toEqual(original); + + // Immutability: + // expect(manifest).toEqual(original); + }); + + // @todo these are skipped because the presentation 2 serialiser is "good enough" but not good. + test.skip.each(presentation2Tests)('Smoke test: ./fixtures/presentation-2/%s', async (id) => { + const json = await readFile(join(cwd(), 'fixtures/presentation-2', `${id}`)); + const jsonString = json.toString(); + const manifest = JSON.parse(jsonString); + const original = JSON.parse(jsonString); + const result = normalize(manifest); + expect(result).toMatchSnapshot(); + + const reserialized = serialize( + { + mapping: result.mapping, + entities: result.entities, + requests: {}, + }, + result.resource, + serializeConfigPresentation2 + ); + + expect(reserialized).toMatchSnapshot(); + + expect(reserialized).toEqual(original); + + // Immutability: + // expect(manifest).toEqual(original); + }); +}); diff --git a/fixtures/presentation-3/bodleian.json b/fixtures/presentation-3/bodleian.json new file mode 100644 index 0000000..1c8f09b --- /dev/null +++ b/fixtures/presentation-3/bodleian.json @@ -0,0 +1,465 @@ +{ + "@context": "http://iiif.io/api/presentation/3/context.json", + "id": "https://iiif.bodleian.ox.ac.uk/iiif/manifest/33c2e37e-957a-4820-83e1-611c987021c9.json", + "type": "Manifest", + "label": { + "en": [ + "Bodleian Library LP 44" + ] + }, + "summary": { + "en": [ + "Portrait of a woman, called Mary, Queen of Scots (1542–1587)" + ] + }, + "metadata": [ + { + "label": { + "en": [ + "Title" + ] + }, + "value": { + "en": [ + "Portrait of a woman, called Mary, Queen of Scots (1542–1587)" + ] + } + }, + { + "label": { + "en": [ + "Shelfmark" + ] + }, + "value": { + "en": [ + "Bodleian Library LP 44" + ] + } + }, + { + "label": { + "en": [ + "Artist" + ] + }, + "value": { + "en": [ + "Artist unknown" + ] + } + }, + { + "label": { + "en": [ + "Sitter" + ] + }, + "value": { + "en": [ + "Mary?, Queen of Scots (1542-1587)" + ] + } + }, + { + "label": { + "en": [ + "Language" + ] + }, + "value": { + "en": [ + "No linguistic content" + ] + } + }, + { + "label": { + "en": [ + "Date Statement" + ] + }, + "value": { + "en": [ + "1838" + ] + } + }, + { + "label": { + "en": [ + "Description" + ] + }, + "value": { + "en": [ + "A copy of the portrait overpainted on LP 46, before it was removed in 1838. Not an authentic portrait, though at one time very popular, it is perhaps an adaptation of a miniature by Nicholas Hilliard (1537‒1619)." + ] + } + }, + { + "label": { + "en": [ + "Materials" + ] + }, + "value": { + "en": [ + "oil on canvas" + ] + } + }, + { + "label": { + "en": [ + "Dimensions" + ] + }, + "value": { + "en": [ + "550 × 454 mm." + ] + } + }, + { + "label": { + "en": [ + "Provenance" + ] + }, + "value": { + "en": [ + "Probably commissioned by the Curators of the Bodleian Library, before 1838." + ] + } + }, + { + "label": { + "en": [ + "Accession Date" + ] + }, + "value": { + "en": [ + "by 1838" + ] + } + }, + { + "label": { + "en": [ + "Accession Source" + ] + }, + "value": { + "en": [ + "Bodleian Curators" + ] + } + }, + { + "label": { + "en": [ + "Accession Type" + ] + }, + "value": { + "en": [ + "commission" + ] + } + }, + { + "label": { + "en": [ + "Record Origin" + ] + }, + "value": { + "en": [ + "Description by Dana Josephson (2019)." + ] + } + }, + { + "label": { + "en": [ + "Collection" + ] + }, + "value": { + "en": [ + "Portraits" + ] + } + }, + { + "label": { + "en": [ + "Additional Information Sources" + ] + }, + "value": { + "en": [ + "Poole, Rachael. Catalogue of portraits in the possession of the University, colleges, city, and county of Oxford (Oxford, 1912). Garlick, Kenneth, and Rachael Poole. Catalogue of portraits in the Bodleian Library, Oxford (Oxford, 2004)." + ] + } + }, + { + "label": { + "en": [ + "Digitization Project" + ] + }, + "value": { + "en": [ + "The Bodleian Libraries’ Portrait Collection: A Samuel H. Kress Foundation Digitization Project" + ] + } + }, + { + "label": { + "en": [ + "Record Created" + ] + }, + "value": { + "en": [ + "2019-06-17T15:37:01Z" + ] + } + }, + { + "label": { + "en": [ + "Holding Institution" + ] + }, + "value": { + "en": [ + "Bodleian Libraries, University of Oxford" + ] + } + }, + { + "label": { + "en": [ + "Access Rights" + ] + }, + "value": { + "en": [ + "Photo: © Bodleian Libraries, University of Oxford" + ] + } + }, + { + "label": { + "en": [ + "Digitization Sponsor" + ] + }, + "value": { + "en": [ + "The Samuel H. Kress Foundation" + ] + } + } + ], + "homepage": [ + { + "id": "https://digital.bodleian.ox.ac.uk/objects/33c2e37e-957a-4820-83e1-611c987021c9/", + "type": "Text", + "label": { + "en": [ + "View on Digital Bodleian" + ] + }, + "format": "text/html", + "language": [ + "en" + ] + } + ], + "provider": [ + { + "id": "https://viaf.org/viaf/173632201/", + "type": "Agent", + "label": { + "en": [ + "Bodleian Libraries, University of Oxford" + ] + }, + "homepage": [ + { + "id": "https://www.bodleian.ox.ac.uk/", + "type": "Text", + "label": { + "en": [ + "Bodleian Libraries, University of Oxford" + ] + }, + "format": "text/html" + } + ] + } + ], + "navDate": "1838-01-01T00:00:00Z", + "logo": [ + { + "id": "https://iiif.bodleian.ox.ac.uk/iiif/image/f27e28db-0b08-4f16-9bdf-3565f591fb71/full/256,/0/default.jpg", + "type": "Image", + "service": [ + { + "@id": "https://iiif.bodleian.ox.ac.uk/iiif/image/f27e28db-0b08-4f16-9bdf-3565f591fb71", + "@type": "ImageService2", + "profile": "http://iiif.io/api/image/2/level1.json" + }, + { + "id": "https://iiif.bodleian.ox.ac.uk/iiif/image/f27e28db-0b08-4f16-9bdf-3565f591fb71", + "type": "ImageService3", + "profile": "level1" + } + ] + } + ], + "thumbnail": [ + { + "id": "https://iiif.bodleian.ox.ac.uk/iiif/image/012b1e0f-8c9e-48e7-83d6-5e51a70253b4/full/256,/0/default.jpg", + "type": "Image", + "service": [ + { + "@id": "https://iiif.bodleian.ox.ac.uk/iiif/image/012b1e0f-8c9e-48e7-83d6-5e51a70253b4", + "@type": "ImageService2", + "profile": "http://iiif.io/api/image/2/level1.json" + }, + { + "id": "https://iiif.bodleian.ox.ac.uk/iiif/image/012b1e0f-8c9e-48e7-83d6-5e51a70253b4", + "type": "ImageService3", + "profile": "level1" + } + ] + } + ], + "requiredStatement": { + "label": { + "en": [ + "Terms of Use" + ] + }, + "value": { + "en": [ + "Terms of use: CC-BY-NC 4.0. For more information, please see https://digital.bodleian.ox.ac.uk/terms/" + ] + } + }, + "partOf": [ + { + "id": "https://iiif.bodleian.ox.ac.uk/iiif/collection/portraits", + "type": "Collection", + "label": { + "en": [ + "Portraits" + ] + } + }, + { + "id": "https://iiif.bodleian.ox.ac.uk/iiif/collection/bodleian", + "type": "Collection", + "label": { + "en": [ + "Bodleian Libraries" + ] + } + }, + { + "id": "https://iiif.bodleian.ox.ac.uk/iiif/collection/portraits-prints-drawings-objects", + "type": "Collection", + "label": { + "en": [ + "Portraits, Prints and Drawings" + ] + } + }, + { + "id": "https://iiif.bodleian.ox.ac.uk/iiif/collection/bodleian-portraits", + "type": "Collection", + "label": { + "en": [ + "The Bodleian Libraries’ Portrait Collection: A Samuel H. Kress Foundation Digitization Project" + ] + } + } + ], + "behavior": [ + "paged" + ], + "items": [ + { + "id": "https://iiif.bodleian.ox.ac.uk/iiif/canvas/012b1e0f-8c9e-48e7-83d6-5e51a70253b4.json", + "type": "Canvas", + "label": { + "en": [ + "front" + ] + }, + "width": 1920, + "height": 2326, + "items": [ + { + "id": "https://iiif.bodleian.ox.ac.uk/iiif/annotationpage/012b1e0f-8c9e-48e7-83d6-5e51a70253b4.json", + "type": "AnnotationPage", + "items": [ + { + "id": "https://iiif.bodleian.ox.ac.uk/iiif/annotation/012b1e0f-8c9e-48e7-83d6-5e51a70253b4_image.json", + "type": "Annotation", + "target": "https://iiif.bodleian.ox.ac.uk/iiif/canvas/012b1e0f-8c9e-48e7-83d6-5e51a70253b4.json", + "body": { + "id": "https://iiif.bodleian.ox.ac.uk/iiif/image/012b1e0f-8c9e-48e7-83d6-5e51a70253b4/full/max/0/default.jpg", + "type": "Image", + "format": "image/jpeg", + "width": 1920, + "height": 2326, + "service": [ + { + "@id": "https://iiif.bodleian.ox.ac.uk/iiif/image/012b1e0f-8c9e-48e7-83d6-5e51a70253b4", + "@type": "ImageService2", + "profile": "http://iiif.io/api/image/2/level1.json" + }, + { + "id": "https://iiif.bodleian.ox.ac.uk/iiif/image/012b1e0f-8c9e-48e7-83d6-5e51a70253b4", + "type": "ImageService3", + "profile": "level1" + } + ] + }, + "motivation": "painting" + } + ] + } + ] + } + ], + "structures": [ + { + "id": "https://iiif.bodleian.ox.ac.uk/iiif/range/33c2e37e-957a-4820-83e1-611c987021c9/LOG_0000", + "type": "Range", + "label": { + "en": [ + "LP 44" + ] + }, + "items": [ + { + "id": "https://iiif.bodleian.ox.ac.uk/iiif/canvas/012b1e0f-8c9e-48e7-83d6-5e51a70253b4.json", + "type": "Canvas" + } + ], + "start": { + "id": "https://iiif.bodleian.ox.ac.uk/iiif/canvas/012b1e0f-8c9e-48e7-83d6-5e51a70253b4.json", + "type": "Canvas" + } + } + ], + "viewingDirection": "left-to-right" +} diff --git a/fixtures/presentation-3/ocean-liners.json b/fixtures/presentation-3/ocean-liners.json index efbb3ac..ab7da9f 100644 --- a/fixtures/presentation-3/ocean-liners.json +++ b/fixtures/presentation-3/ocean-liners.json @@ -5,7 +5,6 @@ ], "id": "https://iiif.vam.ac.uk/collections/O1023003/manifest.json", "type": "Manifest", - "viewingDirection": "left-to-right", "behavior": ["individuals"], "items": [ { @@ -17,8 +16,8 @@ "service": [ { "profile": "level1", - "type": "ImageService2", - "id": "https://framemark.vam.ac.uk/collections/2013GU2911" + "@type": "ImageService2", + "@id": "https://framemark.vam.ac.uk/collections/2013GU2911" } ], "format": "image/jpeg", @@ -30,7 +29,8 @@ }, "motivation": "painting", "type": "Annotation", - "target": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0" + "target": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0", + "id": "https://iiif.vam.ac.uk/collections/O1023003/anno/a1" } ], "type": "AnnotationPage" @@ -59,11 +59,7 @@ "

First-class lounge

First-class public rooms were located in the centre of the ship – the most stable and comfortable areas on board. The Aquitania's opulent interiors were inspired by classical architecture – spot the Ionic columns in the lounge. Architect Arthur Davis recommended the use of plaster and papier-mâché for ceilings, domes, and other decorative moulding, but advised against using marble and brickwork, as these would make the ship top-heavy.

Photograph from The New Art of Going Abroad, 1929, US. National Art Library: 38041986015030. © Victoria and Albert Museum, London

", "format": "text/html" }, - "target": { - "id": - "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=1800,2000,500,500", - "type": "Canvas" - } + "target": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=1800,2000,500,500" }, { "id": @@ -76,11 +72,7 @@ "

Garden lounge

“As cool, as restful, as any terrace overlooking a rose-garden.” (The New Art of Going Abroad, 1929). Overlooking the sea and decorated with palms, the garden lounge was a fashionable place to have tea and was sometimes used for dancing.

Photograph from The New Art of Going Abroad, 1929, US. National Art Library: 38041986015030. © Victoria and Albert Museum, London

", "format": "text/html" }, - "target": { - "id": - "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=3000,2100,100,200", - "type": "Canvas" - } + "target": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=3000,2100,100,200" }, { "id": @@ -93,11 +85,7 @@ "

First-class restaurant

Dining on ocean liners was a radically different experience depending on the class of travel. In first class, the Aquitania’s Louis XVI-style dining room offered seating in small isolated groups, echoing elegant restaurants on land. The ship’s architect, Arthur Davis, explained that a “cheerful room with comfortable surroundings” was a necessary distraction from “the often very unpleasant conditions” at sea.

Photograph from The New Art of Going Abroad, 1929, US. National Art Library: 38041986015030. © Victoria and Albert Museum, London

", "format": "text/html" }, - "target": { - "id": - "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=2000,2800,400,400", - "type": "Canvas" - } + "target": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=2000,2800,400,400" }, { "id": @@ -110,11 +98,7 @@ "

First-class state room

The Aquitania’s first-class cabins were designed by architect Arthur Davis, whose firm, Mewès and Davis Architects, had decorated the famously opulent Ritz hotels in Paris and London. The cabins were “as spacious as a bedroom at the Ritz or the Barclay. The walls are panelled in grey silk. The carpets are vibrant blue and yellow, as are also the striped silk chair coverings. Note the bath – just off-stage, and the electric heater”. (The New Art of Going Abroad, 1929).

Photograph from The New Art of Going Abroad, 1929, US. National Art Library: 38041986015030. © Victoria and Albert Museum, London

", "format": "text/html" }, - "target": { - "id": - "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=1400,2500,100,200", - "type": "Canvas" - } + "target": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=1400,2500,100,200" }, { "id": @@ -127,11 +111,7 @@ "

Third-class dining saloon

While extravagant dishes and refined delicacies were served in first class, third-class meals were less sophisticated. A third-class lunch on a Cunard ship in the 1920s could include rice soup, boiled haddock or braised beef with cabbage, boiled potatoes, bread and ‘cabin biscuits’, followed by bread and butter pudding. To save space, passengers sat at long communal tables on chairs bolted to the floor, in case of bad weather.

", "format": "text/html" }, - "target": { - "id": - "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=2450,3800,100,200", - "type": "Canvas" - } + "target": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=2450,3800,100,200" }, { "id": @@ -144,11 +124,7 @@ "

Third-class four berth room

Liners were strictly organised spaces which reflected social hierarchies. Although people travelling in third class could account for 60% of the total number of passengers, they were segregated into a relatively small space in the lower decks of the ship, close to the noisy engine room. These four-berth rooms had none of the luxurious furnishings or fabrics found in first class, but they were an improvement on the communal sleeping quarters provided for steerage-class passengers on earlier liners.

", "format": "text/html" }, - "target": { - "id": - "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=800,3500,100,200", - "type": "Canvas" - } + "target": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=800,3500,100,200" }, { "id": @@ -161,11 +137,7 @@ "

Boiler room

In 1919 the Aquitania was refitted and converted from coal-burning to oil-burning engines, which meant fewer crew were required to labour in the engine room.

", "format": "text/html" }, - "target": { - "id": - "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=2500,4500,500,800", - "type": "Canvas" - } + "target": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=2500,4500,500,800" }, { "id": @@ -178,11 +150,7 @@ "

Stores

Ocean liners required huge quantities of food, enough for all crew and passengers – the equivalent to feeding a floating city. Cunard catered for varied tastes. Provisions for one trip included 500 sheep kidneys, 400 ox tails, 800 tongues and large quantities of frogs’ legs, as well as geese, turkey, duck, game and “75 heads of cattle and calfs”.

", "format": "text/html" }, - "target": { - "id": - "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=3000,4000,100,200", - "type": "Canvas" - } + "target": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=3000,4000,100,200" }, { "id": @@ -195,11 +163,7 @@ "

Baggage

Passengers travelling for weeks or months would bring a huge number of trunks, most of which were kept in the baggage store deep in the hull of the ship. Cabins could only accommodate smaller trunks. Louis Vuitton designed the ‘steamer trunk’ specifically to fit under a first-class cabin bed. The baggage store was opened daily so that maids or stewards could collect personal items that were needed during the voyage.

", "format": "text/html" }, - "target": { - "id": - "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=2100,4000,100,200", - "type": "Canvas" - } + "target": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=2100,4000,100,200" }, { "id": @@ -212,11 +176,7 @@ "

Second-class dining saloon

The second-class spaces, like first class, were decorated in a neo-classical style. “The second-class accommodation on the vessel, though not so sumptuous as the first-class, is still very elaborate and comfortable”, explained the architect. “The dining-room, no less than 104 ft in length and extending across the whole width of the ship, is decorated with paintings adapted from panels by Pergolesi”– the 18th-century decorative artist. (Arthur Davis, The Architectural Review, April 1914)

", "format": "text/html" }, - "target": { - "id": - "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=1500,3250,100,200", - "type": "Canvas" - } + "target": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0#xywh=1500,3250,100,200" } ] } diff --git a/fixtures/presentation-3/wellcome-collection.json b/fixtures/presentation-3/wellcome-collection.json index b7ec87e..886977a 100644 --- a/fixtures/presentation-3/wellcome-collection.json +++ b/fixtures/presentation-3/wellcome-collection.json @@ -1,4 +1,5 @@ { + "@context": "http://iiif.io/api/presentation/3/context.json", "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Abstracts", "type": "Collection", "label": { diff --git a/fixtures/presentation-3/wellcome-p3-2.json b/fixtures/presentation-3/wellcome-p3-2.json index 30d621a..4edfb42 100644 --- a/fixtures/presentation-3/wellcome-p3-2.json +++ b/fixtures/presentation-3/wellcome-p3-2.json @@ -5,7 +5,11 @@ ], "id": "https://iiif.wellcomecollection.org/presentation/b18035723", "type": "Manifest", - "label": {"en":["Wunder der Vererbung / von Fritz Bolle."]}, + "label": { + "en": [ + "Wunder der Vererbung / von Fritz Bolle." + ] + }, "thumbnail": [ { "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0004.JP2/full/72,100/0/default.jpg", @@ -20,10 +24,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -33,34 +49,84 @@ { "id": "https://wellcomecollection.org/works/krqp99r9", "type": "Text", - "label": {"en":["Wunder der Vererbung / von Fritz Bolle."]}, + "label": { + "en": [ + "Wunder der Vererbung / von Fritz Bolle." + ] + }, "format": "text/html", - "language": ["en"] + "language": [ + "en" + ] } ], "metadata": [ { - "label": {"en":["Publication/creation"]}, - "value": {"none":["Murnau ; München : Sebastian Lux, [1951]"]} + "label": { + "en": [ + "Publication/creation" + ] + }, + "value": { + "none": [ + "Murnau ; München : Sebastian Lux, [1951]" + ] + } }, { - "label": {"en":["Physical description"]}, - "value": {"en":["31 pages : illustrations ; 15 cm."]} + "label": { + "en": [ + "Physical description" + ] + }, + "value": { + "en": [ + "31 pages : illustrations ; 15 cm." + ] + } }, { - "label": {"en":["Contributors"]}, - "value": {"none":["Bolle, Fritz."]} + "label": { + "en": [ + "Contributors" + ] + }, + "value": { + "none": [ + "Bolle, Fritz." + ] + } }, { - "label": {"en":["Type/technique"]}, - "value": {"en":["Pamphlets"]} + "label": { + "en": [ + "Type/technique" + ] + }, + "value": { + "en": [ + "Pamphlets" + ] + } }, { - "label": {"en":["Subjects"]}, - "value": {"en":["Genetics - history"]} + "label": { + "en": [ + "Subjects" + ] + }, + "value": { + "en": [ + "Genetics - history" + ] + } }, { - "label": {"en":["Attribution and usage"]}, + "label": { + "en": [ + "Attribution and usage" + ] + }, "value": { "en": [ "Wellcome Collection", @@ -88,7 +154,11 @@ { "id": "https://wellcomecollection.org/works", "type": "Text", - "label": {"en":["Explore our collections"]}, + "label": { + "en": [ + "Explore our collections" + ] + }, "format": "text/html" } ], @@ -105,13 +175,21 @@ { "id": "https://iiif.wellcomecollection.org/pdf/b18035723", "type": "Text", - "label": {"en":["View as PDF"]}, + "label": { + "en": [ + "View as PDF" + ] + }, "format": "application/pdf" }, { "id": "https://api.wellcomecollection.org/text/v1/b18035723", "type": "Text", - "label": {"en":["View raw text"]}, + "label": { + "en": [ + "View raw text" + ] + }, "format": "text/plain" } ], @@ -120,7 +198,11 @@ "id": "https://api.wellcomecollection.org/catalogue/v2/works/krqp99r9", "type": "Dataset", "profile": "https://api.wellcomecollection.org/catalogue/v2/context.json", - "label": {"en":["Wellcome Collection Catalogue API"]}, + "label": { + "en": [ + "Wellcome Collection Catalogue API" + ] + }, "format": "application/json" } ], @@ -130,15 +212,19 @@ "@type": "SearchService1", "profile": "http://iiif.io/api/search/1/search", "label": "Search within this manifest", - "service": { - "@id": "https://iiif.wellcomecollection.org/search/autocomplete/v1/b18035723", - "@type": "AutoCompleteService1", - "profile": "http://iiif.io/api/search/1/autocomplete", - "label": "Autocomplete words in this manifest" - } + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/search/autocomplete/v1/b18035723", + "@type": "AutoCompleteService1", + "profile": "http://iiif.io/api/search/1/autocomplete", + "label": "Autocomplete words in this manifest" + } + ] } ], - "behavior": ["paged"], + "behavior": [ + "paged" + ], "services": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723#tracking", @@ -154,20 +240,32 @@ "id": "https://iiif.wellcomecollection.org/presentation/b18035723#timestamp", "type": "Text", "profile": "https://github.com/wellcomecollection/iiif-builder/build-timestamp", - "label": {"none":["2021-04-29T21:58:28.9247406Z"]} + "label": { + "none": [ + "2021-04-29T21:58:28.9247406Z" + ] + } }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723#accesscontrolhints", "type": "Text", "profile": "http://wellcomelibrary.org/ld/iiif-ext/access-control-hints", - "label": {"en":["open"]} + "label": { + "en": [ + "open" + ] + } } ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2", "type": "Canvas", - "label": {"none":["-"]}, + "label": { + "none": [ + "-" + ] + }, "width": 2569, "height": 3543, "thumbnail": [ @@ -184,10 +282,22 @@ "width": 742, "height": 1024, "sizes": [ - {"width":73,"height":100}, - {"width":145,"height":200}, - {"width":290,"height":400}, - {"width":742,"height":1024} + { + "width": 73, + "height": 100 + }, + { + "width": 145, + "height": 200 + }, + { + "width": 290, + "height": 400 + }, + { + "width": 742, + "height": 1024 + } ] } ] @@ -198,7 +308,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0001.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -236,14 +350,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0001.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page -"]} + "label": { + "en": [ + "Text of page -" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2", "type": "Canvas", - "label": {"none":["-"]}, + "label": { + "none": [ + "-" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -260,10 +382,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -274,7 +408,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0003.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -312,14 +450,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0003.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page -"]} + "label": { + "en": [ + "Text of page -" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2", "type": "Canvas", - "label": {"none":["-"]}, + "label": { + "none": [ + "-" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -336,10 +482,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -350,7 +508,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0004.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -388,14 +550,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0004.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page -"]} + "label": { + "en": [ + "Text of page -" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2", "type": "Canvas", - "label": {"none":["2"]}, + "label": { + "none": [ + "2" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -412,10 +582,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -426,7 +608,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0005.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -464,14 +650,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0005.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 2"]} + "label": { + "en": [ + "Text of page 2" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2", "type": "Canvas", - "label": {"none":["3"]}, + "label": { + "none": [ + "3" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -488,10 +682,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -502,7 +708,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0006.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -540,14 +750,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0006.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 3"]} + "label": { + "en": [ + "Text of page 3" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2", "type": "Canvas", - "label": {"none":["4"]}, + "label": { + "none": [ + "4" + ] + }, "width": 2008, "height": 2736, "thumbnail": [ @@ -564,10 +782,22 @@ "width": 752, "height": 1024, "sizes": [ - {"width":73,"height":100}, - {"width":147,"height":200}, - {"width":294,"height":400}, - {"width":752,"height":1024} + { + "width": 73, + "height": 100 + }, + { + "width": 147, + "height": 200 + }, + { + "width": 294, + "height": 400 + }, + { + "width": 752, + "height": 1024 + } ] } ] @@ -578,7 +808,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0007.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -616,14 +850,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0007.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 4"]} + "label": { + "en": [ + "Text of page 4" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2", "type": "Canvas", - "label": {"none":["5"]}, + "label": { + "none": [ + "5" + ] + }, "width": 2008, "height": 2740, "thumbnail": [ @@ -640,10 +882,22 @@ "width": 750, "height": 1024, "sizes": [ - {"width":73,"height":100}, - {"width":147,"height":200}, - {"width":293,"height":400}, - {"width":750,"height":1024} + { + "width": 73, + "height": 100 + }, + { + "width": 147, + "height": 200 + }, + { + "width": 293, + "height": 400 + }, + { + "width": 750, + "height": 1024 + } ] } ] @@ -654,7 +908,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0008.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -692,14 +950,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0008.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 5"]} + "label": { + "en": [ + "Text of page 5" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2", "type": "Canvas", - "label": {"none":["6"]}, + "label": { + "none": [ + "6" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -716,10 +982,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -730,7 +1008,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0009.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -768,14 +1050,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0009.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 6"]} + "label": { + "en": [ + "Text of page 6" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2", "type": "Canvas", - "label": {"none":["7"]}, + "label": { + "none": [ + "7" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -792,10 +1082,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -806,7 +1108,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0010.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -844,14 +1150,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0010.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 7"]} + "label": { + "en": [ + "Text of page 7" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2", "type": "Canvas", - "label": {"none":["8"]}, + "label": { + "none": [ + "8" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -868,10 +1182,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -882,7 +1208,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0011.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -920,14 +1250,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0011.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 8"]} + "label": { + "en": [ + "Text of page 8" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2", "type": "Canvas", - "label": {"none":["9"]}, + "label": { + "none": [ + "9" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -944,10 +1282,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -958,7 +1308,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0012.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -996,14 +1350,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0012.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 9"]} + "label": { + "en": [ + "Text of page 9" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2", "type": "Canvas", - "label": {"none":["10"]}, + "label": { + "none": [ + "10" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -1020,10 +1382,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -1034,7 +1408,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0013.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -1072,14 +1450,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0013.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 10"]} + "label": { + "en": [ + "Text of page 10" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2", "type": "Canvas", - "label": {"none":["11"]}, + "label": { + "none": [ + "11" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -1096,10 +1482,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -1110,7 +1508,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0014.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -1148,14 +1550,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0014.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 11"]} + "label": { + "en": [ + "Text of page 11" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2", "type": "Canvas", - "label": {"none":["12"]}, + "label": { + "none": [ + "12" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -1172,10 +1582,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -1186,7 +1608,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0015.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -1224,14 +1650,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0015.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 12"]} + "label": { + "en": [ + "Text of page 12" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2", "type": "Canvas", - "label": {"none":["13"]}, + "label": { + "none": [ + "13" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -1248,10 +1682,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -1262,7 +1708,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0016.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -1300,14 +1750,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0016.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 13"]} + "label": { + "en": [ + "Text of page 13" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2", "type": "Canvas", - "label": {"none":["14"]}, + "label": { + "none": [ + "14" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -1324,10 +1782,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -1338,7 +1808,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0017.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -1376,14 +1850,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0017.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 14"]} + "label": { + "en": [ + "Text of page 14" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2", "type": "Canvas", - "label": {"none":["15"]}, + "label": { + "none": [ + "15" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -1400,10 +1882,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -1414,7 +1908,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0018.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -1452,14 +1950,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0018.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 15"]} + "label": { + "en": [ + "Text of page 15" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2", "type": "Canvas", - "label": {"none":["16"]}, + "label": { + "none": [ + "16" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -1476,10 +1982,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -1490,7 +2008,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0019.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -1528,14 +2050,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0019.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 16"]} + "label": { + "en": [ + "Text of page 16" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2", "type": "Canvas", - "label": {"none":["17"]}, + "label": { + "none": [ + "17" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -1552,10 +2082,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -1566,7 +2108,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0020.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -1604,14 +2150,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0020.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 17"]} + "label": { + "en": [ + "Text of page 17" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2", "type": "Canvas", - "label": {"none":["18"]}, + "label": { + "none": [ + "18" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -1628,10 +2182,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -1642,7 +2208,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0021.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -1680,14 +2250,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0021.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 18"]} + "label": { + "en": [ + "Text of page 18" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2", "type": "Canvas", - "label": {"none":["19"]}, + "label": { + "none": [ + "19" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -1704,10 +2282,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -1718,7 +2308,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0022.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -1756,14 +2350,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0022.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 19"]} + "label": { + "en": [ + "Text of page 19" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2", "type": "Canvas", - "label": {"none":["20"]}, + "label": { + "none": [ + "20" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -1780,10 +2382,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -1794,7 +2408,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0023.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -1832,14 +2450,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0023.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 20"]} + "label": { + "en": [ + "Text of page 20" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2", "type": "Canvas", - "label": {"none":["21"]}, + "label": { + "none": [ + "21" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -1856,10 +2482,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -1870,7 +2508,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0024.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -1908,14 +2550,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0024.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 21"]} + "label": { + "en": [ + "Text of page 21" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2", "type": "Canvas", - "label": {"none":["22"]}, + "label": { + "none": [ + "22" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -1932,10 +2582,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -1946,7 +2608,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0025.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -1984,14 +2650,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0025.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 22"]} + "label": { + "en": [ + "Text of page 22" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2", "type": "Canvas", - "label": {"none":["23"]}, + "label": { + "none": [ + "23" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -2008,10 +2682,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -2022,7 +2708,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0026.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -2060,14 +2750,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0026.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 23"]} + "label": { + "en": [ + "Text of page 23" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2", "type": "Canvas", - "label": {"none":["24"]}, + "label": { + "none": [ + "24" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -2084,10 +2782,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -2098,7 +2808,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0027.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -2136,14 +2850,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0027.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 24"]} + "label": { + "en": [ + "Text of page 24" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2", "type": "Canvas", - "label": {"none":["25"]}, + "label": { + "none": [ + "25" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -2160,10 +2882,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -2174,7 +2908,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0028.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -2212,14 +2950,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0028.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 25"]} + "label": { + "en": [ + "Text of page 25" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2", "type": "Canvas", - "label": {"none":["26"]}, + "label": { + "none": [ + "26" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -2236,10 +2982,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -2250,7 +3008,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0029.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -2288,14 +3050,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0029.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 26"]} + "label": { + "en": [ + "Text of page 26" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2", "type": "Canvas", - "label": {"none":["27"]}, + "label": { + "none": [ + "27" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -2312,10 +3082,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -2326,7 +3108,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0030.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -2364,14 +3150,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0030.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 27"]} + "label": { + "en": [ + "Text of page 27" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2", "type": "Canvas", - "label": {"none":["28"]}, + "label": { + "none": [ + "28" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -2388,10 +3182,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -2402,7 +3208,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0031.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -2440,14 +3250,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0031.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 28"]} + "label": { + "en": [ + "Text of page 28" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2", "type": "Canvas", - "label": {"none":["29"]}, + "label": { + "none": [ + "29" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -2464,10 +3282,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -2478,7 +3308,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0032.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -2516,14 +3350,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0032.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 29"]} + "label": { + "en": [ + "Text of page 29" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2", "type": "Canvas", - "label": {"none":["30"]}, + "label": { + "none": [ + "30" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -2540,10 +3382,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -2554,7 +3408,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0033.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -2592,14 +3450,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0033.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 30"]} + "label": { + "en": [ + "Text of page 30" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2", "type": "Canvas", - "label": {"none":["31"]}, + "label": { + "none": [ + "31" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -2616,10 +3482,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -2630,7 +3508,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0034.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -2668,14 +3550,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0034.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 31"]} + "label": { + "en": [ + "Text of page 31" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2", "type": "Canvas", - "label": {"none":["-"]}, + "label": { + "none": [ + "-" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -2692,10 +3582,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -2706,7 +3608,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0035.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -2744,14 +3650,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0035.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page -"]} + "label": { + "en": [ + "Text of page -" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2", "type": "Canvas", - "label": {"none":["-"]}, + "label": { + "none": [ + "-" + ] + }, "width": 2411, "height": 3372, "thumbnail": [ @@ -2768,10 +3682,22 @@ "width": 732, "height": 1024, "sizes": [ - {"width":72,"height":100}, - {"width":143,"height":200}, - {"width":286,"height":400}, - {"width":732,"height":1024} + { + "width": 72, + "height": 100 + }, + { + "width": 143, + "height": 200 + }, + { + "width": 286, + "height": 400 + }, + { + "width": 732, + "height": 1024 + } ] } ] @@ -2782,7 +3708,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0036.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -2820,14 +3750,22 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0036.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page -"]} + "label": { + "en": [ + "Text of page -" + ] + } } ] }, { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2", "type": "Canvas", - "label": {"none":["-"]}, + "label": { + "none": [ + "-" + ] + }, "width": 2231, "height": 3040, "thumbnail": [ @@ -2844,10 +3782,22 @@ "width": 751, "height": 1024, "sizes": [ - {"width":73,"height":100}, - {"width":147,"height":200}, - {"width":294,"height":400}, - {"width":751,"height":1024} + { + "width": 73, + "height": 100 + }, + { + "width": 147, + "height": 200 + }, + { + "width": 294, + "height": 400 + }, + { + "width": 751, + "height": 1024 + } ] } ] @@ -2858,7 +3808,11 @@ "id": "https://api.wellcomecollection.org/text/alto/b18035723/b18035723_0002.JP2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -2896,7 +3850,11 @@ { "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0002.JP2/line", "type": "AnnotationPage", - "label": {"en":["Text of page -"]} + "label": { + "en": [ + "Text of page -" + ] + } } ] } @@ -2905,7 +3863,11 @@ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/ranges/LOG_0001", "type": "Range", - "label": {"none":["Front Cover"]}, + "label": { + "none": [ + "Front Cover" + ] + }, "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2", @@ -2916,7 +3878,11 @@ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/ranges/LOG_0003", "type": "Range", - "label": {"none":["Title Page"]}, + "label": { + "none": [ + "Title Page" + ] + }, "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2", @@ -2927,7 +3893,11 @@ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/ranges/LOG_0002", "type": "Range", - "label": {"none":["Back Cover"]}, + "label": { + "none": [ + "Back Cover" + ] + }, "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2", @@ -2951,17 +3921,29 @@ { "id": "https://iiif.wellcomecollection.org/presentation/collections/contributors/xtwzf3g5", "type": "Collection", - "label": {"en":["Contributor: Bolle, Fritz."]} + "label": { + "en": [ + "Contributor: Bolle, Fritz." + ] + } }, { "id": "https://iiif.wellcomecollection.org/presentation/collections/subjects/hq8gcy73", "type": "Collection", - "label": {"en":["Subject: Genetics - history"]} + "label": { + "en": [ + "Subject: Genetics - history" + ] + } }, { "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Pamphlets", "type": "Collection", - "label": {"en":["Genre: Pamphlets"]} + "label": { + "en": [ + "Genre: Pamphlets" + ] + } } ] } diff --git a/fixtures/presentation-3/wellcome-p3.json b/fixtures/presentation-3/wellcome-p3.json index 811a022..3d5f5ac 100644 --- a/fixtures/presentation-3/wellcome-p3.json +++ b/fixtures/presentation-3/wellcome-p3.json @@ -24,10 +24,22 @@ "width": 620, "height": 1024, "sizes": [ - {"width":61,"height":100}, - {"width":121,"height":200}, - {"width":242,"height":400}, - {"width":620,"height":1024} + { + "width": 61, + "height": 100 + }, + { + "width": 121, + "height": 200 + }, + { + "width": 242, + "height": 400 + }, + { + "width": 620, + "height": 1024 + } ] } ] @@ -43,16 +55,30 @@ ] }, "format": "text/html", - "language": ["en"] + "language": [ + "en" + ] } ], "metadata": [ { - "label": {"en":["Publication/creation"]}, - "value": {"none":["1960"]} + "label": { + "en": [ + "Publication/creation" + ] + }, + "value": { + "none": [ + "1960" + ] + } }, { - "label": {"en":["Contributors"]}, + "label": { + "en": [ + "Contributors" + ] + }, "value": { "none": [ "Llanwrtyd Wells (Wales). Urban District Council." @@ -60,7 +86,11 @@ } }, { - "label": {"en":["Type/technique"]}, + "label": { + "en": [ + "Type/technique" + ] + }, "value": { "en": [ "Electronic books.", @@ -71,7 +101,11 @@ } }, { - "label": {"en":["Subjects"]}, + "label": { + "en": [ + "Subjects" + ] + }, "value": { "en": [ "Disease Outbreaks.", @@ -85,7 +119,11 @@ ], "rights": "https://creativecommons.org/licenses/by/4.0/", "requiredStatement": { - "label": {"en":["Attribution and usage"]}, + "label": { + "en": [ + "Attribution and usage" + ] + }, "value": { "en": [ "Wellcome Collection", @@ -111,7 +149,11 @@ { "id": "https://wellcomecollection.org/works", "type": "Text", - "label": {"en":["Explore our collections"]}, + "label": { + "en": [ + "Explore our collections" + ] + }, "format": "text/html" } ], @@ -128,13 +170,21 @@ { "id": "https://dlcs.io/pdf/wellcome/pdf/6/b28857021", "type": "Text", - "label": {"en":["View as PDF"]}, + "label": { + "en": [ + "View as PDF" + ] + }, "format": "application/pdf" }, { "id": "https://iiif-test.wellcomecollection.org/text/v1/b28857021", "type": "Text", - "label": {"en":["View raw text"]}, + "label": { + "en": [ + "View raw text" + ] + }, "format": "text/plain" } ], @@ -143,7 +193,11 @@ "id": "https://api.wellcomecollection.org/catalogue/v2/works/rfm2hr8w", "type": "Dataset", "profile": "https://api.wellcomecollection.org/catalogue/v2/context.json", - "label": {"en":["Wellcome Collection Catalogue API"]}, + "label": { + "en": [ + "Wellcome Collection Catalogue API" + ] + }, "format": "application/json" } ], @@ -153,15 +207,19 @@ "@type": "SearchService1", "profile": "http://iiif.io/api/search/1/search", "label": "Search within this manifest", - "service": { - "@id": "https://iiif-test.wellcomecollection.org/search/autocomplete/v1/b28857021", - "@type": "AutoCompleteService1", - "profile": "http://iiif.io/api/search/1/autocomplete", - "label": "Autocomplete words in this manifest" - } + "service": [ + { + "@id": "https://iiif-test.wellcomecollection.org/search/autocomplete/v1/b28857021", + "@type": "AutoCompleteService1", + "profile": "http://iiif.io/api/search/1/autocomplete", + "label": "Autocomplete words in this manifest" + } + ] } ], - "behavior": ["paged"], + "behavior": [ + "paged" + ], "services": [ { "type": "Text", @@ -175,14 +233,22 @@ { "type": "Text", "profile": "http://wellcomelibrary.org/ld/iiif-ext/access-control-hints", - "label": {"en":["open"]} + "label": { + "en": [ + "open" + ] + } } ], "items": [ { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2", "type": "Canvas", - "label": {"none":["-"]}, + "label": { + "none": [ + "-" + ] + }, "width": 2670, "height": 4412, "thumbnail": [ @@ -199,10 +265,22 @@ "width": 620, "height": 1024, "sizes": [ - {"width":61,"height":100}, - {"width":121,"height":200}, - {"width":242,"height":400}, - {"width":620,"height":1024} + { + "width": 61, + "height": 100 + }, + { + "width": 121, + "height": 200 + }, + { + "width": 242, + "height": 400 + }, + { + "width": 620, + "height": 1024 + } ] } ] @@ -213,7 +291,11 @@ "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0001.jp2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -242,10 +324,7 @@ } ] }, - "target": { - "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2", - "type": "Canvas" - } + "target": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2" } ] } @@ -254,14 +333,22 @@ { "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0001.jp2/line", "type": "AnnotationPage", - "label": {"en":["Text of page -"]} + "label": { + "en": [ + "Text of page -" + ] + } } ] }, { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2", "type": "Canvas", - "label": {"none":["-"]}, + "label": { + "none": [ + "-" + ] + }, "width": 2547, "height": 4312, "thumbnail": [ @@ -278,10 +365,22 @@ "width": 605, "height": 1024, "sizes": [ - {"width":59,"height":100}, - {"width":118,"height":200}, - {"width":236,"height":400}, - {"width":605,"height":1024} + { + "width": 59, + "height": 100 + }, + { + "width": 118, + "height": 200 + }, + { + "width": 236, + "height": 400 + }, + { + "width": 605, + "height": 1024 + } ] } ] @@ -292,7 +391,11 @@ "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0002.jp2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -321,10 +424,7 @@ } ] }, - "target": { - "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2", - "type": "Canvas" - } + "target": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2" } ] } @@ -333,14 +433,22 @@ { "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0002.jp2/line", "type": "AnnotationPage", - "label": {"en":["Text of page -"]} + "label": { + "en": [ + "Text of page -" + ] + } } ] }, { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2", "type": "Canvas", - "label": {"none":["-"]}, + "label": { + "none": [ + "-" + ] + }, "width": 2637, "height": 4357, "thumbnail": [ @@ -357,10 +465,22 @@ "width": 620, "height": 1024, "sizes": [ - {"width":61,"height":100}, - {"width":121,"height":200}, - {"width":242,"height":400}, - {"width":620,"height":1024} + { + "width": 61, + "height": 100 + }, + { + "width": 121, + "height": 200 + }, + { + "width": 242, + "height": 400 + }, + { + "width": 620, + "height": 1024 + } ] } ] @@ -371,7 +491,11 @@ "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0003.jp2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -400,10 +524,7 @@ } ] }, - "target": { - "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2", - "type": "Canvas" - } + "target": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2" } ] } @@ -412,14 +533,22 @@ { "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0003.jp2/line", "type": "AnnotationPage", - "label": {"en":["Text of page -"]} + "label": { + "en": [ + "Text of page -" + ] + } } ] }, { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2", "type": "Canvas", - "label": {"none":["2"]}, + "label": { + "none": [ + "2" + ] + }, "width": 2626, "height": 4346, "thumbnail": [ @@ -436,10 +565,22 @@ "width": 619, "height": 1024, "sizes": [ - {"width":60,"height":100}, - {"width":121,"height":200}, - {"width":242,"height":400}, - {"width":619,"height":1024} + { + "width": 60, + "height": 100 + }, + { + "width": 121, + "height": 200 + }, + { + "width": 242, + "height": 400 + }, + { + "width": 619, + "height": 1024 + } ] } ] @@ -450,7 +591,11 @@ "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0004.jp2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -479,10 +624,7 @@ } ] }, - "target": { - "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2", - "type": "Canvas" - } + "target": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2" } ] } @@ -491,14 +633,22 @@ { "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0004.jp2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 2"]} + "label": { + "en": [ + "Text of page 2" + ] + } } ] }, { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2", "type": "Canvas", - "label": {"none":["3"]}, + "label": { + "none": [ + "3" + ] + }, "width": 2637, "height": 4357, "thumbnail": [ @@ -515,10 +665,22 @@ "width": 620, "height": 1024, "sizes": [ - {"width":61,"height":100}, - {"width":121,"height":200}, - {"width":242,"height":400}, - {"width":620,"height":1024} + { + "width": 61, + "height": 100 + }, + { + "width": 121, + "height": 200 + }, + { + "width": 242, + "height": 400 + }, + { + "width": 620, + "height": 1024 + } ] } ] @@ -529,7 +691,11 @@ "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0005.jp2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -558,10 +724,7 @@ } ] }, - "target": { - "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2", - "type": "Canvas" - } + "target": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2" } ] } @@ -570,14 +733,22 @@ { "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0005.jp2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 3"]} + "label": { + "en": [ + "Text of page 3" + ] + } } ] }, { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2", "type": "Canvas", - "label": {"none":["4"]}, + "label": { + "none": [ + "4" + ] + }, "width": 2626, "height": 4346, "thumbnail": [ @@ -594,10 +765,22 @@ "width": 619, "height": 1024, "sizes": [ - {"width":60,"height":100}, - {"width":121,"height":200}, - {"width":242,"height":400}, - {"width":619,"height":1024} + { + "width": 60, + "height": 100 + }, + { + "width": 121, + "height": 200 + }, + { + "width": 242, + "height": 400 + }, + { + "width": 619, + "height": 1024 + } ] } ] @@ -608,7 +791,11 @@ "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0006.jp2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -637,10 +824,7 @@ } ] }, - "target": { - "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2", - "type": "Canvas" - } + "target": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2" } ] } @@ -649,14 +833,22 @@ { "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0006.jp2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 4"]} + "label": { + "en": [ + "Text of page 4" + ] + } } ] }, { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2", "type": "Canvas", - "label": {"none":["5"]}, + "label": { + "none": [ + "5" + ] + }, "width": 2637, "height": 4357, "thumbnail": [ @@ -673,10 +865,22 @@ "width": 620, "height": 1024, "sizes": [ - {"width":61,"height":100}, - {"width":121,"height":200}, - {"width":242,"height":400}, - {"width":620,"height":1024} + { + "width": 61, + "height": 100 + }, + { + "width": 121, + "height": 200 + }, + { + "width": 242, + "height": 400 + }, + { + "width": 620, + "height": 1024 + } ] } ] @@ -687,7 +891,11 @@ "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0007.jp2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -716,10 +924,7 @@ } ] }, - "target": { - "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2", - "type": "Canvas" - } + "target": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2" } ] } @@ -728,14 +933,22 @@ { "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0007.jp2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 5"]} + "label": { + "en": [ + "Text of page 5" + ] + } } ] }, { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2", "type": "Canvas", - "label": {"none":["6"]}, + "label": { + "none": [ + "6" + ] + }, "width": 2626, "height": 4346, "thumbnail": [ @@ -752,10 +965,22 @@ "width": 619, "height": 1024, "sizes": [ - {"width":60,"height":100}, - {"width":121,"height":200}, - {"width":242,"height":400}, - {"width":619,"height":1024} + { + "width": 60, + "height": 100 + }, + { + "width": 121, + "height": 200 + }, + { + "width": 242, + "height": 400 + }, + { + "width": 619, + "height": 1024 + } ] } ] @@ -766,7 +991,11 @@ "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0008.jp2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -795,10 +1024,7 @@ } ] }, - "target": { - "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2", - "type": "Canvas" - } + "target": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2" } ] } @@ -807,14 +1033,22 @@ { "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0008.jp2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 6"]} + "label": { + "en": [ + "Text of page 6" + ] + } } ] }, { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2", "type": "Canvas", - "label": {"none":["7"]}, + "label": { + "none": [ + "7" + ] + }, "width": 2637, "height": 4357, "thumbnail": [ @@ -831,10 +1065,22 @@ "width": 620, "height": 1024, "sizes": [ - {"width":61,"height":100}, - {"width":121,"height":200}, - {"width":242,"height":400}, - {"width":620,"height":1024} + { + "width": 61, + "height": 100 + }, + { + "width": 121, + "height": 200 + }, + { + "width": 242, + "height": 400 + }, + { + "width": 620, + "height": 1024 + } ] } ] @@ -845,7 +1091,11 @@ "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0009.jp2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -874,10 +1124,7 @@ } ] }, - "target": { - "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2", - "type": "Canvas" - } + "target": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2" } ] } @@ -886,14 +1133,22 @@ { "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0009.jp2/line", "type": "AnnotationPage", - "label": {"en":["Text of page 7"]} + "label": { + "en": [ + "Text of page 7" + ] + } } ] }, { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2", "type": "Canvas", - "label": {"none":["-"]}, + "label": { + "none": [ + "-" + ] + }, "width": 2670, "height": 4424, "thumbnail": [ @@ -910,10 +1165,22 @@ "width": 618, "height": 1024, "sizes": [ - {"width":60,"height":100}, - {"width":121,"height":200}, - {"width":241,"height":400}, - {"width":618,"height":1024} + { + "width": 60, + "height": 100 + }, + { + "width": 121, + "height": 200 + }, + { + "width": 241, + "height": 400 + }, + { + "width": 618, + "height": 1024 + } ] } ] @@ -924,7 +1191,11 @@ "id": "https://iiif-test.wellcomecollection.org/text/alto/b28857021/b28857021_0010.jp2", "type": "Dataset", "profile": "http://www.loc.gov/standards/alto/v3/alto.xsd", - "label": {"none":["METS-ALTO XML"]}, + "label": { + "none": [ + "METS-ALTO XML" + ] + }, "format": "text/xml" } ], @@ -953,10 +1224,7 @@ } ] }, - "target": { - "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2", - "type": "Canvas" - } + "target": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2" } ] } @@ -965,7 +1233,11 @@ { "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0010.jp2/line", "type": "AnnotationPage", - "label": {"en":["Text of page -"]} + "label": { + "en": [ + "Text of page -" + ] + } } ] } @@ -974,7 +1246,11 @@ { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/ranges/LOG_0001", "type": "Range", - "label": {"none":["Cover"]}, + "label": { + "none": [ + "Cover" + ] + }, "items": [ { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2", @@ -985,7 +1261,11 @@ { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/ranges/LOG_0002", "type": "Range", - "label": {"none":["Cover"]}, + "label": { + "none": [ + "Cover" + ] + }, "items": [ { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2", @@ -1027,47 +1307,83 @@ { "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/xaqnqsbj", "type": "Collection", - "label": {"en":["Subject: Disease Outbreaks."]} + "label": { + "en": [ + "Subject: Disease Outbreaks." + ] + } }, { "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/tva37rme", "type": "Collection", - "label": {"en":["Subject: Public Health."]} + "label": { + "en": [ + "Subject: Public Health." + ] + } }, { "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/p2mzt7rw", "type": "Collection", - "label": {"en":["Subject: Sanitation."]} + "label": { + "en": [ + "Subject: Sanitation." + ] + } }, { "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/pxxu6hsg", "type": "Collection", - "label": {"en":["Subject: Water Supply."]} + "label": { + "en": [ + "Subject: Water Supply." + ] + } }, { "id": "https://iiif-test.wellcomecollection.org/presentation/collections/subjects/dyss49dy", "type": "Collection", - "label": {"en":["Subject: Llanwrtyd Wells (Wales)"]} + "label": { + "en": [ + "Subject: Llanwrtyd Wells (Wales)" + ] + } }, { "id": "https://iiif-test.wellcomecollection.org/presentation/collections/genres/Electronic_books.", "type": "Collection", - "label": {"en":["Genre: Electronic books."]} + "label": { + "en": [ + "Genre: Electronic books." + ] + } }, { "id": "https://iiif-test.wellcomecollection.org/presentation/collections/genres/Annual_reports.", "type": "Collection", - "label": {"en":["Genre: Annual reports."]} + "label": { + "en": [ + "Genre: Annual reports." + ] + } }, { "id": "https://iiif-test.wellcomecollection.org/presentation/collections/genres/MOH_reports.", "type": "Collection", - "label": {"en":["Genre: MOH reports."]} + "label": { + "en": [ + "Genre: MOH reports." + ] + } }, { "id": "https://iiif-test.wellcomecollection.org/presentation/collections/genres/Statistics.", "type": "Collection", - "label": {"en":["Genre: Statistics."]} + "label": { + "en": [ + "Genre: Statistics." + ] + } } ] } diff --git a/src/presentation-3/normalize.ts b/src/presentation-3/normalize.ts index 47eab4f..4dac16f 100644 --- a/src/presentation-3/normalize.ts +++ b/src/presentation-3/normalize.ts @@ -241,7 +241,18 @@ export function mergeEntities( return existing; } if (incoming.id !== (existing as any).id || incoming.type !== (existing as any).type) { - throw new Error('Can only merge entities with identical identifiers and type!'); + if (incoming.type === 'ImageService3') { + return incoming; + } + if ((existing as any).type === 'ImageService3') { + return existing; + } + + throw new Error( + `Can only merge entities with identical identifiers and type! ${incoming.type}(${incoming.id}) => ${ + (existing as any).type + }(${(existing as any).id})` + ); } return merge({ ...existing }, incoming, context); } diff --git a/src/presentation-3/serialize-presentation-2.ts b/src/presentation-3/serialize-presentation-2.ts index bc9121e..d6e7ab8 100644 --- a/src/presentation-3/serialize-presentation-2.ts +++ b/src/presentation-3/serialize-presentation-2.ts @@ -111,6 +111,9 @@ function technicalProperties(props: Partial, type?: string) ['height', props.height], ['width', props.width], ['viewingDirection', props.viewingDirection !== 'left-to-right' ? props.viewingDirection : undefined], + + // Non-standard property. + ['license', (props as any).license ? (props as any).license : undefined], // @todo Viewing hint is merged with behavior // ['viewingHint', props.] ]; @@ -183,8 +186,9 @@ function specificResourceToString(resource: Reference | SpecificResource) { } export const serializeConfigPresentation2: SerializeConfig = { - Manifest: function* (entity) { + Manifest: function* (entity, state, { isTopLevel }) { return [ + ...(isTopLevel ? [['@context', 'http://iiif.io/api/presentation/2/context.json']] : []), ...technicalProperties(entity, 'sc:Manifest'), ...(yield* descriptiveProperties(entity)), ...(yield* linkingProperties(entity)), @@ -214,6 +218,7 @@ export const serializeConfigPresentation2: SerializeConfig = { ...(yield* linkingProperties(entity)), ['images', resources ? [resources.resources] : undefined], [ + // @todo use otherContent if they are inlined 'annotations', entity.annotations && entity.annotations.length ? unNestArray(yield entity.annotations) : undefined, ], diff --git a/src/presentation-3/serialize-presentation-3.ts b/src/presentation-3/serialize-presentation-3.ts index 1810993..ae6c562 100644 --- a/src/presentation-3/serialize-presentation-3.ts +++ b/src/presentation-3/serialize-presentation-3.ts @@ -174,13 +174,14 @@ export const serializeConfigPresentation3: SerializeConfig = { return [key, Array.isArray(item) ? filterEmpty(item as any) : item]; }) .filter(([key, value]) => { - return key !== 'items'; + return key !== 'items' && key !== 'id'; }); const items = yield entity.items; return [ // Any more properties? + ['id', !entity.id?.startsWith('vault://') ? entity.id : undefined], ...entries, ...(yield* linkingProperties(entity)), ['items', items.length ? items : UNSET], From f82cf63f5ed324d29734397b317b1c34d220b2ad Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Thu, 23 Mar 2023 19:08:22 +0000 Subject: [PATCH 29/44] Updated changelog --- CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41356d7..9a5da25 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -52,6 +52,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - `range.items[]` is now normalised to either `Reference<'Range'>`[^1] or `SpecificResource>`[^2] - `manifest.start` is now normalised to a `SpecificResource>` +- `annotation.target` is now normalized to `SpecificResource` +- `annotation.body` now will correctly handle `SpecificResource` type - `ContentResource` now has a `iiif-parser:hasPart` when normalized - `AnnotationPage` now has a `iiif-parser:hasPart` when normalized - `Manifest` now has a `iiif-parser:hasPart` when normalized From 9f1294edeb26bb72156202315400e68348567922 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Thu, 23 Mar 2023 19:23:36 +0000 Subject: [PATCH 30/44] Added access to frameResource helper --- CHANGELOG.md | 1 + .../presentation-3-parser/utilities.test.ts | 46 +++++++++++++++++++ src/presentation-3/utilities.ts | 40 +++++++++------- 3 files changed, 71 insertions(+), 16 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a5da25..41ca5d2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,6 +32,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - New helpers for resolving framed resources - Added `iiif-parser:hasPart` to normalization of some resources containing JSON-LD frame for resources within a particular context (i.e. through partOf) - Serialize config now has additional contextual information (parent resource, full resource if framed) +- New `frameResource` helper ### Fixed - `[presentation-2]` `startCanvas` property on Sequences are now added to the Manifest when converting diff --git a/__tests__/presentation-3-parser/utilities.test.ts b/__tests__/presentation-3-parser/utilities.test.ts index 1fe9c34..7e9297f 100644 --- a/__tests__/presentation-3-parser/utilities.test.ts +++ b/__tests__/presentation-3-parser/utilities.test.ts @@ -1,5 +1,6 @@ import { compressSpecificResource } from '../../src/shared/compress-specific-resource'; import { SpecificResource } from '@iiif/presentation-3'; +import { frameResource, WILDCARD } from '../../src'; describe('Misc Utilites', function () { test('compressSpecificResource', () => { @@ -70,4 +71,49 @@ describe('Misc Utilites', function () { } `); }); + + test('frameResource', () => { + const resource = { + id: 'test', + type: 'test-type', + nested: { id: 'something', type: 'something-else' }, + ignored: 'not included', + }; + + expect(frameResource(resource, {})).toEqual(resource); + expect( + frameResource(resource, { + '@explicit': true, + id: {}, + type: {}, + }) + ).toEqual({ + id: 'test', + type: 'test-type', + }); + expect( + frameResource(resource, { + '@explicit': true, + id: {}, + type: {}, + override: 'concrete value', + }) + ).toEqual({ + id: 'test', + type: 'test-type', + override: 'concrete value', + }); + expect( + frameResource(resource, { + '@explicit': true, + id: {}, + type: {}, + nested: {}, + }) + ).toEqual({ + id: 'test', + type: 'test-type', + nested: { id: 'something', type: 'something-else' }, + }); + }); }); diff --git a/src/presentation-3/utilities.ts b/src/presentation-3/utilities.ts index 59989c7..3c7c3ec 100644 --- a/src/presentation-3/utilities.ts +++ b/src/presentation-3/utilities.ts @@ -13,7 +13,7 @@ Object.freeze(EMPTY); Object.freeze(WILDCARD); export function isWildcard(object: any) { - if (object === WILDCARD) { + if (object === WILDCARD || Object.keys(object).length === 0) { return true; } for (const i in object) { @@ -22,6 +22,26 @@ export function isWildcard(object: any) { return true; } +export function frameResource(resource: any, framing: any) { + if (framing && framing['@explicit']) { + const newEntity: any = {}; + const keys = Object.keys(framing); + for (const key of keys) { + if (key === PART_OF || key === '@explicit') { + continue; + } + if (isWildcard(framing[key])) { + newEntity[key] = resource[key]; + } else { + newEntity[key] = framing[key]; + } + } + return newEntity; + } + + return resource; +} + export function resolveIfExists( state: CompatibleStore, urlOrResource: any, @@ -45,21 +65,9 @@ export function resolveIfExists( const framing = fullEntity[HAS_PART].find((t: any) => { return parent ? t[PART_OF] === parent.id : t[PART_OF] === fullEntity.id; }); - if (framing && framing['@explicit']) { - const newEntity: any = {}; - const keys = Object.keys(framing); - for (const key of keys) { - if (key === PART_OF || key === '@explicit') { - continue; - } - if (isWildcard(framing[key])) { - newEntity[key] = fullEntity[key]; - } else { - newEntity[key] = framing[key]; - } - } - return [newEntity, fullEntity]; - } + + const newEntity = frameResource(fullEntity, framing); + return [newEntity, fullEntity]; } return [fullEntity, fullEntity]; From 17055626e8e9360b009683710720ed23ca86c35b Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Mon, 3 Apr 2023 08:01:19 +0100 Subject: [PATCH 31/44] Addition to specific resource check --- src/shared/is-specific-resource.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/shared/is-specific-resource.ts b/src/shared/is-specific-resource.ts index 6623773..675a590 100644 --- a/src/shared/is-specific-resource.ts +++ b/src/shared/is-specific-resource.ts @@ -1,5 +1,10 @@ import { SpecificResource } from '@iiif/presentation-3'; export function isSpecificResource(resource: unknown): resource is SpecificResource { - return (resource as any).type === 'SpecificResource'; + + if (typeof resource === 'string') { + return false; + } + + return !!resource && (resource as any).type === 'SpecificResource'; } From e579b9132309a0fee69d5cf108c07b8d7883e2ee Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Thu, 20 Apr 2023 14:07:28 +0100 Subject: [PATCH 32/44] Added missing annotation thumbnail traversal --- src/presentation-3/traverse.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/presentation-3/traverse.ts b/src/presentation-3/traverse.ts index d5f58aa..a698ecb 100644 --- a/src/presentation-3/traverse.ts +++ b/src/presentation-3/traverse.ts @@ -359,7 +359,7 @@ export class Traverse { // @todo traverseAnnotationSelector traverseAnnotation(annotationJson: Annotation, parent?: any): Annotation { return this.traverseType( - this.traverseLinking(this.traverseAnnotationBody(annotationJson)), + this.traverseLinking(this.traverseAnnotationBody(this.traverseDescriptive(annotationJson as any))), { parent }, this.traversals.annotation ); From a17fbf2d4eca7818e5918c8a856482dcdc99be03 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Fri, 21 Apr 2023 14:39:24 +0100 Subject: [PATCH 33/44] Traversal of annotatino page bug --- .../__snapshots__/cookbook.tests.ts.snap | 854 ++++++++++++++++++ .../__snapshots__/has-part.test.ts.snap | 7 + .../__snapshots__/normalize.test.ts.snap | 14 + .../__snapshots__/smoke.tests.ts.snap | 794 +++++++++++++++- src/presentation-3/empty-types.ts | 2 +- .../serialize-presentation-3.ts | 6 +- src/presentation-3/traverse.ts | 4 +- 7 files changed, 1670 insertions(+), 11 deletions(-) diff --git a/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap b/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap index 5d31bc0..03da95e 100644 --- a/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap @@ -39,6 +39,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0001-mvm-image https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0001-mvm-image/annotation/p0001-image", @@ -251,6 +258,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0002-mvm-audio https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0002-mvm-audio/canvas/page/annotation", @@ -460,6 +474,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0003-mvm-video https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0003-mvm-video/canvas/page/annotation", @@ -675,6 +696,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0004-canvas-size https://iiif.io/a "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0004-canvas-size/annotation/p0001-image", @@ -887,6 +915,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0005-image-service https://iiif.io "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", @@ -1128,6 +1163,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0006-text-language https://iiif.io "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0006-text-language/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0006-text-language/annotation/p0001-image", @@ -1479,6 +1521,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0007-string-formats https://iiif.i "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0007-string-formats/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0007-string-formats/annotation/p0001-image", @@ -1771,6 +1820,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0008-rights https://iiif.io/api/co "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0008-rights/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0008-rights/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0008-rights/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0008-rights/annotation/p0001-image", @@ -2144,6 +2200,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/co "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0001-image", @@ -2166,6 +2229,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/co "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0002-image", @@ -2188,6 +2258,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/co "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p3/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p3/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p3", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0003-image", @@ -2210,6 +2287,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/co "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p4/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p4/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p4", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0004-image", @@ -2232,6 +2316,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0009-book-1 https://iiif.io/api/co "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p5/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/page/p5/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0009-book-1/canvas/p5", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0009-book-1/annotation/p0005-image", @@ -3014,6 +3105,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0001-image", @@ -3036,6 +3134,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0002-image", @@ -3058,6 +3163,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p3/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p3/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p3", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0003-image", @@ -3080,6 +3192,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p4/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p4/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p4", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0004-image", @@ -3102,6 +3221,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p5/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/p5/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/p5", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/p0005-image", @@ -3862,6 +3988,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0001-image", @@ -3884,6 +4017,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0002-image", @@ -3906,6 +4046,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v3/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v3/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v3", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0003-image", @@ -3928,6 +4075,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0010-book-2-viewing-direction-mani "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v4/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/page/v4/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/canvas/v4", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0010-book-2-viewing-direction/annotation/v0004-image", @@ -4581,6 +4735,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-cont "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0001-image", @@ -4603,6 +4764,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-cont "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0002-image", @@ -4625,6 +4793,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-cont "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s3/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s3/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s3", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0003-image", @@ -4647,6 +4822,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-cont "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s4/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/s4/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/s4", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/s0004-image", @@ -5295,6 +5477,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-indi "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0001-image", @@ -5317,6 +5506,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-indi "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0002-image", @@ -5339,6 +5535,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-indi "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v3/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v3/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v3", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0003-image", @@ -5361,6 +5564,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0011-book-3-behavior-manifest-indi "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v4/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/page/v4/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/canvas/v4", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0011-book-3-behavior/annotation/v0004-image", @@ -5955,6 +6165,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0013-placeholderCanvas https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti/placeholder/1-image", @@ -5977,6 +6194,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0013-placeholderCanvas https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/canvas/donizetti", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0013-placeholderCanvas/donizetti/1-video", @@ -6297,6 +6521,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0014-accompanyingcanvas https://ii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image", @@ -6319,6 +6550,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0014-accompanyingcanvas https://ii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio", @@ -6644,6 +6882,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0015-start https://iiif.io/api/coo "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1/page", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1/page", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0015-start/canvas/segment1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0015-start/annotation/segment1-video", @@ -6904,6 +7149,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0017-transcription-av https://iiif "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0017-transcription-av/canvas/page/annotation", @@ -7181,6 +7433,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0019-html-in-annotations https://i "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-1/anno-1", @@ -7203,6 +7462,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0019-html-in-annotations https://i "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0019-html-in-annotations/canvas-1/annopage-2/anno-1", @@ -7508,6 +7774,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0001-image", @@ -7530,6 +7803,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0021-tagging https://iiif.io/api/c "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/page/p2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0021-tagging/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0021-tagging/annotation/p0002-tag", @@ -7939,6 +8219,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0001-image", @@ -7961,6 +8248,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0002-image", @@ -7983,6 +8277,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p3/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p3", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0003-image", @@ -8005,6 +8306,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p4/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p4", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0004-image", @@ -8027,6 +8335,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p5/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p5", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0005-image", @@ -8049,6 +8364,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0024-book-4-toc https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p6/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/page/p6/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/canvas/p6", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0024-book-4-toc/annotation/p0006-image", @@ -9351,6 +9673,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0026-toc-opera https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0026-toc-opera/canvas/1/annotation_page/1/annotation/1", @@ -10005,6 +10334,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0029-metadata-anywhere https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0001-image", @@ -10027,6 +10363,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0029-metadata-anywhere https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/page/p2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/canvas/p2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0029-metadata-anywhere/annotation/p0002-image", @@ -10841,6 +11184,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 http "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", @@ -10863,6 +11213,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 http "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", @@ -10885,6 +11242,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 http "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", @@ -10907,6 +11271,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 http "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", @@ -10929,6 +11300,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v1 http "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", @@ -11712,6 +12090,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 http "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0001-image", @@ -11734,6 +12119,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 http "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0002-image", @@ -11756,6 +12148,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 http "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p3/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p3", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0003-image", @@ -11778,6 +12177,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 http "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p4/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p4", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0004-image", @@ -11800,6 +12206,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-manifest_v2 http "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/page/p5/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/canvas/p5", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/annotation/p0005-image", @@ -12610,6 +13023,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0001-image", @@ -12632,6 +13052,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0002-image", @@ -12654,6 +13081,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p3/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p3/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p3", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0003-image", @@ -12676,6 +13110,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p4/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p4/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p4", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0004-image", @@ -12698,6 +13139,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p5/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p5/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p5", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0005-image", @@ -12720,6 +13168,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0031-bound-multivolume https://iii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p6/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/page/p6/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/canvas/p6", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0031-bound-multivolume/annotation/p0006-image", @@ -13969,6 +14424,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0033-choice https://iiif.io/api/co "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0033-choice/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0033-choice/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0033-choice/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0033-choice/annotation/p0001-image", @@ -14491,6 +14953,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0001-image", @@ -14513,6 +14982,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0002-image", @@ -14535,6 +15011,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/3/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/3/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/3", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0003-image", @@ -14557,6 +15040,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/4/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/4/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/4", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0004-image", @@ -14579,6 +15069,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/5/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/5/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/5", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0005-image", @@ -14601,6 +15098,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/6/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/6/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/6", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0006-image", @@ -14623,6 +15127,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/7/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/7/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/7", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0007-image", @@ -14645,6 +15156,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/8/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/8/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/8", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0008-image", @@ -14667,6 +15185,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0035-foldouts https://iiif.io/api/ "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/9/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/page/9/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0035-foldouts/canvas/9", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0035-foldouts/annotation/0009-image", @@ -15805,6 +16330,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0036-composition-from-multiple-ima "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0036-composition-from-multiple-images/annotation/p0001-image", @@ -16117,6 +16649,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manife "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", @@ -16369,6 +16908,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0040-image-rotation-service-manife "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0040-image-rotation-service/annotation/v0001-image", @@ -16720,6 +17266,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0001-image", @@ -16742,6 +17295,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0002-image", @@ -16764,6 +17324,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p3/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p3/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p3", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0003-image", @@ -16786,6 +17353,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p4/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p4/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p4", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0004-image", @@ -16808,6 +17382,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0046-rendering https://iiif.io/api "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p5/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/page/p5/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0046-rendering/canvas/p5", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0046-rendering/annotation/p0005-image", @@ -17522,6 +18103,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0047-homepage https://iiif.io/api/ "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1/page/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1/page/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0047-homepage/canvas/1/page/1/annotation/1", @@ -17914,6 +18502,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/c "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0001-image", @@ -17936,6 +18531,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/c "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0002-image", @@ -17958,6 +18560,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/c "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p3/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p3/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p3", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0003-image", @@ -17980,6 +18589,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/c "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p4/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p4/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p4", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0004-image", @@ -18002,6 +18618,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0053-seeAlso https://iiif.io/api/c "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p5/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/page/p5/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/canvas/p5", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0053-seeAlso/annotation/p0005-image", @@ -18753,6 +19376,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0064-opera-one-canvas https://iiif "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0064-opera-one-canvas/canvas/1/annotation_page/1/annotation/1", @@ -19516,6 +20146,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0065-opera-multiple-canvases https "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/1/annotation_page/1/annotation/1", @@ -19538,6 +20175,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0065-opera-multiple-canvases https "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0065-opera-multiple-canvases/canvas/2/annotation_page/1/annotation/1", @@ -20389,6 +21033,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0074-multiple-language-captions ht "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas/page/annotation", @@ -20411,6 +21062,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0074-multiple-language-captions ht "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/anno/page/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/anno/page/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/canvas", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0074-multiple-language-captions/manifest.json/subtitles_captions-files-vtt", @@ -20750,6 +21408,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0117-add-image-thumbnail https://i "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/page/p0/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/page/p0/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/canvas/p0", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0117-add-image-thumbnail/annotation/p0000-image", @@ -21087,6 +21752,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0118_multivalue https://iiif.io/ap "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0118_multivalue/canvas/1/page/1/annotation/1", @@ -21382,6 +22054,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0139-geolocate-canvas-fragment htt "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/contentPage.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/contentPage.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/content.json", @@ -21404,6 +22083,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0139-geolocate-canvas-fragment htt "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/supplementingPage.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/supplementingPage.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/canvas.json", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0139-geolocate-canvas-fragment/geoAnno.json", @@ -21767,6 +22453,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0154-geo-extension https://iiif.io "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno-page/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno-page/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/canvas/1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0154-geo-extension/anno/1", @@ -22176,6 +22869,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image", @@ -22198,6 +22898,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image", @@ -22220,6 +22927,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image", @@ -22242,6 +22956,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image", @@ -22264,6 +22985,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0202-start-canvas https://iiif.io/ "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image", @@ -22978,6 +23706,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0219-using-caption-file https://ii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page/annotation1", @@ -23000,6 +23735,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0219-using-caption-file https://ii "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0219-using-caption-file/canvas/page2/a1", @@ -23266,6 +24008,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_1-manifes "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", @@ -23508,6 +24257,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate_map_2-manifes "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0230-navdate/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/annotation/p0001-image", @@ -24010,6 +24766,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0234-provider https://iiif.io/api/ "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0234-provider/page/p0/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0234-provider/canvas/p0", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0234-provider/annotation/p0000-image", @@ -24436,6 +25199,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0240-navPlace-on-canvases https:// "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/1", @@ -24458,6 +25228,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0240-navPlace-on-canvases https:// "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno-page/2", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/canvas/2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0240-navPlace-on-canvases/anno/2", @@ -24952,6 +25729,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/p0001-image", @@ -24974,6 +25758,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0258-tagging-external-resource htt "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/page/p2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0258-tagging-external-resource/annotation/anno/p0002-wikidata", @@ -25287,6 +26078,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0001-image", @@ -25309,6 +26107,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0261-non-rectangular-commenting ht "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/page/p2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0261-non-rectangular-commenting/annotation/p0002-svg", @@ -25617,6 +26422,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https: "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-1/anno-1", @@ -25639,6 +26451,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0266-full-canvas-annotation https: "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0266-full-canvas-annotation/canvas-1/annopage-2/anno-1", @@ -25913,6 +26732,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0269-embedded-or-referenced-annota "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/annotationpage.json", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", + "type": "AnnotationPage", + }, + ], "items": [], "label": null, "metadata": [], @@ -25930,6 +26756,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0269-embedded-or-referenced-annota "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0269-embedded-or-referenced-annotations/canvas-1/annopage-1/anno-1", @@ -26183,6 +27016,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0299-region https://iiif.io/api/co "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0299-region/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0299-region/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0299-region/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0299-region/annotation/p0001-image", @@ -26446,6 +27286,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0326-annotating-image-layer https: "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/annotation/p0001-image", @@ -26468,6 +27315,13 @@ exports[`Cookbook > Testing normalize %p (%p) 0326-annotating-image-layer https: "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/page/p2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/page/p2/1", + "iiif-parser:partOf": "https://iiif.io/api/image/3.0/example/reference/421e65be2ce95439b3ad6ef1f2ab87a9-dee-xray/full/2000,1271/0/default.jpg", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0326-annotating-image-layer/annotation/p0002-tag", diff --git a/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap b/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap index e8b49eb..49eaf77 100644 --- a/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap @@ -154,6 +154,13 @@ exports[`Has part issues > Example manifest with thumbnail ID the same as the ma "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", diff --git a/__tests__/presentation-3-parser/__snapshots__/normalize.test.ts.snap b/__tests__/presentation-3-parser/__snapshots__/normalize.test.ts.snap index 68ff2cc..0683dd7 100644 --- a/__tests__/presentation-3-parser/__snapshots__/normalize.test.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/normalize.test.ts.snap @@ -38,6 +38,13 @@ exports[`normalize > normalize 1`] = ` "behavior": [], "homepage": [], "id": "https://example.org/iiif/book1/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://example.org/iiif/book1/page/p1/1", + "iiif-parser:partOf": "https://example.org/iiif/book1/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://example.org/iiif/book1/annotation/p0001-image", @@ -221,6 +228,13 @@ exports[`normalize > normalize full example from specification 1`] = ` "behavior": [], "homepage": [], "id": "https://example.org/iiif/book1/annotations/p1", + "iiif-parser:hasPart": [ + { + "id": "https://example.org/iiif/book1/annotations/p1", + "iiif-parser:partOf": "https://example.org/iiif/book1/manifest", + "type": "AnnotationPage", + }, + ], "items": [], "label": null, "metadata": [], diff --git a/__tests__/presentation-3-parser/__snapshots__/smoke.tests.ts.snap b/__tests__/presentation-3-parser/__snapshots__/smoke.tests.ts.snap index 31a7b2c..490dda6 100644 --- a/__tests__/presentation-3-parser/__snapshots__/smoke.tests.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/smoke.tests.ts.snap @@ -66,6 +66,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/accompanying-canvas "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/page", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/accompanying/annotation/image", @@ -88,6 +95,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/accompanying-canvas "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/p1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0014-accompanyingcanvas/canvas/page/annotation/segment1-audio", @@ -581,6 +595,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/bl-ranges.json 1`] "behavior": [], "homepage": [], "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/a1", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/a1", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/poster", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000002/c/a1/a1", @@ -603,6 +624,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/bl-ranges.json 1`] "behavior": [], "homepage": [], "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004/anno1", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004/anno1", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000004/anno1/1", @@ -625,6 +653,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/bl-ranges.json 1`] "behavior": [], "homepage": [], "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005/anno2", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005/anno2", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000005/anno2/1", @@ -647,6 +682,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/bl-ranges.json 1`] "behavior": [], "homepage": [], "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007/anno3", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007/anno3", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000007/anno3/1", @@ -669,6 +711,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/bl-ranges.json 1`] "behavior": [], "homepage": [], "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008/anno4", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008/anno4", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x000008/anno4/1", @@ -691,6 +740,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/bl-ranges.json 1`] "behavior": [], "homepage": [], "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a/anno5", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a/anno5", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000a/anno5/1", @@ -713,6 +769,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/bl-ranges.json 1`] "behavior": [], "homepage": [], "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b/anno6", + "iiif-parser:hasPart": [ + { + "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b/anno6", + "iiif-parser:partOf": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://api.bl.uk/metadata/iiif/ark:/81055/vdc_100052320369.0x00000b/anno6/1", @@ -7089,6 +7152,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/has-part.json 1`] = "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0005-image-service/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0005-image-service/annotation/p0001-image", @@ -7596,6 +7666,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/ocean-liners.json 1 "behavior": [], "homepage": [], "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.vam.ac.uk/collections/O1023003/annopage/p1/a1", @@ -7654,6 +7731,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/ocean-liners.json 1 "behavior": [], "homepage": [], "id": "vault://e29cf2aa", + "iiif-parser:hasPart": [ + { + "id": "vault://e29cf2aa", + "iiif-parser:partOf": "https://iiif.vam.ac.uk/collections/O1023003/canvas/c0", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.vam.ac.uk/collections/O1023003/anno/a1", @@ -8239,6 +8323,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/start-canvas.json 1 "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p1/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p1", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0001-image", @@ -8261,6 +8352,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/start-canvas.json 1 "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p2/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0002-image", @@ -8283,6 +8381,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/start-canvas.json 1 "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p3/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p3", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0003-image", @@ -8305,6 +8410,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/start-canvas.json 1 "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p4/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p4", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0004-image", @@ -8327,6 +8439,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/start-canvas.json 1 "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/page/p5/1", + "iiif-parser:partOf": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/canvas/p5", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0202-start-canvas/annotation/p0005-image", @@ -9511,6 +9630,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/all/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/all/line", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -9532,6 +9658,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0001.jp2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0001.jp2/line", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -9553,6 +9686,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0002.jp2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0002.jp2/line", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -9574,6 +9714,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0003.jp2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0003.jp2/line", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -9595,6 +9742,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0004.jp2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0004.jp2/line", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -9616,6 +9770,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0005.jp2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0005.jp2/line", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -9637,6 +9798,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0006.jp2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0006.jp2/line", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -9658,6 +9826,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0007.jp2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0007.jp2/line", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -9679,6 +9854,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0008.jp2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0008.jp2/line", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -9700,6 +9882,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0009.jp2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0009.jp2/line", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -9721,6 +9910,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0010.jp2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/b28857021_0010.jp2/line", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -9742,6 +9938,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/images", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/annotations/v3/b28857021/images", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -9763,6 +9966,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2/painting", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0001.jp2/painting/anno", @@ -9785,6 +9995,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2/painting", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0002.jp2/painting/anno", @@ -9807,6 +10024,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2/painting", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0003.jp2/painting/anno", @@ -9829,6 +10053,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2/painting", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0004.jp2/painting/anno", @@ -9851,6 +10082,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2/painting", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0005.jp2/painting/anno", @@ -9873,6 +10111,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2/painting", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0006.jp2/painting/anno", @@ -9895,6 +10140,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2/painting", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0007.jp2/painting/anno", @@ -9917,6 +10169,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2/painting", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0008.jp2/painting/anno", @@ -9939,6 +10198,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2/painting", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0009.jp2/painting/anno", @@ -9961,12 +10227,19 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "behavior": [], "homepage": [], "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2/painting", - "items": [ + "iiif-parser:hasPart": [ { - "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2/painting/anno", - "type": "Annotation", - }, - ], + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2/painting", + "iiif-parser:partOf": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2", + "type": "AnnotationPage", + }, + ], + "items": [ + { + "id": "https://iiif-test.wellcomecollection.org/presentation/b28857021/canvases/b28857021_0010.jp2/painting/anno", + "type": "Annotation", + }, + ], "label": null, "metadata": [], "provider": [], @@ -13491,6 +13764,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0001.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0001.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13512,6 +13792,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0002.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0002.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13533,6 +13820,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0003.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0003.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13554,6 +13848,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0004.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0004.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13575,6 +13876,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0005.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0005.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13596,6 +13904,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0006.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0006.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13617,6 +13932,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0007.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0007.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13638,6 +13960,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0008.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0008.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13659,6 +13988,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0009.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0009.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13680,6 +14016,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0010.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0010.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13701,6 +14044,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0011.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0011.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13722,6 +14072,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0012.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0012.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13743,6 +14100,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0013.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0013.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13764,6 +14128,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0014.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0014.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13785,6 +14156,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0015.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0015.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13806,6 +14184,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0016.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0016.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13827,6 +14212,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0017.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0017.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13848,6 +14240,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0018.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0018.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13869,6 +14268,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0019.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0019.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13890,6 +14296,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0020.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0020.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13911,6 +14324,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0021.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0021.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13932,6 +14352,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0022.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0022.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13953,6 +14380,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0023.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0023.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13974,6 +14408,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0024.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0024.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -13995,6 +14436,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0025.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0025.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -14016,6 +14464,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0026.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0026.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -14037,6 +14492,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0027.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0027.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -14058,6 +14520,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0028.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0028.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -14079,6 +14548,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0029.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0029.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -14100,6 +14576,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0030.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0030.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -14121,6 +14604,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0031.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0031.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -14142,6 +14632,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0032.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0032.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -14163,6 +14660,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0033.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0033.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -14184,6 +14688,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0034.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0034.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -14205,6 +14716,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0035.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0035.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -14226,6 +14744,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0036.JP2/line", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/b18035723_0036.JP2/line", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -14247,6 +14772,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/images", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/annotations/v3/b18035723/images", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723", + "type": "AnnotationPage", + }, + ], "items": [], "label": { "en": [ @@ -14268,6 +14800,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0001.JP2/painting/anno", @@ -14290,6 +14829,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0002.JP2/painting/anno", @@ -14312,6 +14858,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0003.JP2/painting/anno", @@ -14334,6 +14887,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0004.JP2/painting/anno", @@ -14356,6 +14916,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0005.JP2/painting/anno", @@ -14378,6 +14945,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0006.JP2/painting/anno", @@ -14400,6 +14974,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0007.JP2/painting/anno", @@ -14422,6 +15003,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0008.JP2/painting/anno", @@ -14444,6 +15032,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0009.JP2/painting/anno", @@ -14466,6 +15061,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0010.JP2/painting/anno", @@ -14488,6 +15090,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0011.JP2/painting/anno", @@ -14510,6 +15119,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0012.JP2/painting/anno", @@ -14532,6 +15148,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0013.JP2/painting/anno", @@ -14554,6 +15177,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0014.JP2/painting/anno", @@ -14576,6 +15206,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0015.JP2/painting/anno", @@ -14598,6 +15235,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0016.JP2/painting/anno", @@ -14620,6 +15264,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0017.JP2/painting/anno", @@ -14642,6 +15293,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0018.JP2/painting/anno", @@ -14664,6 +15322,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0019.JP2/painting/anno", @@ -14686,6 +15351,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0020.JP2/painting/anno", @@ -14708,6 +15380,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0021.JP2/painting/anno", @@ -14730,6 +15409,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0022.JP2/painting/anno", @@ -14752,6 +15438,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0023.JP2/painting/anno", @@ -14774,6 +15467,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0024.JP2/painting/anno", @@ -14796,6 +15496,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0025.JP2/painting/anno", @@ -14818,6 +15525,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0026.JP2/painting/anno", @@ -14840,6 +15554,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0027.JP2/painting/anno", @@ -14862,6 +15583,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0028.JP2/painting/anno", @@ -14884,6 +15612,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0029.JP2/painting/anno", @@ -14906,6 +15641,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0030.JP2/painting/anno", @@ -14928,6 +15670,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0031.JP2/painting/anno", @@ -14950,6 +15699,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0032.JP2/painting/anno", @@ -14972,6 +15728,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0033.JP2/painting/anno", @@ -14994,6 +15757,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0034.JP2/painting/anno", @@ -15016,6 +15786,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0035.JP2/painting/anno", @@ -15038,6 +15815,13 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2/painting", + "iiif-parser:hasPart": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2/painting", + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2", + "type": "AnnotationPage", + }, + ], "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b18035723/canvases/b18035723_0036.JP2/painting/anno", diff --git a/src/presentation-3/empty-types.ts b/src/presentation-3/empty-types.ts index 11bf68c..492c9c1 100644 --- a/src/presentation-3/empty-types.ts +++ b/src/presentation-3/empty-types.ts @@ -34,7 +34,7 @@ export const emptyAnnotation: AnnotationNormalized = { generator: EMPTY, modified: null, motivation: EMPTY, - rights: EMPTY, + rights: null as any, // @todo bug? should not be array of strings. stylesheet: null, target: EMPTY, timeMode: undefined, // @todo bug? should be null. diff --git a/src/presentation-3/serialize-presentation-3.ts b/src/presentation-3/serialize-presentation-3.ts index ae6c562..b3d4253 100644 --- a/src/presentation-3/serialize-presentation-3.ts +++ b/src/presentation-3/serialize-presentation-3.ts @@ -2,7 +2,7 @@ import { SerializeConfig } from './serialize'; import { ImageService2, ImageService3, ResourceProvider, TechnicalProperties } from '@iiif/presentation-3'; import { compressSpecificResource } from '../shared/compress-specific-resource'; import { DescriptiveNormalized, LinkingNormalized } from '@iiif/presentation-3-normalized'; -import { HAS_PART, UNSET, UNWRAP } from './utilities'; +import { HAS_PART, PART_OF, UNSET, UNWRAP } from "./utilities"; import { isSpecificResource } from '../shared/is-specific-resource'; function technicalProperties(entity: Partial): Array<[keyof TechnicalProperties, any]> { @@ -86,7 +86,7 @@ function* descriptiveProperties( ['metadata', filterEmpty(entity.metadata)], ['summary', entity.summary], ['requiredStatement', entity.requiredStatement], - ['rights', entity.rights], + ['rights', Array.isArray(entity.rights) ? (entity.rights[0] || undefined) : (entity.rights || undefined)], ['navDate', entity.navDate], ['language', entity.language], // We yield these fully as they are embedded in here. @@ -174,7 +174,7 @@ export const serializeConfigPresentation3: SerializeConfig = { return [key, Array.isArray(item) ? filterEmpty(item as any) : item]; }) .filter(([key, value]) => { - return key !== 'items' && key !== 'id'; + return key !== 'items' && key !== 'id' && key !== HAS_PART && key !== PART_OF; }); const items = yield entity.items; diff --git a/src/presentation-3/traverse.ts b/src/presentation-3/traverse.ts index a698ecb..b6716c7 100644 --- a/src/presentation-3/traverse.ts +++ b/src/presentation-3/traverse.ts @@ -276,7 +276,7 @@ export class Traverse { traverseCanvasItems(canvas: Canvas): Canvas { canvas.items = (canvas.items || []).map((annotationPage: AnnotationPage): AnnotationPage => { - return this.traverseAnnotationPage(annotationPage); + return this.traverseAnnotationPage(annotationPage, canvas); }); return canvas; @@ -288,7 +288,7 @@ export class Traverse { } if (resource.annotations) { resource.annotations = resource.annotations.map((annotationPage: AnnotationPage): AnnotationPage => { - return this.traverseAnnotationPage(annotationPage); + return this.traverseAnnotationPage(annotationPage, resource); }); } From 7372a879e665c5786ace338b2d9a663cf496f9d4 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Fri, 21 Apr 2023 15:04:47 +0100 Subject: [PATCH 34/44] Added flag for external resources --- .../__snapshots__/cookbook.tests.ts.snap | 9 +++ .../__snapshots__/normalize.test.ts.snap | 1 + .../__snapshots__/smoke.tests.ts.snap | 70 +++++++++++++++++++ src/presentation-3/normalize.ts | 14 +++- .../serialize-presentation-3.ts | 8 +-- src/presentation-3/utilities.ts | 1 + 6 files changed, 97 insertions(+), 6 deletions(-) diff --git a/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap b/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap index 03da95e..a8e8b26 100644 --- a/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/cookbook.tests.ts.snap @@ -10883,6 +10883,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-collection https "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", + "iiif-parser:isExternal": true, "label": { "jp": [ "巻 1 [Vol. 1]", @@ -10892,6 +10893,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-collection https }, { "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", + "iiif-parser:isExternal": true, "label": { "jp": [ "巻 2 [Vol. 2]", @@ -10930,6 +10932,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-collection https "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v1.json", + "iiif-parser:isExternal": true, "items": [], "label": { "jp": [ @@ -10960,6 +10963,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0030-multi-volume-collection https "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0030-multi-volume/manifest_v2.json", + "iiif-parser:isExternal": true, "items": [], "label": { "jp": [ @@ -24493,6 +24497,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate-collection ht "items": [ { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "iiif-parser:isExternal": true, "label": { "en": [ "1986 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", @@ -24503,6 +24508,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate-collection ht }, { "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "iiif-parser:isExternal": true, "label": { "en": [ "1987 Chesapeake and Ohio Canal, Washington, D.C., Maryland, West Virginia, official map and guide", @@ -24569,6 +24575,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate-collection ht "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_1-manifest.json", + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -24599,6 +24606,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0230-navdate-navdate-collection ht "behavior": [], "homepage": [], "id": "https://iiif.io/api/cookbook/recipe/0230-navdate/navdate_map_2-manifest.json", + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -26739,6 +26747,7 @@ exports[`Cookbook > Testing normalize %p (%p) 0269-embedded-or-referenced-annota "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": null, "metadata": [], diff --git a/__tests__/presentation-3-parser/__snapshots__/normalize.test.ts.snap b/__tests__/presentation-3-parser/__snapshots__/normalize.test.ts.snap index 0683dd7..a9905d2 100644 --- a/__tests__/presentation-3-parser/__snapshots__/normalize.test.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/normalize.test.ts.snap @@ -326,6 +326,7 @@ exports[`normalize > normalize full example from specification 1`] = ` "type": "Collection", }, ], + "iiif-parser:isExternal": true, "items": [], "label": null, "metadata": [], diff --git a/__tests__/presentation-3-parser/__snapshots__/smoke.tests.ts.snap b/__tests__/presentation-3-parser/__snapshots__/smoke.tests.ts.snap index 490dda6..cbf0cc4 100644 --- a/__tests__/presentation-3-parser/__snapshots__/smoke.tests.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/smoke.tests.ts.snap @@ -8906,6 +8906,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-collection "items": [ { "id": "https://iiif.wellcomecollection.org/presentation/b29011577", + "iiif-parser:isExternal": true, "label": { "none": [ "Titres et travaux scientifiques du Dr F. Lejars.", @@ -8921,6 +8922,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-collection }, { "id": "https://iiif.wellcomecollection.org/presentation/b32183859", + "iiif-parser:isExternal": true, "label": { "none": [ "Annotated bibliography on vital and health statistics.", @@ -8936,6 +8938,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-collection }, { "id": "https://iiif.wellcomecollection.org/presentation/b21782763", + "iiif-parser:isExternal": true, "label": { "none": [ "Notice sur les travaux scientifiques de M. Henri Becquerel.", @@ -8951,6 +8954,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-collection }, { "id": "https://iiif.wellcomecollection.org/presentation/b29011553", + "iiif-parser:isExternal": true, "label": { "none": [ "Notice sur les titres et travaux scientifiques de M. Louis Lapicque.", @@ -9156,6 +9160,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-collection "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b21782763", + "iiif-parser:isExternal": true, "items": [], "label": { "none": [ @@ -9191,6 +9196,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-collection "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b29011553", + "iiif-parser:isExternal": true, "items": [], "label": { "none": [ @@ -9226,6 +9232,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-collection "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b29011577", + "iiif-parser:isExternal": true, "items": [], "label": { "none": [ @@ -9261,6 +9268,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-collection "behavior": [], "homepage": [], "id": "https://iiif.wellcomecollection.org/presentation/b32183859", + "iiif-parser:isExternal": true, "items": [], "label": { "none": [ @@ -9637,6 +9645,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -9665,6 +9674,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -9693,6 +9703,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -9721,6 +9732,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -9749,6 +9761,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -9777,6 +9790,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -9805,6 +9819,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -9833,6 +9848,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -9861,6 +9877,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -9889,6 +9906,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -9917,6 +9935,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -9945,6 +9964,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -10759,6 +10779,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "Collection", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -10794,6 +10815,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "Collection", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -10829,6 +10851,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "Collection", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -10864,6 +10887,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "Collection", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -10899,6 +10923,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "Collection", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -10934,6 +10959,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "Collection", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -10969,6 +10995,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "Collection", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -11004,6 +11031,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "Collection", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -11039,6 +11067,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "Collection", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -11074,6 +11103,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "type": "Collection", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -13771,6 +13801,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -13799,6 +13830,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -13827,6 +13859,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -13855,6 +13888,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -13883,6 +13917,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -13911,6 +13946,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -13939,6 +13975,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -13967,6 +14004,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -13995,6 +14033,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14023,6 +14062,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14051,6 +14091,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14079,6 +14120,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14107,6 +14149,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14135,6 +14178,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14163,6 +14207,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14191,6 +14236,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14219,6 +14265,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14247,6 +14294,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14275,6 +14323,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14303,6 +14352,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14331,6 +14381,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14359,6 +14410,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14387,6 +14439,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14415,6 +14468,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14443,6 +14497,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14471,6 +14526,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14499,6 +14555,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14527,6 +14584,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14555,6 +14613,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14583,6 +14642,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14611,6 +14671,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14639,6 +14700,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14667,6 +14729,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14695,6 +14758,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14723,6 +14787,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14751,6 +14816,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -14779,6 +14845,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "AnnotationPage", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -17621,6 +17688,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "Collection", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -17656,6 +17724,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "Collection", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ @@ -17691,6 +17760,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "type": "Collection", }, ], + "iiif-parser:isExternal": true, "items": [], "label": { "en": [ diff --git a/src/presentation-3/normalize.ts b/src/presentation-3/normalize.ts index 4dac16f..2f1bc76 100644 --- a/src/presentation-3/normalize.ts +++ b/src/presentation-3/normalize.ts @@ -34,7 +34,7 @@ import { ResourceProviderNormalized, } from '@iiif/presentation-3-normalized'; import { isSpecificResource } from '../shared/is-specific-resource'; -import { EMPTY, HAS_PART, PART_OF, WILDCARD } from './utilities'; +import { EMPTY, HAS_PART, IS_EXTERNAL, PART_OF, WILDCARD } from "./utilities"; export const defaultEntities = { Collection: {}, @@ -177,7 +177,7 @@ export function merge(existing: any, incoming: any, context?: { parent?: any; is } if (merged[HAS_PART] && merged[HAS_PART].length) { - const noExplicit = !merged[HAS_PART].find((r: any) => r['@explicit']); + const noExplicit = !(merged[HAS_PART] || []).find((r: any) => r['@explicit']); const hasDiverged = added.length > 0 || unchanged.length !== existingKeys.length; // We already have one, it may conflict here. // 1. Fix the first part. @@ -474,6 +474,13 @@ export function traverseSpecificResource(specificResource: SpecificResource): Sp return specificResource; } +export function addFlagForExternalResource(resource: T): T { + if (typeof resource.items === 'undefined') { + (resource as any)[IS_EXTERNAL] = true; + } + return resource; +} + export function normalize(unknownEntity: unknown) { const entity = convertPresentation2(unknownEntity); const entities = getDefaultEntities(); @@ -483,11 +490,13 @@ export function normalize(unknownEntity: unknown) { const traversal = new Traverse({ collection: [ + addFlagForExternalResource, ensureDefaultFields(emptyCollection), addToMapping('Collection'), addToEntities('Collection'), ], manifest: [ + addFlagForExternalResource, ensureDefaultFields(emptyManifest), startCanvasToSpecificResource, addToMapping('Manifest'), @@ -499,6 +508,7 @@ export function normalize(unknownEntity: unknown) { addToEntities('Canvas'), ], annotationPage: [ + addFlagForExternalResource, addMissingIdToContentResource('AnnotationPage'), ensureDefaultFields(emptyAnnotationPage), addToMapping('AnnotationPage'), diff --git a/src/presentation-3/serialize-presentation-3.ts b/src/presentation-3/serialize-presentation-3.ts index b3d4253..2dfa353 100644 --- a/src/presentation-3/serialize-presentation-3.ts +++ b/src/presentation-3/serialize-presentation-3.ts @@ -2,7 +2,7 @@ import { SerializeConfig } from './serialize'; import { ImageService2, ImageService3, ResourceProvider, TechnicalProperties } from '@iiif/presentation-3'; import { compressSpecificResource } from '../shared/compress-specific-resource'; import { DescriptiveNormalized, LinkingNormalized } from '@iiif/presentation-3-normalized'; -import { HAS_PART, PART_OF, UNSET, UNWRAP } from "./utilities"; +import { HAS_PART, IS_EXTERNAL, PART_OF, UNSET, UNWRAP } from "./utilities"; import { isSpecificResource } from '../shared/is-specific-resource'; function technicalProperties(entity: Partial): Array<[keyof TechnicalProperties, any]> { @@ -174,7 +174,7 @@ export const serializeConfigPresentation3: SerializeConfig = { return [key, Array.isArray(item) ? filterEmpty(item as any) : item]; }) .filter(([key, value]) => { - return key !== 'items' && key !== 'id' && key !== HAS_PART && key !== PART_OF; + return key !== 'items' && key !== 'id' && key !== HAS_PART && key !== PART_OF && key !== IS_EXTERNAL; }); const items = yield entity.items; @@ -208,7 +208,7 @@ export const serializeConfigPresentation3: SerializeConfig = { return [key, Array.isArray(item) ? filterEmpty(item as any) : item]; }) .filter(([key]) => { - return key !== 'body' && key !== HAS_PART; + return key !== 'body' && key !== HAS_PART && key !== IS_EXTERNAL; }); let resolvedBody: any = undefined; @@ -320,7 +320,7 @@ function mergeRemainingProperties(entries: [string, any][], object: any): [strin const alreadyParsed = entries.map(([a]) => a); for (const key of keys) { - if (key === HAS_PART) { + if (key === HAS_PART || key === IS_EXTERNAL) { continue; } if (alreadyParsed.indexOf(key) === -1 && typeof object[key] !== 'undefined') { diff --git a/src/presentation-3/utilities.ts b/src/presentation-3/utilities.ts index 3c7c3ec..fc276a7 100644 --- a/src/presentation-3/utilities.ts +++ b/src/presentation-3/utilities.ts @@ -4,6 +4,7 @@ import { toRef } from '../shared/to-ref'; export const WILDCARD = {}; export const HAS_PART = 'iiif-parser:hasPart'; export const PART_OF = 'iiif-parser:partOf'; +export const IS_EXTERNAL = 'iiif-parser:isExternal'; export const UNSET = '__$UNSET$__'; export const UNWRAP = '__$UNWRAP$__'; export const EMPTY = []; From 919323bc8c36decc4cb1d5754515e21d6bb9eb3b Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Fri, 21 Apr 2023 17:36:45 +0100 Subject: [PATCH 35/44] Fixed annotation serialisation --- .../annotation-target.test.ts | 65 +++++++++++++++++++ .../presentation-3-parser/smoke.tests.ts | 1 - .../serialize-presentation-3.ts | 2 +- src/shared/compress-specific-resource.ts | 4 +- 4 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 __tests__/presentation-3-parser/annotation-target.test.ts diff --git a/__tests__/presentation-3-parser/annotation-target.test.ts b/__tests__/presentation-3-parser/annotation-target.test.ts new file mode 100644 index 0000000..09d556b --- /dev/null +++ b/__tests__/presentation-3-parser/annotation-target.test.ts @@ -0,0 +1,65 @@ +import { describe } from 'vitest'; +import exhibition1 from '../../fixtures/presentation-3/exhibition-1.json'; +import { normalize, serialize, serializeConfigPresentation3 } from "../../src"; + +describe('Annotation target tests', () => { + test('Annotation with target type annotation', () => { + const result = normalize(exhibition1); + + const anno = (result.entities.Annotation as any)[ + 'https://heritage.tudelft.nl/iiif/inventing-creativity/canvas/66dc7c31-e263-79bc-08a7-43a5f6e6ad59/annotations/35' + ]; + + const reserialized = serialize( + { + mapping: result.mapping, + entities: result.entities, + requests: {}, + }, + anno, + serializeConfigPresentation3 + ); + + + expect( + (result.entities.Annotation as any)[ + 'https://heritage.tudelft.nl/iiif/inventing-creativity/canvas/66dc7c31-e263-79bc-08a7-43a5f6e6ad59/annotations/35' + ] + ).toMatchInlineSnapshot(` + { + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/canvas/66dc7c31-e263-79bc-08a7-43a5f6e6ad59/annotations/35", + "iiif-parser:hasPart": [ + { + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/canvas/66dc7c31-e263-79bc-08a7-43a5f6e6ad59/annotations/35", + "iiif-parser:partOf": "https://heritage.tudelft.nl/iiif/inventing-creativity/canvas/66dc7c31-e263-79bc-08a7-43a5f6e6ad59/annotations", + "type": "Annotation", + }, + ], + "motivation": [ + "describing", + ], + "target": { + "source": { + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/annotation/92fab8fb-2fff-9abe-f901-f07122318a1c", + "type": "Annotation", + }, + "type": "SpecificResource", + }, + "type": "Annotation", + } + `); + + expect(reserialized).toMatchInlineSnapshot(` + { + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/canvas/66dc7c31-e263-79bc-08a7-43a5f6e6ad59/annotations/35", + "motivation": "describing", + "target": { + "id": "https://heritage.tudelft.nl/iiif/inventing-creativity/annotation/92fab8fb-2fff-9abe-f901-f07122318a1c", + "type": "Annotation", + }, + "type": "Annotation", + } + `); + // + }); +}); diff --git a/__tests__/presentation-3-parser/smoke.tests.ts b/__tests__/presentation-3-parser/smoke.tests.ts index 6a1eb02..49c511c 100644 --- a/__tests__/presentation-3-parser/smoke.tests.ts +++ b/__tests__/presentation-3-parser/smoke.tests.ts @@ -12,7 +12,6 @@ const skipThese: string[] = [ // @todo // - Bad service array // - Strange Image service behaviour (id/type vs @id/@type) - // - BUG - annotation.target should have type if it's an annotation. 'exhibition-1.json', // @todo diff --git a/src/presentation-3/serialize-presentation-3.ts b/src/presentation-3/serialize-presentation-3.ts index 2dfa353..febb315 100644 --- a/src/presentation-3/serialize-presentation-3.ts +++ b/src/presentation-3/serialize-presentation-3.ts @@ -202,7 +202,7 @@ export const serializeConfigPresentation3: SerializeConfig = { } if (key === 'target') { - return [key, compressSpecificResource(item, { allowString: true, allowSourceString: true })]; + return [key, compressSpecificResource(item, { allowString: true, allowSourceString: true, allowedStringType: 'Canvas' })]; } return [key, Array.isArray(item) ? filterEmpty(item as any) : item]; diff --git a/src/shared/compress-specific-resource.ts b/src/shared/compress-specific-resource.ts index 346e074..5b74bc5 100644 --- a/src/shared/compress-specific-resource.ts +++ b/src/shared/compress-specific-resource.ts @@ -2,7 +2,7 @@ import { SpecificResource } from '@iiif/presentation-3'; export function compressSpecificResource( target: undefined | SpecificResource, - { allowSourceString = true, allowString = false }: { allowString?: boolean; allowSourceString?: boolean } = {} + { allowSourceString = true, allowString = false, allowedStringType }: { allowString?: boolean; allowSourceString?: boolean; allowedStringType?: string } = {} ): any { const fixSource = (resource: any) => { if (allowSourceString && resource && resource.source && typeof resource.source !== 'string') { @@ -24,7 +24,7 @@ export function compressSpecificResource( (keys.length === 2 && target.type && target.source) || (keys.length === 3 && target.type && target.source && keys.indexOf('selector') !== -1 && !target.selector) ) { - if (allowString) { + if (allowString && (!allowedStringType || allowedStringType === target.source.type)) { return target.source.id; } From 30a567d8b4c70683f29f9465f5f2b6ce3dd4fceb Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Mon, 24 Apr 2023 14:40:34 +0100 Subject: [PATCH 36/44] Fixed serialisation of internal but empty annotation lists --- src/presentation-3/serialize-presentation-3.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/presentation-3/serialize-presentation-3.ts b/src/presentation-3/serialize-presentation-3.ts index febb315..82ea51f 100644 --- a/src/presentation-3/serialize-presentation-3.ts +++ b/src/presentation-3/serialize-presentation-3.ts @@ -184,7 +184,7 @@ export const serializeConfigPresentation3: SerializeConfig = { ['id', !entity.id?.startsWith('vault://') ? entity.id : undefined], ...entries, ...(yield* linkingProperties(entity)), - ['items', items.length ? items : UNSET], + ['items', items.length || (entity as any)[IS_EXTERNAL] === false ? items : UNSET], ]; }, From 9c888e0cd39f1669a1afade3fc31163317887bc7 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Tue, 25 Apr 2023 16:06:35 +0100 Subject: [PATCH 37/44] Fixed bug with duplicate services --- .../__snapshots__/has-part.test.ts.snap | 22 ++++++++ .../__snapshots__/smoke.tests.ts.snap | 54 ++----------------- .../presentation-3-parser/has-part.test.ts | 35 +++++++++++- src/presentation-3/normalize.ts | 7 +++ .../serialize-presentation-3.ts | 2 +- 5 files changed, 67 insertions(+), 53 deletions(-) diff --git a/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap b/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap index 49eaf77..bced736 100644 --- a/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/has-part.test.ts.snap @@ -387,6 +387,28 @@ exports[`Has part issues > Example manifest with thumbnail ID the same as the ma } `; +exports[`Has part issues > Merging 2 services 1`] = ` +{ + "iiif-parser:hasPart": [ + { + "id": undefined, + "iiif-parser:partOf": "https://example.org/canvas-1", + "type": undefined, + }, + ], + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b1465782x_0001.jp2", + "@type": "ImageService2", + "height": 7161, + "id": "https://iiif.wellcomecollection.org/image/b1465782x_0001.jp2", + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 6036, + }, + ], +} +`; + exports[`Has part issues > Merging the same 2 entities 1`] = ` { "format": "image/jpeg", diff --git a/__tests__/presentation-3-parser/__snapshots__/smoke.tests.ts.snap b/__tests__/presentation-3-parser/__snapshots__/smoke.tests.ts.snap index cbf0cc4..a17034f 100644 --- a/__tests__/presentation-3-parser/__snapshots__/smoke.tests.ts.snap +++ b/__tests__/presentation-3-parser/__snapshots__/smoke.tests.ts.snap @@ -11442,6 +11442,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "@id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0001.jp2", "@type": "ImageService2", "height": 1024, + "id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0001.jp2", "profile": "http://iiif.io/api/image/2/level0.json", "sizes": [ { @@ -11461,6 +11462,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` "width": 620, }, ], + "type": "ImageService2", "width": 620, }, ], @@ -11494,31 +11496,6 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3.json 1` ], "width": 620, }, - { - "@id": "https://dlcs.io/thumbs/wellcome/6/b28857021_0001.jp2", - "@type": "ImageService2", - "height": 1024, - "profile": "http://iiif.io/api/image/2/level0.json", - "sizes": [ - { - "height": 100, - "width": 61, - }, - { - "height": 200, - "width": 121, - }, - { - "height": 400, - "width": 242, - }, - { - "height": 1024, - "width": 620, - }, - ], - "width": 620, - }, ], "type": "Image", "width": 61, @@ -19494,6 +19471,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0004.JP2", "@type": "ImageService2", "height": 1024, + "id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0004.JP2", "profile": "http://iiif.io/api/image/2/level0.json", "sizes": [ { @@ -19513,6 +19491,7 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json "width": 732, }, ], + "type": "ImageService2", "width": 732, }, ], @@ -19546,31 +19525,6 @@ exports[`Smoke tests > Smoke test: ./fixtures/presentation-3/wellcome-p3-2.json ], "width": 732, }, - { - "@id": "https://iiif.wellcomecollection.org/thumbs/b18035723_0004.JP2", - "@type": "ImageService2", - "height": 1024, - "profile": "http://iiif.io/api/image/2/level0.json", - "sizes": [ - { - "height": 100, - "width": 72, - }, - { - "height": 200, - "width": 143, - }, - { - "height": 400, - "width": 286, - }, - { - "height": 1024, - "width": 732, - }, - ], - "width": 732, - }, ], "type": "Image", "width": 72, diff --git a/__tests__/presentation-3-parser/has-part.test.ts b/__tests__/presentation-3-parser/has-part.test.ts index 3721102..7c187d6 100644 --- a/__tests__/presentation-3-parser/has-part.test.ts +++ b/__tests__/presentation-3-parser/has-part.test.ts @@ -38,6 +38,37 @@ describe('Has part issues', function () { expect(merged).toMatchSnapshot(); }); + test('Merging 2 services', () => { + const item1 = { + service: [ + { + '@id': 'https://iiif.wellcomecollection.org/image/b1465782x_0001.jp2', + '@type': 'ImageService2', + profile: 'http://iiif.io/api/image/2/level1.json', + width: 6036, + height: 7161, + id: 'https://iiif.wellcomecollection.org/image/b1465782x_0001.jp2', + }, + ], + }; + + const item2 = { + service: [ + { + '@id': 'https://iiif.wellcomecollection.org/image/b1465782x_0001.jp2', + '@type': 'ImageService2', + profile: 'http://iiif.io/api/image/2/level1.json', + width: 6036, + height: 7161, + }, + ], + }; + + const merged = mergeEntities(item1 as any, item2, { parent: { id: 'https://example.org/canvas-1' } }); + + expect(merged).toMatchSnapshot(); + + }); test('Merging the same 2 entities', () => { const first = { @@ -63,7 +94,7 @@ describe('Has part issues', function () { const merged = mergeEntities(initial as any, second, { parent: { id: 'https://example.org/canvas-1' } }); expect(merged).toMatchSnapshot(); - }) + }); test('Merging the same 2 entities and then different one', () => { const first = { @@ -104,7 +135,7 @@ describe('Has part issues', function () { const merged2 = mergeEntities(merged as any, third, { parent: { id: 'https://example.org/canvas-3' } }); expect(merged2).toMatchSnapshot(); - }) + }); test('Example manifest with thumbnail ID the same as the main resource', () => { const original = JSON.parse(JSON.stringify(hasPartManifest)); diff --git a/src/presentation-3/normalize.ts b/src/presentation-3/normalize.ts index 2f1bc76..d5eb6e0 100644 --- a/src/presentation-3/normalize.ts +++ b/src/presentation-3/normalize.ts @@ -116,6 +116,12 @@ export function merge(existing: any, incoming: any, context?: { parent?: any; is // merged with the existing value. const merged = [...existing]; for (const item of incoming) { + if (item['@id'] && !item.id) { + item.id = item['@id']; + } + if (item['@type'] && !item.type) { + item.type = item['@type']; + } if (item === null || item === undefined) { continue; } @@ -240,6 +246,7 @@ export function mergeEntities( if (typeof existing === 'string') { return existing; } + if (incoming.id !== (existing as any).id || incoming.type !== (existing as any).type) { if (incoming.type === 'ImageService3') { return incoming; diff --git a/src/presentation-3/serialize-presentation-3.ts b/src/presentation-3/serialize-presentation-3.ts index 82ea51f..d4042f5 100644 --- a/src/presentation-3/serialize-presentation-3.ts +++ b/src/presentation-3/serialize-presentation-3.ts @@ -19,7 +19,7 @@ function technicalProperties(entity: Partial): Array<[keyof ['behavior', entity.behavior && entity.behavior.length ? entity.behavior : undefined], ['timeMode', entity.timeMode], ['motivation', Array.isArray(entity.motivation) ? entity.motivation[0] : entity.motivation], - ['iiif-parser:hasPart' as any, UNSET], + [HAS_PART as any, UNSET], ]; } From 704e72d11d23f32c07dc1739fedbc5cf79462929 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Fri, 1 Sep 2023 15:39:04 +0100 Subject: [PATCH 38/44] Fixed thumbnail bug --- .../presentation-2-parser/upgrade.test.ts | 32 +- fixtures/presentation-2/loc.json | 2289 +++++++++++++++++ src/presentation-2/upgrader.ts | 18 +- 3 files changed, 2329 insertions(+), 10 deletions(-) create mode 100644 fixtures/presentation-2/loc.json diff --git a/__tests__/presentation-2-parser/upgrade.test.ts b/__tests__/presentation-2-parser/upgrade.test.ts index 5222dc7..f3451d9 100644 --- a/__tests__/presentation-2-parser/upgrade.test.ts +++ b/__tests__/presentation-2-parser/upgrade.test.ts @@ -21,6 +21,7 @@ import { presentation2to3 } from '../../src/presentation-2'; import { Validator } from '@hyperion-framework/validator'; import annoList from '../../fixtures/presentation-2/iiif-fixture-annotation-list.json'; import choiceAnnoList from '../../fixtures/presentation-2/anno_list_choice.json'; +import loc from '../../fixtures/presentation-2/loc.json'; describe('Presentation 2 to 3', () => { const validator = new Validator(); @@ -257,6 +258,19 @@ describe('Presentation 2 to 3', () => { expect(isValid).toEqual(true); }); + test('LOC manifest', () => { + const result = presentation2to3.traverseManifest(loc as any); + + expect(result.type).toEqual('Manifest'); + + expect(result.thumbnail![0].type).toEqual('Image'); + + const isValid = validator.validateManifest(result); + + expect(validator.validators.manifest.errors).toEqual(null); + expect(isValid).toEqual(true); + }); + test('IIIF Fixture with dimensions', () => { const result = presentation2to3.traverseManifest(withDimensions as any); expect(result.type).toEqual('Manifest'); @@ -302,10 +316,10 @@ describe('Presentation 2 to 3', () => { { "body": { "chars": "Top of First Page to Display", - "id": "http://example.org/cnt:ContentAsText/363", + "id": "http://example.org/cnt:ContentAsText/418", "type": "TextualBody", }, - "id": "http://example.org/oa:Annotation/364", + "id": "http://example.org/oa:Annotation/419", "motivation": "painting", "target": { "selector": { @@ -324,18 +338,18 @@ describe('Presentation 2 to 3', () => { "body": [ { "chars": "character", - "id": "http://example.org/oa:Tag/365", + "id": "http://example.org/oa:Tag/420", "type": "Tag", }, { "chars": "

", "format": "text/html", - "id": "http://example.org/dctypes:Text/366", + "id": "http://example.org/dctypes:Text/421", "type": "Text", }, ], - "id": "http://example.org/oa:Annotation/367", + "id": "http://example.org/oa:Annotation/422", "motivation": [ "tagging", "commenting", @@ -379,17 +393,17 @@ describe('Presentation 2 to 3', () => { { "chars": "

Zone of interest
Place
Cauca of Huila

", "format": "text/html", - "id": "http://example.org/dctypes:Text/368", + "id": "http://example.org/dctypes:Text/423", "type": "Text", }, { "chars": "Colombia", - "id": "http://example.org/oa:Tag/369", + "id": "http://example.org/oa:Tag/424", "type": "Tag", }, { "chars": "Cauca", - "id": "http://example.org/oa:Tag/370", + "id": "http://example.org/oa:Tag/425", "type": "Tag", }, ], @@ -437,7 +451,7 @@ describe('Presentation 2 to 3', () => { "body": { "chars": "

Surface tool
Feuille
70.97 mm²

", "format": "text/html", - "id": "http://example.org/dctypes:Text/371", + "id": "http://example.org/dctypes:Text/426", "type": "Text", }, "id": "https://collections.recolnat.org/annotate-server/iiif/2/annotationList/30/febbe57672bb5eaf097de6c5448c43ad8a82e012/list/3", diff --git a/fixtures/presentation-2/loc.json b/fixtures/presentation-2/loc.json new file mode 100644 index 0000000..3c1e06d --- /dev/null +++ b/fixtures/presentation-2/loc.json @@ -0,0 +1,2289 @@ +{ + "@context": "http://iiif.io/api/presentation/2/context.json", + "@id": "https://www.loc.gov/item/2003630738/manifest.json", + "@type": "sc:Manifest", + "attribution": "Provided by the Library of Congress", + "description": "Relief shown by contours and spot heights. Relief also shown by hachures on some sheets. Depths shown by contours on some sheets. Filing title in lower margin at right on some sheets. Sheets individually subtitled in upper margin at center. Various eds. of some sheets. Ed. statements differ, e.g.: First edition-AMS 1 -- Second edition (AEF). Some sheets have grid identification statement: Nord de Guerre zone grid (blue). Former security classification statement in upper margin: For use by War and Navy Department agencies only. Imperfect: Sheets variously annotated, rubber-stamped, laminated, mounted on cloth backing. Includes source-materials note, glossary, and diagrams. Available also through the Library of Congress Web site as a raster image.", + "label": "Holland 1:25,000", + "logo": "https://loc.gov/static/images/logo-loc-new-branding.svg", + "metadata": [ + { + "label": "APA Citation Style", + "value": "United States Army Map Service & United States Army. American Expeditionary Forces. (1943) Holland 1:25,000. Washington: Army Map Service, U.S. Army. [Map] Retrieved from the Library of Congress, https://www.loc.gov/item/2003630738/." + }, + { + "label": "MLA Citation Style", + "value": "United States Army Map Service, and United States Army. American Expeditionary Forces. Holland 1:25,000. Washington: Army Map Service, U.S. Army, 1943. Map. Retrieved from the Library of Congress, <www.loc.gov/item/2003630738/>." + }, + { + "label": "Chicago Citation Style", + "value": "United States Army Map Service, and United States Army. American Expeditionary Forces. Holland 1:25,000. Washington: Army Map Service, U.S. Army, 1943. Map. https://www.loc.gov/item/2003630738/." + }, + { + "label": "Contributors", + "value": [ + "United States. Army Map Service.", + "United States. Army. American Expeditionary Forces." + ] + }, + { + "label": "Created Published", + "value": [ + "Washington : Army Map Service, U.S. Army, 1943-" + ] + }, + { + "label": "Original Format", + "value": [ + "map" + ] + }, + { + "label": "Subjects", + "value": [ + "maps", + "netherlands", + "topographic maps", + "military maps" + ] + }, + { + "label": "Online Format", + "value": [ + "image" + ] + }, + { + "label": "Item Url", + "value": "https://www.loc.gov/item/2003630738/" + } + ], + "navDate": "1943-01-01T00:00:00Z", + "seeAlso": [ + { + "@id": "https://lccn.loc.gov/2003630738/marcxml", + "format": "text/xml" + }, + { + "@id": "https://lccn.loc.gov/2003630738/mods", + "format": "text/xml" + }, + { + "@id": "https://lccn.loc.gov/2003630738/dc", + "format": "text/html" + } + ], + "sequences": [ + { + "@type": "sc:Sequence", + "canvases": [ + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000006", + "@type": "sc:Canvas", + "height": 1616, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-1/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000006", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000006/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1616, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000006", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2230 + } + } + ], + "label": "Page 1", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=1" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=1", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000006.gif", + "format": "image/jpeg", + "height": 150, + "width": 207 + }, + "width": 2230 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000007", + "@type": "sc:Canvas", + "height": 1362, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-2/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000007", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000007/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1362, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000007", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2199 + } + } + ], + "label": "Page 2", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=2" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=2", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000007.gif", + "format": "image/jpeg", + "height": 150, + "width": 242 + }, + "width": 2199 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000008", + "@type": "sc:Canvas", + "height": 1579, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-3/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000008", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000008/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1579, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000008", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2600 + } + } + ], + "label": "Page 3", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=3" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=3", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000008.gif", + "format": "image/jpeg", + "height": 150, + "width": 247 + }, + "width": 2600 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000009", + "@type": "sc:Canvas", + "height": 1364, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-4/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000009", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000009/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1364, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000009", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 1862 + } + } + ], + "label": "Page 4", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=4" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=4", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000009.gif", + "format": "image/jpeg", + "height": 150, + "width": 205 + }, + "width": 1862 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000010", + "@type": "sc:Canvas", + "height": 1369, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-5/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000010", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000010/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1369, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000010", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2253 + } + } + ], + "label": "Page 5", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=5" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=5", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000010.gif", + "format": "image/jpeg", + "height": 150, + "width": 247 + }, + "width": 2253 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000011", + "@type": "sc:Canvas", + "height": 1361, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-6/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000011", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000011/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1361, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000011", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 1854 + } + } + ], + "label": "Page 6", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=6" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=6", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000011.gif", + "format": "image/jpeg", + "height": 150, + "width": 204 + }, + "width": 1854 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000012", + "@type": "sc:Canvas", + "height": 1349, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-7/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000012", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000012/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1349, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000012", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 1850 + } + } + ], + "label": "Page 7", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=7" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=7", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000012.gif", + "format": "image/jpeg", + "height": 150, + "width": 206 + }, + "width": 1850 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000013", + "@type": "sc:Canvas", + "height": 1377, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-8/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000013", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000013/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1377, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000013", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 1863 + } + } + ], + "label": "Page 8", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=8" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=8", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000013.gif", + "format": "image/jpeg", + "height": 150, + "width": 203 + }, + "width": 1863 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000014", + "@type": "sc:Canvas", + "height": 1349, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-9/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000014", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000014/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1349, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000014", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 1851 + } + } + ], + "label": "Page 9", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=9" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=9", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000014.gif", + "format": "image/jpeg", + "height": 150, + "width": 206 + }, + "width": 1851 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000015", + "@type": "sc:Canvas", + "height": 1362, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-10/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000015", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000015/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1362, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000015", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 1861 + } + } + ], + "label": "Page 10", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=10" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=10", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000015.gif", + "format": "image/jpeg", + "height": 150, + "width": 205 + }, + "width": 1861 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000016", + "@type": "sc:Canvas", + "height": 1364, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-11/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000016", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000016/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1364, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000016", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2195 + } + } + ], + "label": "Page 11", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=11" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=11", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000016.gif", + "format": "image/jpeg", + "height": 150, + "width": 241 + }, + "width": 2195 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000017", + "@type": "sc:Canvas", + "height": 1351, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-12/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000017", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000017/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1351, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000017", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 1861 + } + } + ], + "label": "Page 12", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=12" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=12", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000017.gif", + "format": "image/jpeg", + "height": 150, + "width": 207 + }, + "width": 1861 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000018", + "@type": "sc:Canvas", + "height": 1343, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-13/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000018", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000018/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1343, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000018", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 1854 + } + } + ], + "label": "Page 13", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=13" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=13", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000018.gif", + "format": "image/jpeg", + "height": 150, + "width": 207 + }, + "width": 1854 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000019", + "@type": "sc:Canvas", + "height": 1376, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-14/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000019", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000019/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1376, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000019", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 1855 + } + } + ], + "label": "Page 14", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=14" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=14", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000019.gif", + "format": "image/jpeg", + "height": 150, + "width": 202 + }, + "width": 1855 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000020", + "@type": "sc:Canvas", + "height": 1360, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-15/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000020", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000020/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1360, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000020", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 1856 + } + } + ], + "label": "Page 15", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=15" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=15", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000020.gif", + "format": "image/jpeg", + "height": 150, + "width": 205 + }, + "width": 1856 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000021", + "@type": "sc:Canvas", + "height": 1646, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-16/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000021", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000021/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1646, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000021", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2251 + } + } + ], + "label": "Page 16", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=16" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=16", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000021.gif", + "format": "image/jpeg", + "height": 150, + "width": 205 + }, + "width": 2251 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000022", + "@type": "sc:Canvas", + "height": 1640, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-17/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000022", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000022/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1640, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000022", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2243 + } + } + ], + "label": "Page 17", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=17" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=17", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000022.gif", + "format": "image/jpeg", + "height": 150, + "width": 205 + }, + "width": 2243 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000023", + "@type": "sc:Canvas", + "height": 1642, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-18/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000023", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000023/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1642, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000023", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2245 + } + } + ], + "label": "Page 18", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=18" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=18", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000023.gif", + "format": "image/jpeg", + "height": 150, + "width": 205 + }, + "width": 2245 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000024", + "@type": "sc:Canvas", + "height": 1620, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-19/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000024", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000024/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1620, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000024", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2237 + } + } + ], + "label": "Page 19", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=19" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=19", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000024.gif", + "format": "image/jpeg", + "height": 150, + "width": 207 + }, + "width": 2237 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000025", + "@type": "sc:Canvas", + "height": 1631, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-20/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000025", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000025/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1631, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000025", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2229 + } + } + ], + "label": "Page 20", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=20" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=20", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000025.gif", + "format": "image/jpeg", + "height": 150, + "width": 205 + }, + "width": 2229 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000026", + "@type": "sc:Canvas", + "height": 1623, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-21/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000026", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000026/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1623, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000026", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2214 + } + } + ], + "label": "Page 21", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=21" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=21", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000026.gif", + "format": "image/jpeg", + "height": 150, + "width": 205 + }, + "width": 2214 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000027", + "@type": "sc:Canvas", + "height": 1629, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-22/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000027", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000027/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1629, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000027", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2230 + } + } + ], + "label": "Page 22", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=22" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=22", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000027.gif", + "format": "image/jpeg", + "height": 150, + "width": 205 + }, + "width": 2230 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000028", + "@type": "sc:Canvas", + "height": 1642, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-23/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000028", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000028/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1642, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000028", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2236 + } + } + ], + "label": "Page 23", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=23" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=23", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000028.gif", + "format": "image/jpeg", + "height": 150, + "width": 204 + }, + "width": 2236 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000029", + "@type": "sc:Canvas", + "height": 1636, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-24/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000029", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000029/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1636, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000029", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2241 + } + } + ], + "label": "Page 24", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=24" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=24", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000029.gif", + "format": "image/jpeg", + "height": 150, + "width": 205 + }, + "width": 2241 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000030", + "@type": "sc:Canvas", + "height": 1633, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-25/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000030", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000030/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1633, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000030", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2237 + } + } + ], + "label": "Page 25", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=25" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=25", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000030.gif", + "format": "image/jpeg", + "height": 150, + "width": 205 + }, + "width": 2237 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000031", + "@type": "sc:Canvas", + "height": 1634, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-26/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000031", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000031/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1634, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000031", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2238 + } + } + ], + "label": "Page 26", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=26" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=26", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000031.gif", + "format": "image/jpeg", + "height": 150, + "width": 205 + }, + "width": 2238 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000032", + "@type": "sc:Canvas", + "height": 1628, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-27/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000032", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000032/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1628, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000032", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2232 + } + } + ], + "label": "Page 27", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=27" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=27", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000032.gif", + "format": "image/jpeg", + "height": 150, + "width": 206 + }, + "width": 2232 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000033", + "@type": "sc:Canvas", + "height": 1620, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-28/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000033", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000033/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1620, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000033", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2224 + } + } + ], + "label": "Page 28", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=28" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=28", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000033.gif", + "format": "image/jpeg", + "height": 150, + "width": 206 + }, + "width": 2224 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000034", + "@type": "sc:Canvas", + "height": 1626, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-29/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000034", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000034/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1626, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000034", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2239 + } + } + ], + "label": "Page 29", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=29" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=29", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000034.gif", + "format": "image/jpeg", + "height": 150, + "width": 207 + }, + "width": 2239 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000035", + "@type": "sc:Canvas", + "height": 1628, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-30/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000035", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000035/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1628, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000035", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2231 + } + } + ], + "label": "Page 30", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=30" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=30", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000035.gif", + "format": "image/jpeg", + "height": 150, + "width": 205 + }, + "width": 2231 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000036", + "@type": "sc:Canvas", + "height": 1631, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-31/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000036", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000036/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1631, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000036", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2238 + } + } + ], + "label": "Page 31", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=31" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=31", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000036.gif", + "format": "image/jpeg", + "height": 150, + "width": 206 + }, + "width": 2238 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000037", + "@type": "sc:Canvas", + "height": 1637, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-32/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000037", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000037/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1637, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000037", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2231 + } + } + ], + "label": "Page 32", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=32" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=32", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000037.gif", + "format": "image/jpeg", + "height": 150, + "width": 204 + }, + "width": 2231 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000038", + "@type": "sc:Canvas", + "height": 1620, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-33/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000038", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000038/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1620, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000038", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2230 + } + } + ], + "label": "Page 33", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=33" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=33", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000038.gif", + "format": "image/jpeg", + "height": 150, + "width": 206 + }, + "width": 2230 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000039", + "@type": "sc:Canvas", + "height": 1613, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-34/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000039", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000039/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1613, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000039", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2217 + } + } + ], + "label": "Page 34", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=34" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=34", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000039.gif", + "format": "image/jpeg", + "height": 150, + "width": 206 + }, + "width": 2217 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000040", + "@type": "sc:Canvas", + "height": 1627, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-35/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000040", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000040/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1627, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000040", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2231 + } + } + ], + "label": "Page 35", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=35" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=35", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000040.gif", + "format": "image/jpeg", + "height": 150, + "width": 206 + }, + "width": 2231 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000041", + "@type": "sc:Canvas", + "height": 1618, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-36/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000041", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000041/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1618, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000041", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2616 + } + } + ], + "label": "Page 36", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=36" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=36", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000041.gif", + "format": "image/jpeg", + "height": 150, + "width": 243 + }, + "width": 2616 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000042", + "@type": "sc:Canvas", + "height": 1615, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-37/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000042", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000042/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1615, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000042", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2664 + } + } + ], + "label": "Page 37", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=37" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=37", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000042.gif", + "format": "image/jpeg", + "height": 150, + "width": 247 + }, + "width": 2664 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000043", + "@type": "sc:Canvas", + "height": 1463, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-38/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000043", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000043/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1463, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000043", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 1742 + } + } + ], + "label": "Page 38", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=38" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=38", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000043.gif", + "format": "image/jpeg", + "height": 150, + "width": 179 + }, + "width": 1742 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000044", + "@type": "sc:Canvas", + "height": 1649, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-39/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000044", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000044/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1649, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000044", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2744 + } + } + ], + "label": "Page 39", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=39" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=39", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000044.gif", + "format": "image/jpeg", + "height": 150, + "width": 250 + }, + "width": 2744 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000045", + "@type": "sc:Canvas", + "height": 1646, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-40/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000045", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000045/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1646, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000045", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2759 + } + } + ], + "label": "Page 40", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=40" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=40", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000045.gif", + "format": "image/jpeg", + "height": 150, + "width": 251 + }, + "width": 2759 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000046", + "@type": "sc:Canvas", + "height": 1621, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-41/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000046", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000046/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1621, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000046", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2222 + } + } + ], + "label": "Page 41", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=41" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=41", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000046.gif", + "format": "image/jpeg", + "height": 150, + "width": 206 + }, + "width": 2222 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000047", + "@type": "sc:Canvas", + "height": 1628, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-42/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000047", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000047/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1628, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000047", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2237 + } + } + ], + "label": "Page 42", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=42" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=42", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000047.gif", + "format": "image/jpeg", + "height": 150, + "width": 206 + }, + "width": 2237 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000048", + "@type": "sc:Canvas", + "height": 1630, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-43/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000048", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000048/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1630, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000048", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2239 + } + } + ], + "label": "Page 43", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=43" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=43", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000048.gif", + "format": "image/jpeg", + "height": 150, + "width": 206 + }, + "width": 2239 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000049", + "@type": "sc:Canvas", + "height": 1617, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-44/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000049", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000049/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1617, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000049", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2230 + } + } + ], + "label": "Page 44", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=44" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=44", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000049.gif", + "format": "image/jpeg", + "height": 150, + "width": 207 + }, + "width": 2230 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000050", + "@type": "sc:Canvas", + "height": 1622, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-45/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000050", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000050/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1622, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000050", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2231 + } + } + ], + "label": "Page 45", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=45" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=45", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000050.gif", + "format": "image/jpeg", + "height": 150, + "width": 206 + }, + "width": 2231 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000051", + "@type": "sc:Canvas", + "height": 1618, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-46/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000051", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000051/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1618, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000051", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2239 + } + } + ], + "label": "Page 46", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=46" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=46", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000051.gif", + "format": "image/jpeg", + "height": 150, + "width": 208 + }, + "width": 2239 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000052", + "@type": "sc:Canvas", + "height": 1635, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-47/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000052", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000052/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1635, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000052", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2228 + } + } + ], + "label": "Page 47", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=47" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=47", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000052.gif", + "format": "image/jpeg", + "height": 150, + "width": 204 + }, + "width": 2228 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000053", + "@type": "sc:Canvas", + "height": 1624, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-48/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000053", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000053/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1624, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000053", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2218 + } + } + ], + "label": "Page 48", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=48" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=48", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000053.gif", + "format": "image/jpeg", + "height": 150, + "width": 205 + }, + "width": 2218 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000054", + "@type": "sc:Canvas", + "height": 1636, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-49/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000054", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000054/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1636, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000054", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2233 + } + } + ], + "label": "Page 49", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=49" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=49", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000054.gif", + "format": "image/jpeg", + "height": 150, + "width": 205 + }, + "width": 2233 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000055", + "@type": "sc:Canvas", + "height": 1624, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-50/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000055", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000055/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1624, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000055", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2231 + } + } + ], + "label": "Page 50", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=50" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=50", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000055.gif", + "format": "image/jpeg", + "height": 150, + "width": 206 + }, + "width": 2231 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000056", + "@type": "sc:Canvas", + "height": 1620, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-51/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000056", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000056/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1620, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000056", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2233 + } + } + ], + "label": "Page 51", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=51" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=51", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000056.gif", + "format": "image/jpeg", + "height": 150, + "width": 207 + }, + "width": 2233 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000057", + "@type": "sc:Canvas", + "height": 1630, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-52/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000057", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000057/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1630, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000057", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2228 + } + } + ], + "label": "Page 52", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=52" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=52", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000057.gif", + "format": "image/jpeg", + "height": 150, + "width": 205 + }, + "width": 2228 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000058", + "@type": "sc:Canvas", + "height": 1630, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-53/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000058", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000058/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1630, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000058", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2239 + } + } + ], + "label": "Page 53", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=53" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=53", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000058.gif", + "format": "image/jpeg", + "height": 150, + "width": 206 + }, + "width": 2239 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000059", + "@type": "sc:Canvas", + "height": 1633, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-54/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000059", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000059/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1633, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000059", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2233 + } + } + ], + "label": "Page 54", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=54" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=54", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000059.gif", + "format": "image/jpeg", + "height": 150, + "width": 205 + }, + "width": 2233 + }, + { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000060", + "@type": "sc:Canvas", + "height": 1633, + "images": [ + { + "@id": "https://www.loc.gov/resource/g6000m.gct00040/seq-55/", + "@type": "oa:Annotation", + "motivation": "sc:painting", + "on": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000060", + "resource": { + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000060/full/pct:25/0/default.jpg", + "@type": "dctypes:Image", + "format": "image/jpeg", + "height": 1633, + "service": { + "@context": "http://iiif.io/api/image/2/context.json", + "@id": "https://tile.loc.gov/image-services/iiif/service:gmd:gmd6m:g6000m:g6000m:gct00040:cs000060", + "profile": "http://iiif.io/api/image/2/level2.json" + }, + "width": 2228 + } + } + ], + "label": "Page 55", + "metadata": [ + { + "label": "Library of Congress Resource URL", + "value": "https://www.loc.gov/resource/g6000m.gct00040/?sp=55" + } + ], + "related": "https://www.loc.gov/resource/g6000m.gct00040/?sp=55", + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000060.gif", + "format": "image/jpeg", + "height": 150, + "width": 205 + }, + "width": 2228 + } + ], + "label": "Order of the views" + } + ], + "thumbnail": { + "@id": "https://tile.loc.gov/storage-services/service/gmd/gmd6m/g6000m/g6000m/gct00040/cs000006.gif" + }, + "viewingDirection": "left-to-right", + "viewingHint": "paged" +} diff --git a/src/presentation-2/upgrader.ts b/src/presentation-2/upgrader.ts index 0dcb9c1..80ce2cc 100644 --- a/src/presentation-2/upgrader.ts +++ b/src/presentation-2/upgrader.ts @@ -408,10 +408,26 @@ function descriptiveProperties { + if (typeof t === 'string') { + return { id: t, type: 'Image' }; + } + if (t.type === 'unknown') { + t.type = 'Image'; + } + return t; + }); + } + return thumb; +} + function parseWithin(resource: Presentation2.AbstractResource): undefined | Presentation3.LinkingProperties['partOf'] { if (!resource.within) { return undefined; From 9ff317a77792c2a9c47e0b8e34f9aca895dcaa1e Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Mon, 2 Oct 2023 20:17:30 +0100 Subject: [PATCH 39/44] new types --- package.json | 19 +++++++++++++++++-- yarn.lock | 7 +++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 4e7ec0e..63ebb4d 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,22 @@ "require": "./dist/image-3/cjs/index.js", "import": "./dist/image-3/esm/index.mjs" }, - "./upgrader": "./dist/upgrader/index.umd.js" + "./upgrader": "./dist/upgrader/index.umd.js", + "./dist/presentation-2/index.d.ts": { + "import": "./dist/presentation-2/index.d.ts" + }, + "./dist/index.d.ts": { + "import": "./dist/index.d.ts" + }, + "./dist/upgrader/index.d.ts": { + "import": "./dist/upgrader/index.d.ts" + }, + "./dist/strict/index.d.ts": { + "import": "./dist/strict/index.d.ts" + }, + "./dist/image-3/index.d.ts": { + "import": "./dist/image-3/index.d.ts" + } }, "typesVersions": { "*": { @@ -60,7 +75,7 @@ }, "dependencies": { "@iiif/presentation-2": "^1.0.4", - "@iiif/presentation-3": "^2.0.5", + "@iiif/presentation-3": "^2.1.2", "@iiif/presentation-3-normalized": "^0.9.7", "@types/geojson": "^7946.0.10" }, diff --git a/yarn.lock b/yarn.lock index 2b2897e..11cd0eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -99,6 +99,13 @@ dependencies: "@types/geojson" "^7946.0.10" +"@iiif/presentation-3@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@iiif/presentation-3/-/presentation-3-2.1.2.tgz#c1130bdbbaa15a86614ecfd578a61ee94a54a267" + integrity sha512-2xqqFVcUYm8hQ62Hg66oJux7lAtFBXa6zFwQOmufBF8YEJJ4jIGdtLG72Y5HYNzBLWaS4JdhLfKGybl4QyNkDQ== + dependencies: + "@types/geojson" "^7946.0.10" + "@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": version "0.1.3" resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" From de26091a42cc42bd007f8c3caa9e84addd9836b9 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Mon, 2 Oct 2023 20:30:12 +0100 Subject: [PATCH 40/44] Updated types --- package.json | 3 +++ src/presentation-3/normalize.ts | 6 +++--- .../serialize-presentation-3.ts | 21 +++++++++++++------ src/presentation-3/traverse.ts | 19 ++++++++++------- yarn.lock | 9 +------- 5 files changed, 33 insertions(+), 25 deletions(-) diff --git a/package.json b/package.json index 63ebb4d..f33299d 100644 --- a/package.json +++ b/package.json @@ -73,6 +73,9 @@ "prepublishOnly": "node ./scripts/build.mjs && node scripts/validate.mjs", "test": "vitest" }, + "resolutions": { + "@iiif/presentation-3": "^2.1.2" + }, "dependencies": { "@iiif/presentation-2": "^1.0.4", "@iiif/presentation-3": "^2.1.2", diff --git a/src/presentation-3/normalize.ts b/src/presentation-3/normalize.ts index d5eb6e0..83f1b14 100644 --- a/src/presentation-3/normalize.ts +++ b/src/presentation-3/normalize.ts @@ -403,7 +403,7 @@ function ensureArrayOnAnnotation(annotation: Annotation): Annotation { } function toSpecificResource( - target: string | Reference | SpecificResource, + target: string | Reference | SpecificResource | Partial, { typeHint, partOfTypeHint }: { typeHint?: string; partOfTypeHint?: string } = {} ): SpecificResource { if (typeof target === 'string') { @@ -428,8 +428,8 @@ function toSpecificResource( } let selector: Selector | undefined; - if (target.id.indexOf('#') !== -1) { - const [id, fragment] = target.id.split('#'); + if ((target.id || '').indexOf('#') !== -1) { + const [id, fragment] = (target.id || '').split('#'); target.id = id; if (fragment) { selector = { diff --git a/src/presentation-3/serialize-presentation-3.ts b/src/presentation-3/serialize-presentation-3.ts index d4042f5..fc7582e 100644 --- a/src/presentation-3/serialize-presentation-3.ts +++ b/src/presentation-3/serialize-presentation-3.ts @@ -1,8 +1,14 @@ import { SerializeConfig } from './serialize'; -import { ImageService2, ImageService3, ResourceProvider, TechnicalProperties } from '@iiif/presentation-3'; +import { + ImageService, + ImageService2, + ImageService3, + ResourceProvider, + TechnicalProperties, +} from '@iiif/presentation-3'; import { compressSpecificResource } from '../shared/compress-specific-resource'; import { DescriptiveNormalized, LinkingNormalized } from '@iiif/presentation-3-normalized'; -import { HAS_PART, IS_EXTERNAL, PART_OF, UNSET, UNWRAP } from "./utilities"; +import { HAS_PART, IS_EXTERNAL, PART_OF, UNSET, UNWRAP } from './utilities'; import { isSpecificResource } from '../shared/is-specific-resource'; function technicalProperties(entity: Partial): Array<[keyof TechnicalProperties, any]> { @@ -40,7 +46,7 @@ function filterEmpty(item?: T[] | typeof UNSET): T[] | undefined | typeof UNS return filtered; } -function service2compat(service: ImageService3): ImageService2 | ImageService3 { +function service2compat(service: ImageService3 | ImageService): ImageService2 | ImageService3 { if (service && service.type && service.type === 'ImageService2') { const { id, type, profile: _profile, ..._service } = service as any; @@ -63,7 +69,7 @@ function service2compat(service: ImageService3): ImageService2 | ImageService3 { } as any; } - return service; + return service as ImageService3; } function filterService2Compat(services?: any[]) { @@ -86,7 +92,7 @@ function* descriptiveProperties( ['metadata', filterEmpty(entity.metadata)], ['summary', entity.summary], ['requiredStatement', entity.requiredStatement], - ['rights', Array.isArray(entity.rights) ? (entity.rights[0] || undefined) : (entity.rights || undefined)], + ['rights', Array.isArray(entity.rights) ? entity.rights[0] || undefined : entity.rights || undefined], ['navDate', entity.navDate], ['language', entity.language], // We yield these fully as they are embedded in here. @@ -202,7 +208,10 @@ export const serializeConfigPresentation3: SerializeConfig = { } if (key === 'target') { - return [key, compressSpecificResource(item, { allowString: true, allowSourceString: true, allowedStringType: 'Canvas' })]; + return [ + key, + compressSpecificResource(item, { allowString: true, allowSourceString: true, allowedStringType: 'Canvas' }), + ]; } return [key, Array.isArray(item) ? filterEmpty(item as any) : item]; diff --git a/src/presentation-3/traverse.ts b/src/presentation-3/traverse.ts index b6716c7..1b584d1 100644 --- a/src/presentation-3/traverse.ts +++ b/src/presentation-3/traverse.ts @@ -17,6 +17,7 @@ import { Service, SpecificResource, ResourceProvider, + StructuralProperties, } from '@iiif/presentation-3'; import { isSpecificResource } from '../shared/is-specific-resource'; import { ensureArray } from '../shared/ensure-array'; @@ -134,7 +135,7 @@ export class Traverse { }); } - traverseDescriptive>(resource: T) { + traverseDescriptive>(resource: T): T { if (resource.thumbnail) { resource.thumbnail = resource.thumbnail.map((thumbnail) => this.traverseType(thumbnail, { parent: resource }, this.traversals.contentResource) @@ -146,7 +147,7 @@ export class Traverse { return resource; } - traverseLinking>(resource: T) { + traverseLinking>(resource: T): T { if (resource.seeAlso) { resource.seeAlso = resource.seeAlso.map((content) => this.traverseType(content, { parent: resource }, this.traversals.contentResource) @@ -194,7 +195,8 @@ export class Traverse { if (isSpecificResource(resource.start)) { resource.start = this.traverseSpecificResource(resource.start, 'Canvas', resource) as any; } else { - resource.start = this.traverseType(resource.start, { parent: resource }, this.traversals.canvas); + // The spec says this can be a "partial canvas" causing errors with the types. + resource.start = this.traverseType(resource.start as any, { parent: resource }, this.traversals.canvas); } } if (resource.rendering) { @@ -211,7 +213,7 @@ export class Traverse { return resource; } - traverseCollectionItems(collection: Collection): Collection { + traverseCollectionItems>(collection: T): T { if (collection.items) { collection.items.map((collectionOrManifest: Manifest | Collection) => { if (collectionOrManifest.type === 'Collection') { @@ -228,7 +230,7 @@ export class Traverse { return this.traverseType( this.traverseDescriptive( this.traverseInlineAnnotationPages( - this.traverseLinking(this.traverseLinkedCanvases(this.traverseCollectionItems(collection))) + this.traverseLinking(this.traverseLinkedCanvases(this.traverseCollectionItems(collection as any))) ) ), { parent }, @@ -344,7 +346,7 @@ export class Traverse { return annotation; } - traverseLinkedCanvases(json: T): T { + traverseLinkedCanvases(json: T): T { if (json.placeholderCanvas) { json.placeholderCanvas = this.traverseCanvas(json.placeholderCanvas); } @@ -429,8 +431,9 @@ export class Traverse { if (isSpecificResource(rangeOrManifest)) { return this.traverseSpecificResource(rangeOrManifest, 'Canvas', range); } - if (rangeOrManifest.type === 'Manifest') { - return this.traverseManifest(rangeOrManifest as Manifest, range); + // This is a non-standard case. + if ((rangeOrManifest as any).type === 'Manifest') { + return this.traverseManifest(rangeOrManifest as any, range) as any as RangeItems; } return this.traverseRange(rangeOrManifest as Range, range); }); diff --git a/yarn.lock b/yarn.lock index 11cd0eb..0cbd29e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -92,14 +92,7 @@ dependencies: "@iiif/presentation-3" "^2.0.5" -"@iiif/presentation-3@^2.0.5": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@iiif/presentation-3/-/presentation-3-2.0.5.tgz#04c0c980ba586881984ed9433375d207f9af52ad" - integrity sha512-Iy5erfTKs1zOjwq8WiTmOeP5ZmrBFVVzBXMbKIIdv38ci1loeAR9fboncncPW7ZPqXUqeCMkjFGnP/HL22TggA== - dependencies: - "@types/geojson" "^7946.0.10" - -"@iiif/presentation-3@^2.1.2": +"@iiif/presentation-3@^2.0.5", "@iiif/presentation-3@^2.1.2": version "2.1.2" resolved "https://registry.yarnpkg.com/@iiif/presentation-3/-/presentation-3-2.1.2.tgz#c1130bdbbaa15a86614ecfd578a61ee94a54a267" integrity sha512-2xqqFVcUYm8hQ62Hg66oJux7lAtFBXa6zFwQOmufBF8YEJJ4jIGdtLG72Y5HYNzBLWaS4JdhLfKGybl4QyNkDQ== From d346429031afbe5eddab1158363217fd11b62a90 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Mon, 2 Oct 2023 20:35:34 +0100 Subject: [PATCH 41/44] loosened types --- src/presentation-3/serialize.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/presentation-3/serialize.ts b/src/presentation-3/serialize.ts index 013e795..94a3947 100644 --- a/src/presentation-3/serialize.ts +++ b/src/presentation-3/serialize.ts @@ -42,7 +42,8 @@ export type NormalizedEntity = | RangeNormalized | _ServiceNormalized | Selector - | ResourceProviderNormalized; + | ResourceProviderNormalized + | { id?: string; '@id'?: string; type?: string; '@type'?: string; [key: string]: any }; type SerializerContext = { isTopLevel?: boolean; From 0e8f581762524e8e42a6335e36a43f1bbc28a558 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Mon, 2 Oct 2023 22:32:24 +0100 Subject: [PATCH 42/44] Update types --- package.json | 4 ++-- yarn.lock | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index f33299d..7e5d565 100644 --- a/package.json +++ b/package.json @@ -74,11 +74,11 @@ "test": "vitest" }, "resolutions": { - "@iiif/presentation-3": "^2.1.2" + "@iiif/presentation-3": "^2.1.3" }, "dependencies": { "@iiif/presentation-2": "^1.0.4", - "@iiif/presentation-3": "^2.1.2", + "@iiif/presentation-3": "^2.1.3", "@iiif/presentation-3-normalized": "^0.9.7", "@types/geojson": "^7946.0.10" }, diff --git a/yarn.lock b/yarn.lock index 0cbd29e..b469461 100644 --- a/yarn.lock +++ b/yarn.lock @@ -92,10 +92,10 @@ dependencies: "@iiif/presentation-3" "^2.0.5" -"@iiif/presentation-3@^2.0.5", "@iiif/presentation-3@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@iiif/presentation-3/-/presentation-3-2.1.2.tgz#c1130bdbbaa15a86614ecfd578a61ee94a54a267" - integrity sha512-2xqqFVcUYm8hQ62Hg66oJux7lAtFBXa6zFwQOmufBF8YEJJ4jIGdtLG72Y5HYNzBLWaS4JdhLfKGybl4QyNkDQ== +"@iiif/presentation-3@^2.0.5", "@iiif/presentation-3@^2.1.3": + version "2.1.3" + resolved "https://registry.yarnpkg.com/@iiif/presentation-3/-/presentation-3-2.1.3.tgz#745cf3ec1f8d828b1e3aba88c3f15e6dc8e80710" + integrity sha512-0V9LL+UPGknn4vdEJuJnuK0BsOL93dmr4PrdXg9fSE9HUq/2P0jkp4yGJR13f7N9OpmcRsEQjqWqVceWHB8Bow== dependencies: "@types/geojson" "^7946.0.10" From 70fd36fd69f19b0aca78db0164938b33b6652409 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Thu, 5 Oct 2023 15:09:52 +0100 Subject: [PATCH 43/44] fixed circular reference --- .../store-errors.test.ts | 416 +++++++++ fixtures/stores/wellcome-error.json | 863 ++++++++++++++++++ src/presentation-3/serialize.ts | 12 +- src/presentation-3/utilities.ts | 6 +- 4 files changed, 1291 insertions(+), 6 deletions(-) create mode 100644 __tests__/presentation-3-parser/store-errors.test.ts create mode 100644 fixtures/stores/wellcome-error.json diff --git a/__tests__/presentation-3-parser/store-errors.test.ts b/__tests__/presentation-3-parser/store-errors.test.ts new file mode 100644 index 0000000..969b659 --- /dev/null +++ b/__tests__/presentation-3-parser/store-errors.test.ts @@ -0,0 +1,416 @@ +import { serialize, serializeConfigPresentation3 } from '../../src'; + +describe('store errors', () => { + test('Wellcome store error', async () => { + const store = await import('../../fixtures/stores/wellcome-error.json'); + + const serialized = serialize( + { + mapping: store.iiif.mapping, + entities: store.iiif.entities, + requests: {}, + }, + { + id: 'https://iiif.wellcomecollection.org/presentation/b12024673', + type: 'Manifest', + }, + serializeConfigPresentation3 + ); + + expect(serialized).toMatchInlineSnapshot(` + { + "@context": "http://iiif.io/api/presentation/3/context.json", + "homepage": [ + { + "format": "text/html", + "id": "https://wellcomecollection.org/works/kqy8b2yh", + "label": { + "en": [ + "Saint Pancras smallpox hospital, London. Oil painting after G.S. Shepherd, 1806.", + ], + }, + "language": [ + "en", + ], + "type": "Text", + }, + ], + "id": "https://iiif.wellcomecollection.org/presentation/b12024673", + "items": [ + { + "height": 2522, + "id": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2", + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2/painting", + "items": [ + { + "body": { + "format": "image/jpeg", + "height": 912, + "id": "https://iiif.wellcomecollection.org/image/b12024673_0001.jp2/full/1024,912/0/default.jpg", + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b12024673_0001.jp2", + "@type": "ImageService2", + "height": 2522, + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2833, + }, + ], + "type": "Image", + "width": 1024, + }, + "id": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2/painting/anno", + "motivation": "painting", + "target": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2", + "type": "Annotation", + }, + ], + "type": "AnnotationPage", + }, + ], + "label": { + "none": [ + "-", + ], + }, + "thumbnail": [ + { + "height": 89, + "id": "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2/full/100,89/0/default.jpg", + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2", + "@type": "ImageService2", + "height": 912, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 89, + "width": 100, + }, + { + "height": 178, + "width": 200, + }, + { + "height": 356, + "width": 400, + }, + { + "height": 912, + "width": 1024, + }, + ], + "width": 1024, + }, + ], + "type": "Image", + "width": 100, + }, + ], + "type": "Canvas", + "width": 2833, + }, + ], + "label": { + "en": [ + "Saint Pancras smallpox hospital, London. Oil painting after G.S. Shepherd, 1806.", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Reference", + ], + }, + "value": { + "none": [ + "44655i", + ], + }, + }, + { + "label": { + "en": [ + "Physical description", + ], + }, + "value": { + "en": [ + "1 painting : oil on wood ; wood 35 x 40 cm", + ], + }, + }, + { + "label": { + "en": [ + "Contributors", + ], + }, + "value": { + "none": [ + "Shepherd, George Sidney, 1784-1862.", + ], + }, + }, + { + "label": { + "en": [ + "Creator/production credits", + ], + }, + "value": { + "en": [ + "After an engraving by Woolnoth after a design by G.S. Shepherd", + ], + }, + }, + { + "label": { + "en": [ + "Type/technique", + ], + }, + "value": { + "en": [ + "Oil paintings", + "Paintings", + ], + }, + }, + { + "label": { + "en": [ + "Subjects", + ], + }, + "value": { + "en": [ + "King's Cross (London, England)", + "Hospitals for the Small-pox and Inoculation (London, England)", + ], + }, + }, + { + "label": { + "en": [ + "Reference", + ], + }, + "value": { + "en": [ + "Wellcome Collection 44655i", + ], + }, + }, + { + "label": { + "en": [ + "Attribution and usage", + ], + }, + "value": { + "en": [ + "Wellcome Collection", + "This work has been identified as being free of known restrictions under copyright law, including all related and neighbouring rights and is being made available under the Creative Commons, Public Domain Mark.

You can copy, modify, distribute and perform the work, even for commercial purposes, without asking permission.
", + ], + }, + }, + ], + "partOf": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/collections/contributors/ze6kf2ag", + "label": { + "en": [ + "Contributor: Shepherd, George Sidney, 1784-1862.", + ], + }, + "type": "Collection", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/collections/subjects/fxk455dn", + "label": { + "en": [ + "Subject: King's Cross (London, England)", + ], + }, + "type": "Collection", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/collections/subjects/gjsmun8u", + "label": { + "en": [ + "Subject: Hospitals for the Small-pox and Inoculation (London, England)", + ], + }, + "type": "Collection", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Oil_paintings", + "label": { + "en": [ + "Genre: Oil paintings", + ], + }, + "type": "Collection", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Paintings", + "label": { + "en": [ + "Genre: Paintings", + ], + }, + "type": "Collection", + }, + ], + "provider": [ + { + "homepage": [ + { + "format": "text/html", + "id": "https://wellcomecollection.org", + "label": { + "en": [ + "Wellcome Collection", + ], + }, + "type": "Text", + }, + ], + "id": "https://wellcomecollection.org", + "label": { + "en": [ + "Wellcome Collection", + "183 Euston Road", + "London NW1 2BE UK", + "T +44 (0)20 7611 8722", + "E library@wellcomecollection.org", + "https://wellcomecollection.org", + ], + }, + "logo": [ + { + "format": "image/png", + "id": "https://iiif.wellcomecollection.org/logos/wellcome-collection-black.png", + "type": "Image", + }, + ], + "type": "Agent", + }, + ], + "rendering": [ + { + "format": "application/pdf", + "id": "https://iiif.wellcomecollection.org/pdf/b12024673", + "label": { + "en": [ + "View as PDF", + ], + }, + "type": "Text", + }, + ], + "rights": "http://creativecommons.org/publicdomain/mark/1.0/", + "seeAlso": [ + { + "format": "application/json", + "id": "https://api.wellcomecollection.org/catalogue/v2/works/kqy8b2yh", + "label": { + "en": [ + "Wellcome Collection Catalogue API", + ], + }, + "profile": "https://api.wellcomecollection.org/catalogue/v2/context.json", + "type": "Dataset", + }, + ], + "services": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b12024673#tracking", + "label": { + "en": [ + "Format: Artwork, Institution: n/a, Identifier: b12024673, Digicode: digpaintings, Collection code: 44655i", + ], + }, + "profile": "http://universalviewer.io/tracking-extensions-profile", + "type": "Text", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b12024673#timestamp", + "label": { + "none": [ + "2023-09-28T12:35:10.1608874Z", + ], + }, + "profile": "https://github.com/wellcomecollection/iiif-builder/build-timestamp", + "type": "Text", + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b12024673#accesscontrolhints", + "label": { + "en": [ + "open", + ], + }, + "metadata": [ + { + "label": { + "en": [ + "Open", + ], + }, + "value": { + "none": [ + "1", + ], + }, + }, + ], + "profile": "http://wellcomelibrary.org/ld/iiif-ext/access-control-hints", + "type": "Text", + }, + ], + "thumbnail": [ + { + "height": 89, + "id": "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2/full/100,89/0/default.jpg", + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2", + "@type": "ImageService2", + "height": 912, + "profile": "http://iiif.io/api/image/2/level0.json", + "sizes": [ + { + "height": 89, + "width": 100, + }, + { + "height": 178, + "width": 200, + }, + { + "height": 356, + "width": 400, + }, + { + "height": 912, + "width": 1024, + }, + ], + "width": 1024, + }, + ], + "type": "Image", + "width": 100, + }, + ], + "type": "Manifest", + } + `); + }); +}); diff --git a/fixtures/stores/wellcome-error.json b/fixtures/stores/wellcome-error.json new file mode 100644 index 0000000..4ca68b5 --- /dev/null +++ b/fixtures/stores/wellcome-error.json @@ -0,0 +1,863 @@ +{ + "iiif": { + "mapping": { + "https://iiif.wellcomecollection.org/image/b12024673_0001.jp2/full/1024,912/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2/painting/anno": "Annotation", + "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2/painting": "AnnotationPage", + "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2/full/100,89/0/default.jpg": "ContentResource", + "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2": "Canvas", + "https://api.wellcomecollection.org/catalogue/v2/works/kqy8b2yh": "ContentResource", + "https://wellcomecollection.org/works/kqy8b2yh": "ContentResource", + "https://iiif.wellcomecollection.org/presentation/collections/contributors/ze6kf2ag": "Collection", + "https://iiif.wellcomecollection.org/presentation/collections/subjects/fxk455dn": "Collection", + "https://iiif.wellcomecollection.org/presentation/collections/subjects/gjsmun8u": "Collection", + "https://iiif.wellcomecollection.org/presentation/collections/genres/Oil_paintings": "Collection", + "https://iiif.wellcomecollection.org/presentation/collections/genres/Paintings": "Collection", + "https://iiif.wellcomecollection.org/pdf/b12024673": "ContentResource", + "https://iiif.wellcomecollection.org/logos/wellcome-collection-black.png": "ContentResource", + "https://wellcomecollection.org": "Agent", + "https://iiif.wellcomecollection.org/presentation/b12024673": "Manifest" + }, + "entities": { + "Collection": { + "https://iiif.wellcomecollection.org/presentation/collections/contributors/ze6kf2ag": { + "id": "https://iiif.wellcomecollection.org/presentation/collections/contributors/ze6kf2ag", + "type": "Collection", + "label": { + "en": [ + "Contributor: Shepherd, George Sidney, 1784-1862." + ] + }, + "viewingDirection": "left-to-right", + "behavior": [], + "thumbnail": [], + "accompanyingCanvas": null, + "placeholderCanvas": null, + "summary": null, + "requiredStatement": null, + "metadata": [], + "rights": null, + "navDate": null, + "provider": [], + "items": [], + "annotations": [], + "seeAlso": [], + "homepage": [], + "partOf": [], + "rendering": [], + "service": [], + "services": [], + "iiif-parser:isExternal": true, + "iiif-parser:hasPart": [ + { + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b12024673", + "id": "https://iiif.wellcomecollection.org/presentation/collections/contributors/ze6kf2ag", + "type": "Collection" + } + ] + }, + "https://iiif.wellcomecollection.org/presentation/collections/subjects/fxk455dn": { + "id": "https://iiif.wellcomecollection.org/presentation/collections/subjects/fxk455dn", + "type": "Collection", + "label": { + "en": [ + "Subject: King's Cross (London, England)" + ] + }, + "viewingDirection": "left-to-right", + "behavior": [], + "thumbnail": [], + "accompanyingCanvas": null, + "placeholderCanvas": null, + "summary": null, + "requiredStatement": null, + "metadata": [], + "rights": null, + "navDate": null, + "provider": [], + "items": [], + "annotations": [], + "seeAlso": [], + "homepage": [], + "partOf": [], + "rendering": [], + "service": [], + "services": [], + "iiif-parser:isExternal": true, + "iiif-parser:hasPart": [ + { + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b12024673", + "id": "https://iiif.wellcomecollection.org/presentation/collections/subjects/fxk455dn", + "type": "Collection" + } + ] + }, + "https://iiif.wellcomecollection.org/presentation/collections/subjects/gjsmun8u": { + "id": "https://iiif.wellcomecollection.org/presentation/collections/subjects/gjsmun8u", + "type": "Collection", + "label": { + "en": [ + "Subject: Hospitals for the Small-pox and Inoculation (London, England)" + ] + }, + "viewingDirection": "left-to-right", + "behavior": [], + "thumbnail": [], + "accompanyingCanvas": null, + "placeholderCanvas": null, + "summary": null, + "requiredStatement": null, + "metadata": [], + "rights": null, + "navDate": null, + "provider": [], + "items": [], + "annotations": [], + "seeAlso": [], + "homepage": [], + "partOf": [], + "rendering": [], + "service": [], + "services": [], + "iiif-parser:isExternal": true, + "iiif-parser:hasPart": [ + { + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b12024673", + "id": "https://iiif.wellcomecollection.org/presentation/collections/subjects/gjsmun8u", + "type": "Collection" + } + ] + }, + "https://iiif.wellcomecollection.org/presentation/collections/genres/Oil_paintings": { + "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Oil_paintings", + "type": "Collection", + "label": { + "en": [ + "Genre: Oil paintings" + ] + }, + "viewingDirection": "left-to-right", + "behavior": [], + "thumbnail": [], + "accompanyingCanvas": null, + "placeholderCanvas": null, + "summary": null, + "requiredStatement": null, + "metadata": [], + "rights": null, + "navDate": null, + "provider": [], + "items": [], + "annotations": [], + "seeAlso": [], + "homepage": [], + "partOf": [], + "rendering": [], + "service": [], + "services": [], + "iiif-parser:isExternal": true, + "iiif-parser:hasPart": [ + { + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b12024673", + "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Oil_paintings", + "type": "Collection" + } + ] + }, + "https://iiif.wellcomecollection.org/presentation/collections/genres/Paintings": { + "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Paintings", + "type": "Collection", + "label": { + "en": [ + "Genre: Paintings" + ] + }, + "viewingDirection": "left-to-right", + "behavior": [], + "thumbnail": [], + "accompanyingCanvas": null, + "placeholderCanvas": null, + "summary": null, + "requiredStatement": null, + "metadata": [], + "rights": null, + "navDate": null, + "provider": [], + "items": [], + "annotations": [], + "seeAlso": [], + "homepage": [], + "partOf": [], + "rendering": [], + "service": [], + "services": [], + "iiif-parser:isExternal": true, + "iiif-parser:hasPart": [ + { + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b12024673", + "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Paintings", + "type": "Collection" + } + ] + } + }, + "Manifest": { + "https://iiif.wellcomecollection.org/presentation/b12024673": { + "id": "https://iiif.wellcomecollection.org/presentation/b12024673", + "type": "Manifest", + "annotations": [], + "behavior": [], + "homepage": [ + { + "id": "https://wellcomecollection.org/works/kqy8b2yh", + "type": "ContentResource" + } + ], + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2", + "type": "Canvas" + } + ], + "label": { + "en": [ + "Saint Pancras smallpox hospital, London. Oil painting after G.S. Shepherd, 1806." + ] + }, + "metadata": [ + { + "label": { + "en": [ + "Reference" + ] + }, + "value": { + "none": [ + "44655i" + ] + } + }, + { + "label": { + "en": [ + "Physical description" + ] + }, + "value": { + "en": [ + "1 painting : oil on wood ; wood 35 x 40 cm" + ] + } + }, + { + "label": { + "en": [ + "Contributors" + ] + }, + "value": { + "none": [ + "Shepherd, George Sidney, 1784-1862." + ] + } + }, + { + "label": { + "en": [ + "Creator/production credits" + ] + }, + "value": { + "en": [ + "After an engraving by Woolnoth after a design by G.S. Shepherd" + ] + } + }, + { + "label": { + "en": [ + "Type/technique" + ] + }, + "value": { + "en": [ + "Oil paintings", + "Paintings" + ] + } + }, + { + "label": { + "en": [ + "Subjects" + ] + }, + "value": { + "en": [ + "King's Cross (London, England)", + "Hospitals for the Small-pox and Inoculation (London, England)" + ] + } + }, + { + "label": { + "en": [ + "Reference" + ] + }, + "value": { + "en": [ + "Wellcome Collection 44655i" + ] + } + }, + { + "label": { + "en": [ + "Attribution and usage" + ] + }, + "value": { + "en": [ + "Wellcome Collection", + "This work has been identified as being free of known restrictions under copyright law, including all related and neighbouring rights and is being made available under the Creative Commons, Public Domain Mark.

You can copy, modify, distribute and perform the work, even for commercial purposes, without asking permission.
" + ] + } + } + ], + "navDate": null, + "provider": [ + { + "id": "https://wellcomecollection.org", + "type": "Agent" + } + ], + "partOf": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/collections/contributors/ze6kf2ag", + "type": "Collection" + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/collections/subjects/fxk455dn", + "type": "Collection" + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/collections/subjects/gjsmun8u", + "type": "Collection" + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Oil_paintings", + "type": "Collection" + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Paintings", + "type": "Collection" + } + ], + "accompanyingCanvas": null, + "placeholderCanvas": null, + "rendering": [ + { + "id": "https://iiif.wellcomecollection.org/pdf/b12024673", + "type": "ContentResource" + } + ], + "requiredStatement": null, + "rights": "http://creativecommons.org/publicdomain/mark/1.0/", + "seeAlso": [ + { + "id": "https://api.wellcomecollection.org/catalogue/v2/works/kqy8b2yh", + "type": "ContentResource" + } + ], + "service": [], + "services": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b12024673#tracking", + "type": "Text", + "profile": "http://universalviewer.io/tracking-extensions-profile", + "label": { + "en": [ + "Format: Artwork, Institution: n/a, Identifier: b12024673, Digicode: digpaintings, Collection code: 44655i" + ] + } + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b12024673#timestamp", + "type": "Text", + "profile": "https://github.com/wellcomecollection/iiif-builder/build-timestamp", + "label": { + "none": [ + "2023-09-28T12:35:10.1608874Z" + ] + } + }, + { + "id": "https://iiif.wellcomecollection.org/presentation/b12024673#accesscontrolhints", + "type": "Text", + "profile": "http://wellcomelibrary.org/ld/iiif-ext/access-control-hints", + "label": { + "en": [ + "open" + ] + }, + "metadata": [ + { + "label": { + "en": [ + "Open" + ] + }, + "value": { + "none": [ + "1" + ] + } + } + ] + } + ], + "start": null, + "structures": [], + "summary": null, + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2/full/100,89/0/default.jpg", + "type": "ContentResource" + } + ], + "viewingDirection": "left-to-right", + "@context": "http://iiif.io/api/presentation/3/context.json", + "_cached": true, + "iiif-parser:hasPart": [ + { + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b12024673", + "id": "https://iiif.wellcomecollection.org/presentation/b12024673", + "type": "Manifest" + } + ] + } + }, + "Canvas": { + "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2": { + "id": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2", + "type": "Canvas", + "label": { + "none": [ + "-" + ] + }, + "behavior": [], + "thumbnail": [ + { + "id": "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2/full/100,89/0/default.jpg", + "type": "ContentResource" + } + ], + "accompanyingCanvas": null, + "placeholderCanvas": null, + "summary": null, + "requiredStatement": null, + "metadata": [], + "rights": null, + "navDate": null, + "provider": [], + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2/painting", + "type": "AnnotationPage" + } + ], + "annotations": [], + "seeAlso": [], + "homepage": [], + "partOf": [], + "rendering": [], + "service": [], + "duration": 0, + "height": 2522, + "width": 2833 + } + }, + "AnnotationPage": { + "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2/painting": { + "id": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2/painting", + "type": "AnnotationPage", + "behavior": [], + "label": null, + "thumbnail": [], + "summary": null, + "requiredStatement": null, + "metadata": [], + "rights": null, + "provider": [], + "items": [ + { + "id": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2/painting/anno", + "type": "Annotation" + } + ], + "seeAlso": [], + "homepage": [], + "rendering": [], + "service": [], + "iiif-parser:hasPart": [ + { + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2", + "id": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2/painting", + "type": "AnnotationPage" + } + ] + } + }, + "AnnotationCollection": {}, + "Annotation": { + "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2/painting/anno": { + "id": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2/painting/anno", + "type": "Annotation", + "motivation": [ + "painting" + ], + "body": [ + { + "id": "https://iiif.wellcomecollection.org/image/b12024673_0001.jp2/full/1024,912/0/default.jpg", + "type": "ContentResource" + } + ], + "target": { + "type": "SpecificResource", + "source": { + "id": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2", + "type": "Canvas" + } + }, + "iiif-parser:hasPart": [ + { + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2/painting", + "id": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2/painting/anno", + "type": "Annotation" + } + ] + } + }, + "ContentResource": { + "https://iiif.wellcomecollection.org/image/b12024673_0001.jp2/full/1024,912/0/default.jpg": { + "id": "https://iiif.wellcomecollection.org/image/b12024673_0001.jp2/full/1024,912/0/default.jpg", + "type": "Image", + "width": 1024, + "height": 912, + "format": "image/jpeg", + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/image/b12024673_0001.jp2", + "@type": "ImageService2", + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2833, + "height": 2522 + } + ], + "iiif-parser:hasPart": [ + { + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2/painting/anno", + "id": "https://iiif.wellcomecollection.org/image/b12024673_0001.jp2/full/1024,912/0/default.jpg", + "type": "Image" + } + ] + }, + "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2/full/100,89/0/default.jpg": { + "id": "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2/full/100,89/0/default.jpg", + "type": "Image", + "width": 100, + "height": 89, + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2", + "@type": "ImageService2", + "profile": "http://iiif.io/api/image/2/level0.json", + "width": 1024, + "height": 912, + "sizes": [ + { + "width": 100, + "height": 89 + }, + { + "width": 200, + "height": 178 + }, + { + "width": 400, + "height": 356 + }, + { + "width": 1024, + "height": 912 + } + ] + } + ], + "iiif-parser:hasPart": [ + { + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2", + "id": "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2/full/100,89/0/default.jpg", + "type": "Image", + "@explicit": true, + "width": {}, + "height": {}, + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2", + "@type": "ImageService2", + "profile": "http://iiif.io/api/image/2/level0.json", + "width": 1024, + "height": 912, + "sizes": [ + { + "width": 100, + "height": 89 + }, + { + "width": 200, + "height": 178 + }, + { + "width": 400, + "height": 356 + }, + { + "width": 1024, + "height": 912 + } + ] + } + ] + }, + { + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b12024673", + "@explicit": true, + "width": {}, + "height": {}, + "service": [ + { + "@id": "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2", + "@type": "ImageService2", + "profile": "http://iiif.io/api/image/2/level0.json", + "width": 1024, + "height": 912, + "sizes": [ + { + "width": 100, + "height": 89 + }, + { + "width": 200, + "height": 178 + }, + { + "width": 400, + "height": 356 + }, + { + "width": 1024, + "height": 912 + } + ], + "id": "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2", + "type": "ImageService2" + } + ], + "id": "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2/full/100,89/0/default.jpg", + "type": "Image" + } + ] + }, + "https://api.wellcomecollection.org/catalogue/v2/works/kqy8b2yh": { + "id": "https://api.wellcomecollection.org/catalogue/v2/works/kqy8b2yh", + "type": "Dataset", + "profile": "https://api.wellcomecollection.org/catalogue/v2/context.json", + "label": { + "en": [ + "Wellcome Collection Catalogue API" + ] + }, + "format": "application/json", + "iiif-parser:hasPart": [ + { + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b12024673", + "id": "https://api.wellcomecollection.org/catalogue/v2/works/kqy8b2yh", + "type": "Dataset" + } + ] + }, + "https://wellcomecollection.org/works/kqy8b2yh": { + "id": "https://wellcomecollection.org/works/kqy8b2yh", + "type": "Text", + "label": { + "en": [ + "Saint Pancras smallpox hospital, London. Oil painting after G.S. Shepherd, 1806." + ] + }, + "format": "text/html", + "language": [ + "en" + ], + "iiif-parser:hasPart": [ + { + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b12024673", + "id": "https://wellcomecollection.org/works/kqy8b2yh", + "type": "Text" + } + ] + }, + "https://iiif.wellcomecollection.org/pdf/b12024673": { + "id": "https://iiif.wellcomecollection.org/pdf/b12024673", + "type": "Text", + "label": { + "en": [ + "View as PDF" + ] + }, + "format": "application/pdf", + "iiif-parser:hasPart": [ + { + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b12024673", + "id": "https://iiif.wellcomecollection.org/pdf/b12024673", + "type": "Text" + } + ] + }, + "https://iiif.wellcomecollection.org/logos/wellcome-collection-black.png": { + "id": "https://iiif.wellcomecollection.org/logos/wellcome-collection-black.png", + "type": "Image", + "format": "image/png", + "iiif-parser:hasPart": [ + { + "iiif-parser:partOf": "https://wellcomecollection.org", + "id": "https://iiif.wellcomecollection.org/logos/wellcome-collection-black.png", + "type": "Image" + } + ] + }, + "https://wellcomecollection.org": { + "id": "https://wellcomecollection.org", + "type": "Text", + "label": { + "en": [ + "Wellcome Collection" + ] + }, + "format": "text/html", + "iiif-parser:hasPart": [ + { + "iiif-parser:partOf": "https://wellcomecollection.org", + "id": "https://wellcomecollection.org", + "type": "Text" + } + ] + } + }, + "Range": {}, + "Service": { + "https://iiif.wellcomecollection.org/image/b12024673_0001.jp2": { + "id": "https://iiif.wellcomecollection.org/image/b12024673_0001.jp2", + "type": "ImageService2", + "@id": "https://iiif.wellcomecollection.org/image/b12024673_0001.jp2", + "@type": "ImageService2", + "profile": "http://iiif.io/api/image/2/level1.json", + "width": 2833, + "height": 2522 + }, + "https://iiif.wellcomecollection.org/presentation/b12024673#tracking": { + "id": "https://iiif.wellcomecollection.org/presentation/b12024673#tracking", + "type": "Text", + "profile": "http://universalviewer.io/tracking-extensions-profile", + "label": { + "en": [ + "Format: Artwork, Institution: n/a, Identifier: b12024673, Digicode: digpaintings, Collection code: 44655i" + ] + } + }, + "https://iiif.wellcomecollection.org/presentation/b12024673#timestamp": { + "id": "https://iiif.wellcomecollection.org/presentation/b12024673#timestamp", + "type": "Text", + "profile": "https://github.com/wellcomecollection/iiif-builder/build-timestamp", + "label": { + "none": [ + "2023-09-28T12:35:10.1608874Z" + ] + } + }, + "https://iiif.wellcomecollection.org/presentation/b12024673#accesscontrolhints": { + "id": "https://iiif.wellcomecollection.org/presentation/b12024673#accesscontrolhints", + "type": "Text", + "profile": "http://wellcomelibrary.org/ld/iiif-ext/access-control-hints", + "label": { + "en": [ + "open" + ] + }, + "metadata": [ + { + "label": { + "en": [ + "Open" + ] + }, + "value": { + "none": [ + "1" + ] + } + } + ] + } + }, + "Selector": {}, + "Agent": { + "https://wellcomecollection.org": { + "id": "https://wellcomecollection.org", + "type": "Agent", + "label": { + "en": [ + "Wellcome Collection", + "183 Euston Road", + "London NW1 2BE UK", + "T +44 (0)20 7611 8722", + "E library@wellcomecollection.org", + "https://wellcomecollection.org" + ] + }, + "logo": [ + { + "id": "https://iiif.wellcomecollection.org/logos/wellcome-collection-black.png", + "type": "ContentResource" + } + ], + "seeAlso": [], + "homepage": [ + { + "id": "https://wellcomecollection.org", + "type": "ContentResource" + } + ], + "iiif-parser:hasPart": [ + { + "iiif-parser:partOf": "https://iiif.wellcomecollection.org/presentation/b12024673", + "id": "https://wellcomecollection.org", + "type": "Agent" + } + ] + } + } + }, + "requests": { + "https://iiif.wellcomecollection.org/presentation/b12024673": { + "requestUri": "https://iiif.wellcomecollection.org/presentation/b12024673", + "loadingState": "RESOURCE_READY", + "uriMismatch": false, + "resourceUri": "https://iiif.wellcomecollection.org/presentation/b12024673" + } + }, + "meta": {} + } +} diff --git a/src/presentation-3/serialize.ts b/src/presentation-3/serialize.ts index 94a3947..87e24a4 100644 --- a/src/presentation-3/serialize.ts +++ b/src/presentation-3/serialize.ts @@ -95,13 +95,15 @@ export function serialize(state: CompatibleStore, subject: Reference, co throw new Error(`Serializer not found for ${subject.type}`); } - function flatten(sub: Reference, parent?: any) { + function flatten(sub: Reference, parent?: any, depth = 0) { const generator = config[sub.type as keyof SerializeConfig]; if (!generator) { return UNSET; } - - const [resource, fullResource] = resolveIfExists(state, sub.id, parent) || (sub.id && sub.type ? sub : null); + if (depth > 20) { + throw new Error('Circular reference: ' + sub.id + ' ' + sub.type); + } + const [resource, fullResource] = resolveIfExists(state, sub.type ? sub : sub.id, parent) || (sub.id && sub.type ? sub : null); if (!resource) { return UNSET; } @@ -119,11 +121,11 @@ export function serialize(state: CompatibleStore, subject: Reference, co if (Array.isArray(requestToHydrate)) { const nextList: any[] = []; for (const req of requestToHydrate) { - nextList.push(flatten(req, sub)); + nextList.push(flatten(req, sub, depth + 1)); } next = nextList; } else { - next = flatten(requestToHydrate, sub); + next = flatten(requestToHydrate, sub, depth + 1); } } current = iterator.next(next); diff --git a/src/presentation-3/utilities.ts b/src/presentation-3/utilities.ts index fc276a7..5bc18f0 100644 --- a/src/presentation-3/utilities.ts +++ b/src/presentation-3/utilities.ts @@ -55,13 +55,17 @@ export function resolveIfExists( const request = state.requests[ref.id]; // Return the resource. - const resourceType = state.mapping[ref.id] || ref.type; + const resourceType = ref.type || state.mapping[ref.id]; if (!resourceType || (request && request.resourceUri && !state.entities[resourceType][request.resourceUri])) { // Continue refetching resource, this is an invalid state. return [undefined, undefined]; } const fullEntity: any = state.entities[resourceType][request ? request.resourceUri : ref.id] as T; + if (ref.type && !fullEntity) { + return resolveIfExists(state, { id: ref.id }, parent); + } + if (fullEntity && fullEntity[HAS_PART]) { const framing = fullEntity[HAS_PART].find((t: any) => { return parent ? t[PART_OF] === parent.id : t[PART_OF] === fullEntity.id; From 5974107ac1cf254846aa9a175989ce61227b89b9 Mon Sep 17 00:00:00 2001 From: Stephen Fraser Date: Fri, 6 Oct 2023 14:18:21 +0100 Subject: [PATCH 44/44] Compat --- .../store-errors.test.ts | 419 ++---------------- fixtures/stores/delft-collection-store.json | 93 ++++ src/presentation-3/traverse.ts | 2 +- 3 files changed, 138 insertions(+), 376 deletions(-) create mode 100644 fixtures/stores/delft-collection-store.json diff --git a/__tests__/presentation-3-parser/store-errors.test.ts b/__tests__/presentation-3-parser/store-errors.test.ts index 969b659..ce3ed6d 100644 --- a/__tests__/presentation-3-parser/store-errors.test.ts +++ b/__tests__/presentation-3-parser/store-errors.test.ts @@ -1,4 +1,5 @@ import { serialize, serializeConfigPresentation3 } from '../../src'; +import { expect } from 'vitest'; describe('store errors', () => { test('Wellcome store error', async () => { @@ -17,399 +18,67 @@ describe('store errors', () => { serializeConfigPresentation3 ); - expect(serialized).toMatchInlineSnapshot(` + expect(serialized).toHaveProperty('type'); + expect(serialized).toHaveProperty('id'); + expect((serialized as any).id).toMatchInlineSnapshot( + '"https://iiif.wellcomecollection.org/presentation/b12024673"' + ); + }); + test('Delft collection store error', async () => { + const store = await import('../../fixtures/stores/delft-collection-store.json'); + + const serialized = serialize( + { + mapping: store.iiif.mapping, + entities: store.iiif.entities, + requests: {}, + }, + { + id: 'https://delft-static-site-generator.netlify.com/collections/lib-tr-universiteitsgeschiedenis', + type: 'Collection', + }, + serializeConfigPresentation3 + ); + + expect(serialized).toHaveProperty('type'); + expect(serialized).toHaveProperty('id'); + expect((serialized as any)).toMatchInlineSnapshot( + + ` { "@context": "http://iiif.io/api/presentation/3/context.json", - "homepage": [ - { - "format": "text/html", - "id": "https://wellcomecollection.org/works/kqy8b2yh", - "label": { - "en": [ - "Saint Pancras smallpox hospital, London. Oil painting after G.S. Shepherd, 1806.", - ], - }, - "language": [ - "en", - ], - "type": "Text", - }, - ], - "id": "https://iiif.wellcomecollection.org/presentation/b12024673", - "items": [ - { - "height": 2522, - "id": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2", - "items": [ - { - "id": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2/painting", - "items": [ - { - "body": { - "format": "image/jpeg", - "height": 912, - "id": "https://iiif.wellcomecollection.org/image/b12024673_0001.jp2/full/1024,912/0/default.jpg", - "service": [ - { - "@id": "https://iiif.wellcomecollection.org/image/b12024673_0001.jp2", - "@type": "ImageService2", - "height": 2522, - "profile": "http://iiif.io/api/image/2/level1.json", - "width": 2833, - }, - ], - "type": "Image", - "width": 1024, - }, - "id": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2/painting/anno", - "motivation": "painting", - "target": "https://iiif.wellcomecollection.org/presentation/b12024673/canvases/b12024673_0001.jp2", - "type": "Annotation", - }, - ], - "type": "AnnotationPage", - }, - ], - "label": { - "none": [ - "-", - ], - }, - "thumbnail": [ - { - "height": 89, - "id": "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2/full/100,89/0/default.jpg", - "service": [ - { - "@id": "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2", - "@type": "ImageService2", - "height": 912, - "profile": "http://iiif.io/api/image/2/level0.json", - "sizes": [ - { - "height": 89, - "width": 100, - }, - { - "height": 178, - "width": 200, - }, - { - "height": 356, - "width": 400, - }, - { - "height": 912, - "width": 1024, - }, - ], - "width": 1024, - }, - ], - "type": "Image", - "width": 100, - }, - ], - "type": "Canvas", - "width": 2833, - }, - ], + "id": "https://delft-static-site-generator.netlify.com/collections/lib-tr-universiteitsgeschiedenis", "label": { "en": [ - "Saint Pancras smallpox hospital, London. Oil painting after G.S. Shepherd, 1806.", + "History of the university", + ], + "nl": [ + "Universiteitsgeschiedenis", ], }, "metadata": [ { "label": { - "en": [ - "Reference", - ], - }, - "value": { - "none": [ - "44655i", - ], - }, - }, - { - "label": { - "en": [ - "Physical description", - ], - }, - "value": { - "en": [ - "1 painting : oil on wood ; wood 35 x 40 cm", - ], - }, - }, - { - "label": { - "en": [ - "Contributors", - ], - }, - "value": { "none": [ - "Shepherd, George Sidney, 1784-1862.", - ], - }, - }, - { - "label": { - "en": [ - "Creator/production credits", - ], - }, - "value": { - "en": [ - "After an engraving by Woolnoth after a design by G.S. Shepherd", - ], - }, - }, - { - "label": { - "en": [ - "Type/technique", - ], - }, - "value": { - "en": [ - "Oil paintings", - "Paintings", - ], - }, - }, - { - "label": { - "en": [ - "Subjects", - ], - }, - "value": { - "en": [ - "King's Cross (London, England)", - "Hospitals for the Small-pox and Inoculation (London, England)", - ], - }, - }, - { - "label": { - "en": [ - "Reference", - ], - }, - "value": { - "en": [ - "Wellcome Collection 44655i", - ], - }, - }, - { - "label": { - "en": [ - "Attribution and usage", + "", ], }, "value": { - "en": [ - "Wellcome Collection", - "This work has been identified as being free of known restrictions under copyright law, including all related and neighbouring rights and is being made available under the Creative Commons, Public Domain Mark.

You can copy, modify, distribute and perform the work, even for commercial purposes, without asking permission.
", - ], - }, - }, - ], - "partOf": [ - { - "id": "https://iiif.wellcomecollection.org/presentation/collections/contributors/ze6kf2ag", - "label": { - "en": [ - "Contributor: Shepherd, George Sidney, 1784-1862.", - ], - }, - "type": "Collection", - }, - { - "id": "https://iiif.wellcomecollection.org/presentation/collections/subjects/fxk455dn", - "label": { - "en": [ - "Subject: King's Cross (London, England)", - ], - }, - "type": "Collection", - }, - { - "id": "https://iiif.wellcomecollection.org/presentation/collections/subjects/gjsmun8u", - "label": { - "en": [ - "Subject: Hospitals for the Small-pox and Inoculation (London, England)", - ], - }, - "type": "Collection", - }, - { - "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Oil_paintings", - "label": { - "en": [ - "Genre: Oil paintings", - ], - }, - "type": "Collection", - }, - { - "id": "https://iiif.wellcomecollection.org/presentation/collections/genres/Paintings", - "label": { - "en": [ - "Genre: Paintings", - ], - }, - "type": "Collection", - }, - ], - "provider": [ - { - "homepage": [ - { - "format": "text/html", - "id": "https://wellcomecollection.org", - "label": { - "en": [ - "Wellcome Collection", - ], - }, - "type": "Text", - }, - ], - "id": "https://wellcomecollection.org", - "label": { - "en": [ - "Wellcome Collection", - "183 Euston Road", - "London NW1 2BE UK", - "T +44 (0)20 7611 8722", - "E library@wellcomecollection.org", - "https://wellcomecollection.org", - ], - }, - "logo": [ - { - "format": "image/png", - "id": "https://iiif.wellcomecollection.org/logos/wellcome-collection-black.png", - "type": "Image", - }, - ], - "type": "Agent", - }, - ], - "rendering": [ - { - "format": "application/pdf", - "id": "https://iiif.wellcomecollection.org/pdf/b12024673", - "label": { - "en": [ - "View as PDF", - ], - }, - "type": "Text", - }, - ], - "rights": "http://creativecommons.org/publicdomain/mark/1.0/", - "seeAlso": [ - { - "format": "application/json", - "id": "https://api.wellcomecollection.org/catalogue/v2/works/kqy8b2yh", - "label": { - "en": [ - "Wellcome Collection Catalogue API", - ], - }, - "profile": "https://api.wellcomecollection.org/catalogue/v2/context.json", - "type": "Dataset", - }, - ], - "services": [ - { - "id": "https://iiif.wellcomecollection.org/presentation/b12024673#tracking", - "label": { - "en": [ - "Format: Artwork, Institution: n/a, Identifier: b12024673, Digicode: digpaintings, Collection code: 44655i", - ], - }, - "profile": "http://universalviewer.io/tracking-extensions-profile", - "type": "Text", - }, - { - "id": "https://iiif.wellcomecollection.org/presentation/b12024673#timestamp", - "label": { "none": [ - "2023-09-28T12:35:10.1608874Z", + "", ], }, - "profile": "https://github.com/wellcomecollection/iiif-builder/build-timestamp", - "type": "Text", - }, - { - "id": "https://iiif.wellcomecollection.org/presentation/b12024673#accesscontrolhints", - "label": { - "en": [ - "open", - ], - }, - "metadata": [ - { - "label": { - "en": [ - "Open", - ], - }, - "value": { - "none": [ - "1", - ], - }, - }, - ], - "profile": "http://wellcomelibrary.org/ld/iiif-ext/access-control-hints", - "type": "Text", - }, - ], - "thumbnail": [ - { - "height": 89, - "id": "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2/full/100,89/0/default.jpg", - "service": [ - { - "@id": "https://iiif.wellcomecollection.org/thumbs/b12024673_0001.jp2", - "@type": "ImageService2", - "height": 912, - "profile": "http://iiif.io/api/image/2/level0.json", - "sizes": [ - { - "height": 89, - "width": 100, - }, - { - "height": 178, - "width": 200, - }, - { - "height": 356, - "width": 400, - }, - { - "height": 912, - "width": 1024, - }, - ], - "width": 1024, - }, - ], - "type": "Image", - "width": 100, }, ], - "type": "Manifest", + "summary": { + "en": [ + "Digitised books about the history of Delft University of Technology, from TU Delft Library's Special Collections", + ], + "nl": [ + "Gedigitaliseerde boeken over de geschiedenis van de TU Delft, afkomstig uit de Bijzondere Collecties van de TU Delft Library", + ], + }, + "type": "Collection", } `); }); diff --git a/fixtures/stores/delft-collection-store.json b/fixtures/stores/delft-collection-store.json new file mode 100644 index 0000000..bdbfef7 --- /dev/null +++ b/fixtures/stores/delft-collection-store.json @@ -0,0 +1,93 @@ +{ + "iiif": { + "mapping": { + "https://delft-static-site-generator.netlify.com/collections/lib-tr-universiteitsgeschiedenis": "Collection" + }, + "entities": { + "Collection": { + "https://delft-static-site-generator.netlify.com/collections/lib-tr-universiteitsgeschiedenis": { + "id": "https://delft-static-site-generator.netlify.com/collections/lib-tr-universiteitsgeschiedenis", + "type": "Collection", + "label": { + "en": [ + "History of the university" + ], + "nl": [ + "Universiteitsgeschiedenis" + ] + }, + "viewingDirection": "left-to-right", + "behavior": [], + "thumbnail": [], + "accompanyingCanvas": null, + "placeholderCanvas": null, + "summary": { + "en": [ + "Digitised books about the history of Delft University of Technology, from TU Delft Library's Special Collections" + ], + "nl": [ + "Gedigitaliseerde boeken over de geschiedenis van de TU Delft, afkomstig uit de Bijzondere Collecties van de TU Delft Library" + ] + }, + "requiredStatement": null, + "metadata": [ + { + "label": { + "none": [ + "" + ] + }, + "value": { + "none": [ + "" + ] + } + } + ], + "rights": null, + "navDate": null, + "provider": [], + "items": [], + "annotations": [], + "seeAlso": [], + "homepage": [], + "partOf": [], + "rendering": [], + "service": [], + "services": [], + "@context": [ + "http://www.w3.org/ns/anno.jsonld", + "http://iiif.io/api/presentation/3/context.json" + ], + "iiif-parser:isExternal": true, + "iiif-parser:hasPart": [ + { + "iiif-parser:partOf": "https://delft-static-site-generator.netlify.com/collections/lib-tr-universiteitsgeschiedenis", + "id": "https://delft-static-site-generator.netlify.com/collections/lib-tr-universiteitsgeschiedenis", + "type": "Collection" + } + ] + } + }, + "Manifest": {}, + "Canvas": {}, + "AnnotationPage": {}, + "AnnotationCollection": {}, + "Annotation": {}, + "ContentResource": {}, + "Range": {}, + "Service": {}, + "Selector": {}, + "Agent": {} + }, + "requests": { + "https://delft-static-site-generator.netlify.com/collections/lib-tr-universiteitsgeschiedenis": { + "requestUri": "https://delft-static-site-generator.netlify.com/collections/lib-tr-universiteitsgeschiedenis", + "loadingState": "RESOURCE_READY", + "uriMismatch": false, + "resourceUri": "https://delft-static-site-generator.netlify.com/collections/lib-tr-universiteitsgeschiedenis" + } + }, + "meta": {} + } +} diff --git a/src/presentation-3/traverse.ts b/src/presentation-3/traverse.ts index 1b584d1..68ae91c 100644 --- a/src/presentation-3/traverse.ts +++ b/src/presentation-3/traverse.ts @@ -137,7 +137,7 @@ export class Traverse { traverseDescriptive>(resource: T): T { if (resource.thumbnail) { - resource.thumbnail = resource.thumbnail.map((thumbnail) => + resource.thumbnail = ensureArray(resource.thumbnail).map((thumbnail) => this.traverseType(thumbnail, { parent: resource }, this.traversals.contentResource) ); }