Skip to content

Commit 3018884

Browse files
committed
New p4 upgrader + validator package paths
1 parent ea7ef67 commit 3018884

File tree

9 files changed

+72
-59
lines changed

9 files changed

+72
-59
lines changed

__tests__/presentation-4-parser/cookbook.tests.ts

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,30 @@
1-
import cookbookIndex from '../../fixtures/cookbook-v4/_index.json';
2-
import { promises as fs } from 'node:fs';
3-
import { join } from 'node:path';
4-
import { cwd } from 'node:process';
5-
import { describe, expect, test } from 'vitest';
6-
import { normalize, serialize, serializeConfigPresentation4, validatePresentation4 } from '../../src/presentation-4';
1+
import { promises as fs } from "node:fs";
2+
import { join } from "node:path";
3+
import { cwd } from "node:process";
4+
import { describe, expect, test } from "vitest";
5+
import cookbookIndex from "../../fixtures/cookbook-v4/_index.json";
6+
import { normalize, serialize, serializeConfigPresentation4 } from "../../src/presentation-4";
7+
import { validatePresentation4 } from "../../src/presentation-4/validator";
78

89
const { readFile } = fs;
910

10-
describe('Presentation 4 cookbook', function () {
11+
describe("Presentation 4 cookbook", () => {
1112
const tests = Object.values(cookbookIndex as Record<string, { id: string; url: string }>).map((item) => [
1213
item.id,
1314
item.url,
1415
]);
1516

16-
test.each(tests)('Testing normalize %p (%p)', async (id: string, url: string) => {
17-
const json = await readFile(join(cwd(), 'fixtures/cookbook-v4', `${id}.json`));
17+
test.each(tests)("Testing normalize %p (%p)", async (id: string, url: string) => {
18+
const json = await readFile(join(cwd(), "fixtures/cookbook-v4", `${id}.json`));
1819
const manifest = JSON.parse(json.toString());
1920
const original = JSON.parse(json.toString());
2021
const normalized = normalize(manifest);
2122

2223
expect(normalized.resource.type).toBe(manifest.type);
2324
expect(normalized.resource.id).toBe(manifest.id);
2425

25-
const report = validatePresentation4(manifest, { mode: 'tolerant' });
26-
const errors = report.issues.filter((issue) => issue.severity === 'error');
26+
const report = validatePresentation4(manifest, { mode: "tolerant" });
27+
const errors = report.issues.filter((issue) => issue.severity === "error");
2728
expect(errors).toEqual([]);
2829

2930
const reserialized = serialize(

__tests__/presentation-4-parser/performance.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { performance } from "node:perf_hooks";
22
import { describe, expect, test } from "vitest";
3-
import { normalize, serialize, serializeConfigPresentation4, validatePresentation4 } from "../../src/presentation-4";
3+
import { normalize, serialize, serializeConfigPresentation4 } from "../../src/presentation-4";
4+
import { validatePresentation4 } from "../../src/presentation-4/validator";
45

56
function createLargeCanvasManifest(canvasCount = 200, annotationsPerCanvas = 4) {
67
return {
Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,31 @@
1-
import { promises } from 'node:fs';
2-
import { cwd } from 'node:process';
3-
import { join } from 'node:path';
4-
import { describe, expect } from 'vitest';
5-
import { normalize, serialize, serializeConfigPresentation4, validatePresentation4 } from '../../src/presentation-4';
1+
import { promises } from "node:fs";
2+
import { join } from "node:path";
3+
import { cwd } from "node:process";
4+
import { describe, expect } from "vitest";
5+
import { normalize, serialize, serializeConfigPresentation4 } from "../../src/presentation-4";
6+
import { validatePresentation4 } from "../../src/presentation-4/validator";
67

78
const { readFile, readdir } = promises;
89

9-
describe('Presentation 4 smoke tests', async () => {
10+
describe("Presentation 4 smoke tests", async () => {
1011
const skipThese = [
1112
// Contains intentionally cyclic references in `partOf` metadata.
12-
'10-directional-light-rotated.json',
13+
"10-directional-light-rotated.json",
1314
];
1415

15-
const files = await readdir(join(cwd(), 'fixtures/presentation-4'));
16-
const tests = files
17-
.filter((item) => item.endsWith('.json') && !skipThese.includes(item))
18-
.map((item) => [item]);
16+
const files = await readdir(join(cwd(), "fixtures/presentation-4"));
17+
const tests = files.filter((item) => item.endsWith(".json") && !skipThese.includes(item)).map((item) => [item]);
1918

20-
test.each(tests)('Smoke test: ./fixtures/presentation-4/%s', (async (id: string) => {
21-
const json = await readFile(join(cwd(), 'fixtures/presentation-4', `${id}`));
19+
test.each(tests)("Smoke test: ./fixtures/presentation-4/%s", (async (id: string) => {
20+
const json = await readFile(join(cwd(), "fixtures/presentation-4", `${id}`));
2221
const jsonString = json.toString();
2322
const manifest = JSON.parse(jsonString);
2423
const result = normalize(manifest);
2524

26-
expect(result.resource.type).toEqual('Manifest');
25+
expect(result.resource.type).toEqual("Manifest");
2726
expect(result.entities.Manifest[result.resource.id]).toBeTruthy();
2827

29-
const report = validatePresentation4(manifest, { mode: 'tolerant' });
28+
const report = validatePresentation4(manifest, { mode: "tolerant" });
3029
expect(Array.isArray(report.issues)).toBe(true);
3130

3231
const reserialized = serialize(
@@ -39,10 +38,10 @@ describe('Presentation 4 smoke tests', async () => {
3938
serializeConfigPresentation4
4039
) as any;
4140

42-
expect(reserialized).toHaveProperty('type');
43-
expect(reserialized).toHaveProperty('id');
41+
expect(reserialized).toHaveProperty("type");
42+
expect(reserialized).toHaveProperty("id");
4443
expect(reserialized.type).toEqual(manifest.type);
4544
expect(reserialized.id).toEqual(manifest.id);
46-
expect(reserialized['@context']).toEqual('http://iiif.io/api/presentation/4/context.json');
45+
expect(reserialized["@context"]).toEqual("http://iiif.io/api/presentation/4/context.json");
4746
}) as any);
4847
});

__tests__/presentation-4-parser/upgrade.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import { readFileSync } from "node:fs";
22
import { join } from "node:path";
33
import { cwd } from "node:process";
44
import { describe, expect, test } from "vitest";
5-
import { upgradePresentation3To4, upgradeToPresentation4, validatePresentation4 } from "../../src/presentation-4";
5+
import { upgradePresentation3To4, upgradeToPresentation4 } from "../../src/presentation-4";
6+
import { validatePresentation4 } from "../../src/presentation-4/validator";
67

78
const PRESENTATION_4_CONTEXT = "http://iiif.io/api/presentation/4/context.json";
89

__tests__/presentation-4-parser/validator.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ import { readFileSync } from "node:fs";
22
import { join } from "node:path";
33
import { cwd } from "node:process";
44
import { describe, expect, test } from "vitest";
5-
import { upgradeToPresentation4, validatePresentation4 } from "../../src/presentation-4";
5+
import { upgradeToPresentation4 } from "../../src/presentation-4";
6+
import { validatePresentation4 } from "../../src/presentation-4/validator";
67

78
describe("presentation-4 validator", () => {
89
test("accepts authored v4 fixtures with object/List annotation target and body", () => {

package.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,16 @@
109109
"default": "./dist/presentation-4/types.js"
110110
}
111111
},
112+
"./presentation-4/upgrader": {
113+
"require": {
114+
"types": "./dist/presentation-4/upgrader.d.cts",
115+
"default": "./dist/presentation-4/upgrader.cjs"
116+
},
117+
"import": {
118+
"types": "./dist/presentation-4/upgrader.d.ts",
119+
"default": "./dist/presentation-4/upgrader.js"
120+
}
121+
},
112122
"./presentation-4-normalized": {
113123
"require": {
114124
"types": "./dist/presentation-4-normalized.d.cts",

src/cli.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import {
1111
serializeConfigPresentation3,
1212
serializeConfigPresentation4,
1313
upgradeToPresentation4,
14-
validatePresentation4,
1514
} from "./presentation-4";
15+
import { validatePresentation4 } from "./presentation-4/validator";
1616

1717
type CliDeps = {
1818
readFileText: (path: string) => Promise<string>;

src/presentation-4/index.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
1+
export * from "../shared/compress-specific-resource";
2+
export * from "../shared/to-ref";
13
export * from "./empty-types";
24
export * from "./normalize";
3-
export * from "./traverse";
45
export * from "./serialize";
5-
export * from "./serialize-presentation-4";
66
export * from "./serialize-presentation-3";
7+
export * from "./serialize-presentation-4";
8+
export * from "./traverse";
9+
export * from "./types";
710
export * from "./upgrade";
8-
export * from "./validator";
911
export * from "./utilities";
10-
export * from "./types";
11-
12-
export * from "../shared/to-ref";
13-
export * from "../shared/compress-specific-resource";

tsdown.config.ts

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,29 @@
1-
import { defineConfig, type Options } from 'tsdown';
1+
import { defineConfig } from "tsdown";
22

33
export default defineConfig({
44
dts: true,
5-
target: ['es2020'],
6-
format: ['esm', 'cjs'],
7-
platform: 'browser',
5+
target: ["es2020"],
6+
format: ["esm", "cjs"],
7+
platform: "browser",
88
entry: {
9-
index: 'src/index.ts',
10-
'image-3': 'src/image-3/index.ts',
11-
'presentation-2': 'src/presentation-2/index.ts',
12-
'presentation-2/types': 'src/presentation-2/types/index.ts',
13-
'presentation-3': 'src/presentation-3/index.ts',
14-
'presentation-3/types': 'src/presentation-3/types/index.ts',
15-
'presentation-3-normalized': 'src/presentation-3-normalized/index.ts',
16-
'presentation-3-normalized/types': 'src/presentation-3-normalized/types/index.ts',
17-
'presentation-4': 'src/presentation-4/index.ts',
18-
'presentation-4/types': 'src/presentation-4/types/index.ts',
19-
'presentation-4-normalized': 'src/presentation-4-normalized/index.ts',
20-
'presentation-4-normalized/types': 'src/presentation-4-normalized/types/index.ts',
21-
upgrader: 'src/upgrader.ts',
22-
strict: 'src/presentation-3/strict-upgrade.ts',
9+
index: "src/index.ts",
10+
"image-3": "src/image-3/index.ts",
11+
"presentation-2": "src/presentation-2/index.ts",
12+
"presentation-2/types": "src/presentation-2/types/index.ts",
13+
"presentation-3": "src/presentation-3/index.ts",
14+
"presentation-3/types": "src/presentation-3/types/index.ts",
15+
"presentation-3-normalized": "src/presentation-3-normalized/index.ts",
16+
"presentation-3-normalized/types": "src/presentation-3-normalized/types/index.ts",
17+
"presentation-4": "src/presentation-4/index.ts",
18+
"presentation-4/types": "src/presentation-4/types/index.ts",
19+
"presentation-4-normalized": "src/presentation-4-normalized/index.ts",
20+
"presentation-4-normalized/types": "src/presentation-4-normalized/types/index.ts",
21+
"presentation-4/upgrader": "src/presentation-4/upgrade.ts",
22+
"presentation-4/validator": "src/presentation-4/validator.ts",
23+
upgrader: "src/upgrader.ts",
24+
strict: "src/presentation-3/strict-upgrade.ts",
2325
},
2426
minify: true,
2527
external: [],
26-
globalName: 'IIIFParser',
28+
globalName: "IIIFParser",
2729
});

0 commit comments

Comments
 (0)