UNPKG

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
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 };