cozy-iiif
Version:
A developer-friendly collection of abstractions and utilities built on top of @iiif/presentation-3 and @iiif/parser
133 lines (132 loc) • 4.88 kB
JavaScript
import { m as e, n as t, p as n, r } from "../core-BHFaVC33.js";
import { t as i } from "../p-throttle-DZE1ty58.js";
//#region src/helpers/fetch-annotations.ts
var a = i({
limit: 4,
interval: 1e3
}), o = (e, t) => {
if (e.items) return Promise.resolve(e.items);
if (e.partOf) {
let n = a((e, t = []) => fetch(e).then((e) => e.json()).then((e) => {
let r = [...t, ...e.items || []];
return e.next ? n(e.next, r) : r;
}));
if (!Array.isArray(e.partOf)) throw Error("Referenced annotation collection is invalid");
return e.partOf.length === 0 ? (console.warn("Annotation page references 0 collections"), Promise.resolve([])) : e.partOf.reduce((e, t) => e.then((e) => typeof t.first == "string" ? n(t.first).then((t) => [...e, ...t]) : (console.warn("Unsupported `first` arg", t.first), e)), Promise.resolve([])).then((e) => e.filter((e) => s(e, t)));
} else return fetch(e.id).then((e) => e.json()).then((e) => (e.items || []).filter((e) => s(e, t))).catch((t) => (console.error(t), console.warn(`Could not resolve referenced annotation page: ${e.id}`), []));
}, s = (e, t) => !t || !e.target ? !0 : (Array.isArray(e.target) ? e.target : [e.target]).some((e) => "source" in e ? typeof e.source == "string" ? e.source === t : e.source.id === t : !0), c = (e) => "type" in e && e.type === "AnnotationPage" ? o(e) : e.annotations.reduce((t, n) => t.then((t) => o(n, e.id).then((e) => [...t, ...e])), Promise.resolve([])), l = (i) => {
let { source: a } = i, o = t(a);
return {
source: a,
id: a.id,
width: a.width,
height: a.height,
images: o,
annotations: a.annotations || [],
getImageURL: o.length > 0 ? o[0].getImageURL : () => void 0,
getLabel: n(a),
getMetadata: e(a),
getThumbnailURL: r(a, o)
};
}, u = [];
for (let e = 0; e < 256; ++e) u.push((e + 256).toString(16).slice(1));
function d(e, t = 0) {
return (u[e[t + 0]] + u[e[t + 1]] + u[e[t + 2]] + u[e[t + 3]] + "-" + u[e[t + 4]] + u[e[t + 5]] + "-" + u[e[t + 6]] + u[e[t + 7]] + "-" + u[e[t + 8]] + u[e[t + 9]] + "-" + u[e[t + 10]] + u[e[t + 11]] + u[e[t + 12]] + u[e[t + 13]] + u[e[t + 14]] + u[e[t + 15]]).toLowerCase();
}
//#endregion
//#region node_modules/uuid/dist/rng.js
var f = new Uint8Array(16);
function p() {
return crypto.getRandomValues(f);
}
//#endregion
//#region node_modules/uuid/dist/v4.js
function m(e, t, n) {
return !t && !e && crypto.randomUUID ? crypto.randomUUID() : h(e, t, n);
}
function h(e, t, n) {
e ||= {};
let r = e.random ?? e.rng?.() ?? p();
if (r.length < 16) throw Error("Random bytes length must be >= 16");
if (r[6] = r[6] & 15 | 64, r[8] = r[8] & 63 | 128, t) {
if (n ||= 0, n < 0 || n + 16 > t.length) throw RangeError(`UUID byte range ${n}:${n + 15} is out of buffer bounds`);
for (let e = 0; e < 16; ++e) t[n + e] = r[e];
return t;
}
return d(r);
}
//#endregion
//#region src/helpers/import-annotations.ts
var g = (e) => e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), _ = (e, t) => {
if (t) {
let n = e.annotations;
if (n.length > 0) {
let r = RegExp(`${g(e.id)}/${g(t)}/page/p(\\d+)$`), i = n.reduce((e, t) => {
let n = t.id.match(r);
if (n && n[1]) {
let t = parseInt(n[1]);
return Math.max(e, t);
} else return e;
}, 1);
return `${e.id}/${t}/annotations/page/p${i}`;
} else return `${e.id}/${t}/annotations/page/p1`;
} else return `${e.id}/annotations/page/${m()}`;
}, v = (e, t, n) => {
let r = {
id: _(e, n),
type: "AnnotationPage",
items: t
};
return {
source: {
...e.source,
annotations: [...e.annotations, r]
},
id: e.id,
width: e.width,
height: e.height,
images: [...e.images],
annotations: [...e.annotations, r],
getLabel: e.getLabel,
getMetadata: e.getMetadata,
getThumbnailURL: e.getThumbnailURL
};
}, y = (e, t, n) => {
let r = (e) => {
let t = e.target;
if (t) return typeof t == "string" ? t.substring(0, t.indexOf("#")) : t.source;
}, i = t.reduce((e, t) => {
let n = r(t);
return n ? (e[n] || (e[n] = []), e[n].push(t), e) : e;
}, {}), a = e.canvases.map((e) => {
let t = i[e.id] || [];
return t.length > 0 ? v(e, t, n) : e;
});
return {
source: {
...e.source,
items: a.map((e) => e.source)
},
id: e.id,
majorVersion: e.majorVersion,
canvases: a,
structure: e.structure,
getLabel: e.getLabel,
getMetadata: e.getMetadata,
getTableOfContents: e.getTableOfContents
};
}, b = (e, t, n) => e.source.type === "Canvas" ? v(e, t, n) : y(e, t, n), x = (e) => {
let t = e.images[0];
if (!t) return Promise.resolve(!1);
let n;
return n = t.type === "static" ? t.url : t.getImageURL(100), new Promise((e) => {
let t = new Image(), r = !1;
t.onload = () => {
r = !0, e(!0);
}, t.onerror = () => {
e(!1);
}, setTimeout(() => e(r), 5e3), t.crossOrigin = "anonymous", t.src = n;
});
};
//#endregion
export { c as fetchAnnotations, l as hydrateCanvas, b as importAnnotations, x as testCORS };