(function (root) { "use strict"; // Canonical resource inventory for runtime, warming, caching and static builds. const vendors = { pdf: { url: "https://cdn.jsdelivr.net/npm/pdfjs-dist@6.4.299/build/pdf.min.mjs", file: "pdf.min.mjs", sha256: "57456c8e0c81e46be31174b499ef77f2b9f5ee46d04412ba627320a36755d4c2" }, pdfWorker: { url: "https://cdn.jsdelivr.net/npm/pdfjs-dist@6.4.299/build/pdf.worker.min.mjs", file: "pdf.worker.min.mjs", sha256: "9536359f1b8367850d485731ca1d5e45c159a7b7a0912325e539937aa21ceb18" }, marked: { url: "https://cdn.jsdelivr.net/npm/marked@18.1.0/lib/marked.umd.js", file: "marked.min.js", sha256: "f424dcb508fdf93e0137a970cfce8f3207ea2e3f37eca5f7556a52875683632a" }, purify: { url: "https://cdn.jsdelivr.net/npm/dompurify@3.4.16/dist/purify.min.js", file: "purify.min.js", sha256: "2c90a9b46d6463f26038a29b686e82bc91de01fdac9d5229e7cfe3b360134ea2" }, jszip: { url: "https://cdn.jsdelivr.net/npm/jszip@3.10.2/dist/jszip.min.js", file: "jszip.min.js", sha256: "7f839b2d4688b845c105ebf5d2f9803075f91ea0fe72bdaac176c3a04dd3d2c1" }, docx: { url: "https://cdn.jsdelivr.net/npm/docx-preview@0.4.1/dist/docx-preview.min.js", file: "docx-preview.min.js", sha256: "c4a133c65a112799e35b143c572dfff9e923a3bf39b5fd3b07a06aa0f8f530c2" }, ruffle: { url: "https://unpkg.com/@ruffle-rs/ruffle@0.7.1/ruffle.js", file: "ruffle.js", sha256: "26036a94567088dfb3de88a759e8ed10a4cea07b29500af36f345eef42420098" } }; for (const vendor of Object.values(vendors)) { const dot = vendor.file.lastIndexOf("."); vendor.path = "vendor/" + vendor.file.slice(0, dot) + "." + vendor.sha256.slice(0, 12) + vendor.file.slice(dot); Object.freeze(vendor); } const pdfArchive = Object.freeze({ url: "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-6.4.299.tgz", sha256: "86269b40170eb41740ea05ad2102d71d33de4f122b34eb2f478be0ea7779c415" }); const foliateVendors = { fflateLicense: { url: "https://cdn.jsdelivr.net/npm/fflate@0.8.3/LICENSE", file: "LICENSE_fflate", sha256: "0a1df3a083d0c010560aa342e87959c8c1070e6fd54545741f083f22d0c8b551" }, zipLicense: { url: "https://cdn.jsdelivr.net/npm/@zip.js/zip.js@2.23.0/LICENSE", file: "LICENSE_zipjs", sha256: "1b7ebc8d7889ed25491484ab2b102370742ca6c0b26650a0c62cc2269b579b84" }, fflate: { url: "https://cdn.jsdelivr.net/npm/fflate@0.8.3/esm/browser.js", file: "fflate.js", sha256: "b7ca4450b19559a1d50eb381adcee94b82449674be4cd17789d9beba7e6122a1" }, zip: { url: "https://cdn.jsdelivr.net/npm/@zip.js/zip.js@2.23.0/index.min.js", file: "zip.js", sha256: "1b4d7f05a108b7e5815b429f116f17deb36af1949e1aff5aedcf47292d65c8ed" }, textLayer: { url: "https://cdn.jsdelivr.net/gh/mozilla/pdf.js@v6.4.299/web/text_layer_builder.css", file: "pdfjs/text_layer_builder.css", sha256: "5b21bcb7d703cae5b8eebf9c8579435409aaf351b62e7518327ada60bdd0946f" }, annotationLayer: { url: "https://cdn.jsdelivr.net/gh/mozilla/pdf.js@v6.4.299/web/annotation_layer_builder.css", file: "pdfjs/annotation_layer_builder.css", sha256: "5a692d678ff97932023adf101c9faae5a0fda623f341e6646b6dc9251e259ad8" } }; for (const vendor of Object.values(foliateVendors)) Object.freeze(vendor); const readerComponentFiles = Object.freeze([ "reader/core/reader-diagnostics.mjs", "reader/core/reader-lifecycle.mjs", "reader/core/reader-source.mjs", "reader/ui/reader-ui.mjs", "reader/ui/reader-toc.mjs", "reader/search/reader-search-backends.mjs", "reader/pdf/reader-pdf-scheduler.mjs", "reader/ui/reader-navigation.mjs", "reader/formats/reader-foliate-format.mjs", "reader/ui/reader-progress.mjs", "reader/ui/reader-bookmarks.mjs", "reader/formats/reader-media-format.mjs", "reader/core/reader-document-loader.mjs", "reader/pdf/reader-pdf-page-window.mjs", "reader/pdf/reader-pdf-text-runtime.mjs", "reader/formats/reader-html-format.mjs", "reader/pdf/reader-pdf-renderer.mjs", "reader/formats/reader-text-format.mjs", "reader/formats/reader-chapter-format.mjs", "reader/formats/reader-docx-format.mjs", "reader/formats/reader-format-controller.mjs", "reader/pdf/reader-pdf-engine.mjs", "reader/pdf/reader-pdf-search.mjs", "reader/core/reader-bindings.mjs", "reader/ui/reader-document-styles.mjs" ]); const readerFiles = Object.freeze([ "reader-resources.js", "reader/pdf/reader-engine-preload.js", "reader/search/workers/reader-chapter-search-worker.mjs", "reader/search/reader-chapter-search.mjs", "reader/core/reader-contract.js", "search/reader-navigation.js", "reader/core/reader-store.js", "reader/core/reader-request-manager.js", "reader/formats/reader-chapter-repository.js", "reader/ui/reader-scroll-anchor.js", "reader/formats/reader-section-virtualizer.js", "reader/core/reader-runtime.js", "reader/formats/reader-format-adapters.js", "reader/core/reader-security.js", "reader/search/reader-search-controller.mjs", "reader/search/reader-dom-search.mjs", "reader/formats/reader-image-loader.mjs", "reader/pdf/reader-pdf-text.js", "reader/pdf/reader-v3.mjs", "reader/search/reader-book-text.js", "reader/search/workers/reader-pdf-book-search-worker.mjs", "reader/search/reader-pdf-book-search.mjs", "reader/pdf/pdf-worker-wrapper.mjs", "reader/pdf/reader-pdf-network.mjs", "reader/pdf/reader-pdf-text-store.mjs", "reader.css", ...readerComponentFiles, "reader/reader-components.mjs", "reader.js" ]); const lazyFiles = new Set([ ...readerComponentFiles, "reader/reader-components.mjs", "reader/pdf/reader-pdf-text-store.mjs", "reader/search/workers/reader-chapter-search-worker.mjs", "reader/search/reader-chapter-search.mjs", "reader/search/workers/reader-pdf-book-search-worker.mjs", "reader/search/reader-pdf-book-search.mjs", "reader/pdf/pdf-worker-wrapper.mjs" ]); const vendorUrl = (name, base) => base + vendors[name].path; const runtimePaths = (base) => readerFiles.map((file) => base + file); const shellAssets = (base) => ["reader.html", ...readerFiles.filter((file) => !lazyFiles.has(file))].map((file) => base + file); function engineAssets(extension, base, foliateSuffix = "") { if (extension === "pdf") return [ vendorUrl("pdf", base), base + "reader/pdf/pdf-worker-wrapper.mjs", vendorUrl("pdfWorker", base) ]; if (["epub", "mobi", "azw", "azw3", "fb2", "fbz"].includes(extension)) return [base + "foliate-reader/view.js" + foliateSuffix]; if (extension === "docx") return [vendorUrl("jszip", base), vendorUrl("docx", base)]; if (["md", "markdown", "html", "htm"].includes(extension)) return [vendorUrl("marked", base), vendorUrl("purify", base)]; return []; } function buildFiles(project) { return [ ...readerFiles, "search/search-session.js", "search/download-controller.js", "style.css", ...(project === "github" ? ["search/index-worker.js"] : []), "app.js" ]; } function bundleArguments(filename) { if (!["reader.js", "reader/reader-components.mjs"].includes(filename)) return []; const external = readerFiles.filter(file => !readerComponentFiles.includes(file) && !["reader.js", "reader/reader-components.mjs"].includes(file) && /\.(?:js|mjs)$/.test(file)); return ["--bundle", "--format=esm", "--external:/static/*", "--external:/search/static/*", ...external.map(file => "--external:./" + file)]; } const resources = Object.freeze({ vendors: Object.freeze(vendors), foliateVendors: Object.freeze(foliateVendors), foliateRevision: "78914aef4466eb960965702401634c2cb348e9b1", pdfArchive, readerFiles, readerComponentFiles, vendorUrl, runtimePaths, shellAssets, engineAssets, buildFiles, bundleArguments }); if (typeof module !== "undefined" && module.exports) module.exports = resources; else root.VoiceOfMLReaderResources = resources; })(typeof self !== "undefined" ? self : globalThis);