@prose-reader/enhancer-pdf 1.307.0 → 1.308.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["e","t","n","r","a","o","s","c","l","u","d","p","m","h","g","_","v","y","b","x","t","n","e","e","t","n","r","e","t","e","v","j","M","N","P","F","I","L","R","z","B","V","H","U","W","G","K","q","n","e","r","c","s","o","l","h","re","m","t","_","ee","te","d","v","ne","g","f","u","oe","ae","ie","p","a","se","E","ce","me","k","b","_e","x","O","y","pe","C","he","T","A","S","D","w","ge","ue","de","le","fe","i"],"sources":["../../shared/dist/index.js","../../streamer/dist/report-uURLD5cl.js","../../streamer/dist/uri-DBZYnB1I.js","../../streamer/dist/fileAccessors-etcCPnpQ.js","../../../node_modules/sax/lib/sax.js","../../../node_modules/xmldoc/dist/xmldoc.js","../../archive-parser/dist/index.js","../../streamer/dist/index/index.es.js","../src/createArchiveFromPdf.ts","../src/renderer/frame.css?inline","../src/renderer/layout.ts","../src/renderer/PdfRenderer.ts","../src/pdfEnhancer.ts"],"sourcesContent":["//#region src/array.ts\nvar e = (e, t) => e === t ? !0 : e.length === t.length ? e.every((e, n) => e === t[n]) : !1, t = (e) => e.split(/[#?]/)[0]?.split(\".\").pop()?.trim() || \"\";\nfunction n(e) {\n\tlet t = [];\n\tif (e.length === 0) return \"\";\n\tif (typeof e[0] != \"string\") throw TypeError(`Url must be a string. Received ${e[0]}`);\n\te[0].match(/^[^/:]+:\\/*$/) && e.length > 1 && (e[0] = e.shift() + e[0]), e[0].match(/^file:\\/\\/\\//) ? e[0] = e[0].replace(/^([^/:]+):\\/*/, \"$1:///\") : e[0] = e[0].replace(/^([^/:]+):\\/*/, \"$1://\");\n\tfor (let n = 0; n < e.length; n++) {\n\t\tlet r = e[n];\n\t\tif (typeof r != \"string\") throw TypeError(`Url must be a string. Received ${r}`);\n\t\tr !== \"\" && (n > 0 && (r = r.replace(/^[/]+/, \"\")), r = n < e.length - 1 ? r.replace(/[/]+$/, \"\") : r.replace(/[/]+$/, \"/\"), t.push(r));\n\t}\n\tlet n = t.join(\"/\");\n\tn = n.replace(/\\/(\\?|&|#[^!])/g, \"$1\");\n\tlet r = n.split(\"?\");\n\treturn n = r.shift() + (r.length > 0 ? \"?\" : \"\") + r.join(\"&\"), n;\n}\nfunction r(...e) {\n\treturn n(Array.from(Array.isArray(e[0]) ? e[0] : e));\n}\nfunction i(e) {\n\tlet t = e.split(\"/\");\n\treturn t.pop(), t.join(\"/\");\n}\n//#endregion\n//#region src/contentType.ts\nvar a = (e) => {\n\tswitch (t(e)) {\n\t\tcase \"png\": return \"image/png\";\n\t\tcase \"jpg\": return \"image/jpg\";\n\t\tcase \"jpeg\": return \"image/jpeg\";\n\t\tcase \"txt\": return \"text/plain\";\n\t\tcase \"webp\": return \"image/webp\";\n\t\tcase \"xhtml\": return \"application/xhtml+xml\";\n\t\tcase \"mp3\": return \"audio/mpeg\";\n\t\tcase \"m4a\":\n\t\tcase \"m4b\": return \"audio/mp4\";\n\t\tcase \"aac\": return \"audio/aac\";\n\t\tcase \"ogg\":\n\t\tcase \"oga\": return \"audio/ogg\";\n\t\tcase \"wav\": return \"audio/wav\";\n\t\tcase \"flac\": return \"audio/flac\";\n\t\tcase \"opus\": return \"audio/opus\";\n\t}\n}, o = ({ mimeType: e, uri: t }) => (e ?? a(t ?? \"\"))?.startsWith(\"application/xhtml+xml\"), s = (e) => e.startsWith(\"image/\") || e.startsWith(\"audio/\") || e.startsWith(\"video/\"), c = (e) => {\n\tif (!e.length) return;\n\tlet t = e.indexOf(\";\");\n\treturn t >= 0 ? e.substring(0, t) : e;\n}, l = (e) => {\n\tlet t = e.pageSpreadLeft === !0;\n\tif (t !== (e.pageSpreadRight === !0)) return t ? \"left\" : \"right\";\n}, u = (e, t, n) => {\n\tif (Object.is(e, t)) return !0;\n\tif (typeof e != \"object\" || !e || typeof t != \"object\" || !t) return !1;\n\tlet r = Object.keys(e), i = Object.keys(t);\n\tif (r.length !== i.length) return !1;\n\tlet a = n?.customEqual ?? Object.is, o = e, s = t;\n\tfor (let e of r) if (!Object.hasOwn(s, e) || !a(o[e], s[e])) return !1;\n\treturn !0;\n}, d = (e, t) => e.reduce((e, n) => {\n\tlet r = t(n);\n\treturn e[r] || (e[r] = []), e[r].push(n), e;\n}, {});\nfunction f(e, t) {\n\tlet n = { ...e };\n\tfor (let r in t) if (Object.hasOwn(t, r)) {\n\t\tlet i = t[r];\n\t\t(i !== void 0 || !(r in e)) && (n[r] = i);\n\t}\n\treturn n;\n}\n//#endregion\n//#region src/report.ts\nvar p = () => {\n\tif (!(typeof window > \"u\")) return window;\n};\nfunction m() {\n\tlet e = p()?.__PROSE_READER_DEBUG;\n\treturn e === !0 || e === \"true\";\n}\nvar h = (e, t) => typeof e == \"boolean\" ? {\n\tenabled: e,\n\toptions: t\n} : {\n\tenabled: e?.enabled,\n\toptions: e ?? t\n}, g = (e) => e.at(-1)?.color, _ = (e) => {\n\tif (!e.length) return;\n\tif (!e.some((e) => e.color)) return [e.map((e) => e.label).join(\" \")];\n\tlet t = \"\", n = [];\n\tfor (let r of e) t += `%c${t ? ` ${r.label}` : r.label}`, n.push(r.color ? `color: ${r.color}` : \"\");\n\treturn [t, ...n];\n}, v = (e = [], t = m()) => {\n\tlet n = t, r = {\n\t\tenable: (e) => {\n\t\t\ta(e);\n\t\t},\n\t\tnamespace: (t, r, i) => {\n\t\t\tlet a = h(r, i), o = a.options?.color ?? g(e);\n\t\t\treturn v([...e, {\n\t\t\t\tlabel: `[${t}]`,\n\t\t\t\tcolor: o\n\t\t\t}], a.enabled ?? n);\n\t\t},\n\t\tisEnabled: () => n,\n\t\tdebug: () => {},\n\t\tinfo: () => {},\n\t\tlog: () => {},\n\t\tgroupCollapsed: () => {},\n\t\tgroupEnd: () => {},\n\t\tgetGroupArgs: (t) => {\n\t\t\tlet n = _(e);\n\t\t\tif (!n) return [t];\n\t\t\tlet [r, ...i] = n;\n\t\t\treturn [`${r} ${t}`, ...i];\n\t\t},\n\t\twarn: () => {},\n\t\terror: () => {}\n\t}, i = (t) => {\n\t\tif (!t) {\n\t\t\tr.debug = () => {}, r.info = () => {}, r.log = () => {}, r.groupCollapsed = () => {}, r.groupEnd = () => {}, r.warn = () => {}, r.error = () => {};\n\t\t\treturn;\n\t\t}\n\t\tlet n = _(e) ?? [];\n\t\tr.debug = Function.prototype.bind.call(console.debug, console, ...n), r.info = Function.prototype.bind.call(console.info, console, ...n), r.log = Function.prototype.bind.call(console.log, console, ...n), r.groupCollapsed = Function.prototype.bind.call(console.groupCollapsed, console), r.groupEnd = Function.prototype.bind.call(console.groupEnd, console), r.warn = Function.prototype.bind.call(console.warn, console, ...n), r.error = Function.prototype.bind.call(console.error, console, ...n);\n\t}, a = (e) => {\n\t\tn !== e && (n = e, i(n));\n\t};\n\treturn i(n), r;\n}, y = v(), b = \"prose-reader-resource-error\", x = (e) => e.replaceAll(\"&\", \"&amp;\").replaceAll(\"\\\"\", \"&quot;\").replaceAll(\"'\", \"&apos;\").replaceAll(\"<\", \"&lt;\").replaceAll(\">\", \"&gt;\");\n//#endregion\nexport { b as PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME, y as Report, e as arrayEqual, a as detectMimeTypeFromName, x as escapeXmlAttributeValue, l as getItemSpreadPosition, i as getParentPath, t as getUrlExtension, d as groupBy, s as isMediaContentMimeType, u as isShallowEqual, o as isXmlBasedMimeType, c as parseContentType, f as shallowMergeIfDefined, r as urlJoin };\n\n//# sourceMappingURL=index.js.map","import { Report as e } from \"@prose-reader/shared\";\n//#region src/archives/createArchive.ts\nvar t = ({ records: e, ...t }) => {\n\tlet n = /* @__PURE__ */ new Map();\n\tfor (let t of e) n.has(t.uri) || n.set(t.uri, t);\n\treturn {\n\t\t...t,\n\t\trecords: e,\n\t\trecordsByUri: n\n\t};\n}, n = e.namespace(\"@prose-reader/streamer\", !1, { color: \"#ffae42\" });\n//#endregion\nexport { t as n, n as t };\n\n//# sourceMappingURL=report-uURLD5cl.js.map","//#region src/utils/sortByTitleComparator.ts\nvar e = (e, t) => {\n\tlet n = e.split(/(\\d+)/), r = t.split(/(\\d+)/);\n\tfor (let e = 0, t = n.length; e < t; e++) if (n[e] !== r[e]) return n[e]?.match(/\\d/) ? (n[e] || \"\") - +(r[e] || \"\") : (n[e] || \"\").localeCompare(r[e] || \"\");\n\treturn 1;\n}, t = (e) => e.substring(e.lastIndexOf(\"/\") + 1) || e, n = (e) => e.endsWith(\"/\") ? e.slice(0, -1) : e, r = (e) => {\n\tlet t = e.lastIndexOf(\"/\");\n\treturn t >= 0 ? e.substring(0, t) : \"\";\n};\n//#endregion\nexport { e as i, t as n, n as r, r as t };\n\n//# sourceMappingURL=uri-DBZYnB1I.js.map","//#region src/archives/fileAccessors.ts\nvar e = (e) => ({\n\tblob: e,\n\tarrayBuffer: () => e().then((e) => e.arrayBuffer())\n}), t = (e, t = \"\") => ({\n\tarrayBuffer: e,\n\tblob: () => e().then((e) => new Blob([e], { type: t }))\n});\n//#endregion\nexport { e as n, t };\n\n//# sourceMappingURL=fileAccessors-etcCPnpQ.js.map",";(function (sax) {\n // wrapper for non-node envs\n sax.parser = function (strict, opt) {\n return new SAXParser(strict, opt)\n }\n sax.SAXParser = SAXParser\n sax.SAXStream = SAXStream\n sax.createStream = createStream\n\n // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n // since that's the earliest that a buffer overrun could occur. This way, checks are\n // as rare as required, but as often as necessary to ensure never crossing this bound.\n // Furthermore, buffers are only tested at most once per write(), so passing a very\n // large string into write() might have undesirable effects, but this is manageable by\n // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme\n // edge case, result in creating at most one complete copy of the string passed in.\n // Set to Infinity to have unlimited buffers.\n sax.MAX_BUFFER_LENGTH = 64 * 1024\n\n var buffers = [\n 'comment',\n 'sgmlDecl',\n 'textNode',\n 'tagName',\n 'doctype',\n 'procInstName',\n 'procInstBody',\n 'entity',\n 'attribName',\n 'attribValue',\n 'cdata',\n 'script',\n ]\n\n sax.EVENTS = [\n 'text',\n 'processinginstruction',\n 'sgmldeclaration',\n 'doctype',\n 'comment',\n 'opentagstart',\n 'attribute',\n 'opentag',\n 'closetag',\n 'opencdata',\n 'cdata',\n 'closecdata',\n 'error',\n 'end',\n 'ready',\n 'script',\n 'opennamespace',\n 'closenamespace',\n ]\n\n function SAXParser(strict, opt) {\n if (!(this instanceof SAXParser)) {\n return new SAXParser(strict, opt)\n }\n\n var parser = this\n clearBuffers(parser)\n parser.q = parser.c = ''\n parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH\n parser.encoding = null;\n parser.opt = opt || {}\n parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags\n parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'\n parser.opt.maxEntityCount = parser.opt.maxEntityCount || 512\n parser.opt.maxEntityDepth = parser.opt.maxEntityDepth || 4\n parser.entityCount = parser.entityDepth = 0\n parser.tags = []\n parser.closed = parser.closedRoot = parser.sawRoot = false\n parser.tag = parser.error = null\n parser.strict = !!strict\n parser.noscript = !!(strict || parser.opt.noscript)\n parser.state = S.BEGIN\n parser.strictEntities = parser.opt.strictEntities\n parser.ENTITIES =\n parser.strictEntities ?\n Object.create(sax.XML_ENTITIES)\n : Object.create(sax.ENTITIES)\n parser.attribList = []\n\n // namespaces form a prototype chain.\n // it always points at the current tag,\n // which protos to its parent tag.\n if (parser.opt.xmlns) {\n parser.ns = Object.create(rootNS)\n }\n\n // disallow unquoted attribute values if not otherwise configured\n // and strict mode is true\n if (parser.opt.unquotedAttributeValues === undefined) {\n parser.opt.unquotedAttributeValues = !strict\n }\n\n // mostly just for error reporting\n parser.trackPosition = parser.opt.position !== false\n if (parser.trackPosition) {\n parser.position = parser.line = parser.column = 0\n }\n emit(parser, 'onready')\n }\n\n if (!Object.create) {\n Object.create = function (o) {\n function F() {}\n F.prototype = o\n var newf = new F()\n return newf\n }\n }\n\n if (!Object.keys) {\n Object.keys = function (o) {\n var a = []\n for (var i in o) if (o.hasOwnProperty(i)) a.push(i)\n return a\n }\n }\n\n function checkBufferLength(parser) {\n var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)\n var maxActual = 0\n for (var i = 0, l = buffers.length; i < l; i++) {\n var len = parser[buffers[i]].length\n if (len > maxAllowed) {\n // Text/cdata nodes can get big, and since they're buffered,\n // we can get here under normal conditions.\n // Avoid issues by emitting the text node now,\n // so at least it won't get any bigger.\n switch (buffers[i]) {\n case 'textNode':\n closeText(parser)\n break\n\n case 'cdata':\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n break\n\n case 'script':\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n break\n\n default:\n error(parser, 'Max buffer length exceeded: ' + buffers[i])\n }\n }\n maxActual = Math.max(maxActual, len)\n }\n // schedule the next check for the earliest possible buffer overrun.\n var m = sax.MAX_BUFFER_LENGTH - maxActual\n parser.bufferCheckPosition = m + parser.position\n }\n\n function clearBuffers(parser) {\n for (var i = 0, l = buffers.length; i < l; i++) {\n parser[buffers[i]] = ''\n }\n }\n\n function flushBuffers(parser) {\n closeText(parser)\n if (parser.cdata !== '') {\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n }\n if (parser.script !== '') {\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n }\n\n SAXParser.prototype = {\n end: function () {\n end(this)\n },\n write: write,\n resume: function () {\n this.error = null\n return this\n },\n close: function () {\n return this.write(null)\n },\n flush: function () {\n flushBuffers(this)\n },\n }\n\n var Stream\n try {\n Stream = require('stream').Stream\n } catch (ex) {\n Stream = function () {}\n }\n if (!Stream) Stream = function () {}\n\n var streamWraps = sax.EVENTS.filter(function (ev) {\n return ev !== 'error' && ev !== 'end'\n })\n\n function createStream(strict, opt) {\n return new SAXStream(strict, opt)\n }\n\n function determineBufferEncoding(data, isEnd) {\n // BOM-based detection is the most reliable signal when present.\n if (data.length >= 2) {\n if (data[0] === 0xff && data[1] === 0xfe) {\n return 'utf-16le'\n }\n\n if (data[0] === 0xfe && data[1] === 0xff) {\n return 'utf-16be'\n }\n }\n\n if (data.length >= 3 && data[0] === 0xef && data[1] === 0xbb && data[2] === 0xbf) {\n return 'utf8'\n }\n\n if (data.length >= 4) {\n // XML documents without a BOM still start with \"<?xml\", which is enough\n // to distinguish UTF-16LE/BE from UTF-8 by looking at the zero bytes.\n if (data[0] === 0x3c && data[1] === 0x00 && data[2] === 0x3f && data[3] === 0x00) {\n return 'utf-16le'\n }\n\n if (data[0] === 0x00 && data[1] === 0x3c && data[2] === 0x00 && data[3] === 0x3f) {\n return 'utf-16be'\n }\n\n return 'utf8'\n }\n\n return isEnd ? 'utf8' : null\n }\n\n function SAXStream(strict, opt) {\n if (!(this instanceof SAXStream)) {\n return new SAXStream(strict, opt)\n }\n\n Stream.apply(this)\n\n this._parser = new SAXParser(strict, opt)\n this.writable = true\n this.readable = true\n\n var me = this\n\n this._parser.onend = function () {\n me.emit('end')\n }\n\n this._parser.onerror = function (er) {\n me.emit('error', er)\n\n // if didn't throw, then means error was handled.\n // go ahead and clear error, so we can write again.\n me._parser.error = null\n }\n\n this._decoder = null\n this._decoderBuffer = null\n streamWraps.forEach(function (ev) {\n Object.defineProperty(me, 'on' + ev, {\n get: function () {\n return me._parser['on' + ev]\n },\n set: function (h) {\n if (!h) {\n me.removeAllListeners(ev)\n me._parser['on' + ev] = h\n return h\n }\n me.on(ev, h)\n },\n enumerable: true,\n configurable: false,\n })\n })\n }\n\n SAXStream.prototype = Object.create(Stream.prototype, {\n constructor: {\n value: SAXStream,\n },\n })\n\n SAXStream.prototype._decodeBuffer = function (data, isEnd) {\n if (this._decoderBuffer) {\n // Keep incomplete leading bytes until we have enough data to infer the\n // stream encoding, then decode the buffered prefix together with the next chunk.\n data = Buffer.concat([this._decoderBuffer, data])\n this._decoderBuffer = null\n }\n\n if (!this._decoder) {\n var encoding = determineBufferEncoding(data, isEnd)\n if (!encoding) {\n // A very short first chunk may not contain enough bytes to detect the\n // encoding yet, so defer decoding until the next write/end call.\n this._decoderBuffer = data\n return ''\n }\n\n // Store the detected transport encoding so strict mode can compare it\n // with the optional encoding declared in the XML prolog later on.\n this._parser.encoding = encoding\n this._decoder = new TextDecoder(encoding)\n }\n\n return this._decoder.decode(data, { stream: !isEnd })\n }\n\n SAXStream.prototype.write = function (data) {\n if (\n typeof Buffer === 'function' &&\n typeof Buffer.isBuffer === 'function' &&\n Buffer.isBuffer(data)\n ) {\n data = this._decodeBuffer(data, false)\n } else if (this._decoderBuffer) {\n // Flush any buffered binary prefix before handling a string chunk.\n // This only matters if the caller mixes Buffer and string writes (used in test).\n var remaining = this._decodeBuffer(Buffer.alloc(0), true)\n if (remaining) {\n this._parser.write(remaining)\n this.emit('data', remaining)\n }\n }\n\n this._parser.write(data.toString())\n this.emit('data', data)\n return true\n }\n\n SAXStream.prototype.end = function (chunk) {\n if (chunk && chunk.length) {\n this.write(chunk)\n }\n // Flush any remaining decoded data from the TextDecoder\n if (this._decoderBuffer) {\n var finalChunk = this._decodeBuffer(Buffer.alloc(0), true)\n if (finalChunk) {\n this._parser.write(finalChunk)\n this.emit('data', finalChunk)\n }\n } else if (this._decoder) {\n var remaining = this._decoder.decode()\n if (remaining) {\n this._parser.write(remaining)\n this.emit('data', remaining)\n }\n }\n this._parser.end()\n return true\n }\n\n SAXStream.prototype.on = function (ev, handler) {\n var me = this\n if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {\n me._parser['on' + ev] = function () {\n var args =\n arguments.length === 1 ?\n [arguments[0]]\n : Array.apply(null, arguments)\n args.splice(0, 0, ev)\n me.emit.apply(me, args)\n }\n }\n\n return Stream.prototype.on.call(me, ev, handler)\n }\n\n // this really needs to be replaced with character classes.\n // XML allows all manner of ridiculous numbers and digits.\n var CDATA = '[CDATA['\n var DOCTYPE = 'DOCTYPE'\n var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'\n var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'\n var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }\n\n // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n // This implementation works on strings, a single character at a time\n // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n // without a significant breaking change to either this parser, or the\n // JavaScript language. Implementation of an emoji-capable xml parser\n // is left as an exercise for the reader.\n var nameStart =\n /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n\n var nameBody =\n /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n var entityStart =\n /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n var entityBody =\n /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n function isWhitespace(c) {\n return c === ' ' || c === '\\n' || c === '\\r' || c === '\\t'\n }\n\n function isQuote(c) {\n return c === '\"' || c === \"'\"\n }\n\n function isAttribEnd(c) {\n return c === '>' || isWhitespace(c)\n }\n\n function isMatch(regex, c) {\n return regex.test(c)\n }\n\n function notMatch(regex, c) {\n return !isMatch(regex, c)\n }\n\n var S = 0\n sax.STATE = {\n BEGIN: S++, // leading byte order mark or whitespace\n BEGIN_WHITESPACE: S++, // leading whitespace\n TEXT: S++, // general stuff\n TEXT_ENTITY: S++, // &amp and such.\n OPEN_WAKA: S++, // <\n SGML_DECL: S++, // <!BLARG\n SGML_DECL_QUOTED: S++, // <!BLARG foo \"bar\n DOCTYPE: S++, // <!DOCTYPE\n DOCTYPE_QUOTED: S++, // <!DOCTYPE \"//blah\n DOCTYPE_DTD: S++, // <!DOCTYPE \"//blah\" [ ...\n DOCTYPE_DTD_QUOTED: S++, // <!DOCTYPE \"//blah\" [ \"foo\n COMMENT_STARTING: S++, // <!-\n COMMENT: S++, // <!--\n COMMENT_ENDING: S++, // <!-- blah -\n COMMENT_ENDED: S++, // <!-- blah --\n CDATA: S++, // <![CDATA[ something\n CDATA_ENDING: S++, // ]\n CDATA_ENDING_2: S++, // ]]\n PROC_INST: S++, // <?hi\n PROC_INST_BODY: S++, // <?hi there\n PROC_INST_ENDING: S++, // <?hi \"there\" ?\n OPEN_TAG: S++, // <strong\n OPEN_TAG_SLASH: S++, // <strong /\n ATTRIB: S++, // <a\n ATTRIB_NAME: S++, // <a foo\n ATTRIB_NAME_SAW_WHITE: S++, // <a foo _\n ATTRIB_VALUE: S++, // <a foo=\n ATTRIB_VALUE_QUOTED: S++, // <a foo=\"bar\n ATTRIB_VALUE_CLOSED: S++, // <a foo=\"bar\"\n ATTRIB_VALUE_UNQUOTED: S++, // <a foo=bar\n ATTRIB_VALUE_ENTITY_Q: S++, // <foo bar=\"&quot;\"\n ATTRIB_VALUE_ENTITY_U: S++, // <foo bar=&quot\n CLOSE_TAG: S++, // </a\n CLOSE_TAG_SAW_WHITE: S++, // </a >\n SCRIPT: S++, // <script> ...\n SCRIPT_ENDING: S++, // <script> ... <\n }\n\n sax.XML_ENTITIES = {\n amp: '&',\n gt: '>',\n lt: '<',\n quot: '\"',\n apos: \"'\",\n }\n\n sax.ENTITIES = {\n amp: '&',\n gt: '>',\n lt: '<',\n quot: '\"',\n apos: \"'\",\n AElig: 198,\n Aacute: 193,\n Acirc: 194,\n Agrave: 192,\n Aring: 197,\n Atilde: 195,\n Auml: 196,\n Ccedil: 199,\n ETH: 208,\n Eacute: 201,\n Ecirc: 202,\n Egrave: 200,\n Euml: 203,\n Iacute: 205,\n Icirc: 206,\n Igrave: 204,\n Iuml: 207,\n Ntilde: 209,\n Oacute: 211,\n Ocirc: 212,\n Ograve: 210,\n Oslash: 216,\n Otilde: 213,\n Ouml: 214,\n THORN: 222,\n Uacute: 218,\n Ucirc: 219,\n Ugrave: 217,\n Uuml: 220,\n Yacute: 221,\n aacute: 225,\n acirc: 226,\n aelig: 230,\n agrave: 224,\n aring: 229,\n atilde: 227,\n auml: 228,\n ccedil: 231,\n eacute: 233,\n ecirc: 234,\n egrave: 232,\n eth: 240,\n euml: 235,\n iacute: 237,\n icirc: 238,\n igrave: 236,\n iuml: 239,\n ntilde: 241,\n oacute: 243,\n ocirc: 244,\n ograve: 242,\n oslash: 248,\n otilde: 245,\n ouml: 246,\n szlig: 223,\n thorn: 254,\n uacute: 250,\n ucirc: 251,\n ugrave: 249,\n uuml: 252,\n yacute: 253,\n yuml: 255,\n copy: 169,\n reg: 174,\n nbsp: 160,\n iexcl: 161,\n cent: 162,\n pound: 163,\n curren: 164,\n yen: 165,\n brvbar: 166,\n sect: 167,\n uml: 168,\n ordf: 170,\n laquo: 171,\n not: 172,\n shy: 173,\n macr: 175,\n deg: 176,\n plusmn: 177,\n sup1: 185,\n sup2: 178,\n sup3: 179,\n acute: 180,\n micro: 181,\n para: 182,\n middot: 183,\n cedil: 184,\n ordm: 186,\n raquo: 187,\n frac14: 188,\n frac12: 189,\n frac34: 190,\n iquest: 191,\n times: 215,\n divide: 247,\n OElig: 338,\n oelig: 339,\n Scaron: 352,\n scaron: 353,\n Yuml: 376,\n fnof: 402,\n circ: 710,\n tilde: 732,\n Alpha: 913,\n Beta: 914,\n Gamma: 915,\n Delta: 916,\n Epsilon: 917,\n Zeta: 918,\n Eta: 919,\n Theta: 920,\n Iota: 921,\n Kappa: 922,\n Lambda: 923,\n Mu: 924,\n Nu: 925,\n Xi: 926,\n Omicron: 927,\n Pi: 928,\n Rho: 929,\n Sigma: 931,\n Tau: 932,\n Upsilon: 933,\n Phi: 934,\n Chi: 935,\n Psi: 936,\n Omega: 937,\n alpha: 945,\n beta: 946,\n gamma: 947,\n delta: 948,\n epsilon: 949,\n zeta: 950,\n eta: 951,\n theta: 952,\n iota: 953,\n kappa: 954,\n lambda: 955,\n mu: 956,\n nu: 957,\n xi: 958,\n omicron: 959,\n pi: 960,\n rho: 961,\n sigmaf: 962,\n sigma: 963,\n tau: 964,\n upsilon: 965,\n phi: 966,\n chi: 967,\n psi: 968,\n omega: 969,\n thetasym: 977,\n upsih: 978,\n piv: 982,\n ensp: 8194,\n emsp: 8195,\n thinsp: 8201,\n zwnj: 8204,\n zwj: 8205,\n lrm: 8206,\n rlm: 8207,\n ndash: 8211,\n mdash: 8212,\n lsquo: 8216,\n rsquo: 8217,\n sbquo: 8218,\n ldquo: 8220,\n rdquo: 8221,\n bdquo: 8222,\n dagger: 8224,\n Dagger: 8225,\n bull: 8226,\n hellip: 8230,\n permil: 8240,\n prime: 8242,\n Prime: 8243,\n lsaquo: 8249,\n rsaquo: 8250,\n oline: 8254,\n frasl: 8260,\n euro: 8364,\n image: 8465,\n weierp: 8472,\n real: 8476,\n trade: 8482,\n alefsym: 8501,\n larr: 8592,\n uarr: 8593,\n rarr: 8594,\n darr: 8595,\n harr: 8596,\n crarr: 8629,\n lArr: 8656,\n uArr: 8657,\n rArr: 8658,\n dArr: 8659,\n hArr: 8660,\n forall: 8704,\n part: 8706,\n exist: 8707,\n empty: 8709,\n nabla: 8711,\n isin: 8712,\n notin: 8713,\n ni: 8715,\n prod: 8719,\n sum: 8721,\n minus: 8722,\n lowast: 8727,\n radic: 8730,\n prop: 8733,\n infin: 8734,\n ang: 8736,\n and: 8743,\n or: 8744,\n cap: 8745,\n cup: 8746,\n int: 8747,\n there4: 8756,\n sim: 8764,\n cong: 8773,\n asymp: 8776,\n ne: 8800,\n equiv: 8801,\n le: 8804,\n ge: 8805,\n sub: 8834,\n sup: 8835,\n nsub: 8836,\n sube: 8838,\n supe: 8839,\n oplus: 8853,\n otimes: 8855,\n perp: 8869,\n sdot: 8901,\n lceil: 8968,\n rceil: 8969,\n lfloor: 8970,\n rfloor: 8971,\n lang: 9001,\n rang: 9002,\n loz: 9674,\n spades: 9824,\n clubs: 9827,\n hearts: 9829,\n diams: 9830,\n }\n\n Object.keys(sax.ENTITIES).forEach(function (key) {\n var e = sax.ENTITIES[key]\n var s = typeof e === 'number' ? String.fromCharCode(e) : e\n sax.ENTITIES[key] = s\n })\n\n for (var s in sax.STATE) {\n sax.STATE[sax.STATE[s]] = s\n }\n\n // shorthand\n S = sax.STATE\n\n function emit(parser, event, data) {\n parser[event] && parser[event](data)\n }\n\n function getDeclaredEncoding(body) {\n var match = body && body.match(/(?:^|\\s)encoding\\s*=\\s*(['\"])([^'\"]+)\\1/i)\n return match ? match[2] : null\n }\n\n function normalizeEncodingName(encoding) {\n if (!encoding) {\n return null\n }\n\n return encoding.toLowerCase().replace(/[^a-z0-9]/g, '')\n }\n\n function encodingsMatch(detectedEncoding, declaredEncoding) {\n const detected = normalizeEncodingName(detectedEncoding)\n const declared = normalizeEncodingName(declaredEncoding)\n\n if (!detected || !declared) {\n return true\n }\n\n if (declared === 'utf16') {\n return detected === 'utf16le' || detected === 'utf16be'\n }\n\n return detected === declared\n }\n\n function validateXmlDeclarationEncoding(parser, data) {\n if (\n !parser.strict ||\n !parser.encoding ||\n !data ||\n data.name !== 'xml'\n ) {\n return\n }\n\n var declaredEncoding = getDeclaredEncoding(data.body)\n if (\n declaredEncoding &&\n !encodingsMatch(parser.encoding, declaredEncoding)\n ) {\n strictFail(\n parser,\n 'XML declaration encoding ' +\n declaredEncoding +\n ' does not match detected stream encoding ' +\n parser.encoding.toUpperCase()\n )\n }\n }\n\n function emitNode(parser, nodeType, data) {\n if (parser.textNode) closeText(parser)\n emit(parser, nodeType, data)\n }\n\n function closeText(parser) {\n parser.textNode = textopts(parser.opt, parser.textNode)\n if (parser.textNode) emit(parser, 'ontext', parser.textNode)\n parser.textNode = ''\n }\n\n function textopts(opt, text) {\n if (opt.trim) text = text.trim()\n if (opt.normalize) text = text.replace(/\\s+/g, ' ')\n return text\n }\n\n function error(parser, er) {\n closeText(parser)\n if (parser.trackPosition) {\n er +=\n '\\nLine: ' +\n parser.line +\n '\\nColumn: ' +\n parser.column +\n '\\nChar: ' +\n parser.c\n }\n er = new Error(er)\n parser.error = er\n emit(parser, 'onerror', er)\n return parser\n }\n\n function end(parser) {\n if (parser.sawRoot && !parser.closedRoot)\n strictFail(parser, 'Unclosed root tag')\n if (\n parser.state !== S.BEGIN &&\n parser.state !== S.BEGIN_WHITESPACE &&\n parser.state !== S.TEXT\n ) {\n error(parser, 'Unexpected end')\n }\n closeText(parser)\n parser.c = ''\n parser.closed = true\n emit(parser, 'onend')\n SAXParser.call(parser, parser.strict, parser.opt)\n return parser\n }\n\n function strictFail(parser, message) {\n if (typeof parser !== 'object' || !(parser instanceof SAXParser)) {\n throw new Error('bad call to strictFail')\n }\n if (parser.strict) {\n error(parser, message)\n }\n }\n\n function newTag(parser) {\n if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]()\n var parent = parser.tags[parser.tags.length - 1] || parser\n var tag = (parser.tag = { name: parser.tagName, attributes: {} })\n\n // will be overridden if tag contails an xmlns=\"foo\" or xmlns:foo=\"bar\"\n if (parser.opt.xmlns) {\n tag.ns = parent.ns\n }\n parser.attribList.length = 0\n emitNode(parser, 'onopentagstart', tag)\n }\n\n function qname(name, attribute) {\n var i = name.indexOf(':')\n var qualName = i < 0 ? ['', name] : name.split(':')\n var prefix = qualName[0]\n var local = qualName[1]\n\n // <x \"xmlns\"=\"http://foo\">\n if (attribute && name === 'xmlns') {\n prefix = 'xmlns'\n local = ''\n }\n\n return { prefix: prefix, local: local }\n }\n\n function attrib(parser) {\n if (!parser.strict) {\n parser.attribName = parser.attribName[parser.looseCase]()\n }\n\n if (\n parser.attribList.indexOf(parser.attribName) !== -1 ||\n parser.tag.attributes.hasOwnProperty(parser.attribName)\n ) {\n parser.attribName = parser.attribValue = ''\n return\n }\n\n if (parser.opt.xmlns) {\n var qn = qname(parser.attribName, true)\n var prefix = qn.prefix\n var local = qn.local\n\n if (prefix === 'xmlns') {\n // namespace binding attribute. push the binding into scope\n if (local === 'xml' && parser.attribValue !== XML_NAMESPACE) {\n strictFail(\n parser,\n 'xml: prefix must be bound to ' +\n XML_NAMESPACE +\n '\\n' +\n 'Actual: ' +\n parser.attribValue\n )\n } else if (\n local === 'xmlns' &&\n parser.attribValue !== XMLNS_NAMESPACE\n ) {\n strictFail(\n parser,\n 'xmlns: prefix must be bound to ' +\n XMLNS_NAMESPACE +\n '\\n' +\n 'Actual: ' +\n parser.attribValue\n )\n } else {\n var tag = parser.tag\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (tag.ns === parent.ns) {\n tag.ns = Object.create(parent.ns)\n }\n tag.ns[local] = parser.attribValue\n }\n }\n\n // defer onattribute events until all attributes have been seen\n // so any new bindings can take effect. preserve attribute order\n // so deferred events can be emitted in document order\n parser.attribList.push([parser.attribName, parser.attribValue])\n } else {\n // in non-xmlns mode, we can emit the event right away\n parser.tag.attributes[parser.attribName] = parser.attribValue\n emitNode(parser, 'onattribute', {\n name: parser.attribName,\n value: parser.attribValue,\n })\n }\n\n parser.attribName = parser.attribValue = ''\n }\n\n function openTag(parser, selfClosing) {\n if (parser.opt.xmlns) {\n // emit namespace binding events\n var tag = parser.tag\n\n // add namespace info to tag\n var qn = qname(parser.tagName)\n tag.prefix = qn.prefix\n tag.local = qn.local\n tag.uri = tag.ns[qn.prefix] || ''\n\n if (tag.prefix && !tag.uri) {\n strictFail(\n parser,\n 'Unbound namespace prefix: ' + JSON.stringify(parser.tagName)\n )\n tag.uri = qn.prefix\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (tag.ns && parent.ns !== tag.ns) {\n Object.keys(tag.ns).forEach(function (p) {\n emitNode(parser, 'onopennamespace', {\n prefix: p,\n uri: tag.ns[p],\n })\n })\n }\n\n // handle deferred onattribute events\n // Note: do not apply default ns to attributes:\n // http://www.w3.org/TR/REC-xml-names/#defaulting\n for (var i = 0, l = parser.attribList.length; i < l; i++) {\n var nv = parser.attribList[i]\n var name = nv[0]\n var value = nv[1]\n var qualName = qname(name, true)\n var prefix = qualName.prefix\n var local = qualName.local\n var uri = prefix === '' ? '' : tag.ns[prefix] || ''\n var a = {\n name: name,\n value: value,\n prefix: prefix,\n local: local,\n uri: uri,\n }\n\n // if there's any attributes with an undefined namespace,\n // then fail on them now.\n if (prefix && prefix !== 'xmlns' && !uri) {\n strictFail(\n parser,\n 'Unbound namespace prefix: ' + JSON.stringify(prefix)\n )\n a.uri = prefix\n }\n parser.tag.attributes[name] = a\n emitNode(parser, 'onattribute', a)\n }\n parser.attribList.length = 0\n }\n\n parser.tag.isSelfClosing = !!selfClosing\n\n // process the tag\n parser.sawRoot = true\n parser.tags.push(parser.tag)\n emitNode(parser, 'onopentag', parser.tag)\n if (!selfClosing) {\n // special case for <script> in non-strict mode.\n if (!parser.noscript && parser.tagName.toLowerCase() === 'script') {\n parser.state = S.SCRIPT\n } else {\n parser.state = S.TEXT\n }\n parser.tag = null\n parser.tagName = ''\n }\n parser.attribName = parser.attribValue = ''\n parser.attribList.length = 0\n }\n\n function closeTag(parser) {\n if (!parser.tagName) {\n strictFail(parser, 'Weird empty close tag.')\n parser.textNode += '</>'\n parser.state = S.TEXT\n return\n }\n\n if (parser.script) {\n if (parser.tagName !== 'script') {\n parser.script += '</' + parser.tagName + '>'\n parser.tagName = ''\n parser.state = S.SCRIPT\n return\n }\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n\n // first make sure that the closing tag actually exists.\n // <a><b></c></b></a> will close everything, otherwise.\n var t = parser.tags.length\n var tagName = parser.tagName\n if (!parser.strict) {\n tagName = tagName[parser.looseCase]()\n }\n var closeTo = tagName\n while (t--) {\n var close = parser.tags[t]\n if (close.name !== closeTo) {\n // fail the first time in strict mode\n strictFail(parser, 'Unexpected close tag')\n } else {\n break\n }\n }\n\n // didn't find it. we already failed for strict, so just abort.\n if (t < 0) {\n strictFail(parser, 'Unmatched closing tag: ' + parser.tagName)\n parser.textNode += '</' + parser.tagName + '>'\n parser.state = S.TEXT\n return\n }\n parser.tagName = tagName\n var s = parser.tags.length\n while (s-- > t) {\n var tag = (parser.tag = parser.tags.pop())\n parser.tagName = parser.tag.name\n emitNode(parser, 'onclosetag', parser.tagName)\n\n var x = {}\n for (var i in tag.ns) {\n x[i] = tag.ns[i]\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (parser.opt.xmlns && tag.ns !== parent.ns) {\n // remove namespace bindings introduced by tag\n Object.keys(tag.ns).forEach(function (p) {\n var n = tag.ns[p]\n emitNode(parser, 'onclosenamespace', { prefix: p, uri: n })\n })\n }\n }\n if (t === 0) parser.closedRoot = true\n parser.tagName = parser.attribValue = parser.attribName = ''\n parser.attribList.length = 0\n parser.state = S.TEXT\n }\n\n function parseEntity(parser) {\n var entity = parser.entity\n var entityLC = entity.toLowerCase()\n var num\n var numStr = ''\n\n if (parser.ENTITIES[entity]) {\n return parser.ENTITIES[entity]\n }\n if (parser.ENTITIES[entityLC]) {\n return parser.ENTITIES[entityLC]\n }\n entity = entityLC\n if (entity.charAt(0) === '#') {\n if (entity.charAt(1) === 'x') {\n entity = entity.slice(2)\n num = parseInt(entity, 16)\n numStr = num.toString(16)\n } else {\n entity = entity.slice(1)\n num = parseInt(entity, 10)\n numStr = num.toString(10)\n }\n }\n entity = entity.replace(/^0+/, '')\n if (\n isNaN(num) ||\n numStr.toLowerCase() !== entity ||\n num < 0 ||\n num > 0x10ffff\n ) {\n strictFail(parser, 'Invalid character entity')\n return '&' + parser.entity + ';'\n }\n\n return String.fromCodePoint(num)\n }\n\n function beginWhiteSpace(parser, c) {\n if (c === '<') {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else if (!isWhitespace(c)) {\n // have to process this as a text node.\n // weird, but happens.\n strictFail(parser, 'Non-whitespace before first tag.')\n parser.textNode = c\n parser.state = S.TEXT\n }\n }\n\n function charAt(chunk, i) {\n var result = ''\n if (i < chunk.length) {\n result = chunk.charAt(i)\n }\n return result\n }\n\n function write(chunk) {\n var parser = this\n if (this.error) {\n throw this.error\n }\n if (parser.closed) {\n return error(\n parser,\n 'Cannot write after close. Assign an onready handler.'\n )\n }\n if (chunk === null) {\n return end(parser)\n }\n if (typeof chunk === 'object') {\n chunk = chunk.toString()\n }\n var i = 0\n var c = ''\n while (true) {\n c = charAt(chunk, i++)\n parser.c = c\n\n if (!c) {\n break\n }\n\n if (parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n\n switch (parser.state) {\n case S.BEGIN:\n parser.state = S.BEGIN_WHITESPACE\n if (c === '\\uFEFF') {\n continue\n }\n beginWhiteSpace(parser, c)\n continue\n\n case S.BEGIN_WHITESPACE:\n beginWhiteSpace(parser, c)\n continue\n\n case S.TEXT:\n if (parser.sawRoot && !parser.closedRoot) {\n var starti = i - 1\n while (c && c !== '<' && c !== '&') {\n c = charAt(chunk, i++)\n if (c && parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n }\n parser.textNode += chunk.substring(starti, i - 1)\n }\n if (\n c === '<' &&\n !(parser.sawRoot && parser.closedRoot && !parser.strict)\n ) {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else {\n if (\n !isWhitespace(c) &&\n (!parser.sawRoot || parser.closedRoot)\n ) {\n strictFail(parser, 'Text data outside of root node.')\n }\n if (c === '&') {\n parser.state = S.TEXT_ENTITY\n } else {\n parser.textNode += c\n }\n }\n continue\n\n case S.SCRIPT:\n // only non-strict\n if (c === '<') {\n parser.state = S.SCRIPT_ENDING\n } else {\n parser.script += c\n }\n continue\n\n case S.SCRIPT_ENDING:\n if (c === '/') {\n parser.state = S.CLOSE_TAG\n } else {\n parser.script += '<' + c\n parser.state = S.SCRIPT\n }\n continue\n\n case S.OPEN_WAKA:\n // either a /, ?, !, or text is coming next.\n if (c === '!') {\n parser.state = S.SGML_DECL\n parser.sgmlDecl = ''\n } else if (isWhitespace(c)) {\n // wait for it...\n } else if (isMatch(nameStart, c)) {\n parser.state = S.OPEN_TAG\n parser.tagName = c\n } else if (c === '/') {\n parser.state = S.CLOSE_TAG\n parser.tagName = ''\n } else if (c === '?') {\n parser.state = S.PROC_INST\n parser.procInstName = parser.procInstBody = ''\n } else {\n strictFail(parser, 'Unencoded <')\n // if there was some whitespace, then add that in.\n if (parser.startTagPosition + 1 < parser.position) {\n var pad = parser.position - parser.startTagPosition\n c = new Array(pad).join(' ') + c\n }\n parser.textNode += '<' + c\n parser.state = S.TEXT\n }\n continue\n\n case S.SGML_DECL:\n if (parser.sgmlDecl + c === '--') {\n parser.state = S.COMMENT\n parser.comment = ''\n parser.sgmlDecl = ''\n continue\n }\n\n if (\n parser.doctype &&\n parser.doctype !== true &&\n parser.sgmlDecl\n ) {\n parser.state = S.DOCTYPE_DTD\n parser.doctype += '<!' + parser.sgmlDecl + c\n parser.sgmlDecl = ''\n } else if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {\n emitNode(parser, 'onopencdata')\n parser.state = S.CDATA\n parser.sgmlDecl = ''\n parser.cdata = ''\n } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {\n parser.state = S.DOCTYPE\n if (parser.doctype || parser.sawRoot) {\n strictFail(\n parser,\n 'Inappropriately located doctype declaration'\n )\n }\n parser.doctype = ''\n parser.sgmlDecl = ''\n } else if (c === '>') {\n emitNode(parser, 'onsgmldeclaration', parser.sgmlDecl)\n parser.sgmlDecl = ''\n parser.state = S.TEXT\n } else if (isQuote(c)) {\n parser.state = S.SGML_DECL_QUOTED\n parser.sgmlDecl += c\n } else {\n parser.sgmlDecl += c\n }\n continue\n\n case S.SGML_DECL_QUOTED:\n if (c === parser.q) {\n parser.state = S.SGML_DECL\n parser.q = ''\n }\n parser.sgmlDecl += c\n continue\n\n case S.DOCTYPE:\n if (c === '>') {\n parser.state = S.TEXT\n emitNode(parser, 'ondoctype', parser.doctype)\n parser.doctype = true // just remember that we saw it.\n } else {\n parser.doctype += c\n if (c === '[') {\n parser.state = S.DOCTYPE_DTD\n } else if (isQuote(c)) {\n parser.state = S.DOCTYPE_QUOTED\n parser.q = c\n }\n }\n continue\n\n case S.DOCTYPE_QUOTED:\n parser.doctype += c\n if (c === parser.q) {\n parser.q = ''\n parser.state = S.DOCTYPE\n }\n continue\n\n case S.DOCTYPE_DTD:\n if (c === ']') {\n parser.doctype += c\n parser.state = S.DOCTYPE\n } else if (c === '<') {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else if (isQuote(c)) {\n parser.doctype += c\n parser.state = S.DOCTYPE_DTD_QUOTED\n parser.q = c\n } else {\n parser.doctype += c\n }\n continue\n\n case S.DOCTYPE_DTD_QUOTED:\n parser.doctype += c\n if (c === parser.q) {\n parser.state = S.DOCTYPE_DTD\n parser.q = ''\n }\n continue\n\n case S.COMMENT:\n if (c === '-') {\n parser.state = S.COMMENT_ENDING\n } else {\n parser.comment += c\n }\n continue\n\n case S.COMMENT_ENDING:\n if (c === '-') {\n parser.state = S.COMMENT_ENDED\n parser.comment = textopts(parser.opt, parser.comment)\n if (parser.comment) {\n emitNode(parser, 'oncomment', parser.comment)\n }\n parser.comment = ''\n } else {\n parser.comment += '-' + c\n parser.state = S.COMMENT\n }\n continue\n\n case S.COMMENT_ENDED:\n if (c !== '>') {\n strictFail(parser, 'Malformed comment')\n // allow <!-- blah -- bloo --> in non-strict mode,\n // which is a comment of \" blah -- bloo \"\n parser.comment += '--' + c\n parser.state = S.COMMENT\n } else if (parser.doctype && parser.doctype !== true) {\n parser.state = S.DOCTYPE_DTD\n } else {\n parser.state = S.TEXT\n }\n continue\n\n case S.CDATA:\n var starti = i - 1\n while (c && c !== ']') {\n c = charAt(chunk, i++)\n if (c && parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n }\n parser.cdata += chunk.substring(starti, i - 1)\n if (c === ']') {\n parser.state = S.CDATA_ENDING\n }\n continue\n\n case S.CDATA_ENDING:\n if (c === ']') {\n parser.state = S.CDATA_ENDING_2\n } else {\n parser.cdata += ']' + c\n parser.state = S.CDATA\n }\n continue\n\n case S.CDATA_ENDING_2:\n if (c === '>') {\n if (parser.cdata) {\n emitNode(parser, 'oncdata', parser.cdata)\n }\n emitNode(parser, 'onclosecdata')\n parser.cdata = ''\n parser.state = S.TEXT\n } else if (c === ']') {\n parser.cdata += ']'\n } else {\n parser.cdata += ']]' + c\n parser.state = S.CDATA\n }\n continue\n\n case S.PROC_INST:\n if (c === '?') {\n parser.state = S.PROC_INST_ENDING\n } else if (isWhitespace(c)) {\n parser.state = S.PROC_INST_BODY\n } else {\n parser.procInstName += c\n }\n continue\n\n case S.PROC_INST_BODY:\n if (!parser.procInstBody && isWhitespace(c)) {\n continue\n } else if (c === '?') {\n parser.state = S.PROC_INST_ENDING\n } else {\n parser.procInstBody += c\n }\n continue\n\n case S.PROC_INST_ENDING:\n if (c === '>') {\n const procInstEndData = {\n name: parser.procInstName,\n body: parser.procInstBody,\n }\n validateXmlDeclarationEncoding(parser, procInstEndData)\n emitNode(parser, 'onprocessinginstruction', procInstEndData)\n parser.procInstName = parser.procInstBody = ''\n parser.state = S.TEXT\n } else {\n parser.procInstBody += '?' + c\n parser.state = S.PROC_INST_BODY\n }\n continue\n\n case S.OPEN_TAG:\n if (isMatch(nameBody, c)) {\n parser.tagName += c\n } else {\n newTag(parser)\n if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, 'Invalid character in tag name')\n }\n parser.state = S.ATTRIB\n }\n }\n continue\n\n case S.OPEN_TAG_SLASH:\n if (c === '>') {\n openTag(parser, true)\n closeTag(parser)\n } else {\n strictFail(\n parser,\n 'Forward-slash in opening tag not followed by >'\n )\n parser.state = S.ATTRIB\n }\n continue\n\n case S.ATTRIB:\n // haven't read the attribute name yet.\n if (isWhitespace(c)) {\n continue\n } else if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c\n parser.attribValue = ''\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_NAME:\n if (c === '=') {\n parser.state = S.ATTRIB_VALUE\n } else if (c === '>') {\n strictFail(parser, 'Attribute without value')\n parser.attribValue = parser.attribName\n attrib(parser)\n openTag(parser)\n } else if (isWhitespace(c)) {\n parser.state = S.ATTRIB_NAME_SAW_WHITE\n } else if (isMatch(nameBody, c)) {\n parser.attribName += c\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_NAME_SAW_WHITE:\n if (c === '=') {\n parser.state = S.ATTRIB_VALUE\n } else if (isWhitespace(c)) {\n continue\n } else {\n strictFail(parser, 'Attribute without value')\n parser.tag.attributes[parser.attribName] = ''\n parser.attribValue = ''\n emitNode(parser, 'onattribute', {\n name: parser.attribName,\n value: '',\n })\n parser.attribName = ''\n if (c === '>') {\n openTag(parser)\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n parser.state = S.ATTRIB\n }\n }\n continue\n\n case S.ATTRIB_VALUE:\n if (isWhitespace(c)) {\n continue\n } else if (isQuote(c)) {\n parser.q = c\n parser.state = S.ATTRIB_VALUE_QUOTED\n } else {\n if (!parser.opt.unquotedAttributeValues) {\n error(parser, 'Unquoted attribute value')\n }\n parser.state = S.ATTRIB_VALUE_UNQUOTED\n parser.attribValue = c\n }\n continue\n\n case S.ATTRIB_VALUE_QUOTED:\n if (c !== parser.q) {\n if (c === '&') {\n parser.state = S.ATTRIB_VALUE_ENTITY_Q\n } else {\n parser.attribValue += c\n }\n continue\n }\n attrib(parser)\n parser.q = ''\n parser.state = S.ATTRIB_VALUE_CLOSED\n continue\n\n case S.ATTRIB_VALUE_CLOSED:\n if (isWhitespace(c)) {\n parser.state = S.ATTRIB\n } else if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else if (isMatch(nameStart, c)) {\n strictFail(parser, 'No whitespace between attributes')\n parser.attribName = c\n parser.attribValue = ''\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_VALUE_UNQUOTED:\n if (!isAttribEnd(c)) {\n if (c === '&') {\n parser.state = S.ATTRIB_VALUE_ENTITY_U\n } else {\n parser.attribValue += c\n }\n continue\n }\n attrib(parser)\n if (c === '>') {\n openTag(parser)\n } else {\n parser.state = S.ATTRIB\n }\n continue\n\n case S.CLOSE_TAG:\n if (!parser.tagName) {\n if (isWhitespace(c)) {\n continue\n } else if (notMatch(nameStart, c)) {\n if (parser.script) {\n parser.script += '</' + c\n parser.state = S.SCRIPT\n } else {\n strictFail(parser, 'Invalid tagname in closing tag.')\n }\n } else {\n parser.tagName = c\n }\n } else if (c === '>') {\n closeTag(parser)\n } else if (isMatch(nameBody, c)) {\n parser.tagName += c\n } else if (parser.script) {\n parser.script += '</' + parser.tagName + c\n parser.tagName = ''\n parser.state = S.SCRIPT\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, 'Invalid tagname in closing tag')\n }\n parser.state = S.CLOSE_TAG_SAW_WHITE\n }\n continue\n\n case S.CLOSE_TAG_SAW_WHITE:\n if (isWhitespace(c)) {\n continue\n }\n if (c === '>') {\n closeTag(parser)\n } else {\n strictFail(parser, 'Invalid characters in closing tag')\n }\n continue\n\n case S.TEXT_ENTITY:\n case S.ATTRIB_VALUE_ENTITY_Q:\n case S.ATTRIB_VALUE_ENTITY_U:\n var returnState\n var buffer\n switch (parser.state) {\n case S.TEXT_ENTITY:\n returnState = S.TEXT\n buffer = 'textNode'\n break\n\n case S.ATTRIB_VALUE_ENTITY_Q:\n returnState = S.ATTRIB_VALUE_QUOTED\n buffer = 'attribValue'\n break\n\n case S.ATTRIB_VALUE_ENTITY_U:\n returnState = S.ATTRIB_VALUE_UNQUOTED\n buffer = 'attribValue'\n break\n }\n\n if (c === ';') {\n var parsedEntity = parseEntity(parser)\n if (\n parser.opt.unparsedEntities &&\n !Object.values(sax.XML_ENTITIES).includes(parsedEntity)\n ) {\n if ((parser.entityCount += 1) > parser.opt.maxEntityCount) {\n error(\n parser,\n 'Parsed entity count exceeds max entity count'\n )\n }\n\n if ((parser.entityDepth += 1) > parser.opt.maxEntityDepth) {\n error(\n parser,\n 'Parsed entity depth exceeds max entity depth'\n )\n }\n\n parser.entity = ''\n parser.state = returnState\n parser.write(parsedEntity)\n parser.entityDepth -= 1\n } else {\n parser[buffer] += parsedEntity\n parser.entity = ''\n parser.state = returnState\n }\n } else if (\n isMatch(parser.entity.length ? entityBody : entityStart, c)\n ) {\n parser.entity += c\n } else {\n strictFail(parser, 'Invalid character in entity name')\n parser[buffer] += '&' + parser.entity + c\n parser.entity = ''\n parser.state = returnState\n }\n\n continue\n\n default: /* istanbul ignore next */ {\n throw new Error(parser, 'Unknown state: ' + parser.state)\n }\n }\n } // while\n\n if (parser.position >= parser.bufferCheckPosition) {\n checkBufferLength(parser)\n }\n return parser\n }\n\n /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */\n /* istanbul ignore next */\n if (!String.fromCodePoint) {\n ;(function () {\n var stringFromCharCode = String.fromCharCode\n var floor = Math.floor\n var fromCodePoint = function () {\n var MAX_SIZE = 0x4000\n var codeUnits = []\n var highSurrogate\n var lowSurrogate\n var index = -1\n var length = arguments.length\n if (!length) {\n return ''\n }\n var result = ''\n while (++index < length) {\n var codePoint = Number(arguments[index])\n if (\n !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n codePoint < 0 || // not a valid Unicode code point\n codePoint > 0x10ffff || // not a valid Unicode code point\n floor(codePoint) !== codePoint // not an integer\n ) {\n throw RangeError('Invalid code point: ' + codePoint)\n }\n if (codePoint <= 0xffff) {\n // BMP code point\n codeUnits.push(codePoint)\n } else {\n // Astral code point; split in surrogate halves\n // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000\n highSurrogate = (codePoint >> 10) + 0xd800\n lowSurrogate = (codePoint % 0x400) + 0xdc00\n codeUnits.push(highSurrogate, lowSurrogate)\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += stringFromCharCode.apply(null, codeUnits)\n codeUnits.length = 0\n }\n }\n return result\n }\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(String, 'fromCodePoint', {\n value: fromCodePoint,\n configurable: true,\n writable: true,\n })\n } else {\n String.fromCodePoint = fromCodePoint\n }\n })()\n }\n})(typeof exports === 'undefined' ? (this.sax = {}) : exports)\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.XmlDocument = exports.XmlElement = exports.XmlCommentNode = exports.XmlCDataNode = exports.XmlTextNode = void 0;\nconst sax_1 = __importDefault(require(\"sax\"));\n/**\n * Represents a text node in an XML document\n */\nclass XmlTextNode {\n /**\n * Creates a new text node\n * @param text The text content\n */\n constructor(text) {\n this.text = text;\n this.type = \"text\";\n }\n /**\n * Converts the text node to a string\n * @param options Formatting options\n * @returns String representation of the text node\n */\n toString(options) {\n return formatText(escapeXML(this.text), options);\n }\n /**\n * Converts the text node to a string with indentation\n * @param indent The indentation to use\n * @param options Formatting options\n * @returns String representation of the text node with indentation\n */\n toStringWithIndent(indent, options) {\n return indent + this.toString(options);\n }\n}\nexports.XmlTextNode = XmlTextNode;\n/**\n * Represents a CDATA node in an XML document\n */\nclass XmlCDataNode {\n /**\n * Creates a new CDATA node\n * @param cdata The CDATA content\n */\n constructor(cdata) {\n this.cdata = cdata;\n this.type = \"cdata\";\n }\n /**\n * Converts the CDATA node to a string\n * @param options Formatting options\n * @returns String representation of the CDATA node\n */\n toString(options) {\n return `<![CDATA[${formatText(this.cdata, options)}]]>`;\n }\n /**\n * Converts the CDATA node to a string with indentation\n * @param indent The indentation to use\n * @param options Formatting options\n * @returns String representation of the CDATA node with indentation\n */\n toStringWithIndent(indent, options) {\n return indent + this.toString(options);\n }\n}\nexports.XmlCDataNode = XmlCDataNode;\n/**\n * Represents a comment node in an XML document\n */\nclass XmlCommentNode {\n /**\n * Creates a new comment node\n * @param comment The comment content\n */\n constructor(comment) {\n this.comment = comment;\n this.type = \"comment\";\n }\n /**\n * Converts the comment node to a string\n * @param options Formatting options\n * @returns String representation of the comment node\n */\n toString(options) {\n return `<!--${formatText(escapeXML(this.comment), options)}-->`;\n }\n /**\n * Converts the comment node to a string with indentation\n * @param indent The indentation to use\n * @param options Formatting options\n * @returns String representation of the comment node with indentation\n */\n toStringWithIndent(indent, options) {\n return indent + this.toString(options);\n }\n}\nexports.XmlCommentNode = XmlCommentNode;\n/**\n * Represents an XML element node with children\n */\nclass XmlElement {\n /**\n * Creates a new XML element\n * @param tag The tag name and attributes\n * @param parser Optional SAX parser instance with position information\n */\n constructor(tag, parser) {\n this.type = \"element\";\n // If you didn't hand us a parser (common case) see if we can grab one\n // from the current execution stack.\n if (!parser && delegates.length) {\n var delegate = delegates[delegates.length - 1];\n if (\"parser\" in delegate) {\n parser = delegate.parser;\n }\n }\n this.name = tag.name;\n this.attr = tag.attributes;\n this.val = \"\";\n this.children = [];\n this.firstChild = null;\n this.lastChild = null;\n // Assign parse information\n this.line = parser ? parser.line : null;\n this.column = parser ? parser.column : null;\n this.position = parser ? parser.position : null;\n this.startTagPosition = parser ? parser.startTagPosition : null;\n }\n /**\n * Adds a child node to this element\n * @param child The child node to add\n */\n _addChild(child) {\n // add to our children array\n this.children.push(child);\n // update first/last pointers\n if (!this.firstChild)\n this.firstChild = child;\n this.lastChild = child;\n }\n _opentag(tag) {\n const child = new XmlElement(tag);\n this._addChild(child);\n delegates.unshift(child);\n }\n _closetag() {\n delegates.shift();\n }\n _text(text) {\n this.val += text;\n this._addChild(new XmlTextNode(text));\n }\n _cdata(cdata) {\n this.val += cdata;\n this._addChild(new XmlCDataNode(cdata));\n }\n _comment(comment) {\n this._addChild(new XmlCommentNode(comment));\n }\n _error(err) {\n throw err;\n }\n /**\n * Iterates through each child element of this node\n * @param iterator Function to call for each child element\n * @param context Optional context to use for the iterator function\n */\n eachChild(iterator, context) {\n for (let i = 0, l = this.children.length; i < l; i++) {\n const child = this.children[i];\n if (child.type === \"element\") {\n if (iterator.call(context, child, i, this.children) ===\n false)\n return;\n }\n }\n }\n /**\n * Finds the first child element with the given name\n * @param name The name of the child element to find\n * @returns The first matching child element, or undefined if not found\n */\n childNamed(name) {\n for (let i = 0, l = this.children.length; i < l; i++) {\n const child = this.children[i];\n if (child.type === \"element\" && child.name === name) {\n return child;\n }\n }\n return undefined;\n }\n /**\n * Finds all child elements with the given name\n * @param name The name of the child elements to find\n * @returns Array of matching child elements\n */\n childrenNamed(name) {\n const matches = [];\n for (let i = 0, l = this.children.length; i < l; i++) {\n const child = this.children[i];\n if (child.type === \"element\" && child.name === name) {\n matches.push(child);\n }\n }\n return matches;\n }\n /**\n * Finds the first child element with the given attribute\n * @param name The name of the attribute to find\n * @param value Optional value the attribute should have\n * @returns The first matching child element, or undefined if not found\n */\n childWithAttribute(name, value) {\n for (let i = 0, l = this.children.length; i < l; i++) {\n const child = this.children[i];\n if (child.type === \"element\" &&\n ((value !== undefined && child.attr[name] === value) ||\n (value === undefined && child.attr[name]))) {\n return child;\n }\n }\n return undefined;\n }\n /**\n * Finds all descendant elements with the given name, searching recursively\n * @param name The name of the descendant elements to find\n * @returns Array of matching descendant elements\n */\n descendantsNamed(name) {\n const matches = [];\n for (let i = 0, l = this.children.length; i < l; i++) {\n const child = this.children[i];\n if (child.type === \"element\") {\n const element = child;\n if (element.name === name)\n matches.push(element);\n matches.push(...element.descendantsNamed(name));\n }\n }\n return matches;\n }\n /**\n * Finds a descendant element using a dot-notation path\n * @param path The path to the descendant, e.g. \"author.name\"\n * @returns The matching descendant element, or undefined if not found\n * @example\n * // For XML: <book><author><name>John</name></author></book>\n * bookNode.descendantWithPath(\"author.name\") // returns the <name> element\n */\n descendantWithPath(path) {\n let descendant = this;\n const components = path.split(\".\");\n for (let i = 0, l = components.length; i < l; i++) {\n if (descendant && descendant.type === \"element\") {\n descendant = descendant.childNamed(components[i]);\n }\n else {\n return undefined;\n }\n }\n return descendant;\n }\n /**\n * Gets the value of a descendant element or attribute using a path\n * @param path The path to the descendant or attribute, e.g. \"author.name\" or \"author.name@id\"\n * @returns The value of the descendant or attribute, or undefined if not found\n * @example\n * // For XML: <book><author><name id=\"1\">John</name></author></book>\n * bookNode.valueWithPath(\"author.name\") // returns \"John\"\n * bookNode.valueWithPath(\"author.name@id\") // returns \"1\"\n */\n valueWithPath(path) {\n const components = path.split(\"@\");\n const descendant = this.descendantWithPath(components[0]);\n if (descendant) {\n return components.length > 1\n ? descendant.attr[components[1]]\n : descendant.val;\n }\n else {\n return undefined;\n }\n }\n /**\n * Converts the element to a string representation\n * @param options Formatting options\n * @returns String representation of the element\n */\n toString(options) {\n return this.toStringWithIndent(\"\", options);\n }\n /**\n * Converts the element to a string with the specified indentation\n * @param indent The indentation to use\n * @param options Formatting options\n * @returns String representation of the element with indentation\n */\n toStringWithIndent(indent, options) {\n let s = `${indent}<${this.name}`;\n const linebreak = (options === null || options === void 0 ? void 0 : options.compressed) ? \"\" : \"\\n\";\n for (const name in this.attr) {\n if (Object.prototype.hasOwnProperty.call(this.attr, name)) {\n s += ` ${name}=\"${escapeXML(this.attr[name])}\"`;\n }\n }\n if (this.children.length === 1 && this.children[0].type !== \"element\") {\n s += `>${this.children[0].toString(options)}</${this.name}>`;\n }\n else if (this.children.length) {\n s += `>${linebreak}`;\n const childIndent = indent + ((options === null || options === void 0 ? void 0 : options.compressed) ? \"\" : \" \");\n for (let i = 0, l = this.children.length; i < l; i++) {\n s += `${this.children[i].toStringWithIndent(childIndent, options)}${linebreak}`;\n }\n s += `${indent}</${this.name}>`;\n }\n else if (options === null || options === void 0 ? void 0 : options.html) {\n const whiteList = [\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"frame\",\n \"hr\",\n \"img\",\n \"input\",\n \"keygen\",\n \"link\",\n \"menuitem\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n ];\n if (whiteList.includes(this.name)) {\n s += \"/>\";\n }\n else {\n s += `></${this.name}>`;\n }\n }\n else {\n s += \"/>\";\n }\n return s;\n }\n}\nexports.XmlElement = XmlElement;\n/**\n * The main XML document class - the entry point for parsing XML\n */\nclass XmlDocument extends XmlElement {\n /**\n * Creates a new XML document from an XML string\n * @param xml The XML string to parse\n * @throws {Error} If the XML is empty or invalid\n * @example\n * ```ts\n * import { XmlDocument } from 'xmldoc';\n *\n * const doc = new XmlDocument(\"<root><child>value</child></root>\");\n * console.log(doc.childNamed(\"child\")?.val); // \"value\"\n * ```\n */\n constructor(xml) {\n // Initialize with a dummy tag that will be replaced\n super({ name: \"\", attributes: {} });\n xml = xml.toString().trim();\n if (!xml) {\n throw new Error(\"No XML to parse!\");\n }\n // Stores doctype (if defined)\n this.doctype = \"\";\n // Expose the parser to the other delegates while the parser is running\n this.parser = sax_1.default.parser(true); // strict\n addParserEvents(this.parser);\n // Initialize delegates with this document\n delegates = [this];\n try {\n this.parser.write(xml);\n }\n finally {\n // Remove the parser as it is no longer needed\n delete this.parser;\n }\n }\n _opentag(tag) {\n if (this.name === \"\") {\n // First tag becomes the root - we'll update our own properties\n this.name = tag.name;\n this.attr = tag.attributes;\n }\n else {\n // All other tags will be the root element's children\n super._opentag(tag);\n }\n }\n _doctype(doctype) {\n this.doctype += doctype;\n }\n}\nexports.XmlDocument = XmlDocument;\n// Helper variables and functions\nlet delegates = [];\nfunction addParserEvents(parser) {\n parser.onopentag = (tag) => { var _a; return (_a = delegates[0]) === null || _a === void 0 ? void 0 : _a._opentag(tag); };\n parser.onclosetag = () => { var _a; return (_a = delegates[0]) === null || _a === void 0 ? void 0 : _a._closetag(); };\n parser.ontext = (text) => { var _a; return (_a = delegates[0]) === null || _a === void 0 ? void 0 : _a._text(text); };\n parser.oncdata = (cdata) => { var _a; return (_a = delegates[0]) === null || _a === void 0 ? void 0 : _a._cdata(cdata); };\n parser.oncomment = (comment) => { var _a; return (_a = delegates[0]) === null || _a === void 0 ? void 0 : _a._comment(comment); };\n parser.ondoctype = (doctype) => {\n const doc = delegates[0];\n if (doc._doctype)\n doc._doctype(doctype);\n };\n parser.onerror = (err) => { var _a; return (_a = delegates[0]) === null || _a === void 0 ? void 0 : _a._error(err); };\n}\n/**\n * Escapes XML special characters\n * @param value The string to escape\n * @returns The escaped string\n */\nfunction escapeXML(value) {\n return value\n .toString()\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/'/g, \"&apos;\")\n .replace(/\"/g, \"&quot;\");\n}\n/**\n * Formats text for display according to the given options\n * @param text The text to format\n * @param options Formatting options\n * @returns The formatted text\n */\nfunction formatText(text, options) {\n let finalText = text;\n if ((options === null || options === void 0 ? void 0 : options.trimmed) && text.length > 25) {\n finalText = finalText.substring(0, 25).trim() + \"…\";\n }\n if (!(options === null || options === void 0 ? void 0 : options.preserveWhitespace)) {\n finalText = finalText.trim();\n }\n return finalText;\n}\n// Export main classes\nexports.default = XmlDocument;\n//# sourceMappingURL=xmldoc.js.map","import { XmlDocument as e } from \"xmldoc\";\n//#region src/apple/parse.ts\nvar t = \"com.apple.ibooks.display-options.xml\", n = (e) => e.childrenNamed(\"option\").map((e) => ({\n\tname: e.attr?.name,\n\tvalue: e.val\n})), r = (t) => {\n\tlet r = new e(t);\n\tif (r.name?.toLowerCase() !== \"display_options\") return { kind: \"apple\" };\n\tlet i = r.childNamed(\"platform\");\n\treturn {\n\t\tkind: \"apple\",\n\t\tdisplayOptions: { ...i === void 0 ? {} : { platform: { options: n(i) } } }\n\t};\n}, i = [\n\t\"Unknown\",\n\t\"No\",\n\t\"Yes\",\n\t\"YesAndRightToLeft\"\n], a = (e) => {\n\tfor (let t of i) if (t === e) return !0;\n\treturn !1;\n}, o = \"ComicInfo.xml\", s = new Set([\"Pages\", \"ComicInfo\"]), c = (e) => e.children.some((e) => e.type === \"element\"), l = (e) => {\n\tlet t = e.val.trim();\n\treturn t.length > 0 ? t : void 0;\n}, u = (t) => {\n\tlet n;\n\ttry {\n\t\tn = new e(t);\n\t} catch (e) {\n\t\tlet t = e instanceof Error ? e.message : String(e);\n\t\tthrow Error(`${o} is malformed: ${t}`, { cause: e });\n\t}\n\tlet r = {};\n\treturn n.eachChild((e) => {\n\t\tif (e.type !== \"element\" || s.has(e.name) || c(e)) return;\n\t\tlet t = l(e);\n\t\tt !== void 0 && r[e.name] === void 0 && (r[e.name] = t);\n\t}), {\n\t\tkind: \"comicInfo\",\n\t\t...r\n\t};\n}, d = \"com.kobobooks.display-options.xml\", f = (e) => {\n\tlet t = e.childNamed(\"platform\");\n\tif (!t) return {};\n\tfor (let e of t.childrenNamed(\"option\")) if (e.attr?.name === \"fixed-layout\") return e.val.trim().toLowerCase() === \"true\" ? { renditionLayout: \"pre-paginated\" } : {};\n\treturn {};\n}, p = (t) => {\n\tlet n = new e(t);\n\treturn n.name?.toLowerCase() === \"display_options\" ? {\n\t\tkind: \"kobo\",\n\t\t...f(n)\n\t} : { kind: \"kobo\" };\n}, m = (e) => e === void 0 || e.trim().length === 0 ? [] : e.trim().split(/\\s+/).filter((e) => e.length > 0), h = (e) => {\n\tlet t = m(e);\n\tif (t.length === 0) return {};\n\tlet n;\n\tt.includes(\"rendition:layout-reflowable\") && (n = \"reflowable\"), t.includes(\"rendition:layout-pre-paginated\") && (n = \"pre-paginated\");\n\tlet r;\n\treturn t.includes(\"rendition:flow-auto\") && (r = \"auto\"), t.includes(\"rendition:flow-paginated\") && (r = \"paginated\"), t.includes(\"rendition:flow-scrolled-doc\") && (r = \"scrolled-doc\"), t.includes(\"rendition:flow-scrolled-continuous\") && (r = \"scrolled-continuous\"), {\n\t\t...n === void 0 ? {} : { renditionLayout: n },\n\t\t...r === void 0 ? {} : { renditionFlow: r },\n\t\t...t.includes(\"page-spread-left\") ? { pageSpreadLeft: !0 } : {},\n\t\t...t.includes(\"page-spread-right\") ? { pageSpreadRight: !0 } : {}\n\t};\n}, g = (e) => e.includes(\":\") ? e.slice(e.lastIndexOf(\":\") + 1) : e, _ = (e, t) => g(e).toLowerCase() === t.toLowerCase(), v = (e) => e.type === \"element\", y = (e, t) => {\n\tfor (let n of e.children) if (v(n) && _(n.name, t)) return n;\n}, b = (e, t) => {\n\tlet n = [];\n\tfor (let r of e.children) v(r) && _(r.name, t) && n.push(r);\n\treturn n;\n}, x = (e) => {\n\tlet t = [];\n\treturn e.eachChild((e) => {\n\t\tif (g(e.name).toLowerCase() !== \"identifier\") return;\n\t\tlet n = e.val.trim();\n\t\tif (n.length === 0) return;\n\t\tlet r = (e.attr[\"opf:scheme\"] ?? e.attr[\"opf:Scheme\"] ?? e.attr.scheme)?.trim();\n\t\tt.push({\n\t\t\tvalue: n,\n\t\t\t...r !== void 0 && r.length > 0 ? { scheme: r } : {}\n\t\t});\n\t}), t;\n}, S = (e, t) => {\n\tlet n;\n\treturn e.eachChild((e) => {\n\t\tif (n !== void 0 || g(e.name).toLowerCase() !== t.toLowerCase()) return;\n\t\tlet r = e.val.trim();\n\t\tr.length > 0 && (n = r);\n\t}), n;\n}, C = (e, t) => {\n\tlet n = [];\n\treturn e.eachChild((e) => {\n\t\tif (g(e.name).toLowerCase() !== t.toLowerCase()) return;\n\t\tlet r = e.val.trim();\n\t\tr.length > 0 && n.push(r);\n\t}), n;\n}, w = (e) => {\n\tlet t;\n\treturn e.eachChild((e) => {\n\t\tif (t !== void 0 || g(e.name).toLowerCase() !== \"meta\" || e.attr.name?.toLowerCase() !== \"cover\") return;\n\t\tlet n = e.attr.content?.trim();\n\t\tn !== void 0 && n.length > 0 && (t = n);\n\t}), t;\n}, T = ({ manifestItems: e, metadataEl: t }) => {\n\tlet n = (e) => e.mediaType?.toLowerCase().includes(\"image/\") === !0, r = e.find((e) => n(e) ? m(e.properties).includes(\"cover-image\") : !1);\n\tif (r !== void 0) return r.href;\n\tif (t !== void 0) {\n\t\tlet r = w(t);\n\t\tif (r !== void 0) {\n\t\t\tlet t = e.find((e) => e.id === r && n(e));\n\t\t\tif (t !== void 0) return t.href;\n\t\t}\n\t}\n\treturn e.find((e) => e.id.toLowerCase().includes(\"cover\") && n(e))?.href;\n}, E = (e, t) => {\n\tlet n = b(e, \"meta\").find((e) => e.attr.property === t)?.val;\n\tif (!(n === void 0 || n.trim().length === 0)) return n;\n}, D = (e) => {\n\tlet t = y(e, \"guide\");\n\tif (t === void 0) return [];\n\tlet n = [];\n\tfor (let e of b(t, \"reference\")) {\n\t\tlet t = e.attr.href?.trim();\n\t\tt === void 0 || t.length === 0 || n.push({\n\t\t\thref: t,\n\t\t\ttitle: e.attr.title?.trim() ?? \"\",\n\t\t\ttype: e.attr.type?.trim() ?? \"\"\n\t\t});\n\t}\n\treturn n;\n}, O = (e) => {\n\tlet t = e.attr.id, n = e.attr.href;\n\tif (t === void 0 || t.length === 0 || n === void 0 || n.length === 0) return;\n\tlet r = e.attr[\"media-type\"], i = e.attr.properties?.trim();\n\treturn {\n\t\tid: t,\n\t\thref: n,\n\t\t...r !== void 0 && r.length > 0 ? { mediaType: r } : {},\n\t\t...i !== void 0 && i.length > 0 ? { properties: i } : {}\n\t};\n}, k = (e) => {\n\tlet t = [], n = /* @__PURE__ */ new Map();\n\tfor (let r of b(e, \"item\")) {\n\t\tlet e = O(r);\n\t\te !== void 0 && (t.push(e), n.set(e.id, e));\n\t}\n\treturn {\n\t\titems: t,\n\t\tbyId: n\n\t};\n}, A = (e, t) => {\n\tlet n = [];\n\tfor (let r of b(t, \"itemref\")) {\n\t\tlet t = r.attr.idref;\n\t\tif (t === void 0 || t.trim().length === 0) continue;\n\t\tlet i = e.get(t);\n\t\tif (i === void 0) continue;\n\t\tlet a = h(r.attr.properties);\n\t\tn.push({\n\t\t\tidref: t,\n\t\t\tid: i.id,\n\t\t\thref: i.href,\n\t\t\t...i.mediaType === void 0 ? {} : { mediaType: i.mediaType },\n\t\t\t...i.properties === void 0 ? {} : { properties: i.properties },\n\t\t\t...a.renditionLayout === void 0 ? {} : { renditionLayout: a.renditionLayout },\n\t\t\t...a.renditionFlow === void 0 ? {} : { renditionFlow: a.renditionFlow },\n\t\t\t...a.pageSpreadLeft === void 0 ? {} : { pageSpreadLeft: a.pageSpreadLeft },\n\t\t\t...a.pageSpreadRight === void 0 ? {} : { pageSpreadRight: a.pageSpreadRight }\n\t\t});\n\t}\n\treturn n;\n}, j = (t) => {\n\tlet n = new e(t), r = y(n, \"manifest\"), i = y(n, \"spine\"), a = y(n, \"metadata\"), o = [], s = [];\n\tif (r !== void 0) {\n\t\tlet { items: e, byId: t } = k(r);\n\t\to = e, i !== void 0 && (s = A(t, i));\n\t}\n\tlet c = i?.attr[\"page-progression-direction\"], l = c !== void 0 && c.trim().length > 0 ? c : void 0, u = i?.attr.toc, d = u !== void 0 && u.trim().length > 0 ? u.trim() : void 0, f, p, m, h, g = [], _ = [], v = [], b, w, O, j = [];\n\ta !== void 0 && (f = S(a, \"title\"), p = S(a, \"publisher\"), m = S(a, \"rights\"), h = S(a, \"date\"), g = C(a, \"creator\"), _ = C(a, \"language\"), v = C(a, \"subject\"), b = E(a, \"rendition:layout\"), w = E(a, \"rendition:flow\"), O = E(a, \"rendition:spread\"), j.push(...x(a)));\n\tlet M = T({\n\t\tmanifestItems: o,\n\t\tmetadataEl: a\n\t}), N = D(n);\n\treturn {\n\t\tkind: \"opf\",\n\t\tmanifestItems: o,\n\t\tspineRows: s,\n\t\tspineTocIdref: d,\n\t\tidentifiers: j,\n\t\ttitle: f,\n\t\tcreators: g,\n\t\tpublisher: p,\n\t\trights: m,\n\t\tlanguages: _,\n\t\tsubjects: v,\n\t\tdate: h,\n\t\tcoverHref: M,\n\t\trenditionLayoutMeta: b,\n\t\trenditionFlowMeta: w,\n\t\trenditionSpreadMeta: O,\n\t\tpageProgressionDirection: l,\n\t\tguide: N\n\t};\n}, M = (e) => ({\n\tgtin: void 0,\n\tisbn: void 0,\n\treadingDirection: void 0,\n\trenditionLayout: (e.displayOptions?.platform?.options?.find((e) => e.name === \"fixed-layout\")?.value)?.trim().toLowerCase() === \"true\" ? \"pre-paginated\" : void 0,\n\ttitle: void 0,\n\tauthors: void 0,\n\tpublisher: void 0,\n\trights: void 0,\n\tlanguages: void 0,\n\tdate: void 0,\n\tsubjects: void 0\n}), N = new Set([\n\t8,\n\t12,\n\t13,\n\t14\n]), P = (e) => {\n\tif (e == null) return;\n\tlet t = String(e).replace(/\\D/g, \"\");\n\tif (!(t.length === 0 || !N.has(t.length))) return t;\n}, F = /(?:97[89])?\\d{9}[\\dXx]/, I = (e) => {\n\tif (e == null) return;\n\tlet t = String(e).trim().replace(/^urn:isbn:/i, \"\").replace(/^isbn[:\\s-]*/i, \"\"), n = t.replace(/[^0-9Xx]/g, \"\");\n\tif (n.length === 10 || n.length === 13) return n.toUpperCase();\n\tlet r = t.match(F);\n\tif (r) return r[0].toUpperCase();\n}, L = (e) => {\n\tswitch (e.Manga) {\n\t\tcase \"YesAndRightToLeft\": return \"rtl\";\n\t\tcase \"Yes\":\n\t\tcase \"No\": return \"ltr\";\n\t\tdefault: return;\n\t}\n}, R = (e) => {\n\tif (e === void 0) return;\n\tlet t = e.trim();\n\treturn t.length > 0 ? t : void 0;\n}, z = (e) => e === void 0 ? [] : e.split(\",\").map((e) => e.trim()).filter((e) => e.length > 0), B = (e) => {\n\tlet t = R(e);\n\tif (t === void 0 || !/^\\d+$/.test(t)) return;\n\tlet n = Number.parseInt(t, 10);\n\treturn Number.isFinite(n) ? n : void 0;\n}, V = (e) => {\n\tlet t = B(e.Year), n = B(e.Month), r = B(e.Day);\n\tif (!(t === void 0 && n === void 0 && r === void 0)) return {\n\t\t...t === void 0 ? {} : { year: t },\n\t\t...n === void 0 ? {} : { month: n },\n\t\t...r === void 0 ? {} : { day: r }\n\t};\n}, H = (e) => {\n\tlet t = e.GTIN, n = R(e.LanguageISO), r = z(e.Writer), i = [...z(e.Genre), ...z(e.Tags)];\n\treturn {\n\t\tgtin: P(t),\n\t\tisbn: I(t),\n\t\treadingDirection: L(e),\n\t\trenditionLayout: void 0,\n\t\ttitle: R(e.Title),\n\t\tauthors: r.length > 0 ? r : void 0,\n\t\tpublisher: R(e.Publisher),\n\t\trights: void 0,\n\t\tlanguages: n === void 0 ? void 0 : [n],\n\t\tdate: V(e),\n\t\tsubjects: i.length > 0 ? i : void 0\n\t};\n}, U = (e) => ({\n\tgtin: void 0,\n\tisbn: void 0,\n\treadingDirection: void 0,\n\trenditionLayout: e.renditionLayout,\n\ttitle: void 0,\n\tauthors: void 0,\n\tpublisher: void 0,\n\trights: void 0,\n\tlanguages: void 0,\n\tdate: void 0,\n\tsubjects: void 0\n}), W = (e) => {\n\tif (e === void 0) return;\n\tlet t = e.trim().match(/^(\\d{4})(?:-(\\d{2})(?:-(\\d{2}))?)?/);\n\tif (t === null) return;\n\tlet [, n, r, i] = t;\n\treturn {\n\t\t...n === void 0 ? {} : { year: Number.parseInt(n, 10) },\n\t\t...r === void 0 ? {} : { month: Number.parseInt(r, 10) },\n\t\t...i === void 0 ? {} : { day: Number.parseInt(i, 10) }\n\t};\n}, G = (e) => {\n\tfor (let t of e) if (t.scheme !== void 0 && t.scheme.trim().toLowerCase() === \"isbn\" && I(t.value) !== void 0) return t.value;\n\tfor (let t of e) if (I(t.value) !== void 0) return t.value;\n}, K = (e) => {\n\tlet t = e.pageProgressionDirection?.trim().toLowerCase(), n = t === \"ltr\" || t === \"rtl\" ? t : void 0, r = e.renditionLayoutMeta?.trim().toLowerCase(), i = r === \"reflowable\" || r === \"pre-paginated\" ? r : void 0, a = G(e.identifiers);\n\treturn {\n\t\tgtin: P(a),\n\t\tisbn: I(a),\n\t\treadingDirection: n,\n\t\trenditionLayout: i,\n\t\ttitle: e.title,\n\t\tauthors: e.creators.length > 0 ? [...e.creators] : void 0,\n\t\tpublisher: e.publisher,\n\t\trights: e.rights,\n\t\tlanguages: e.languages.length > 0 ? [...e.languages] : void 0,\n\t\tdate: W(e.date),\n\t\tsubjects: e.subjects.length > 0 ? [...e.subjects] : void 0\n\t};\n}, q = (e) => e.kind === \"comicInfo\" ? H(e) : e.kind === \"kobo\" ? U(e) : e.kind === \"apple\" ? M(e) : K(e);\n//#endregion\nexport { t as APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME, o as COMIC_INFO_FILENAME, i as COMIC_INFO_MANGA_VALUES, d as KOBO_DISPLAY_OPTIONS_FILENAME, a as isComicInfoManga, P as normalizeGtin, I as normalizeIsbn, r as parseAppleDisplayOptionsXml, u as parseComicInfo, p as parseKoboXml, j as parseOpf, W as parseW3cDtfDate, q as resolveArchiveMetadata, m as tokenizeXmlSpaceSeparatedList };\n\n//# sourceMappingURL=index.js.map","import { n as e, t } from \"../report-uURLD5cl.js\";\nimport { i as n, n as r, r as i, t as a } from \"../uri-DBZYnB1I.js\";\nimport { n as o, t as s } from \"../fileAccessors-etcCPnpQ.js\";\nimport { detectMimeTypeFromName as c, escapeXmlAttributeValue as l, isMediaContentMimeType as u, isXmlBasedMimeType as d, parseContentType as f, urlJoin as p } from \"@prose-reader/shared\";\nimport { APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME as m, COMIC_INFO_FILENAME as h, KOBO_DISPLAY_OPTIONS_FILENAME as g, parseAppleDisplayOptionsXml as ee, parseComicInfo as te, parseKoboXml as ne, parseOpf as re, resolveArchiveMetadata as _, tokenizeXmlSpaceSeparatedList as ie } from \"@prose-reader/archive-parser\";\nimport { XmlDocument as v, XmlElement as ae, XmlTextNode as oe } from \"xmldoc\";\nimport { BehaviorSubject as se, EMPTY as y, NEVER as b, Subject as x, catchError as S, distinctUntilChanged as ce, filter as C, finalize as le, first as w, from as T, ignoreElements as ue, lastValueFrom as de, map as E, merge as D, mergeMap as O, of as fe, pairwise as pe, shareReplay as me, startWith as he, switchMap as k, takeUntil as ge, tap as A, timer as _e } from \"rxjs\";\n//#region src/archives/createArchiveFromArrayBufferList.ts\nvar ve = async (t, { orderByAlpha: i, name: a, encodingFormat: o } = {}) => {\n\tlet l = t;\n\treturn i && (l = l.slice().sort((e, t) => n(e.name, t.name))), e({\n\t\tfilename: a,\n\t\tencodingFormat: o,\n\t\trecords: l.map((e) => {\n\t\t\tlet t = r(e.name);\n\t\t\treturn e.isDir ? {\n\t\t\t\tdir: !0,\n\t\t\t\tbasename: t,\n\t\t\t\turi: e.name\n\t\t\t} : {\n\t\t\t\tdir: e.isDir,\n\t\t\t\tbasename: t,\n\t\t\t\tencodingFormat: c(e.name),\n\t\t\t\turi: e.name,\n\t\t\t\tsize: e.size,\n\t\t\t\t...s(e.data, c(e.name) ?? \"\")\n\t\t\t};\n\t\t}),\n\t\tclose: () => Promise.resolve()\n\t});\n}, ye = async (t, { mimeType: n, direction: i } = { mimeType: \"text/plain\" }) => {\n\tlet a = `\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <package xmlns=\"http://www.idpf.org/2007/opf\" version=\"3.0\" xml:lang=\"ja\" prefix=\"rendition: http://www.idpf.org/vocab/rendition/#\"\n unique-identifier=\"ootuya-id\">\n <metadata xmlns:opf=\"http://www.idpf.org/2007/opf\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n xmlns:dcterms=\"http://purl.org/dc/terms/\">\n <meta property=\"rendition:layout\">reflowable</meta>\n </metadata>\n <manifest>\n <item id=\"p01\" href=\"p01.txt\" media-type=\"text/plain\"/>\n </manifest>\n <spine page-progression-direction=\"${i ?? \"ltr\"}\">\n <itemref idref=\"p01\" />\n </spine>\n </package>\n `;\n\treturn e({\n\t\tfilename: \"content.txt\",\n\t\tencodingFormat: n,\n\t\trecords: [{\n\t\t\tdir: !1,\n\t\t\tbasename: r(\"generated.opf\"),\n\t\t\turi: \"generated.opf\",\n\t\t\tsize: 0,\n\t\t\t...o(async () => new Blob([a]))\n\t\t}, {\n\t\t\tdir: !1,\n\t\t\tbasename: r(\"p01.txt\"),\n\t\t\turi: \"p01.txt\",\n\t\t\tsize: typeof t == \"string\" ? new Blob([t]).size : t.size,\n\t\t\tencodingFormat: n,\n\t\t\t...o(async () => typeof t == \"string\" ? new Blob([t]) : t)\n\t\t}],\n\t\tclose: () => Promise.resolve()\n\t});\n}, be = /^[A-Za-z0-9_][A-Za-z0-9_.-]*$/, xe = /^[A-Za-z0-9_]/, j = /^xml/i, Se = /[^A-Za-z0-9_.-]+/g, M = \"_\", Ce = (e) => e.replace(/^_+|_+$/g, \"\"), we = (e) => Ce(e.trim().replaceAll(\"/\", \"_\").replace(Se, \"_\")), N = (e) => {\n\tif (be.test(e) && !j.test(e)) return e;\n\tlet t = we(e), n = t && !j.test(t) ? t : `${M}${t}`;\n\treturn xe.test(n) ? n : `${M}${n}`;\n}, P = (e, t) => {\n\tlet n = N(e);\n\tif (!t.has(n)) return t.add(n), n;\n\tlet r = 2, i = `${n}-${r}`;\n\tfor (; t.has(i);) r += 1, i = `${n}-${r}`;\n\treturn t.add(i), i;\n}, F = () => {\n\tlet e = /* @__PURE__ */ new Set();\n\treturn (t) => P(t, e);\n}, Te = async (t, n) => {\n\tlet i = F(), a = t.map((e) => ({\n\t\tid: i(e),\n\t\turl: e\n\t})), s = `\n <?xml version=\"1.0\" encoding=\"UTF-8\"?><package xmlns=\"http://www.idpf.org/2007/opf\" version=\"2.0\" unique-identifier=\"bookid\">\n <metadata>\n <meta property=\"rendition:layout\">${n?.useRenditionFlow ? \"reflowable\" : \"pre-paginated\"}</meta>\n ${n?.useRenditionFlow ? \"<meta property=\\\"rendition:flow\\\">scrolled-continuous</meta>\" : \"\"}\n </metadata>\n <manifest>\n ${a.map(({ id: e, url: t }) => {\n\t\tlet n = c(t);\n\t\treturn `<item id=\"${e}\" href=\"${l(t)}\" media-type=\"${l(n ?? \"\")}\"/>`;\n\t}).join(\"\\n\")}\n </manifest>\n <spine>\n ${a.map(({ id: e }) => `<itemref idref=\"${e}\" />`).join(\"\\n\")}\n </spine>\n </package>\n `, u = t.map((e) => ({\n\t\tdir: !1,\n\t\tbasename: r(e),\n\t\tencodingFormat: c(e),\n\t\turi: e,\n\t\tsize: 0,\n\t\t...o(async () => (await fetch(e)).blob())\n\t}));\n\treturn e({\n\t\trecords: [{\n\t\t\tdir: !1,\n\t\t\tbasename: \"content.opf\",\n\t\t\turi: \"content.opf\",\n\t\t\tsize: 0,\n\t\t\t...o(async () => new Blob([s]))\n\t\t}, ...u],\n\t\tclose: () => Promise.resolve()\n\t});\n}, I = (e) => !e.dir, Ee = (e) => e.dir, L = (e, t) => {\n\tlet n = e.recordsByUri.get(t);\n\treturn n && I(n) ? n : void 0;\n}, De = h.toLowerCase(), R = (e) => e.records.find((e) => I(e) && e.basename.toLowerCase() === De), z = async (e) => new TextDecoder().decode(await e.arrayBuffer()), Oe = ({ enableReport: e } = {}) => {\n\tt.enable(!!e);\n}, B = (e) => {\n\tlet t = e.records.filter((e) => !e.dir).find((e) => e.uri.endsWith(\".opf\"));\n\treturn {\n\t\tdata: t,\n\t\tbasePath: t?.uri.substring(0, t.uri.lastIndexOf(\"/\")) || \"\"\n\t};\n};\n//#endregion\n//#region src/epubs/readArchiveOpf.ts\nasync function V(e) {\n\tlet { data: t, basePath: n } = B(e) || {};\n\tif (!(!t || t.dir)) return {\n\t\topf: re(await z(t)),\n\t\tbasePath: n\n\t};\n}\n//#endregion\n//#region src/generators/manifest/hooks/apple.ts\nvar ke = m.toLowerCase(), Ae = ({ archive: e }) => async (t) => {\n\tlet n = e.records.find((e) => !e.dir && e.basename.toLowerCase() === ke);\n\tif (!n || n.dir) return t;\n\tlet r = await z(n);\n\ttry {\n\t\tlet { renditionLayout: e } = _(ee(r));\n\t\treturn {\n\t\t\t...t,\n\t\t\trenditionLayout: t.renditionLayout ?? e\n\t\t};\n\t} catch (e) {\n\t\treturn console.error(`Unable to parse ${m} for content\\n`, r), console.error(e), t;\n\t}\n}, je = h.toLowerCase(), Me = ({ archive: e }) => async (t) => {\n\tlet n = R(e);\n\tif (!n) return t;\n\tlet r = {\n\t\t...t,\n\t\tspineItems: t.spineItems.filter((e) => !e.id.toLowerCase().endsWith(je)).map((e, t, n) => ({\n\t\t\t...e,\n\t\t\tprogressionWeight: 1 / n.length\n\t\t}))\n\t}, i = await z(n);\n\ttry {\n\t\tlet e = _(te(i));\n\t\treturn {\n\t\t\t...r,\n\t\t\treadingDirection: e.readingDirection ?? r.readingDirection\n\t\t};\n\t} catch (e) {\n\t\treturn console.error(`Unable to parse ${h} for content\\n`, i), console.error(e), r;\n\t}\n}, Ne = ({ baseUrl: e = \"\", resourcePath: t }) => {\n\tif (!e && /^https?:\\/\\//.test(t)) return encodeURI(t);\n\tlet n = e ? `${e}${e.endsWith(\"/\") ? \"\" : \"/\"}` : \"file://\";\n\treturn encodeURI(`${n}${t}`);\n}, Pe = ({ archive: e, baseUrl: t }) => async () => {\n\tlet n = e.records.filter((e) => !e.dir), r = F(), i = n.map((e) => ({\n\t\tfile: e,\n\t\tid: r(e.uri)\n\t}));\n\treturn {\n\t\tfilename: e.filename ?? \"\",\n\t\ttitle: e.records.find(({ dir: e }) => e)?.basename.replace(/\\/$/, \"\") || e.filename || \"\",\n\t\trenditionLayout: void 0,\n\t\trenditionSpread: \"auto\",\n\t\treadingDirection: void 0,\n\t\tspineItems: i.filter(({ file: e }) => !e.basename.endsWith(\".db\")).map(({ file: e, id: r }, i) => ({\n\t\t\tid: r,\n\t\t\tindex: i,\n\t\t\thref: Ne({\n\t\t\t\tbaseUrl: t,\n\t\t\t\tresourcePath: e.uri\n\t\t\t}),\n\t\t\trenditionLayout: void 0,\n\t\t\tprogressionWeight: 1 / n.length,\n\t\t\tpageSpreadLeft: void 0,\n\t\t\tpageSpreadRight: void 0,\n\t\t\tmediaType: e.encodingFormat\n\t\t})),\n\t\titems: i.map(({ file: e, id: n }) => ({\n\t\t\tid: n,\n\t\t\thref: encodeURI(`${t}${e.uri}`)\n\t\t}))\n\t};\n}, H = async ({ archive: e, archiveOpf: t }) => {\n\tif (!t) return [];\n\tlet { opf: n, basePath: r } = t, { spineRows: i } = n;\n\treturn e.records.filter((e) => i.find((t) => r ? `${r}/${t.href}` === e.uri : `${t.href}` === e.uri));\n}, U = (e, t, n) => {\n\tlet { basePath: r } = B(t) || {};\n\treturn e.map((e) => {\n\t\tlet t = e.href, i = n?.(t) ?? \"\";\n\t\treturn {\n\t\t\thref: r ? `${i}${r}/${t}` : `${i}${t}`,\n\t\t\tid: e.id,\n\t\t\tmediaType: e.mediaType\n\t\t};\n\t});\n}, Fe = (e) => {\n\tlet t = e?.trim();\n\treturn t === \"scrolled-continuous\" || t === \"scrolled-doc\" || t === \"paginated\" || t === \"auto\" ? t : \"auto\";\n}, Ie = (e) => {\n\tlet t = e?.trim();\n\tif (t === \"none\" || t === \"landscape\" || t === \"portrait\" || t === \"both\" || t === \"auto\") return t;\n}, Le = (e) => {\n\tlet t = e?.trim();\n\tif (t === \"cover\" || t === \"title-page\" || t === \"copyright-page\" || t === \"text\") return t;\n}, Re = ({ archive: e, baseUrl: n, archiveOpf: r }) => async (i) => {\n\tif (!r) return i;\n\tlet { opf: a, basePath: o } = r, s = _(a);\n\tt.groupCollapsed(...t.getGroupArgs(\"OPF parsed\")), t.log(\"opf\", a), t.groupEnd();\n\tlet c = a.renditionLayoutMeta?.trim(), l = c === \"reflowable\" || c === \"pre-paginated\" ? c : s.renditionLayout, u = a.title?.trim() || e.records.find(({ dir: e }) => e)?.basename || \"\", d = s.readingDirection ?? i.readingDirection, f = (await H({\n\t\tarchive: e,\n\t\tarchiveOpf: r\n\t})).filter(I).reduce((e, t) => t.size + e, 0), p = a.guide, m = [];\n\tfor (let e of p) {\n\t\tlet t = Le(e.type);\n\t\tt !== void 0 && m.push({\n\t\t\thref: e.href,\n\t\t\ttitle: e.title,\n\t\t\ttype: t\n\t\t});\n\t}\n\treturn {\n\t\tfilename: e.filename ?? \"\",\n\t\trenditionLayout: l,\n\t\trenditionFlow: Fe(a.renditionFlowMeta),\n\t\trenditionSpread: Ie(a.renditionSpreadMeta),\n\t\ttitle: u,\n\t\treadingDirection: d,\n\t\tspineItems: a.spineRows.map((t, r) => {\n\t\t\tlet i = L(e, o ? `${o}/${t.href}` : t.href), s = i ? i.size : 0, c = n || (/^https?:\\/\\//.test(t.href) ? \"\" : \"file://\");\n\t\t\treturn {\n\t\t\t\tid: t.id,\n\t\t\t\tindex: r,\n\t\t\t\thref: t.href.startsWith(\"https://\") ? t.href : o ? `${c}${o}/${t.href}` : `${c}${t.href}`,\n\t\t\t\trenditionLayout: t.renditionLayout ?? l,\n\t\t\t\t...t.renditionFlow === void 0 ? {} : { renditionFlow: t.renditionFlow },\n\t\t\t\tprogressionWeight: f > 0 ? s / f : 1 / a.spineRows.length,\n\t\t\t\tpageSpreadLeft: t.pageSpreadLeft,\n\t\t\t\tpageSpreadRight: t.pageSpreadRight,\n\t\t\t\tmediaType: t.mediaType\n\t\t\t};\n\t\t}),\n\t\titems: U(a.manifestItems, e, (e) => /^https?:\\/\\//.test(e) ? \"\" : n || \"file://\"),\n\t\tguide: m.length > 0 ? m : void 0\n\t};\n}, ze = (e) => {\n\tlet t = e.descendantWithPath(\"head\")?.childrenNamed(\"meta\").find((e) => e.attr.name === \"viewport\");\n\treturn !!(t && t.attr.name === \"viewport\");\n}, Be = (e) => e.reduce(async (e, t) => {\n\tif (!await e || !d({\n\t\tmimeType: I(t) ? t.encodingFormat : void 0,\n\t\turi: t.uri\n\t})) return !1;\n\tlet n = t.dir ? null : await z(t);\n\treturn n ? ze(new v(n)) : !1;\n}, Promise.resolve(!0)), Ve = ({ archive: e, archiveOpf: t }) => async (n) => n.renditionLayout === \"reflowable\" && n.spineItems.every((e) => e.renditionLayout === \"reflowable\") && await Be(await H({\n\tarchive: e,\n\tarchiveOpf: t\n})) ? {\n\t...n,\n\tspineItems: n.spineItems.map((e) => ({\n\t\t...e,\n\t\trenditionLayout: \"pre-paginated\"\n\t})),\n\trenditionLayout: \"pre-paginated\"\n} : n, He = () => (e) => ({\n\t...e,\n\treadingDirection: e.readingDirection ?? \"ltr\"\n}), Ue = async (e) => {\n\tlet t;\n\treturn await Promise.all(e.records.map(async (e) => {\n\t\tif (e.dir || !e.uri.endsWith(g)) return;\n\t\tlet n = await z(e);\n\t\ttry {\n\t\t\tlet { renditionLayout: e } = ne(n);\n\t\t\te && (t = e);\n\t\t} catch (e) {\n\t\t\tconsole.error(`Unable to parse ${g} for content\\n`, n), console.error(e);\n\t\t}\n\t})), {\n\t\tkind: \"kobo\",\n\t\t...t === void 0 ? {} : { renditionLayout: t }\n\t};\n}, We = ({ archive: e }) => async (t) => {\n\tlet { renditionLayout: n } = _(await Ue(e));\n\treturn {\n\t\t...t,\n\t\trenditionLayout: t.renditionLayout ?? n\n\t};\n}, W = (e) => e.toLowerCase().endsWith(\".opf\"), Ge = (e) => e.records.some((e) => !e.dir && (W(e.basename) || W(e.uri))), Ke = ({ archive: e }) => async (t) => Ge(e) ? t : {\n\t...t,\n\tspineItems: t.spineItems.map((t) => {\n\t\tlet n = e.records.find((e) => decodeURI(t.href).endsWith(e.uri)), r = f((n && I(n) ? n.encodingFormat : void 0) ?? \"\") || c(n?.basename ?? \"\");\n\t\treturn {\n\t\t\t...t,\n\t\t\trenditionLayout: r && u(r) ? \"pre-paginated\" : t.renditionLayout\n\t\t};\n\t})\n}, G = (e) => e ? e.children.map((e) => e instanceof oe ? e.text : e instanceof ae ? G(e) : \"\").join(\"\").trim() : \"\", qe = (e) => ie(e.properties).includes(\"nav\"), K = (e, { basePath: t, baseUrl: n }) => {\n\tlet r = {\n\t\tcontents: [],\n\t\tpath: \"\",\n\t\thref: \"\",\n\t\ttitle: \"\"\n\t}, i = e.childNamed(\"span\") || e.childNamed(\"a\");\n\tr.title = (i?.attr.title || i?.val.trim() || G(i)) ?? \"\";\n\tlet a = i?.name;\n\ta !== \"a\" && (i = e.descendantWithPath(`${a}.a`), i && (a = i.name.toLowerCase())), a === \"a\" && i?.attr.href && (r.path = p(t, i.attr.href), r.href = p(n, t, i.attr.href));\n\tlet o = e.childNamed(\"ol\");\n\tif (o) {\n\t\tlet e = o.childrenNamed(\"li\");\n\t\te && e.length > 0 && (r.contents = e.map((e) => K(e, {\n\t\t\tbasePath: t,\n\t\t\tbaseUrl: n\n\t\t})));\n\t}\n\treturn r;\n}, Je = (e, { basePath: t, baseUrl: n }) => {\n\tlet r = [], i;\n\treturn e.descendantWithPath(\"body.nav.ol\") ? i = e.descendantWithPath(\"body.nav.ol\")?.children : e.descendantWithPath(\"body.section.nav.ol\") && (i = e.descendantWithPath(\"body.section.nav.ol\")?.children), i && i.length > 0 && i.filter((e) => e.name === \"li\").forEach((e) => {\n\t\tr.push(K(e, {\n\t\t\tbasePath: t,\n\t\t\tbaseUrl: n\n\t\t}));\n\t}), r;\n}, Ye = async (e, t, { baseUrl: n }) => {\n\tlet r = e.manifestItems.find(qe);\n\tif (r?.href) {\n\t\tlet e = t.records.find((e) => e.uri.endsWith(r.href));\n\t\tif (e && !e.dir) return Je(new v(await z(e)), {\n\t\t\tbasePath: a(e.uri),\n\t\t\tbaseUrl: n\n\t\t});\n\t}\n}, q = (e, { opfBasePath: t, baseUrl: n, prefix: r }) => {\n\tlet i = e?.childNamed(`${r}content`)?.attr.src || \"\", a = {\n\t\ttitle: e?.descendantWithPath(`${r}navLabel.${r}text`)?.val || \"\",\n\t\tpath: p(t, i),\n\t\thref: p(n, t, i),\n\t\tcontents: []\n\t}, o = e.childrenNamed(`${r}navPoint`);\n\treturn o && o.length > 0 && (a.contents = o.map((e) => q(e, {\n\t\topfBasePath: t,\n\t\tbaseUrl: n,\n\t\tprefix: r\n\t}))), a;\n}, Xe = (e, { opfBasePath: t, baseUrl: n }) => {\n\tlet r = [], i = e.name, a = \"\";\n\treturn i.indexOf(\":\") !== -1 && (a = `${i.split(\":\")[0]}:`), e.childNamed(`${a}navMap`)?.childrenNamed(`${a}navPoint`).forEach((e) => {\n\t\tr.push(q(e, {\n\t\t\topfBasePath: t,\n\t\t\tbaseUrl: n,\n\t\t\tprefix: a\n\t\t}));\n\t}), r;\n}, Ze = async ({ opf: e, opfBasePath: t, baseUrl: n, archive: r }) => {\n\tlet i = e.spineTocIdref;\n\tif (i) {\n\t\tlet a = e.manifestItems.find((e) => e.id === i);\n\t\tif (a) {\n\t\t\tlet e = `${t}${t === \"\" ? \"\" : \"/\"}${a.href}`, i = r.records.find((t) => t.uri.endsWith(e));\n\t\t\tif (i && !i.dir) return Xe(new v(await z(i)), {\n\t\t\t\topfBasePath: t,\n\t\t\t\tbaseUrl: n\n\t\t\t});\n\t\t}\n\t}\n}, Qe = async (e, t, { baseUrl: n }) => {\n\tlet { basePath: r } = B(t) || {}, i = await Ye(e, t, { baseUrl: n });\n\tif (i) return i;\n\tlet a = await Ze({\n\t\topf: e,\n\t\topfBasePath: r ?? \"\",\n\t\tarchive: t,\n\t\tbaseUrl: n\n\t});\n\tif (a) return a;\n}, $e = (e) => e.replace(/\\.[^.]+$/, \"\").replace(/[_-]/g, \" \").replace(/\\s+/g, \" \").trim(), et = (e, t) => {\n\tif (e.spineItems.length !== 0 && e.spineItems.every((e) => (f(e.mediaType ?? \"\") || c(e.href))?.startsWith(\"audio/\"))) return e.spineItems.map((e) => {\n\t\tlet n = t.records.find((t) => !t.dir && decodeURI(e.href).endsWith(t.uri));\n\t\treturn {\n\t\t\ttitle: $e(n?.basename ?? e.href),\n\t\t\thref: e.href,\n\t\t\tpath: n?.uri ?? e.href,\n\t\t\tcontents: []\n\t\t};\n\t});\n}, tt = (e, { baseUrl: t }) => {\n\tlet r = [...e.records].sort((e, t) => n(e.uri, t.uri)), i = (e, t, n, r, a) => {\n\t\tlet o = e.find((e) => e.title === t), [s, ...c] = n;\n\t\treturn o ? s ? [...e.filter((e) => e !== o), {\n\t\t\t...o,\n\t\t\tcontents: [...o.contents, ...i(o.contents, s, c, r, a)]\n\t\t}] : o.path.split(\"/\").length > a.split(\"/\").length ? [...e.filter((e) => e !== o), {\n\t\t\t...o,\n\t\t\tpath: a,\n\t\t\thref: r\n\t\t}] : e : s ? [...e, {\n\t\t\tcontents: i([], s, c, r, a),\n\t\t\thref: r,\n\t\t\tpath: a,\n\t\t\ttitle: t\n\t\t}] : [...e, {\n\t\t\tcontents: [],\n\t\t\thref: r,\n\t\t\tpath: a,\n\t\t\ttitle: t\n\t\t}];\n\t};\n\treturn r.reduce((e, n) => {\n\t\tif (n.dir) return e;\n\t\tlet [r, ...a] = n.uri.split(\"/\").slice(0, -1);\n\t\treturn r ? i(e, r, a, p(t, encodeURI(n.uri)).replace(/\\/$/, \"\"), n.uri.replace(/\\/$/, \"\")) : e;\n\t}, []);\n}, nt = async (e, t, { baseUrl: n, archiveOpf: r }) => {\n\tif (r) return await Qe(r.opf, e, { baseUrl: n }) || [];\n\tlet i = et(t, e);\n\tif (i) return i;\n\tlet a = tt(e, { baseUrl: n });\n\tif (a.length !== 0) return a;\n}, rt = ({ archive: e, baseUrl: t, archiveOpf: n }) => async (r) => {\n\tif (r.nav) return r;\n\tlet i = await nt(e, r, {\n\t\tbaseUrl: t,\n\t\tarchiveOpf: n\n\t});\n\treturn i ? {\n\t\t...r,\n\t\tnav: { toc: i }\n\t} : r;\n}, it = (e) => e ? e.endsWith(\"/\") ? e : `${e}/` : \"\", J = async (e, { baseUrl: n = \"\", hooks: r = {} } = {}) => {\n\tt.log(\"Generating manifest from archive\", e);\n\tlet i = await V(e), a = it(n), o = (t) => (t ?? []).map((t) => t({\n\t\tarchive: e,\n\t\tbaseUrl: a\n\t})), s = [\n\t\tRe({\n\t\t\tarchive: e,\n\t\t\tbaseUrl: a,\n\t\t\tarchiveOpf: i\n\t\t}),\n\t\tMe({\n\t\t\tarchive: e,\n\t\t\tbaseUrl: a\n\t\t}),\n\t\tAe({\n\t\t\tarchive: e,\n\t\t\tbaseUrl: a\n\t\t}),\n\t\tKe({\n\t\t\tarchive: e,\n\t\t\tbaseUrl: a\n\t\t}),\n\t\t...o(r.content)\n\t], c = o(r.spine), l = [\n\t\tVe({\n\t\t\tarchive: e,\n\t\t\tbaseUrl: a,\n\t\t\tarchiveOpf: i\n\t\t}),\n\t\tWe({\n\t\t\tarchive: e,\n\t\t\tbaseUrl: a\n\t\t}),\n\t\t...o(r.presentation)\n\t], u = [rt({\n\t\tarchive: e,\n\t\tbaseUrl: a,\n\t\tarchiveOpf: i\n\t}), ...o(r.navigation)], d = [\n\t\t...s,\n\t\t...c,\n\t\t...l,\n\t\t...u,\n\t\tHe()\n\t];\n\ttry {\n\t\tlet n = Pe({\n\t\t\tarchive: e,\n\t\t\tbaseUrl: a\n\t\t})(), r = await d.reduce(async (e, t) => await t(await e), n);\n\t\tif (t.log(\"Generated manifest\", r), process.env.NODE_ENV === \"development\" && t.isEnabled()) {\n\t\t\tlet e = JSON.stringify(r, null, 2);\n\t\t\tt.groupCollapsed(...t.getGroupArgs(\"Generated manifest\")), t.log(`\\n${e}`), t.groupEnd();\n\t\t}\n\t\treturn r;\n\t} catch (e) {\n\t\tthrow t.error(e), e;\n\t}\n}, at = (e) => {\n\tlet t = e.descendantWithPath(\"head\")?.childrenNamed(\"meta\").find((e) => e.attr.name === \"calibre:cover\");\n\treturn !!(t && t.attr.name === \"calibre:cover\");\n}, ot = (e) => e.descendantWithPath(\"body\")?.descendantWithPath(\"div\")?.childrenNamed(\"svg\")?.find((e) => e.attr.width === \"100%\" && e.attr.preserveAspectRatio === \"none\"), st = ({ archive: e, resourcePath: t }) => async (n) => {\n\tlet r = L(e, t);\n\tif (r?.basename.endsWith(\".xhtml\")) {\n\t\tlet e = new v(typeof n.body == \"string\" ? n.body : await z(r));\n\t\tif (at(e)) {\n\t\t\tlet t = ot(e);\n\t\t\treturn t && delete t.attr.preserveAspectRatio, {\n\t\t\t\t...n,\n\t\t\t\tbody: e?.toString()\n\t\t\t};\n\t\t}\n\t}\n\treturn n;\n}, ct = ({ archive: e, resourcePath: t }) => async (n) => st({\n\tarchive: e,\n\tresourcePath: t\n})(n), lt = ({ archive: e, resourcePath: t }) => async (n) => {\n\tlet r = L(e, t);\n\tif (r?.basename.endsWith(\".css\")) {\n\t\tlet e = (typeof n.body == \"string\" ? n.body : await z(r)).replaceAll(\"-webkit-writing-mode\", \"writing-mode\");\n\t\treturn {\n\t\t\t...n,\n\t\t\tbody: e\n\t\t};\n\t}\n\treturn n;\n}, ut = async (e, t) => {\n\tlet n = await V(e);\n\tif (n) {\n\t\tlet { opf: r } = n, i = U(r.manifestItems, e, () => \"\").find((e) => t.endsWith(e.href))?.mediaType;\n\t\tif (i) return { mediaType: i };\n\t}\n\treturn { mediaType: dt(t) };\n}, dt = (e) => {\n\tif (e.endsWith(\".css\")) return \"text/css; charset=UTF-8\";\n\tif (e.endsWith(\".jpg\")) return \"image/jpg\";\n\tif (e.endsWith(\".xhtml\")) return \"application/xhtml+xml\";\n\tif (e.endsWith(\".mp4\")) return \"video/mp4\";\n\tif (e.endsWith(\".svg\")) return \"image/svg+xml\";\n}, ft = ({ archive: e, resourcePath: t }) => async (n) => {\n\tlet r = L(e, t);\n\tif (!r) return n;\n\tlet i = await ut(e, t);\n\treturn {\n\t\t...n,\n\t\tparams: {\n\t\t\t...n.params,\n\t\t\t...r?.encodingFormat && { contentType: r.encodingFormat },\n\t\t\t...i.mediaType && { contentType: i.mediaType }\n\t\t}\n\t};\n}, Y = /* @__PURE__ */ \"div.span.p.a.li.ul.ol.h1.h2.h3.h4.h5.h6.table.tr.td.th.thead.tbody.tfoot.section.article.header.footer.nav.aside.main.figure.figcaption.blockquote.pre.code.form.textarea.select.option.button.label.fieldset.legend.caption.dl.dt.dd.iframe.video.audio.canvas.script.style\".split(\".\"), pt = ({ archive: e, resourcePath: t }) => async (n) => {\n\tlet r = L(e, t);\n\tif (r?.basename.endsWith(\".xhtml\")) {\n\t\tlet e = typeof n.body == \"string\" ? n.body : await z(r);\n\t\tif (!RegExp(`<(${Y.join(\"|\")})[\\\\s/>]`, \"i\").test(e)) return n;\n\t\tlet t = RegExp(`<(${Y.join(\"|\")})(\\\\s[^>]*)?\\\\s*/>`, \"gi\"), i = e.replace(t, (e, t, n = \"\") => `<${t} ${n.trim()}></${t}>`);\n\t\treturn {\n\t\t\t...n,\n\t\t\tbody: i\n\t\t};\n\t}\n\treturn n;\n}, X = async (e, n, { hooks: r = [] } = {}) => {\n\tlet i = { params: {} }, a = [\n\t\t...r.map((t) => t({\n\t\t\tarchive: e,\n\t\t\tresourcePath: n\n\t\t})),\n\t\tft({\n\t\t\tarchive: e,\n\t\t\tresourcePath: n\n\t\t}),\n\t\tpt({\n\t\t\tarchive: e,\n\t\t\tresourcePath: n\n\t\t}),\n\t\tlt({\n\t\t\tarchive: e,\n\t\t\tresourcePath: n\n\t\t}),\n\t\tct({\n\t\t\tarchive: e,\n\t\t\tresourcePath: n\n\t\t})\n\t];\n\ttry {\n\t\tlet r = await a.reduce(async (e, t) => await t(await e), Promise.resolve(i));\n\t\tif (t.log(\"Generated resource\", n, r), r.body !== void 0) return r;\n\t\tlet o = L(e, n);\n\t\tif (!o) throw Error(`no file found for resourcePath:${n}`);\n\t\treturn {\n\t\t\t...r,\n\t\t\tbody: await o.blob()\n\t\t};\n\t} catch (e) {\n\t\tthrow t.error(e), e;\n\t}\n}, mt = class {\n\tconstructor(e) {\n\t\tthis.cleanArchiveAfter = e, this.state$ = new se({\n\t\t\tstatus: \"idle\",\n\t\t\tlocks: 0\n\t\t});\n\t}\n\tupdate(e) {\n\t\tthis.state$.next({\n\t\t\t...this.state$.getValue(),\n\t\t\t...e\n\t\t});\n\t}\n\tget locks$() {\n\t\treturn this.state$.pipe(E(({ locks: e }) => e));\n\t}\n\tget state() {\n\t\treturn this.state$.getValue();\n\t}\n\tget isUnlocked$() {\n\t\treturn this.locks$.pipe(E((e) => e <= 0), ce(), me());\n\t}\n\tget overTTL$() {\n\t\treturn this.isUnlocked$.pipe(k((e) => e ? this.cleanArchiveAfter === Infinity ? b : _e(this.cleanArchiveAfter) : b));\n\t}\n}, ht = ({ getArchive: e, cleanArchiveAfter: n = 300 * 1e3 }) => {\n\tlet r = new x(), i = new x(), a = new x(), o = {};\n\treturn r.pipe(O((n) => {\n\t\tlet r = o[n];\n\t\tif (!r || r.state.status !== \"idle\") return y;\n\t\tlet i = !1, s = (e) => {\n\t\t\tt.debug(`Cleaning up archive with key: ${e}`);\n\t\t\tlet n = o[e];\n\t\t\tdelete o[e], i ||= (n?.state.archive?.close(), !0);\n\t\t};\n\t\tr.update({ status: \"loading\" });\n\t\tlet c = r.locks$, l = r.isUnlocked$, u = c.pipe(pe(), C(([e, t]) => t > e), he(!0));\n\t\treturn T(e(n)).pipe(A((e) => {\n\t\t\tr.update({\n\t\t\t\tarchive: e,\n\t\t\t\tstatus: \"success\"\n\t\t\t});\n\t\t}), S((e) => (s(n), r.update({\n\t\t\tstatus: \"error\",\n\t\t\terror: e\n\t\t}), y)), k(() => D(u.pipe(k(() => a), k(() => l), C((e) => e)), r.overTTL$).pipe(w(), A(() => {\n\t\t\ts(n);\n\t\t}))));\n\t}), ge(i)).subscribe(), {\n\t\taccess: (e) => {\n\t\t\tlet t = !1, i = o[e] ?? new mt(n);\n\t\t\to[e] = i, i.update({ locks: i.state.locks + 1 });\n\t\t\tlet a = () => {\n\t\t\t\tt || (t = !0, i.update({ locks: i.state.locks - 1 }));\n\t\t\t};\n\t\t\treturn r.next(e), D(i.state$.pipe(E(({ archive: e }) => e), C((e) => !!e)), i.state$.pipe(A(({ error: e }) => {\n\t\t\t\tif (e) throw e;\n\t\t\t}), ue())).pipe(w(), E((e) => ({\n\t\t\t\tarchive: e,\n\t\t\t\trelease: a\n\t\t\t})), S((e) => {\n\t\t\t\tthrow a(), e;\n\t\t\t}));\n\t\t},\n\t\tpurge: () => {\n\t\t\ta.next();\n\t\t},\n\t\t_archives: o\n\t};\n}, Z = (e) => e ? /^\\d+$/.test(e) ? {\n\tvalid: !0,\n\tvalue: Number.parseInt(e, 10)\n} : {\n\tvalid: !1,\n\tvalue: void 0\n} : {\n\tvalid: !0,\n\tvalue: void 0\n}, gt = (e) => {\n\tif (!e.toLowerCase().startsWith(\"bytes=\")) return { kind: \"missing\" };\n\tlet t = e.slice(6).trim();\n\tif (!t) return { kind: \"invalid\" };\n\tif (t.includes(\",\")) return { kind: \"multi\" };\n\tlet n = /^(\\d*)-(\\d*)$/.exec(t);\n\tif (!n) return { kind: \"invalid\" };\n\tlet [, r = \"\", i = \"\"] = n, a = Z(r.trim()), o = Z(i.trim());\n\treturn !a.valid || !o.valid ? { kind: \"invalid\" } : {\n\t\tkind: \"single\",\n\t\tstart: a.value,\n\t\tend: o.value\n\t};\n}, _t = (e) => {\n\tif (e instanceof Blob) return {\n\t\tsize: e.size,\n\t\tslice: (t, n) => {\n\t\t\tlet r = e.slice(t, n);\n\t\t\treturn {\n\t\t\t\tcontent: r,\n\t\t\t\tlength: r.size\n\t\t\t};\n\t\t}\n\t};\n\tlet t = new TextEncoder().encode(e);\n\treturn {\n\t\tsize: t.byteLength,\n\t\tslice: (e, n) => {\n\t\t\tlet r = t.slice(e, n);\n\t\t\treturn {\n\t\t\t\tcontent: r,\n\t\t\t\tlength: r.byteLength\n\t\t\t};\n\t\t}\n\t};\n}, vt = ({ body: e, contentType: t, rangeHeader: n }) => {\n\tlet r = new Headers();\n\tif (t && r.set(\"Content-Type\", t), r.set(\"Accept-Ranges\", \"bytes\"), !n) return e instanceof Blob && r.set(\"Content-Length\", String(e.size)), new Response(e, {\n\t\tstatus: 200,\n\t\theaders: r\n\t});\n\tlet i = gt(n);\n\tif (i.kind === \"missing\" || i.kind === \"multi\") return e instanceof Blob && r.set(\"Content-Length\", String(e.size)), new Response(e, {\n\t\tstatus: 200,\n\t\theaders: r\n\t});\n\tlet a = _t(e), o = a.size;\n\tif (i.kind === \"invalid\") return new Response(null, {\n\t\tstatus: 416,\n\t\theaders: { \"Content-Range\": `bytes */${o}` }\n\t});\n\tlet s = i.start, c = i.end;\n\tif (s === void 0 && c === void 0 || (s === void 0 ? (s = Math.max(0, o - Math.min(c ?? 0, o)), c = o - 1) : (c === void 0 || c >= o) && (c = o - 1), s < 0 || c < 0 || s >= o || c >= o || s > c)) return new Response(null, {\n\t\tstatus: 416,\n\t\theaders: { \"Content-Range\": `bytes */${o}` }\n\t});\n\tlet l = a.slice(s, c + 1);\n\treturn r.set(\"Content-Length\", String(l.length)), r.set(\"Content-Range\", `bytes ${s}-${c}/${o}`), new Response(l.content, {\n\t\tstatus: 206,\n\t\theaders: r\n\t});\n}, Q = \"file://\", yt = /^https?:\\/\\//, bt = (e) => {\n\ttry {\n\t\treturn decodeURIComponent(e);\n\t} catch {\n\t\treturn e;\n\t}\n}, xt = (e) => e.startsWith(Q) ? e.slice(Q.length) : e, St = (e) => {\n\tlet t = xt(e);\n\treturn yt.test(t) ? t : xt(bt(t));\n}, $ = class {\n\tconstructor({ hooks: e, onError: t, onManifestSuccess: n, ...r }) {\n\t\tthis.onError = (e) => (console.error(e), new Response(String(e), { status: 500 })), this.archiveLoader = ht(r), this.hooks = e ?? {}, this.onManifestSuccess = n ?? (({ manifest: e }) => Promise.resolve(e)), this.onError = t ?? this.onError;\n\t}\n\tprune() {\n\t\tthis.archiveLoader.purge();\n\t}\n\taccessArchive(e) {\n\t\treturn this.lastAccessedKey !== void 0 && this.lastAccessedKey !== e && this.archiveLoader.purge(), this.lastAccessedKey = e, this.archiveLoader.access(e);\n\t}\n\taccessArchiveWithoutLock(e) {\n\t\treturn this.accessArchive(e).pipe(E(({ archive: e, release: t }) => (t(), e)));\n\t}\n\twithArchiveResponse({ key: e, getResponse: t }) {\n\t\treturn de(this.accessArchive(e).pipe(O(({ archive: e, release: n }) => T(t(e)).pipe(le(() => {\n\t\t\tn();\n\t\t}))), S((e) => fe(this.onError(e)))));\n\t}\n\tfetchManifest({ key: e, baseUrl: t }) {\n\t\treturn this.withArchiveResponse({\n\t\t\tkey: e,\n\t\t\tgetResponse: (e) => T(J(e, {\n\t\t\t\tbaseUrl: t,\n\t\t\t\thooks: this.hooks.manifest\n\t\t\t})).pipe(k((t) => T(this.onManifestSuccess({\n\t\t\t\tmanifest: t,\n\t\t\t\tarchive: e\n\t\t\t}))), E((e) => new Response(JSON.stringify(e), { status: 200 })))\n\t\t});\n\t}\n\tfetchResource({ key: e, resourcePath: t, request: n }) {\n\t\treturn this.withArchiveResponse({\n\t\t\tkey: e,\n\t\t\tgetResponse: (e) => T(X(e, St(t), { hooks: this.hooks.resource })).pipe(E((e) => vt({\n\t\t\t\tbody: e.body ?? \"\",\n\t\t\t\tcontentType: e.params.contentType,\n\t\t\t\trangeHeader: n?.headers.get(\"range\")\n\t\t\t})))\n\t\t});\n\t}\n}, Ct = class extends $ {\n\tconstructor({ getUriInfo: e, ...t }) {\n\t\tsuper(t), this.getUriInfo = e, this.fetchEventListener = this.fetchEventListener.bind(this);\n\t}\n\tfetchEventListener(e) {\n\t\ttry {\n\t\t\tlet t = this.getUriInfo(e);\n\t\t\tif (!t) return;\n\t\t\tlet n = i(t.baseUrl), r = e.request.url.substring(n.length + 1), [a = \"\"] = r.split(\"/\"), o = i(r.substring(a.length + 1));\n\t\t\tr.endsWith(\"/manifest\") ? e.respondWith(this.fetchManifest({\n\t\t\t\tkey: a,\n\t\t\t\tbaseUrl: `${n}/${a}/`\n\t\t\t})) : e.respondWith(this.fetchResource({\n\t\t\t\tkey: a,\n\t\t\t\tresourcePath: o,\n\t\t\t\trequest: e.request\n\t\t\t}));\n\t\t} catch (t) {\n\t\t\te.respondWith(new Response(String(t), { status: 500 }));\n\t\t}\n\t}\n};\n//#endregion\nexport { Ct as ServiceWorkerStreamer, $ as Streamer, s as arrayBufferFileAccessors, o as blobFileAccessors, Oe as configure, e as createArchive, ve as createArchiveFromArrayBufferList, ye as createArchiveFromText, Te as createArchiveFromUrls, P as createUniqueXmlSafeId, N as createXmlSafeId, F as createXmlSafeIdFactory, J as generateManifestFromArchive, X as generateResourceFromArchive, L as getArchiveFileRecordByUri, R as getArchiveHasComicInfo, B as getArchiveOpfInfo, a as getUriBasePath, r as getUriBasename, Ee as isDirectoryRecord, I as isFileRecord, z as readRecordAsText, i as removeTrailingSlash, n as sortByTitleComparator };\n\n//# sourceMappingURL=index.es.js.map","import {\n type Archive,\n blobFileAccessors,\n createArchive,\n} from \"@prose-reader/streamer\"\nimport * as pdfjsLib from \"pdfjs-dist\"\n\ntype PdfJsArchive = Archive & {\n _symbol: symbol\n proxyDocument: pdfjsLib.PDFDocumentProxy\n}\n\nconst PDF_SYMBOL = Symbol(`pdfjs`)\n\nexport const isPdfJsArchive = (archive: Archive): archive is PdfJsArchive =>\n \"_symbol\" in archive && archive._symbol === PDF_SYMBOL\n\n/**\n * @important\n * Make sure the urls are on the same origin or the cors header is set otherwise\n * the resource cannot be consumed as it is on the web.\n */\nexport const createArchiveFromPdf = async (\n file: Blob,\n filename: string,\n): Promise<Archive> => {\n const loadingTask = pdfjsLib.getDocument(await file.arrayBuffer())\n\n const pdf = await loadingTask.promise\n\n const pages = Array.from({ length: pdf.numPages })\n const pageEntries = pages.map((_, index) => ({\n id: `page-${index}`,\n resourcePath: `${index}.pdf`,\n }))\n\n const opfFileData = `\n <?xml version=\"1.0\" encoding=\"UTF-8\"?><package xmlns=\"http://www.idpf.org/2007/opf\" version=\"2.0\" unique-identifier=\"bookid\">\n <metadata>\n <meta property=\"rendition:layout\">pre-paginated</meta>\n </metadata>\n <manifest>\n ${pageEntries.map(({ id, resourcePath }) => `<item id=\"${id}\" href=\"${resourcePath}\" />`).join(`\\n`)}\n </manifest>\n <spine>\n ${pageEntries.map(({ id }) => `<itemref idref=\"${id}\" />`).join(`\\n`)}\n </spine>\n </package>\n `\n\n const opfFile: Archive[`records`][number] = {\n dir: false,\n basename: `content.opf`,\n uri: `content.opf`,\n size: 0,\n ...blobFileAccessors(async () => new Blob([opfFileData])),\n }\n\n const archive = createArchive({\n filename,\n encodingFormat: \"application/pdf\",\n records: [\n opfFile,\n ...pages.map((_, index) => ({\n dir: false,\n basename: `${index}.pdf`,\n uri: `${index}.pdf`,\n size: 0,\n ...blobFileAccessors(async () => {\n throw new Error(\"Unable to get blob from pdf\")\n }),\n })),\n ],\n close: () => pdf.cleanup(),\n })\n\n const pdfArchive: PdfJsArchive = {\n ...archive,\n proxyDocument: pdf,\n _symbol: PDF_SYMBOL,\n }\n\n return pdfArchive\n}\n","html {\n /* Pdf are always pre-paginated so its safe to disable touch action */\n touch-action: none;\n}\n\nbody {\n width: 100%;\n height: 100%;\n margin: 0;\n padding: 0;\n /* This will prevent scrollbar and wrong offset of annotation layer */\n overflow: hidden;\n}\n","import {\n setPropertyIfChanged,\n setStylePropertyIfChanged,\n type Viewport,\n} from \"@prose-reader/core\"\nimport type { PDFPageProxy } from \"pdfjs-dist\"\n\nexport const layoutContainer = (\n container: HTMLElement | undefined,\n spreadPosition: `none` | `left` | `right`,\n viewport: Viewport,\n) => {\n if (!container) return\n\n // first we try to get the desired viewport for a comfortable reading based on theh current page size\n const { height: pageHeight, width: pageWidth } = viewport.pageSize\n\n setStylePropertyIfChanged(container.style, `width`, `${pageWidth}px`)\n setStylePropertyIfChanged(container.style, `height`, `${pageHeight}px`)\n\n if (spreadPosition === `right`) {\n setStylePropertyIfChanged(container.style, `justify-content`, `flex-start`)\n } else if (spreadPosition === `left`) {\n setStylePropertyIfChanged(container.style, `justify-content`, `flex-end`)\n } else {\n setStylePropertyIfChanged(container.style, `justify-content`, `center`)\n }\n}\n\nexport const layoutCanvas = (\n pageProxy: PDFPageProxy,\n canvas: HTMLCanvasElement,\n readerViewport: Viewport,\n) => {\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n const { height: pageHeight, width: pageWidth } = readerViewport.pageSize\n const { width: viewportWidth, height: viewportHeight } =\n pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(\n pageWidth / viewportWidth,\n pageHeight / viewportHeight,\n )\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = pageProxy.getViewport({ scale: pageScale })\n\n // Then we define which axis should stretch or shrink to ratio\n const viewportRatio = viewport.width / viewport.height\n const pageRatio = pageWidth / pageHeight\n const isWiderThanPage = viewportRatio > pageRatio\n const canvasWidth = isWiderThanPage ? pageWidth : pageHeight * viewportRatio\n const canvasHeight =\n viewportRatio > pageRatio ? pageWidth / viewportRatio : pageHeight\n\n setPropertyIfChanged(\n canvas,\n `width`,\n Math.floor(viewport.width * pixelRatioScale),\n )\n setPropertyIfChanged(\n canvas,\n `height`,\n Math.floor(viewport.height * pixelRatioScale),\n )\n setStylePropertyIfChanged(\n canvas.style,\n `width`,\n `${Math.floor(canvasWidth)}px`,\n )\n setStylePropertyIfChanged(\n canvas.style,\n `height`,\n `${Math.floor(canvasHeight)}px`,\n )\n}\n","import {\n DocumentRenderer,\n injectCSSToFrame,\n setAttributeIfChanged,\n setStylePropertyIfChanged,\n upsertCSSToFrame,\n waitForFrameLoad,\n waitForFrameReady,\n waitForSwitch,\n} from \"@prose-reader/core\"\nimport {\n type PDFPageProxy,\n RenderingCancelledException,\n type RenderTask,\n TextLayer,\n} from \"pdfjs-dist\"\nimport {\n catchError,\n EMPTY,\n from,\n map,\n type Observable,\n of,\n switchMap,\n tap,\n} from \"rxjs\"\nimport pdfFrameStyle from \"./frame.css?inline\"\nimport { layoutCanvas, layoutContainer } from \"./layout\"\n\nconst pdfScaleStyle = `:root {\n --scale-factor: 1;\n --user-unit: 1;\n --total-scale-factor: calc(var(--scale-factor) * var(--user-unit));\n --scale-round-x: 1px;\n --scale-round-y: 1px;\n}`\n\nexport class PdfRenderer extends DocumentRenderer {\n private pageProxy: PDFPageProxy | undefined\n private renderTask: RenderTask | undefined\n private textLayer: TextLayer | undefined\n\n constructor(\n private pdfViewerStyle: string,\n params: ConstructorParameters<typeof DocumentRenderer>[0],\n ) {\n super(params)\n }\n\n private getCanvas() {\n const element = this.documentContainer?.children[0]\n\n if (!(element instanceof HTMLCanvasElement)) return\n\n return element\n }\n\n private getFrameElement() {\n const frame = this.documentContainer?.children[1]?.children[0]\n\n if (!(frame instanceof HTMLIFrameElement)) return\n\n return frame\n }\n\n private getPageProxy() {\n if (this.pageProxy) return of(this.pageProxy)\n\n return from(this.resourcesHandler.fetchResource()).pipe(\n switchMap((resource) => {\n if (!(\"custom\" in resource)) return EMPTY\n\n this.pageProxy = resource.data as PDFPageProxy\n\n return of(this.pageProxy)\n }),\n )\n }\n\n onUnload(): Observable<unknown> {\n this.detach()\n\n if (this.renderTask) {\n this.renderTask.cancel()\n }\n\n this.textLayer?.cancel()\n this.pageProxy?.cleanup()\n\n return EMPTY\n }\n\n onCreateDocument(): Observable<HTMLElement> {\n const frameElement = document.createElement(`iframe`)\n frameElement.style.cssText = `\n overflow: hidden;\n height: 100%;\n width: 100%;\n `\n\n frameElement.setAttribute(\"tabIndex\", \"0\")\n frameElement.setAttribute(\"frameBorder\", \"0\")\n frameElement.setAttribute(`src`, \"about:blank\")\n\n const frameContainer =\n this.containerElement.ownerDocument.createElement(\"div\")\n frameContainer.style.cssText = `\n mix-blend-mode: multiply;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n position: absolute;\n height: 100%;\n width: 100%;\n top: 0;\n `\n\n /**\n * The canvas is never attached to the DOM and will be used for offscreen rendering\n * then copied into the frame.\n */\n const canvas = this.containerElement.ownerDocument.createElement(\"canvas\")\n\n frameContainer.appendChild(frameElement)\n\n const rootElement = this.containerElement.ownerDocument.createElement(`div`)\n rootElement.style.cssText = `\n display: flex;\n align-items: center;\n justify-content: center;\n `\n\n rootElement.appendChild(canvas)\n rootElement.appendChild(frameContainer)\n\n this.setDocumentContainer(rootElement)\n\n return of(rootElement)\n }\n\n onLoadDocument(): Observable<unknown> {\n return this.getPageProxy().pipe(\n switchMap(() => {\n const frameElement = this.getFrameElement()\n const pageProxy = this.pageProxy\n\n if (!frameElement || !pageProxy) return EMPTY\n\n return of(frameElement).pipe(\n waitForSwitch(this.context.bridgeEvent.viewportFree$),\n tap(() => {\n this.attach()\n }),\n waitForFrameLoad,\n switchMap(() => {\n injectCSSToFrame(\n frameElement,\n \"pdfjs-viewer-style\",\n this.pdfViewerStyle,\n )\n injectCSSToFrame(frameElement, \"enhancer-pdf-style\", pdfFrameStyle)\n upsertCSSToFrame(frameElement, \"pdf-scale-scale\", pdfScaleStyle)\n\n /**\n * We make sure to render the text layer to simulate the document being loaded.\n * It will be correctly re-layout later. Consumers looking for document load have at least\n * the actual text document ready. (cfi lookup, etc.)\n */\n const frameBody = frameElement.contentDocument?.body\n\n if (!frameBody || !this.pageProxy) return EMPTY\n\n setAttributeIfChanged(frameBody, \"class\", \"textLayer\")\n\n this.textLayer = new TextLayer({\n container: frameBody,\n textContentSource: this.pageProxy.streamTextContent(),\n viewport: this.pageProxy.getViewport({ scale: 1 }),\n })\n\n return from(this.textLayer.render())\n }),\n waitForFrameReady,\n )\n }),\n )\n }\n\n onLayout({\n spreadPosition,\n }: {\n minPageSpread: number\n blankPagePosition: `before` | `after` | `none`\n spreadPosition: `none` | `left` | `right`\n }) {\n const frameElement = this.getFrameElement()\n const canvas = this.getCanvas()\n\n if (!frameElement || !canvas) return of(undefined)\n\n // first we try to get the desired viewport for a comfortable reading based on the current page size\n const { height: pageHeight, width: pageWidth } = this.viewport.pageSize\n\n layoutContainer(this.documentContainer, spreadPosition, this.viewport)\n\n const context = canvas.getContext(\"2d\")\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n\n if (!this.pageProxy || !context) return of(undefined)\n\n if (this.renderTask) {\n this.renderTask.cancel()\n this.renderTask = undefined\n }\n\n layoutCanvas(this.pageProxy, canvas, this.viewport)\n\n const { width: viewportWidth, height: viewportHeight } =\n this.pageProxy.getViewport({ scale: 1 })\n\n const pageScale = Math.max(\n pageWidth / viewportWidth,\n pageHeight / viewportHeight,\n )\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = this.pageProxy.getViewport({ scale: pageScale })\n\n const transform =\n pixelRatioScale !== 1\n ? [pixelRatioScale, 0, 0, pixelRatioScale, 0, 0]\n : null\n\n this.renderTask = this.pageProxy.render({\n ...(transform && { transform }),\n canvasContext: context,\n viewport,\n canvas,\n })\n\n return from(this.renderTask.promise).pipe(\n switchMap(() => {\n this.renderTask = undefined\n\n const frameDoc = frameElement?.contentDocument\n const pdfPage = this.pageProxy\n\n if (!frameDoc || !frameElement || !pdfPage || !this.textLayer) {\n throw new Error(\"Unable to update text layer due to missing elements\")\n }\n\n const textLayerElement = frameDoc.body\n const canvasScale = canvas.clientWidth / viewportWidth\n\n setStylePropertyIfChanged(\n textLayerElement.style,\n `top`,\n `${canvas.offsetTop}px`,\n )\n setStylePropertyIfChanged(\n textLayerElement.style,\n `left`,\n `${canvas.offsetLeft}px`,\n )\n setStylePropertyIfChanged(\n textLayerElement.style,\n `height`,\n canvas.style.height,\n )\n setStylePropertyIfChanged(\n textLayerElement.style,\n `width`,\n canvas.style.width,\n )\n\n /**\n * Taking inspiration from https://github.com/mozilla/pdf.js/blob/master/web/pdf_viewer.css.\n * Not sure why pdfjs DOES rely on css from the viewer to works. Or in another words, why is it\n * not more obvious that TextLayer requires a set of variables to work correctly.\n */\n setStylePropertyIfChanged(\n frameDoc.documentElement.style,\n `--scale-factor`,\n `${canvasScale}`,\n )\n\n this.textLayer.update({\n viewport,\n })\n\n return of(undefined)\n }),\n catchError((e) => {\n if (!(e instanceof RenderingCancelledException)) console.error(e)\n\n return of(undefined)\n }),\n )\n }\n\n /**\n * @important\n * We should keep the same node structure to preserve CFI integrity.\n */\n onRenderHeadless() {\n return this.getPageProxy().pipe(\n switchMap((pageProxy) => {\n const headlessDocument = document.implementation.createHTMLDocument()\n const textLayerElement = headlessDocument.body\n\n const textLayer = new TextLayer({\n container: textLayerElement,\n textContentSource: pageProxy.streamTextContent(),\n viewport: pageProxy.getViewport({ scale: 1 }),\n })\n\n return from(textLayer.render()).pipe(map(() => headlessDocument))\n }),\n )\n }\n\n getDocumentFrame() {\n return this.getFrameElement()\n }\n}\n","import type { createReader, Reader } from \"@prose-reader/core\"\nimport { from, map, mergeMap, of } from \"rxjs\"\nimport { isPdfJsArchive } from \"./createArchiveFromPdf\"\nimport { PdfRenderer } from \"./renderer/PdfRenderer\"\nimport type { EnhancerOptions } from \"./types\"\n\ntype CreateReader = typeof createReader\ntype CreateReaderOptions = Parameters<CreateReader>[0]\n\nexport const pdfEnhancer =\n <InheritOptions extends CreateReaderOptions, InheritOutput extends Reader>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\n (options: InheritOptions & EnhancerOptions): InheritOutput => {\n const reader = next({\n ...options,\n /**\n * We have a special renderer for pdf so we need to inject it\n * for the relevant items. The enhancer could be configurable but for\n * the sake of simplicity we will assume that an item ending with .pdf should\n * be treated as a pdf document.\n *\n * The `getRenderer` hook should be non destructive, if we detect a renderer already\n * setup we should return it.\n */\n getRenderer(item) {\n const maybeFactory = options.getRenderer?.(item)\n\n if (!maybeFactory && item.href.endsWith(`.pdf`)) {\n return (params) =>\n new PdfRenderer(options.pdf.pdfjsViewerInlineCss, params)\n }\n\n return maybeFactory\n },\n getResource: (item) =>\n options.pdf.getArchiveForItem(item).pipe(\n mergeMap((archive) => {\n if (!archive) return of(undefined)\n\n if (!isPdfJsArchive(archive)) {\n console.warn(`You provided an invalid pdf archive`)\n\n return of(undefined)\n }\n\n // we account for opf file\n const fileIndex =\n archive.records.findIndex((file) =>\n item.href.endsWith(file.uri),\n ) - 1\n\n return from(archive.proxyDocument.getPage(fileIndex + 1)).pipe(\n map((pageProxy) => ({\n custom: true as const,\n data: pageProxy,\n })),\n )\n }),\n ),\n })\n\n return reader\n }\n"],"x_google_ignoreList":[4,5],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["e","t","n","r","a","o","s","c","l","u","d","p","m","h","g","_","v","y","b","x","t","e","n","r","e","t","n","r","e","t","e","v","j","M","N","P","F","I","L","R","z","B","V","H","U","W","G","K","q","n","t","r","c","s","o","l","h","re","m","_","ee","te","e","d","v","ne","g","f","u","oe","ae","ie","p","a","se","E","ce","me","k","b","_e","x","O","y","pe","C","he","T","A","S","D","w","ge","ue","de","le","fe","i"],"sources":["../../shared/dist/index.js","../../streamer/dist/createArchive-BB7-JJjh.js","../../streamer/dist/uri-DBZYnB1I.js","../../streamer/dist/fileAccessors-etcCPnpQ.js","../../../node_modules/sax/lib/sax.js","../../../node_modules/xmldoc/dist/xmldoc.js","../../archive-parser/dist/index.js","../../streamer/dist/index/index.es.js","../src/createArchiveFromPdf.ts","../src/renderer/frame.css?inline","../src/renderer/layout.ts","../src/renderer/PdfRenderer.ts","../src/pdfEnhancer.ts"],"sourcesContent":["//#region src/array.ts\nvar e = (e, t) => e === t ? !0 : e.length === t.length ? e.every((e, n) => e === t[n]) : !1, t = (e) => e.split(/[#?]/)[0]?.split(\".\").pop()?.trim() || \"\";\nfunction n(e) {\n\tlet t = [];\n\tif (e.length === 0) return \"\";\n\tif (typeof e[0] != \"string\") throw TypeError(`Url must be a string. Received ${e[0]}`);\n\te[0].match(/^[^/:]+:\\/*$/) && e.length > 1 && (e[0] = e.shift() + e[0]), e[0].match(/^file:\\/\\/\\//) ? e[0] = e[0].replace(/^([^/:]+):\\/*/, \"$1:///\") : e[0] = e[0].replace(/^([^/:]+):\\/*/, \"$1://\");\n\tfor (let n = 0; n < e.length; n++) {\n\t\tlet r = e[n];\n\t\tif (typeof r != \"string\") throw TypeError(`Url must be a string. Received ${r}`);\n\t\tr !== \"\" && (n > 0 && (r = r.replace(/^[/]+/, \"\")), r = n < e.length - 1 ? r.replace(/[/]+$/, \"\") : r.replace(/[/]+$/, \"/\"), t.push(r));\n\t}\n\tlet n = t.join(\"/\");\n\tn = n.replace(/\\/(\\?|&|#[^!])/g, \"$1\");\n\tlet r = n.split(\"?\");\n\treturn n = r.shift() + (r.length > 0 ? \"?\" : \"\") + r.join(\"&\"), n;\n}\nfunction r(...e) {\n\treturn n(Array.from(Array.isArray(e[0]) ? e[0] : e));\n}\nfunction i(e) {\n\tlet t = e.split(\"/\");\n\treturn t.pop(), t.join(\"/\");\n}\n//#endregion\n//#region src/contentType.ts\nvar a = (e) => {\n\tswitch (t(e)) {\n\t\tcase \"png\": return \"image/png\";\n\t\tcase \"jpg\": return \"image/jpg\";\n\t\tcase \"jpeg\": return \"image/jpeg\";\n\t\tcase \"txt\": return \"text/plain\";\n\t\tcase \"webp\": return \"image/webp\";\n\t\tcase \"xhtml\": return \"application/xhtml+xml\";\n\t\tcase \"mp3\": return \"audio/mpeg\";\n\t\tcase \"m4a\":\n\t\tcase \"m4b\": return \"audio/mp4\";\n\t\tcase \"aac\": return \"audio/aac\";\n\t\tcase \"ogg\":\n\t\tcase \"oga\": return \"audio/ogg\";\n\t\tcase \"wav\": return \"audio/wav\";\n\t\tcase \"flac\": return \"audio/flac\";\n\t\tcase \"opus\": return \"audio/opus\";\n\t}\n}, o = ({ mimeType: e, uri: t }) => (e ?? a(t ?? \"\"))?.startsWith(\"application/xhtml+xml\"), s = (e) => e.startsWith(\"image/\") || e.startsWith(\"audio/\") || e.startsWith(\"video/\"), c = (e) => {\n\tif (!e.length) return;\n\tlet t = e.indexOf(\";\");\n\treturn t >= 0 ? e.substring(0, t) : e;\n}, l = (e) => {\n\tlet t = e.pageSpreadLeft === !0;\n\tif (t !== (e.pageSpreadRight === !0)) return t ? \"left\" : \"right\";\n}, u = (e, t, n) => {\n\tif (Object.is(e, t)) return !0;\n\tif (typeof e != \"object\" || !e || typeof t != \"object\" || !t) return !1;\n\tlet r = Object.keys(e), i = Object.keys(t);\n\tif (r.length !== i.length) return !1;\n\tlet a = n?.customEqual ?? Object.is, o = e, s = t;\n\tfor (let e of r) if (!Object.hasOwn(s, e) || !a(o[e], s[e])) return !1;\n\treturn !0;\n}, d = (e, t) => e.reduce((e, n) => {\n\tlet r = t(n);\n\treturn e[r] || (e[r] = []), e[r].push(n), e;\n}, {});\nfunction f(e, t) {\n\tlet n = { ...e };\n\tfor (let r in t) if (Object.hasOwn(t, r)) {\n\t\tlet i = t[r];\n\t\t(i !== void 0 || !(r in e)) && (n[r] = i);\n\t}\n\treturn n;\n}\n//#endregion\n//#region src/report.ts\nvar p = () => {\n\tif (!(typeof window > \"u\")) return window;\n};\nfunction m() {\n\tlet e = p()?.__PROSE_READER_DEBUG;\n\treturn e === !0 || e === \"true\";\n}\nvar h = (e, t) => typeof e == \"boolean\" ? {\n\tenabled: e,\n\toptions: t\n} : {\n\tenabled: e?.enabled,\n\toptions: e ?? t\n}, g = (e) => e.at(-1)?.color, _ = (e) => {\n\tif (!e.length) return;\n\tif (!e.some((e) => e.color)) return [e.map((e) => e.label).join(\" \")];\n\tlet t = \"\", n = [];\n\tfor (let r of e) t += `%c${t ? ` ${r.label}` : r.label}`, n.push(r.color ? `color: ${r.color}` : \"\");\n\treturn [t, ...n];\n}, v = (e = [], t = m()) => {\n\tlet n = t, r = {\n\t\tenable: (e) => {\n\t\t\ta(e);\n\t\t},\n\t\tnamespace: (t, r, i) => {\n\t\t\tlet a = h(r, i), o = a.options?.color ?? g(e);\n\t\t\treturn v([...e, {\n\t\t\t\tlabel: `[${t}]`,\n\t\t\t\tcolor: o\n\t\t\t}], a.enabled ?? n);\n\t\t},\n\t\tisEnabled: () => n,\n\t\tdebug: () => {},\n\t\tinfo: () => {},\n\t\tlog: () => {},\n\t\tgroupCollapsed: () => {},\n\t\tgroupEnd: () => {},\n\t\tgetGroupArgs: (t) => {\n\t\t\tlet n = _(e);\n\t\t\tif (!n) return [t];\n\t\t\tlet [r, ...i] = n;\n\t\t\treturn [`${r} ${t}`, ...i];\n\t\t},\n\t\twarn: () => {},\n\t\terror: () => {}\n\t}, i = (t) => {\n\t\tif (!t) {\n\t\t\tr.debug = () => {}, r.info = () => {}, r.log = () => {}, r.groupCollapsed = () => {}, r.groupEnd = () => {}, r.warn = () => {}, r.error = () => {};\n\t\t\treturn;\n\t\t}\n\t\tlet n = _(e) ?? [];\n\t\tr.debug = Function.prototype.bind.call(console.debug, console, ...n), r.info = Function.prototype.bind.call(console.info, console, ...n), r.log = Function.prototype.bind.call(console.log, console, ...n), r.groupCollapsed = Function.prototype.bind.call(console.groupCollapsed, console), r.groupEnd = Function.prototype.bind.call(console.groupEnd, console), r.warn = Function.prototype.bind.call(console.warn, console, ...n), r.error = Function.prototype.bind.call(console.error, console, ...n);\n\t}, a = (e) => {\n\t\tn !== e && (n = e, i(n));\n\t};\n\treturn i(n), r;\n}, y = v(), b = \"prose-reader-resource-error\", x = (e) => e.replaceAll(\"&\", \"&amp;\").replaceAll(\"\\\"\", \"&quot;\").replaceAll(\"'\", \"&apos;\").replaceAll(\"<\", \"&lt;\").replaceAll(\">\", \"&gt;\");\n//#endregion\nexport { b as PROSE_READER_RESOURCE_ERROR_INJECTED_META_NAME, y as Report, e as arrayEqual, a as detectMimeTypeFromName, x as escapeXmlAttributeValue, l as getItemSpreadPosition, i as getParentPath, t as getUrlExtension, d as groupBy, s as isMediaContentMimeType, u as isShallowEqual, o as isXmlBasedMimeType, c as parseContentType, f as shallowMergeIfDefined, r as urlJoin };\n\n//# sourceMappingURL=index.js.map","import { Report as e } from \"@prose-reader/shared\";\n//#endregion\n//#region src/report.ts\nvar t = e.namespace(\"@prose-reader/streamer\", !1, { color: \"#ffae42\" }), n = (e) => {\n\tlet t = {};\n\tfor (let n of e) {\n\t\tlet e = n.split(\"/\"), r = t;\n\t\tfor (let t = 0; t < e.length; t++) {\n\t\t\tlet n = e[t];\n\t\t\tn !== void 0 && (r[n] || (r[n] = {}), r = r[n]);\n\t\t}\n\t}\n\tlet n = (e, t = \"\") => Object.keys(e).sort().map((r, i, a) => {\n\t\tlet o = i === a.length - 1, s = t + (o ? \"└── \" : \"├── \"), c = t + (o ? \" \" : \"│ \"), l = e[r];\n\t\treturn l && Object.keys(l).length > 0 ? `${s}${r}/\\n${n(l, c)}` : `${s}${r}`;\n\t}).join(\"\\n\");\n\treturn n(t);\n}, r = ({ records: e, ...r }) => {\n\tlet i = /* @__PURE__ */ new Map();\n\tfor (let t of e) i.has(t.uri) || i.set(t.uri, t);\n\tlet a = {\n\t\t...r,\n\t\trecords: e,\n\t\trecordsByUri: i\n\t};\n\tif (t.log(\"Generated archive\", a), process.env.NODE_ENV === \"development\" && t.isEnabled()) {\n\t\tlet r = n(e.map((e) => e.uri));\n\t\tt.groupCollapsed(...t.getGroupArgs(\"Archive folder structure\")), t.log(`\\n${r}`), t.groupEnd();\n\t}\n\treturn a;\n};\n//#endregion\nexport { t as n, r as t };\n\n//# sourceMappingURL=createArchive-BB7-JJjh.js.map","//#region src/utils/sortByTitleComparator.ts\nvar e = (e, t) => {\n\tlet n = e.split(/(\\d+)/), r = t.split(/(\\d+)/);\n\tfor (let e = 0, t = n.length; e < t; e++) if (n[e] !== r[e]) return n[e]?.match(/\\d/) ? (n[e] || \"\") - +(r[e] || \"\") : (n[e] || \"\").localeCompare(r[e] || \"\");\n\treturn 1;\n}, t = (e) => e.substring(e.lastIndexOf(\"/\") + 1) || e, n = (e) => e.endsWith(\"/\") ? e.slice(0, -1) : e, r = (e) => {\n\tlet t = e.lastIndexOf(\"/\");\n\treturn t >= 0 ? e.substring(0, t) : \"\";\n};\n//#endregion\nexport { e as i, t as n, n as r, r as t };\n\n//# sourceMappingURL=uri-DBZYnB1I.js.map","//#region src/archives/fileAccessors.ts\nvar e = (e) => ({\n\tblob: e,\n\tarrayBuffer: () => e().then((e) => e.arrayBuffer())\n}), t = (e, t = \"\") => ({\n\tarrayBuffer: e,\n\tblob: () => e().then((e) => new Blob([e], { type: t }))\n});\n//#endregion\nexport { e as n, t };\n\n//# sourceMappingURL=fileAccessors-etcCPnpQ.js.map",";(function (sax) {\n // wrapper for non-node envs\n sax.parser = function (strict, opt) {\n return new SAXParser(strict, opt)\n }\n sax.SAXParser = SAXParser\n sax.SAXStream = SAXStream\n sax.createStream = createStream\n\n // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n // since that's the earliest that a buffer overrun could occur. This way, checks are\n // as rare as required, but as often as necessary to ensure never crossing this bound.\n // Furthermore, buffers are only tested at most once per write(), so passing a very\n // large string into write() might have undesirable effects, but this is manageable by\n // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme\n // edge case, result in creating at most one complete copy of the string passed in.\n // Set to Infinity to have unlimited buffers.\n sax.MAX_BUFFER_LENGTH = 64 * 1024\n\n var buffers = [\n 'comment',\n 'sgmlDecl',\n 'textNode',\n 'tagName',\n 'doctype',\n 'procInstName',\n 'procInstBody',\n 'entity',\n 'attribName',\n 'attribValue',\n 'cdata',\n 'script',\n ]\n\n sax.EVENTS = [\n 'text',\n 'processinginstruction',\n 'sgmldeclaration',\n 'doctype',\n 'comment',\n 'opentagstart',\n 'attribute',\n 'opentag',\n 'closetag',\n 'opencdata',\n 'cdata',\n 'closecdata',\n 'error',\n 'end',\n 'ready',\n 'script',\n 'opennamespace',\n 'closenamespace',\n ]\n\n function SAXParser(strict, opt) {\n if (!(this instanceof SAXParser)) {\n return new SAXParser(strict, opt)\n }\n\n var parser = this\n clearBuffers(parser)\n parser.q = parser.c = ''\n parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH\n parser.encoding = null;\n parser.opt = opt || {}\n parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags\n parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'\n parser.opt.maxEntityCount = parser.opt.maxEntityCount || 512\n parser.opt.maxEntityDepth = parser.opt.maxEntityDepth || 4\n parser.entityCount = parser.entityDepth = 0\n parser.tags = []\n parser.closed = parser.closedRoot = parser.sawRoot = false\n parser.tag = parser.error = null\n parser.strict = !!strict\n parser.noscript = !!(strict || parser.opt.noscript)\n parser.state = S.BEGIN\n parser.strictEntities = parser.opt.strictEntities\n parser.ENTITIES =\n parser.strictEntities ?\n Object.create(sax.XML_ENTITIES)\n : Object.create(sax.ENTITIES)\n parser.attribList = []\n\n // namespaces form a prototype chain.\n // it always points at the current tag,\n // which protos to its parent tag.\n if (parser.opt.xmlns) {\n parser.ns = Object.create(rootNS)\n }\n\n // disallow unquoted attribute values if not otherwise configured\n // and strict mode is true\n if (parser.opt.unquotedAttributeValues === undefined) {\n parser.opt.unquotedAttributeValues = !strict\n }\n\n // mostly just for error reporting\n parser.trackPosition = parser.opt.position !== false\n if (parser.trackPosition) {\n parser.position = parser.line = parser.column = 0\n }\n emit(parser, 'onready')\n }\n\n if (!Object.create) {\n Object.create = function (o) {\n function F() {}\n F.prototype = o\n var newf = new F()\n return newf\n }\n }\n\n if (!Object.keys) {\n Object.keys = function (o) {\n var a = []\n for (var i in o) if (o.hasOwnProperty(i)) a.push(i)\n return a\n }\n }\n\n function checkBufferLength(parser) {\n var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)\n var maxActual = 0\n for (var i = 0, l = buffers.length; i < l; i++) {\n var len = parser[buffers[i]].length\n if (len > maxAllowed) {\n // Text/cdata nodes can get big, and since they're buffered,\n // we can get here under normal conditions.\n // Avoid issues by emitting the text node now,\n // so at least it won't get any bigger.\n switch (buffers[i]) {\n case 'textNode':\n closeText(parser)\n break\n\n case 'cdata':\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n break\n\n case 'script':\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n break\n\n default:\n error(parser, 'Max buffer length exceeded: ' + buffers[i])\n }\n }\n maxActual = Math.max(maxActual, len)\n }\n // schedule the next check for the earliest possible buffer overrun.\n var m = sax.MAX_BUFFER_LENGTH - maxActual\n parser.bufferCheckPosition = m + parser.position\n }\n\n function clearBuffers(parser) {\n for (var i = 0, l = buffers.length; i < l; i++) {\n parser[buffers[i]] = ''\n }\n }\n\n function flushBuffers(parser) {\n closeText(parser)\n if (parser.cdata !== '') {\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n }\n if (parser.script !== '') {\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n }\n\n SAXParser.prototype = {\n end: function () {\n end(this)\n },\n write: write,\n resume: function () {\n this.error = null\n return this\n },\n close: function () {\n return this.write(null)\n },\n flush: function () {\n flushBuffers(this)\n },\n }\n\n var Stream\n try {\n Stream = require('stream').Stream\n } catch (ex) {\n Stream = function () {}\n }\n if (!Stream) Stream = function () {}\n\n var streamWraps = sax.EVENTS.filter(function (ev) {\n return ev !== 'error' && ev !== 'end'\n })\n\n function createStream(strict, opt) {\n return new SAXStream(strict, opt)\n }\n\n function determineBufferEncoding(data, isEnd) {\n // BOM-based detection is the most reliable signal when present.\n if (data.length >= 2) {\n if (data[0] === 0xff && data[1] === 0xfe) {\n return 'utf-16le'\n }\n\n if (data[0] === 0xfe && data[1] === 0xff) {\n return 'utf-16be'\n }\n }\n\n if (data.length >= 3 && data[0] === 0xef && data[1] === 0xbb && data[2] === 0xbf) {\n return 'utf8'\n }\n\n if (data.length >= 4) {\n // XML documents without a BOM still start with \"<?xml\", which is enough\n // to distinguish UTF-16LE/BE from UTF-8 by looking at the zero bytes.\n if (data[0] === 0x3c && data[1] === 0x00 && data[2] === 0x3f && data[3] === 0x00) {\n return 'utf-16le'\n }\n\n if (data[0] === 0x00 && data[1] === 0x3c && data[2] === 0x00 && data[3] === 0x3f) {\n return 'utf-16be'\n }\n\n return 'utf8'\n }\n\n return isEnd ? 'utf8' : null\n }\n\n function SAXStream(strict, opt) {\n if (!(this instanceof SAXStream)) {\n return new SAXStream(strict, opt)\n }\n\n Stream.apply(this)\n\n this._parser = new SAXParser(strict, opt)\n this.writable = true\n this.readable = true\n\n var me = this\n\n this._parser.onend = function () {\n me.emit('end')\n }\n\n this._parser.onerror = function (er) {\n me.emit('error', er)\n\n // if didn't throw, then means error was handled.\n // go ahead and clear error, so we can write again.\n me._parser.error = null\n }\n\n this._decoder = null\n this._decoderBuffer = null\n streamWraps.forEach(function (ev) {\n Object.defineProperty(me, 'on' + ev, {\n get: function () {\n return me._parser['on' + ev]\n },\n set: function (h) {\n if (!h) {\n me.removeAllListeners(ev)\n me._parser['on' + ev] = h\n return h\n }\n me.on(ev, h)\n },\n enumerable: true,\n configurable: false,\n })\n })\n }\n\n SAXStream.prototype = Object.create(Stream.prototype, {\n constructor: {\n value: SAXStream,\n },\n })\n\n SAXStream.prototype._decodeBuffer = function (data, isEnd) {\n if (this._decoderBuffer) {\n // Keep incomplete leading bytes until we have enough data to infer the\n // stream encoding, then decode the buffered prefix together with the next chunk.\n data = Buffer.concat([this._decoderBuffer, data])\n this._decoderBuffer = null\n }\n\n if (!this._decoder) {\n var encoding = determineBufferEncoding(data, isEnd)\n if (!encoding) {\n // A very short first chunk may not contain enough bytes to detect the\n // encoding yet, so defer decoding until the next write/end call.\n this._decoderBuffer = data\n return ''\n }\n\n // Store the detected transport encoding so strict mode can compare it\n // with the optional encoding declared in the XML prolog later on.\n this._parser.encoding = encoding\n this._decoder = new TextDecoder(encoding)\n }\n\n return this._decoder.decode(data, { stream: !isEnd })\n }\n\n SAXStream.prototype.write = function (data) {\n if (\n typeof Buffer === 'function' &&\n typeof Buffer.isBuffer === 'function' &&\n Buffer.isBuffer(data)\n ) {\n data = this._decodeBuffer(data, false)\n } else if (this._decoderBuffer) {\n // Flush any buffered binary prefix before handling a string chunk.\n // This only matters if the caller mixes Buffer and string writes (used in test).\n var remaining = this._decodeBuffer(Buffer.alloc(0), true)\n if (remaining) {\n this._parser.write(remaining)\n this.emit('data', remaining)\n }\n }\n\n this._parser.write(data.toString())\n this.emit('data', data)\n return true\n }\n\n SAXStream.prototype.end = function (chunk) {\n if (chunk && chunk.length) {\n this.write(chunk)\n }\n // Flush any remaining decoded data from the TextDecoder\n if (this._decoderBuffer) {\n var finalChunk = this._decodeBuffer(Buffer.alloc(0), true)\n if (finalChunk) {\n this._parser.write(finalChunk)\n this.emit('data', finalChunk)\n }\n } else if (this._decoder) {\n var remaining = this._decoder.decode()\n if (remaining) {\n this._parser.write(remaining)\n this.emit('data', remaining)\n }\n }\n this._parser.end()\n return true\n }\n\n SAXStream.prototype.on = function (ev, handler) {\n var me = this\n if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {\n me._parser['on' + ev] = function () {\n var args =\n arguments.length === 1 ?\n [arguments[0]]\n : Array.apply(null, arguments)\n args.splice(0, 0, ev)\n me.emit.apply(me, args)\n }\n }\n\n return Stream.prototype.on.call(me, ev, handler)\n }\n\n // this really needs to be replaced with character classes.\n // XML allows all manner of ridiculous numbers and digits.\n var CDATA = '[CDATA['\n var DOCTYPE = 'DOCTYPE'\n var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'\n var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'\n var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }\n\n // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n // This implementation works on strings, a single character at a time\n // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n // without a significant breaking change to either this parser, or the\n // JavaScript language. Implementation of an emoji-capable xml parser\n // is left as an exercise for the reader.\n var nameStart =\n /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n\n var nameBody =\n /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n var entityStart =\n /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n var entityBody =\n /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n function isWhitespace(c) {\n return c === ' ' || c === '\\n' || c === '\\r' || c === '\\t'\n }\n\n function isQuote(c) {\n return c === '\"' || c === \"'\"\n }\n\n function isAttribEnd(c) {\n return c === '>' || isWhitespace(c)\n }\n\n function isMatch(regex, c) {\n return regex.test(c)\n }\n\n function notMatch(regex, c) {\n return !isMatch(regex, c)\n }\n\n var S = 0\n sax.STATE = {\n BEGIN: S++, // leading byte order mark or whitespace\n BEGIN_WHITESPACE: S++, // leading whitespace\n TEXT: S++, // general stuff\n TEXT_ENTITY: S++, // &amp and such.\n OPEN_WAKA: S++, // <\n SGML_DECL: S++, // <!BLARG\n SGML_DECL_QUOTED: S++, // <!BLARG foo \"bar\n DOCTYPE: S++, // <!DOCTYPE\n DOCTYPE_QUOTED: S++, // <!DOCTYPE \"//blah\n DOCTYPE_DTD: S++, // <!DOCTYPE \"//blah\" [ ...\n DOCTYPE_DTD_QUOTED: S++, // <!DOCTYPE \"//blah\" [ \"foo\n COMMENT_STARTING: S++, // <!-\n COMMENT: S++, // <!--\n COMMENT_ENDING: S++, // <!-- blah -\n COMMENT_ENDED: S++, // <!-- blah --\n CDATA: S++, // <![CDATA[ something\n CDATA_ENDING: S++, // ]\n CDATA_ENDING_2: S++, // ]]\n PROC_INST: S++, // <?hi\n PROC_INST_BODY: S++, // <?hi there\n PROC_INST_ENDING: S++, // <?hi \"there\" ?\n OPEN_TAG: S++, // <strong\n OPEN_TAG_SLASH: S++, // <strong /\n ATTRIB: S++, // <a\n ATTRIB_NAME: S++, // <a foo\n ATTRIB_NAME_SAW_WHITE: S++, // <a foo _\n ATTRIB_VALUE: S++, // <a foo=\n ATTRIB_VALUE_QUOTED: S++, // <a foo=\"bar\n ATTRIB_VALUE_CLOSED: S++, // <a foo=\"bar\"\n ATTRIB_VALUE_UNQUOTED: S++, // <a foo=bar\n ATTRIB_VALUE_ENTITY_Q: S++, // <foo bar=\"&quot;\"\n ATTRIB_VALUE_ENTITY_U: S++, // <foo bar=&quot\n CLOSE_TAG: S++, // </a\n CLOSE_TAG_SAW_WHITE: S++, // </a >\n SCRIPT: S++, // <script> ...\n SCRIPT_ENDING: S++, // <script> ... <\n }\n\n sax.XML_ENTITIES = {\n amp: '&',\n gt: '>',\n lt: '<',\n quot: '\"',\n apos: \"'\",\n }\n\n sax.ENTITIES = {\n amp: '&',\n gt: '>',\n lt: '<',\n quot: '\"',\n apos: \"'\",\n AElig: 198,\n Aacute: 193,\n Acirc: 194,\n Agrave: 192,\n Aring: 197,\n Atilde: 195,\n Auml: 196,\n Ccedil: 199,\n ETH: 208,\n Eacute: 201,\n Ecirc: 202,\n Egrave: 200,\n Euml: 203,\n Iacute: 205,\n Icirc: 206,\n Igrave: 204,\n Iuml: 207,\n Ntilde: 209,\n Oacute: 211,\n Ocirc: 212,\n Ograve: 210,\n Oslash: 216,\n Otilde: 213,\n Ouml: 214,\n THORN: 222,\n Uacute: 218,\n Ucirc: 219,\n Ugrave: 217,\n Uuml: 220,\n Yacute: 221,\n aacute: 225,\n acirc: 226,\n aelig: 230,\n agrave: 224,\n aring: 229,\n atilde: 227,\n auml: 228,\n ccedil: 231,\n eacute: 233,\n ecirc: 234,\n egrave: 232,\n eth: 240,\n euml: 235,\n iacute: 237,\n icirc: 238,\n igrave: 236,\n iuml: 239,\n ntilde: 241,\n oacute: 243,\n ocirc: 244,\n ograve: 242,\n oslash: 248,\n otilde: 245,\n ouml: 246,\n szlig: 223,\n thorn: 254,\n uacute: 250,\n ucirc: 251,\n ugrave: 249,\n uuml: 252,\n yacute: 253,\n yuml: 255,\n copy: 169,\n reg: 174,\n nbsp: 160,\n iexcl: 161,\n cent: 162,\n pound: 163,\n curren: 164,\n yen: 165,\n brvbar: 166,\n sect: 167,\n uml: 168,\n ordf: 170,\n laquo: 171,\n not: 172,\n shy: 173,\n macr: 175,\n deg: 176,\n plusmn: 177,\n sup1: 185,\n sup2: 178,\n sup3: 179,\n acute: 180,\n micro: 181,\n para: 182,\n middot: 183,\n cedil: 184,\n ordm: 186,\n raquo: 187,\n frac14: 188,\n frac12: 189,\n frac34: 190,\n iquest: 191,\n times: 215,\n divide: 247,\n OElig: 338,\n oelig: 339,\n Scaron: 352,\n scaron: 353,\n Yuml: 376,\n fnof: 402,\n circ: 710,\n tilde: 732,\n Alpha: 913,\n Beta: 914,\n Gamma: 915,\n Delta: 916,\n Epsilon: 917,\n Zeta: 918,\n Eta: 919,\n Theta: 920,\n Iota: 921,\n Kappa: 922,\n Lambda: 923,\n Mu: 924,\n Nu: 925,\n Xi: 926,\n Omicron: 927,\n Pi: 928,\n Rho: 929,\n Sigma: 931,\n Tau: 932,\n Upsilon: 933,\n Phi: 934,\n Chi: 935,\n Psi: 936,\n Omega: 937,\n alpha: 945,\n beta: 946,\n gamma: 947,\n delta: 948,\n epsilon: 949,\n zeta: 950,\n eta: 951,\n theta: 952,\n iota: 953,\n kappa: 954,\n lambda: 955,\n mu: 956,\n nu: 957,\n xi: 958,\n omicron: 959,\n pi: 960,\n rho: 961,\n sigmaf: 962,\n sigma: 963,\n tau: 964,\n upsilon: 965,\n phi: 966,\n chi: 967,\n psi: 968,\n omega: 969,\n thetasym: 977,\n upsih: 978,\n piv: 982,\n ensp: 8194,\n emsp: 8195,\n thinsp: 8201,\n zwnj: 8204,\n zwj: 8205,\n lrm: 8206,\n rlm: 8207,\n ndash: 8211,\n mdash: 8212,\n lsquo: 8216,\n rsquo: 8217,\n sbquo: 8218,\n ldquo: 8220,\n rdquo: 8221,\n bdquo: 8222,\n dagger: 8224,\n Dagger: 8225,\n bull: 8226,\n hellip: 8230,\n permil: 8240,\n prime: 8242,\n Prime: 8243,\n lsaquo: 8249,\n rsaquo: 8250,\n oline: 8254,\n frasl: 8260,\n euro: 8364,\n image: 8465,\n weierp: 8472,\n real: 8476,\n trade: 8482,\n alefsym: 8501,\n larr: 8592,\n uarr: 8593,\n rarr: 8594,\n darr: 8595,\n harr: 8596,\n crarr: 8629,\n lArr: 8656,\n uArr: 8657,\n rArr: 8658,\n dArr: 8659,\n hArr: 8660,\n forall: 8704,\n part: 8706,\n exist: 8707,\n empty: 8709,\n nabla: 8711,\n isin: 8712,\n notin: 8713,\n ni: 8715,\n prod: 8719,\n sum: 8721,\n minus: 8722,\n lowast: 8727,\n radic: 8730,\n prop: 8733,\n infin: 8734,\n ang: 8736,\n and: 8743,\n or: 8744,\n cap: 8745,\n cup: 8746,\n int: 8747,\n there4: 8756,\n sim: 8764,\n cong: 8773,\n asymp: 8776,\n ne: 8800,\n equiv: 8801,\n le: 8804,\n ge: 8805,\n sub: 8834,\n sup: 8835,\n nsub: 8836,\n sube: 8838,\n supe: 8839,\n oplus: 8853,\n otimes: 8855,\n perp: 8869,\n sdot: 8901,\n lceil: 8968,\n rceil: 8969,\n lfloor: 8970,\n rfloor: 8971,\n lang: 9001,\n rang: 9002,\n loz: 9674,\n spades: 9824,\n clubs: 9827,\n hearts: 9829,\n diams: 9830,\n }\n\n Object.keys(sax.ENTITIES).forEach(function (key) {\n var e = sax.ENTITIES[key]\n var s = typeof e === 'number' ? String.fromCharCode(e) : e\n sax.ENTITIES[key] = s\n })\n\n for (var s in sax.STATE) {\n sax.STATE[sax.STATE[s]] = s\n }\n\n // shorthand\n S = sax.STATE\n\n function emit(parser, event, data) {\n parser[event] && parser[event](data)\n }\n\n function getDeclaredEncoding(body) {\n var match = body && body.match(/(?:^|\\s)encoding\\s*=\\s*(['\"])([^'\"]+)\\1/i)\n return match ? match[2] : null\n }\n\n function normalizeEncodingName(encoding) {\n if (!encoding) {\n return null\n }\n\n return encoding.toLowerCase().replace(/[^a-z0-9]/g, '')\n }\n\n function encodingsMatch(detectedEncoding, declaredEncoding) {\n const detected = normalizeEncodingName(detectedEncoding)\n const declared = normalizeEncodingName(declaredEncoding)\n\n if (!detected || !declared) {\n return true\n }\n\n if (declared === 'utf16') {\n return detected === 'utf16le' || detected === 'utf16be'\n }\n\n return detected === declared\n }\n\n function validateXmlDeclarationEncoding(parser, data) {\n if (\n !parser.strict ||\n !parser.encoding ||\n !data ||\n data.name !== 'xml'\n ) {\n return\n }\n\n var declaredEncoding = getDeclaredEncoding(data.body)\n if (\n declaredEncoding &&\n !encodingsMatch(parser.encoding, declaredEncoding)\n ) {\n strictFail(\n parser,\n 'XML declaration encoding ' +\n declaredEncoding +\n ' does not match detected stream encoding ' +\n parser.encoding.toUpperCase()\n )\n }\n }\n\n function emitNode(parser, nodeType, data) {\n if (parser.textNode) closeText(parser)\n emit(parser, nodeType, data)\n }\n\n function closeText(parser) {\n parser.textNode = textopts(parser.opt, parser.textNode)\n if (parser.textNode) emit(parser, 'ontext', parser.textNode)\n parser.textNode = ''\n }\n\n function textopts(opt, text) {\n if (opt.trim) text = text.trim()\n if (opt.normalize) text = text.replace(/\\s+/g, ' ')\n return text\n }\n\n function error(parser, er) {\n closeText(parser)\n if (parser.trackPosition) {\n er +=\n '\\nLine: ' +\n parser.line +\n '\\nColumn: ' +\n parser.column +\n '\\nChar: ' +\n parser.c\n }\n er = new Error(er)\n parser.error = er\n emit(parser, 'onerror', er)\n return parser\n }\n\n function end(parser) {\n if (parser.sawRoot && !parser.closedRoot)\n strictFail(parser, 'Unclosed root tag')\n if (\n parser.state !== S.BEGIN &&\n parser.state !== S.BEGIN_WHITESPACE &&\n parser.state !== S.TEXT\n ) {\n error(parser, 'Unexpected end')\n }\n closeText(parser)\n parser.c = ''\n parser.closed = true\n emit(parser, 'onend')\n SAXParser.call(parser, parser.strict, parser.opt)\n return parser\n }\n\n function strictFail(parser, message) {\n if (typeof parser !== 'object' || !(parser instanceof SAXParser)) {\n throw new Error('bad call to strictFail')\n }\n if (parser.strict) {\n error(parser, message)\n }\n }\n\n function newTag(parser) {\n if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]()\n var parent = parser.tags[parser.tags.length - 1] || parser\n var tag = (parser.tag = { name: parser.tagName, attributes: {} })\n\n // will be overridden if tag contails an xmlns=\"foo\" or xmlns:foo=\"bar\"\n if (parser.opt.xmlns) {\n tag.ns = parent.ns\n }\n parser.attribList.length = 0\n emitNode(parser, 'onopentagstart', tag)\n }\n\n function qname(name, attribute) {\n var i = name.indexOf(':')\n var qualName = i < 0 ? ['', name] : name.split(':')\n var prefix = qualName[0]\n var local = qualName[1]\n\n // <x \"xmlns\"=\"http://foo\">\n if (attribute && name === 'xmlns') {\n prefix = 'xmlns'\n local = ''\n }\n\n return { prefix: prefix, local: local }\n }\n\n function attrib(parser) {\n if (!parser.strict) {\n parser.attribName = parser.attribName[parser.looseCase]()\n }\n\n if (\n parser.attribList.indexOf(parser.attribName) !== -1 ||\n parser.tag.attributes.hasOwnProperty(parser.attribName)\n ) {\n parser.attribName = parser.attribValue = ''\n return\n }\n\n if (parser.opt.xmlns) {\n var qn = qname(parser.attribName, true)\n var prefix = qn.prefix\n var local = qn.local\n\n if (prefix === 'xmlns') {\n // namespace binding attribute. push the binding into scope\n if (local === 'xml' && parser.attribValue !== XML_NAMESPACE) {\n strictFail(\n parser,\n 'xml: prefix must be bound to ' +\n XML_NAMESPACE +\n '\\n' +\n 'Actual: ' +\n parser.attribValue\n )\n } else if (\n local === 'xmlns' &&\n parser.attribValue !== XMLNS_NAMESPACE\n ) {\n strictFail(\n parser,\n 'xmlns: prefix must be bound to ' +\n XMLNS_NAMESPACE +\n '\\n' +\n 'Actual: ' +\n parser.attribValue\n )\n } else {\n var tag = parser.tag\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (tag.ns === parent.ns) {\n tag.ns = Object.create(parent.ns)\n }\n tag.ns[local] = parser.attribValue\n }\n }\n\n // defer onattribute events until all attributes have been seen\n // so any new bindings can take effect. preserve attribute order\n // so deferred events can be emitted in document order\n parser.attribList.push([parser.attribName, parser.attribValue])\n } else {\n // in non-xmlns mode, we can emit the event right away\n parser.tag.attributes[parser.attribName] = parser.attribValue\n emitNode(parser, 'onattribute', {\n name: parser.attribName,\n value: parser.attribValue,\n })\n }\n\n parser.attribName = parser.attribValue = ''\n }\n\n function openTag(parser, selfClosing) {\n if (parser.opt.xmlns) {\n // emit namespace binding events\n var tag = parser.tag\n\n // add namespace info to tag\n var qn = qname(parser.tagName)\n tag.prefix = qn.prefix\n tag.local = qn.local\n tag.uri = tag.ns[qn.prefix] || ''\n\n if (tag.prefix && !tag.uri) {\n strictFail(\n parser,\n 'Unbound namespace prefix: ' + JSON.stringify(parser.tagName)\n )\n tag.uri = qn.prefix\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (tag.ns && parent.ns !== tag.ns) {\n Object.keys(tag.ns).forEach(function (p) {\n emitNode(parser, 'onopennamespace', {\n prefix: p,\n uri: tag.ns[p],\n })\n })\n }\n\n // handle deferred onattribute events\n // Note: do not apply default ns to attributes:\n // http://www.w3.org/TR/REC-xml-names/#defaulting\n for (var i = 0, l = parser.attribList.length; i < l; i++) {\n var nv = parser.attribList[i]\n var name = nv[0]\n var value = nv[1]\n var qualName = qname(name, true)\n var prefix = qualName.prefix\n var local = qualName.local\n var uri = prefix === '' ? '' : tag.ns[prefix] || ''\n var a = {\n name: name,\n value: value,\n prefix: prefix,\n local: local,\n uri: uri,\n }\n\n // if there's any attributes with an undefined namespace,\n // then fail on them now.\n if (prefix && prefix !== 'xmlns' && !uri) {\n strictFail(\n parser,\n 'Unbound namespace prefix: ' + JSON.stringify(prefix)\n )\n a.uri = prefix\n }\n parser.tag.attributes[name] = a\n emitNode(parser, 'onattribute', a)\n }\n parser.attribList.length = 0\n }\n\n parser.tag.isSelfClosing = !!selfClosing\n\n // process the tag\n parser.sawRoot = true\n parser.tags.push(parser.tag)\n emitNode(parser, 'onopentag', parser.tag)\n if (!selfClosing) {\n // special case for <script> in non-strict mode.\n if (!parser.noscript && parser.tagName.toLowerCase() === 'script') {\n parser.state = S.SCRIPT\n } else {\n parser.state = S.TEXT\n }\n parser.tag = null\n parser.tagName = ''\n }\n parser.attribName = parser.attribValue = ''\n parser.attribList.length = 0\n }\n\n function closeTag(parser) {\n if (!parser.tagName) {\n strictFail(parser, 'Weird empty close tag.')\n parser.textNode += '</>'\n parser.state = S.TEXT\n return\n }\n\n if (parser.script) {\n if (parser.tagName !== 'script') {\n parser.script += '</' + parser.tagName + '>'\n parser.tagName = ''\n parser.state = S.SCRIPT\n return\n }\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n\n // first make sure that the closing tag actually exists.\n // <a><b></c></b></a> will close everything, otherwise.\n var t = parser.tags.length\n var tagName = parser.tagName\n if (!parser.strict) {\n tagName = tagName[parser.looseCase]()\n }\n var closeTo = tagName\n while (t--) {\n var close = parser.tags[t]\n if (close.name !== closeTo) {\n // fail the first time in strict mode\n strictFail(parser, 'Unexpected close tag')\n } else {\n break\n }\n }\n\n // didn't find it. we already failed for strict, so just abort.\n if (t < 0) {\n strictFail(parser, 'Unmatched closing tag: ' + parser.tagName)\n parser.textNode += '</' + parser.tagName + '>'\n parser.state = S.TEXT\n return\n }\n parser.tagName = tagName\n var s = parser.tags.length\n while (s-- > t) {\n var tag = (parser.tag = parser.tags.pop())\n parser.tagName = parser.tag.name\n emitNode(parser, 'onclosetag', parser.tagName)\n\n var x = {}\n for (var i in tag.ns) {\n x[i] = tag.ns[i]\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (parser.opt.xmlns && tag.ns !== parent.ns) {\n // remove namespace bindings introduced by tag\n Object.keys(tag.ns).forEach(function (p) {\n var n = tag.ns[p]\n emitNode(parser, 'onclosenamespace', { prefix: p, uri: n })\n })\n }\n }\n if (t === 0) parser.closedRoot = true\n parser.tagName = parser.attribValue = parser.attribName = ''\n parser.attribList.length = 0\n parser.state = S.TEXT\n }\n\n function parseEntity(parser) {\n var entity = parser.entity\n var entityLC = entity.toLowerCase()\n var num\n var numStr = ''\n\n if (parser.ENTITIES[entity]) {\n return parser.ENTITIES[entity]\n }\n if (parser.ENTITIES[entityLC]) {\n return parser.ENTITIES[entityLC]\n }\n entity = entityLC\n if (entity.charAt(0) === '#') {\n if (entity.charAt(1) === 'x') {\n entity = entity.slice(2)\n num = parseInt(entity, 16)\n numStr = num.toString(16)\n } else {\n entity = entity.slice(1)\n num = parseInt(entity, 10)\n numStr = num.toString(10)\n }\n }\n entity = entity.replace(/^0+/, '')\n if (\n isNaN(num) ||\n numStr.toLowerCase() !== entity ||\n num < 0 ||\n num > 0x10ffff\n ) {\n strictFail(parser, 'Invalid character entity')\n return '&' + parser.entity + ';'\n }\n\n return String.fromCodePoint(num)\n }\n\n function beginWhiteSpace(parser, c) {\n if (c === '<') {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else if (!isWhitespace(c)) {\n // have to process this as a text node.\n // weird, but happens.\n strictFail(parser, 'Non-whitespace before first tag.')\n parser.textNode = c\n parser.state = S.TEXT\n }\n }\n\n function charAt(chunk, i) {\n var result = ''\n if (i < chunk.length) {\n result = chunk.charAt(i)\n }\n return result\n }\n\n function write(chunk) {\n var parser = this\n if (this.error) {\n throw this.error\n }\n if (parser.closed) {\n return error(\n parser,\n 'Cannot write after close. Assign an onready handler.'\n )\n }\n if (chunk === null) {\n return end(parser)\n }\n if (typeof chunk === 'object') {\n chunk = chunk.toString()\n }\n var i = 0\n var c = ''\n while (true) {\n c = charAt(chunk, i++)\n parser.c = c\n\n if (!c) {\n break\n }\n\n if (parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n\n switch (parser.state) {\n case S.BEGIN:\n parser.state = S.BEGIN_WHITESPACE\n if (c === '\\uFEFF') {\n continue\n }\n beginWhiteSpace(parser, c)\n continue\n\n case S.BEGIN_WHITESPACE:\n beginWhiteSpace(parser, c)\n continue\n\n case S.TEXT:\n if (parser.sawRoot && !parser.closedRoot) {\n var starti = i - 1\n while (c && c !== '<' && c !== '&') {\n c = charAt(chunk, i++)\n if (c && parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n }\n parser.textNode += chunk.substring(starti, i - 1)\n }\n if (\n c === '<' &&\n !(parser.sawRoot && parser.closedRoot && !parser.strict)\n ) {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else {\n if (\n !isWhitespace(c) &&\n (!parser.sawRoot || parser.closedRoot)\n ) {\n strictFail(parser, 'Text data outside of root node.')\n }\n if (c === '&') {\n parser.state = S.TEXT_ENTITY\n } else {\n parser.textNode += c\n }\n }\n continue\n\n case S.SCRIPT:\n // only non-strict\n if (c === '<') {\n parser.state = S.SCRIPT_ENDING\n } else {\n parser.script += c\n }\n continue\n\n case S.SCRIPT_ENDING:\n if (c === '/') {\n parser.state = S.CLOSE_TAG\n } else {\n parser.script += '<' + c\n parser.state = S.SCRIPT\n }\n continue\n\n case S.OPEN_WAKA:\n // either a /, ?, !, or text is coming next.\n if (c === '!') {\n parser.state = S.SGML_DECL\n parser.sgmlDecl = ''\n } else if (isWhitespace(c)) {\n // wait for it...\n } else if (isMatch(nameStart, c)) {\n parser.state = S.OPEN_TAG\n parser.tagName = c\n } else if (c === '/') {\n parser.state = S.CLOSE_TAG\n parser.tagName = ''\n } else if (c === '?') {\n parser.state = S.PROC_INST\n parser.procInstName = parser.procInstBody = ''\n } else {\n strictFail(parser, 'Unencoded <')\n // if there was some whitespace, then add that in.\n if (parser.startTagPosition + 1 < parser.position) {\n var pad = parser.position - parser.startTagPosition\n c = new Array(pad).join(' ') + c\n }\n parser.textNode += '<' + c\n parser.state = S.TEXT\n }\n continue\n\n case S.SGML_DECL:\n if (parser.sgmlDecl + c === '--') {\n parser.state = S.COMMENT\n parser.comment = ''\n parser.sgmlDecl = ''\n continue\n }\n\n if (\n parser.doctype &&\n parser.doctype !== true &&\n parser.sgmlDecl\n ) {\n parser.state = S.DOCTYPE_DTD\n parser.doctype += '<!' + parser.sgmlDecl + c\n parser.sgmlDecl = ''\n } else if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {\n emitNode(parser, 'onopencdata')\n parser.state = S.CDATA\n parser.sgmlDecl = ''\n parser.cdata = ''\n } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {\n parser.state = S.DOCTYPE\n if (parser.doctype || parser.sawRoot) {\n strictFail(\n parser,\n 'Inappropriately located doctype declaration'\n )\n }\n parser.doctype = ''\n parser.sgmlDecl = ''\n } else if (c === '>') {\n emitNode(parser, 'onsgmldeclaration', parser.sgmlDecl)\n parser.sgmlDecl = ''\n parser.state = S.TEXT\n } else if (isQuote(c)) {\n parser.state = S.SGML_DECL_QUOTED\n parser.sgmlDecl += c\n } else {\n parser.sgmlDecl += c\n }\n continue\n\n case S.SGML_DECL_QUOTED:\n if (c === parser.q) {\n parser.state = S.SGML_DECL\n parser.q = ''\n }\n parser.sgmlDecl += c\n continue\n\n case S.DOCTYPE:\n if (c === '>') {\n parser.state = S.TEXT\n emitNode(parser, 'ondoctype', parser.doctype)\n parser.doctype = true // just remember that we saw it.\n } else {\n parser.doctype += c\n if (c === '[') {\n parser.state = S.DOCTYPE_DTD\n } else if (isQuote(c)) {\n parser.state = S.DOCTYPE_QUOTED\n parser.q = c\n }\n }\n continue\n\n case S.DOCTYPE_QUOTED:\n parser.doctype += c\n if (c === parser.q) {\n parser.q = ''\n parser.state = S.DOCTYPE\n }\n continue\n\n case S.DOCTYPE_DTD:\n if (c === ']') {\n parser.doctype += c\n parser.state = S.DOCTYPE\n } else if (c === '<') {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else if (isQuote(c)) {\n parser.doctype += c\n parser.state = S.DOCTYPE_DTD_QUOTED\n parser.q = c\n } else {\n parser.doctype += c\n }\n continue\n\n case S.DOCTYPE_DTD_QUOTED:\n parser.doctype += c\n if (c === parser.q) {\n parser.state = S.DOCTYPE_DTD\n parser.q = ''\n }\n continue\n\n case S.COMMENT:\n if (c === '-') {\n parser.state = S.COMMENT_ENDING\n } else {\n parser.comment += c\n }\n continue\n\n case S.COMMENT_ENDING:\n if (c === '-') {\n parser.state = S.COMMENT_ENDED\n parser.comment = textopts(parser.opt, parser.comment)\n if (parser.comment) {\n emitNode(parser, 'oncomment', parser.comment)\n }\n parser.comment = ''\n } else {\n parser.comment += '-' + c\n parser.state = S.COMMENT\n }\n continue\n\n case S.COMMENT_ENDED:\n if (c !== '>') {\n strictFail(parser, 'Malformed comment')\n // allow <!-- blah -- bloo --> in non-strict mode,\n // which is a comment of \" blah -- bloo \"\n parser.comment += '--' + c\n parser.state = S.COMMENT\n } else if (parser.doctype && parser.doctype !== true) {\n parser.state = S.DOCTYPE_DTD\n } else {\n parser.state = S.TEXT\n }\n continue\n\n case S.CDATA:\n var starti = i - 1\n while (c && c !== ']') {\n c = charAt(chunk, i++)\n if (c && parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n }\n parser.cdata += chunk.substring(starti, i - 1)\n if (c === ']') {\n parser.state = S.CDATA_ENDING\n }\n continue\n\n case S.CDATA_ENDING:\n if (c === ']') {\n parser.state = S.CDATA_ENDING_2\n } else {\n parser.cdata += ']' + c\n parser.state = S.CDATA\n }\n continue\n\n case S.CDATA_ENDING_2:\n if (c === '>') {\n if (parser.cdata) {\n emitNode(parser, 'oncdata', parser.cdata)\n }\n emitNode(parser, 'onclosecdata')\n parser.cdata = ''\n parser.state = S.TEXT\n } else if (c === ']') {\n parser.cdata += ']'\n } else {\n parser.cdata += ']]' + c\n parser.state = S.CDATA\n }\n continue\n\n case S.PROC_INST:\n if (c === '?') {\n parser.state = S.PROC_INST_ENDING\n } else if (isWhitespace(c)) {\n parser.state = S.PROC_INST_BODY\n } else {\n parser.procInstName += c\n }\n continue\n\n case S.PROC_INST_BODY:\n if (!parser.procInstBody && isWhitespace(c)) {\n continue\n } else if (c === '?') {\n parser.state = S.PROC_INST_ENDING\n } else {\n parser.procInstBody += c\n }\n continue\n\n case S.PROC_INST_ENDING:\n if (c === '>') {\n const procInstEndData = {\n name: parser.procInstName,\n body: parser.procInstBody,\n }\n validateXmlDeclarationEncoding(parser, procInstEndData)\n emitNode(parser, 'onprocessinginstruction', procInstEndData)\n parser.procInstName = parser.procInstBody = ''\n parser.state = S.TEXT\n } else {\n parser.procInstBody += '?' + c\n parser.state = S.PROC_INST_BODY\n }\n continue\n\n case S.OPEN_TAG:\n if (isMatch(nameBody, c)) {\n parser.tagName += c\n } else {\n newTag(parser)\n if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, 'Invalid character in tag name')\n }\n parser.state = S.ATTRIB\n }\n }\n continue\n\n case S.OPEN_TAG_SLASH:\n if (c === '>') {\n openTag(parser, true)\n closeTag(parser)\n } else {\n strictFail(\n parser,\n 'Forward-slash in opening tag not followed by >'\n )\n parser.state = S.ATTRIB\n }\n continue\n\n case S.ATTRIB:\n // haven't read the attribute name yet.\n if (isWhitespace(c)) {\n continue\n } else if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c\n parser.attribValue = ''\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_NAME:\n if (c === '=') {\n parser.state = S.ATTRIB_VALUE\n } else if (c === '>') {\n strictFail(parser, 'Attribute without value')\n parser.attribValue = parser.attribName\n attrib(parser)\n openTag(parser)\n } else if (isWhitespace(c)) {\n parser.state = S.ATTRIB_NAME_SAW_WHITE\n } else if (isMatch(nameBody, c)) {\n parser.attribName += c\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_NAME_SAW_WHITE:\n if (c === '=') {\n parser.state = S.ATTRIB_VALUE\n } else if (isWhitespace(c)) {\n continue\n } else {\n strictFail(parser, 'Attribute without value')\n parser.tag.attributes[parser.attribName] = ''\n parser.attribValue = ''\n emitNode(parser, 'onattribute', {\n name: parser.attribName,\n value: '',\n })\n parser.attribName = ''\n if (c === '>') {\n openTag(parser)\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n parser.state = S.ATTRIB\n }\n }\n continue\n\n case S.ATTRIB_VALUE:\n if (isWhitespace(c)) {\n continue\n } else if (isQuote(c)) {\n parser.q = c\n parser.state = S.ATTRIB_VALUE_QUOTED\n } else {\n if (!parser.opt.unquotedAttributeValues) {\n error(parser, 'Unquoted attribute value')\n }\n parser.state = S.ATTRIB_VALUE_UNQUOTED\n parser.attribValue = c\n }\n continue\n\n case S.ATTRIB_VALUE_QUOTED:\n if (c !== parser.q) {\n if (c === '&') {\n parser.state = S.ATTRIB_VALUE_ENTITY_Q\n } else {\n parser.attribValue += c\n }\n continue\n }\n attrib(parser)\n parser.q = ''\n parser.state = S.ATTRIB_VALUE_CLOSED\n continue\n\n case S.ATTRIB_VALUE_CLOSED:\n if (isWhitespace(c)) {\n parser.state = S.ATTRIB\n } else if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else if (isMatch(nameStart, c)) {\n strictFail(parser, 'No whitespace between attributes')\n parser.attribName = c\n parser.attribValue = ''\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_VALUE_UNQUOTED:\n if (!isAttribEnd(c)) {\n if (c === '&') {\n parser.state = S.ATTRIB_VALUE_ENTITY_U\n } else {\n parser.attribValue += c\n }\n continue\n }\n attrib(parser)\n if (c === '>') {\n openTag(parser)\n } else {\n parser.state = S.ATTRIB\n }\n continue\n\n case S.CLOSE_TAG:\n if (!parser.tagName) {\n if (isWhitespace(c)) {\n continue\n } else if (notMatch(nameStart, c)) {\n if (parser.script) {\n parser.script += '</' + c\n parser.state = S.SCRIPT\n } else {\n strictFail(parser, 'Invalid tagname in closing tag.')\n }\n } else {\n parser.tagName = c\n }\n } else if (c === '>') {\n closeTag(parser)\n } else if (isMatch(nameBody, c)) {\n parser.tagName += c\n } else if (parser.script) {\n parser.script += '</' + parser.tagName + c\n parser.tagName = ''\n parser.state = S.SCRIPT\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, 'Invalid tagname in closing tag')\n }\n parser.state = S.CLOSE_TAG_SAW_WHITE\n }\n continue\n\n case S.CLOSE_TAG_SAW_WHITE:\n if (isWhitespace(c)) {\n continue\n }\n if (c === '>') {\n closeTag(parser)\n } else {\n strictFail(parser, 'Invalid characters in closing tag')\n }\n continue\n\n case S.TEXT_ENTITY:\n case S.ATTRIB_VALUE_ENTITY_Q:\n case S.ATTRIB_VALUE_ENTITY_U:\n var returnState\n var buffer\n switch (parser.state) {\n case S.TEXT_ENTITY:\n returnState = S.TEXT\n buffer = 'textNode'\n break\n\n case S.ATTRIB_VALUE_ENTITY_Q:\n returnState = S.ATTRIB_VALUE_QUOTED\n buffer = 'attribValue'\n break\n\n case S.ATTRIB_VALUE_ENTITY_U:\n returnState = S.ATTRIB_VALUE_UNQUOTED\n buffer = 'attribValue'\n break\n }\n\n if (c === ';') {\n var parsedEntity = parseEntity(parser)\n if (\n parser.opt.unparsedEntities &&\n !Object.values(sax.XML_ENTITIES).includes(parsedEntity)\n ) {\n if ((parser.entityCount += 1) > parser.opt.maxEntityCount) {\n error(\n parser,\n 'Parsed entity count exceeds max entity count'\n )\n }\n\n if ((parser.entityDepth += 1) > parser.opt.maxEntityDepth) {\n error(\n parser,\n 'Parsed entity depth exceeds max entity depth'\n )\n }\n\n parser.entity = ''\n parser.state = returnState\n parser.write(parsedEntity)\n parser.entityDepth -= 1\n } else {\n parser[buffer] += parsedEntity\n parser.entity = ''\n parser.state = returnState\n }\n } else if (\n isMatch(parser.entity.length ? entityBody : entityStart, c)\n ) {\n parser.entity += c\n } else {\n strictFail(parser, 'Invalid character in entity name')\n parser[buffer] += '&' + parser.entity + c\n parser.entity = ''\n parser.state = returnState\n }\n\n continue\n\n default: /* istanbul ignore next */ {\n throw new Error(parser, 'Unknown state: ' + parser.state)\n }\n }\n } // while\n\n if (parser.position >= parser.bufferCheckPosition) {\n checkBufferLength(parser)\n }\n return parser\n }\n\n /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */\n /* istanbul ignore next */\n if (!String.fromCodePoint) {\n ;(function () {\n var stringFromCharCode = String.fromCharCode\n var floor = Math.floor\n var fromCodePoint = function () {\n var MAX_SIZE = 0x4000\n var codeUnits = []\n var highSurrogate\n var lowSurrogate\n var index = -1\n var length = arguments.length\n if (!length) {\n return ''\n }\n var result = ''\n while (++index < length) {\n var codePoint = Number(arguments[index])\n if (\n !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n codePoint < 0 || // not a valid Unicode code point\n codePoint > 0x10ffff || // not a valid Unicode code point\n floor(codePoint) !== codePoint // not an integer\n ) {\n throw RangeError('Invalid code point: ' + codePoint)\n }\n if (codePoint <= 0xffff) {\n // BMP code point\n codeUnits.push(codePoint)\n } else {\n // Astral code point; split in surrogate halves\n // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000\n highSurrogate = (codePoint >> 10) + 0xd800\n lowSurrogate = (codePoint % 0x400) + 0xdc00\n codeUnits.push(highSurrogate, lowSurrogate)\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += stringFromCharCode.apply(null, codeUnits)\n codeUnits.length = 0\n }\n }\n return result\n }\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(String, 'fromCodePoint', {\n value: fromCodePoint,\n configurable: true,\n writable: true,\n })\n } else {\n String.fromCodePoint = fromCodePoint\n }\n })()\n }\n})(typeof exports === 'undefined' ? (this.sax = {}) : exports)\n","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.XmlDocument = exports.XmlElement = exports.XmlCommentNode = exports.XmlCDataNode = exports.XmlTextNode = void 0;\nconst sax_1 = __importDefault(require(\"sax\"));\n/**\n * Represents a text node in an XML document\n */\nclass XmlTextNode {\n /**\n * Creates a new text node\n * @param text The text content\n */\n constructor(text) {\n this.text = text;\n this.type = \"text\";\n }\n /**\n * Converts the text node to a string\n * @param options Formatting options\n * @returns String representation of the text node\n */\n toString(options) {\n return formatText(escapeXML(this.text), options);\n }\n /**\n * Converts the text node to a string with indentation\n * @param indent The indentation to use\n * @param options Formatting options\n * @returns String representation of the text node with indentation\n */\n toStringWithIndent(indent, options) {\n return indent + this.toString(options);\n }\n}\nexports.XmlTextNode = XmlTextNode;\n/**\n * Represents a CDATA node in an XML document\n */\nclass XmlCDataNode {\n /**\n * Creates a new CDATA node\n * @param cdata The CDATA content\n */\n constructor(cdata) {\n this.cdata = cdata;\n this.type = \"cdata\";\n }\n /**\n * Converts the CDATA node to a string\n * @param options Formatting options\n * @returns String representation of the CDATA node\n */\n toString(options) {\n return `<![CDATA[${formatText(this.cdata, options)}]]>`;\n }\n /**\n * Converts the CDATA node to a string with indentation\n * @param indent The indentation to use\n * @param options Formatting options\n * @returns String representation of the CDATA node with indentation\n */\n toStringWithIndent(indent, options) {\n return indent + this.toString(options);\n }\n}\nexports.XmlCDataNode = XmlCDataNode;\n/**\n * Represents a comment node in an XML document\n */\nclass XmlCommentNode {\n /**\n * Creates a new comment node\n * @param comment The comment content\n */\n constructor(comment) {\n this.comment = comment;\n this.type = \"comment\";\n }\n /**\n * Converts the comment node to a string\n * @param options Formatting options\n * @returns String representation of the comment node\n */\n toString(options) {\n return `<!--${formatText(escapeXML(this.comment), options)}-->`;\n }\n /**\n * Converts the comment node to a string with indentation\n * @param indent The indentation to use\n * @param options Formatting options\n * @returns String representation of the comment node with indentation\n */\n toStringWithIndent(indent, options) {\n return indent + this.toString(options);\n }\n}\nexports.XmlCommentNode = XmlCommentNode;\n/**\n * Represents an XML element node with children\n */\nclass XmlElement {\n /**\n * Creates a new XML element\n * @param tag The tag name and attributes\n * @param parser Optional SAX parser instance with position information\n */\n constructor(tag, parser) {\n this.type = \"element\";\n // If you didn't hand us a parser (common case) see if we can grab one\n // from the current execution stack.\n if (!parser && delegates.length) {\n var delegate = delegates[delegates.length - 1];\n if (\"parser\" in delegate) {\n parser = delegate.parser;\n }\n }\n this.name = tag.name;\n this.attr = tag.attributes;\n this.val = \"\";\n this.children = [];\n this.firstChild = null;\n this.lastChild = null;\n // Assign parse information\n this.line = parser ? parser.line : null;\n this.column = parser ? parser.column : null;\n this.position = parser ? parser.position : null;\n this.startTagPosition = parser ? parser.startTagPosition : null;\n }\n /**\n * Adds a child node to this element\n * @param child The child node to add\n */\n _addChild(child) {\n // add to our children array\n this.children.push(child);\n // update first/last pointers\n if (!this.firstChild)\n this.firstChild = child;\n this.lastChild = child;\n }\n _opentag(tag) {\n const child = new XmlElement(tag);\n this._addChild(child);\n delegates.unshift(child);\n }\n _closetag() {\n delegates.shift();\n }\n _text(text) {\n this.val += text;\n this._addChild(new XmlTextNode(text));\n }\n _cdata(cdata) {\n this.val += cdata;\n this._addChild(new XmlCDataNode(cdata));\n }\n _comment(comment) {\n this._addChild(new XmlCommentNode(comment));\n }\n _error(err) {\n throw err;\n }\n /**\n * Iterates through each child element of this node\n * @param iterator Function to call for each child element\n * @param context Optional context to use for the iterator function\n */\n eachChild(iterator, context) {\n for (let i = 0, l = this.children.length; i < l; i++) {\n const child = this.children[i];\n if (child.type === \"element\") {\n if (iterator.call(context, child, i, this.children) ===\n false)\n return;\n }\n }\n }\n /**\n * Finds the first child element with the given name\n * @param name The name of the child element to find\n * @returns The first matching child element, or undefined if not found\n */\n childNamed(name) {\n for (let i = 0, l = this.children.length; i < l; i++) {\n const child = this.children[i];\n if (child.type === \"element\" && child.name === name) {\n return child;\n }\n }\n return undefined;\n }\n /**\n * Finds all child elements with the given name\n * @param name The name of the child elements to find\n * @returns Array of matching child elements\n */\n childrenNamed(name) {\n const matches = [];\n for (let i = 0, l = this.children.length; i < l; i++) {\n const child = this.children[i];\n if (child.type === \"element\" && child.name === name) {\n matches.push(child);\n }\n }\n return matches;\n }\n /**\n * Finds the first child element with the given attribute\n * @param name The name of the attribute to find\n * @param value Optional value the attribute should have\n * @returns The first matching child element, or undefined if not found\n */\n childWithAttribute(name, value) {\n for (let i = 0, l = this.children.length; i < l; i++) {\n const child = this.children[i];\n if (child.type === \"element\" &&\n ((value !== undefined && child.attr[name] === value) ||\n (value === undefined && child.attr[name]))) {\n return child;\n }\n }\n return undefined;\n }\n /**\n * Finds all descendant elements with the given name, searching recursively\n * @param name The name of the descendant elements to find\n * @returns Array of matching descendant elements\n */\n descendantsNamed(name) {\n const matches = [];\n for (let i = 0, l = this.children.length; i < l; i++) {\n const child = this.children[i];\n if (child.type === \"element\") {\n const element = child;\n if (element.name === name)\n matches.push(element);\n matches.push(...element.descendantsNamed(name));\n }\n }\n return matches;\n }\n /**\n * Finds a descendant element using a dot-notation path\n * @param path The path to the descendant, e.g. \"author.name\"\n * @returns The matching descendant element, or undefined if not found\n * @example\n * // For XML: <book><author><name>John</name></author></book>\n * bookNode.descendantWithPath(\"author.name\") // returns the <name> element\n */\n descendantWithPath(path) {\n let descendant = this;\n const components = path.split(\".\");\n for (let i = 0, l = components.length; i < l; i++) {\n if (descendant && descendant.type === \"element\") {\n descendant = descendant.childNamed(components[i]);\n }\n else {\n return undefined;\n }\n }\n return descendant;\n }\n /**\n * Gets the value of a descendant element or attribute using a path\n * @param path The path to the descendant or attribute, e.g. \"author.name\" or \"author.name@id\"\n * @returns The value of the descendant or attribute, or undefined if not found\n * @example\n * // For XML: <book><author><name id=\"1\">John</name></author></book>\n * bookNode.valueWithPath(\"author.name\") // returns \"John\"\n * bookNode.valueWithPath(\"author.name@id\") // returns \"1\"\n */\n valueWithPath(path) {\n const components = path.split(\"@\");\n const descendant = this.descendantWithPath(components[0]);\n if (descendant) {\n return components.length > 1\n ? descendant.attr[components[1]]\n : descendant.val;\n }\n else {\n return undefined;\n }\n }\n /**\n * Converts the element to a string representation\n * @param options Formatting options\n * @returns String representation of the element\n */\n toString(options) {\n return this.toStringWithIndent(\"\", options);\n }\n /**\n * Converts the element to a string with the specified indentation\n * @param indent The indentation to use\n * @param options Formatting options\n * @returns String representation of the element with indentation\n */\n toStringWithIndent(indent, options) {\n let s = `${indent}<${this.name}`;\n const linebreak = (options === null || options === void 0 ? void 0 : options.compressed) ? \"\" : \"\\n\";\n for (const name in this.attr) {\n if (Object.prototype.hasOwnProperty.call(this.attr, name)) {\n s += ` ${name}=\"${escapeXML(this.attr[name])}\"`;\n }\n }\n if (this.children.length === 1 && this.children[0].type !== \"element\") {\n s += `>${this.children[0].toString(options)}</${this.name}>`;\n }\n else if (this.children.length) {\n s += `>${linebreak}`;\n const childIndent = indent + ((options === null || options === void 0 ? void 0 : options.compressed) ? \"\" : \" \");\n for (let i = 0, l = this.children.length; i < l; i++) {\n s += `${this.children[i].toStringWithIndent(childIndent, options)}${linebreak}`;\n }\n s += `${indent}</${this.name}>`;\n }\n else if (options === null || options === void 0 ? void 0 : options.html) {\n const whiteList = [\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"frame\",\n \"hr\",\n \"img\",\n \"input\",\n \"keygen\",\n \"link\",\n \"menuitem\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n ];\n if (whiteList.includes(this.name)) {\n s += \"/>\";\n }\n else {\n s += `></${this.name}>`;\n }\n }\n else {\n s += \"/>\";\n }\n return s;\n }\n}\nexports.XmlElement = XmlElement;\n/**\n * The main XML document class - the entry point for parsing XML\n */\nclass XmlDocument extends XmlElement {\n /**\n * Creates a new XML document from an XML string\n * @param xml The XML string to parse\n * @throws {Error} If the XML is empty or invalid\n * @example\n * ```ts\n * import { XmlDocument } from 'xmldoc';\n *\n * const doc = new XmlDocument(\"<root><child>value</child></root>\");\n * console.log(doc.childNamed(\"child\")?.val); // \"value\"\n * ```\n */\n constructor(xml) {\n // Initialize with a dummy tag that will be replaced\n super({ name: \"\", attributes: {} });\n xml = xml.toString().trim();\n if (!xml) {\n throw new Error(\"No XML to parse!\");\n }\n // Stores doctype (if defined)\n this.doctype = \"\";\n // Expose the parser to the other delegates while the parser is running\n this.parser = sax_1.default.parser(true); // strict\n addParserEvents(this.parser);\n // Initialize delegates with this document\n delegates = [this];\n try {\n this.parser.write(xml);\n }\n finally {\n // Remove the parser as it is no longer needed\n delete this.parser;\n }\n }\n _opentag(tag) {\n if (this.name === \"\") {\n // First tag becomes the root - we'll update our own properties\n this.name = tag.name;\n this.attr = tag.attributes;\n }\n else {\n // All other tags will be the root element's children\n super._opentag(tag);\n }\n }\n _doctype(doctype) {\n this.doctype += doctype;\n }\n}\nexports.XmlDocument = XmlDocument;\n// Helper variables and functions\nlet delegates = [];\nfunction addParserEvents(parser) {\n parser.onopentag = (tag) => { var _a; return (_a = delegates[0]) === null || _a === void 0 ? void 0 : _a._opentag(tag); };\n parser.onclosetag = () => { var _a; return (_a = delegates[0]) === null || _a === void 0 ? void 0 : _a._closetag(); };\n parser.ontext = (text) => { var _a; return (_a = delegates[0]) === null || _a === void 0 ? void 0 : _a._text(text); };\n parser.oncdata = (cdata) => { var _a; return (_a = delegates[0]) === null || _a === void 0 ? void 0 : _a._cdata(cdata); };\n parser.oncomment = (comment) => { var _a; return (_a = delegates[0]) === null || _a === void 0 ? void 0 : _a._comment(comment); };\n parser.ondoctype = (doctype) => {\n const doc = delegates[0];\n if (doc._doctype)\n doc._doctype(doctype);\n };\n parser.onerror = (err) => { var _a; return (_a = delegates[0]) === null || _a === void 0 ? void 0 : _a._error(err); };\n}\n/**\n * Escapes XML special characters\n * @param value The string to escape\n * @returns The escaped string\n */\nfunction escapeXML(value) {\n return value\n .toString()\n .replace(/&/g, \"&amp;\")\n .replace(/</g, \"&lt;\")\n .replace(/>/g, \"&gt;\")\n .replace(/'/g, \"&apos;\")\n .replace(/\"/g, \"&quot;\");\n}\n/**\n * Formats text for display according to the given options\n * @param text The text to format\n * @param options Formatting options\n * @returns The formatted text\n */\nfunction formatText(text, options) {\n let finalText = text;\n if ((options === null || options === void 0 ? void 0 : options.trimmed) && text.length > 25) {\n finalText = finalText.substring(0, 25).trim() + \"…\";\n }\n if (!(options === null || options === void 0 ? void 0 : options.preserveWhitespace)) {\n finalText = finalText.trim();\n }\n return finalText;\n}\n// Export main classes\nexports.default = XmlDocument;\n//# sourceMappingURL=xmldoc.js.map","import { XmlDocument as e } from \"xmldoc\";\n//#region src/apple/parse.ts\nvar t = \"com.apple.ibooks.display-options.xml\", n = (e) => e.childrenNamed(\"option\").map((e) => ({\n\tname: e.attr?.name,\n\tvalue: e.val\n})), r = (t) => {\n\tlet r = new e(t);\n\tif (r.name?.toLowerCase() !== \"display_options\") return { kind: \"apple\" };\n\tlet i = r.childNamed(\"platform\");\n\treturn {\n\t\tkind: \"apple\",\n\t\tdisplayOptions: { ...i === void 0 ? {} : { platform: { options: n(i) } } }\n\t};\n}, i = [\n\t\"Unknown\",\n\t\"No\",\n\t\"Yes\",\n\t\"YesAndRightToLeft\"\n], a = (e) => {\n\tfor (let t of i) if (t === e) return !0;\n\treturn !1;\n}, o = \"ComicInfo.xml\", s = new Set([\"Pages\", \"ComicInfo\"]), c = (e) => e.children.some((e) => e.type === \"element\"), l = (e) => {\n\tlet t = e.val.trim();\n\treturn t.length > 0 ? t : void 0;\n}, u = (t) => {\n\tlet n;\n\ttry {\n\t\tn = new e(t);\n\t} catch (e) {\n\t\tlet t = e instanceof Error ? e.message : String(e);\n\t\tthrow Error(`${o} is malformed: ${t}`, { cause: e });\n\t}\n\tlet r = {};\n\treturn n.eachChild((e) => {\n\t\tif (e.type !== \"element\" || s.has(e.name) || c(e)) return;\n\t\tlet t = l(e);\n\t\tt !== void 0 && r[e.name] === void 0 && (r[e.name] = t);\n\t}), {\n\t\tkind: \"comicInfo\",\n\t\t...r\n\t};\n}, d = \"com.kobobooks.display-options.xml\", f = (e) => {\n\tlet t = e.childNamed(\"platform\");\n\tif (!t) return {};\n\tfor (let e of t.childrenNamed(\"option\")) if (e.attr?.name === \"fixed-layout\") return e.val.trim().toLowerCase() === \"true\" ? { renditionLayout: \"pre-paginated\" } : {};\n\treturn {};\n}, p = (t) => {\n\tlet n = new e(t);\n\treturn n.name?.toLowerCase() === \"display_options\" ? {\n\t\tkind: \"kobo\",\n\t\t...f(n)\n\t} : { kind: \"kobo\" };\n}, m = (e) => e === void 0 || e.trim().length === 0 ? [] : e.trim().split(/\\s+/).filter((e) => e.length > 0), h = (e) => {\n\tlet t = m(e);\n\tif (t.length === 0) return {};\n\tlet n;\n\tt.includes(\"rendition:layout-reflowable\") && (n = \"reflowable\"), t.includes(\"rendition:layout-pre-paginated\") && (n = \"pre-paginated\");\n\tlet r;\n\treturn t.includes(\"rendition:flow-auto\") && (r = \"auto\"), t.includes(\"rendition:flow-paginated\") && (r = \"paginated\"), t.includes(\"rendition:flow-scrolled-doc\") && (r = \"scrolled-doc\"), t.includes(\"rendition:flow-scrolled-continuous\") && (r = \"scrolled-continuous\"), {\n\t\t...n === void 0 ? {} : { renditionLayout: n },\n\t\t...r === void 0 ? {} : { renditionFlow: r },\n\t\t...t.includes(\"page-spread-left\") ? { pageSpreadLeft: !0 } : {},\n\t\t...t.includes(\"page-spread-right\") ? { pageSpreadRight: !0 } : {}\n\t};\n}, g = (e) => e.includes(\":\") ? e.slice(e.lastIndexOf(\":\") + 1) : e, _ = (e, t) => g(e).toLowerCase() === t.toLowerCase(), v = (e) => e.type === \"element\", y = (e, t) => {\n\tfor (let n of e.children) if (v(n) && _(n.name, t)) return n;\n}, b = (e, t) => {\n\tlet n = [];\n\tfor (let r of e.children) v(r) && _(r.name, t) && n.push(r);\n\treturn n;\n}, x = (e) => {\n\tlet t = [];\n\treturn e.eachChild((e) => {\n\t\tif (g(e.name).toLowerCase() !== \"identifier\") return;\n\t\tlet n = e.val.trim();\n\t\tif (n.length === 0) return;\n\t\tlet r = (e.attr[\"opf:scheme\"] ?? e.attr[\"opf:Scheme\"] ?? e.attr.scheme)?.trim();\n\t\tt.push({\n\t\t\tvalue: n,\n\t\t\t...r !== void 0 && r.length > 0 ? { scheme: r } : {}\n\t\t});\n\t}), t;\n}, S = (e, t) => {\n\tlet n;\n\treturn e.eachChild((e) => {\n\t\tif (n !== void 0 || g(e.name).toLowerCase() !== t.toLowerCase()) return;\n\t\tlet r = e.val.trim();\n\t\tr.length > 0 && (n = r);\n\t}), n;\n}, C = (e, t) => {\n\tlet n = [];\n\treturn e.eachChild((e) => {\n\t\tif (g(e.name).toLowerCase() !== t.toLowerCase()) return;\n\t\tlet r = e.val.trim();\n\t\tr.length > 0 && n.push(r);\n\t}), n;\n}, w = (e) => {\n\tlet t;\n\treturn e.eachChild((e) => {\n\t\tif (t !== void 0 || g(e.name).toLowerCase() !== \"meta\" || e.attr.name?.toLowerCase() !== \"cover\") return;\n\t\tlet n = e.attr.content?.trim();\n\t\tn !== void 0 && n.length > 0 && (t = n);\n\t}), t;\n}, T = ({ manifestItems: e, metadataEl: t }) => {\n\tlet n = (e) => e.mediaType?.toLowerCase().includes(\"image/\") === !0, r = e.find((e) => n(e) ? m(e.properties).includes(\"cover-image\") : !1);\n\tif (r !== void 0) return r.href;\n\tif (t !== void 0) {\n\t\tlet r = w(t);\n\t\tif (r !== void 0) {\n\t\t\tlet t = e.find((e) => e.id === r && n(e));\n\t\t\tif (t !== void 0) return t.href;\n\t\t}\n\t}\n\treturn e.find((e) => e.id.toLowerCase().includes(\"cover\") && n(e))?.href;\n}, E = (e, t) => {\n\tlet n = b(e, \"meta\").find((e) => e.attr.property === t)?.val;\n\tif (!(n === void 0 || n.trim().length === 0)) return n;\n}, D = (e) => {\n\tlet t = y(e, \"guide\");\n\tif (t === void 0) return [];\n\tlet n = [];\n\tfor (let e of b(t, \"reference\")) {\n\t\tlet t = e.attr.href?.trim();\n\t\tt === void 0 || t.length === 0 || n.push({\n\t\t\thref: t,\n\t\t\ttitle: e.attr.title?.trim() ?? \"\",\n\t\t\ttype: e.attr.type?.trim() ?? \"\"\n\t\t});\n\t}\n\treturn n;\n}, O = (e) => {\n\tlet t = e.attr.id, n = e.attr.href;\n\tif (t === void 0 || t.length === 0 || n === void 0 || n.length === 0) return;\n\tlet r = e.attr[\"media-type\"], i = e.attr.properties?.trim();\n\treturn {\n\t\tid: t,\n\t\thref: n,\n\t\t...r !== void 0 && r.length > 0 ? { mediaType: r } : {},\n\t\t...i !== void 0 && i.length > 0 ? { properties: i } : {}\n\t};\n}, k = (e) => {\n\tlet t = [], n = /* @__PURE__ */ new Map();\n\tfor (let r of b(e, \"item\")) {\n\t\tlet e = O(r);\n\t\te !== void 0 && (t.push(e), n.set(e.id, e));\n\t}\n\treturn {\n\t\titems: t,\n\t\tbyId: n\n\t};\n}, A = (e, t) => {\n\tlet n = [];\n\tfor (let r of b(t, \"itemref\")) {\n\t\tlet t = r.attr.idref;\n\t\tif (t === void 0 || t.trim().length === 0) continue;\n\t\tlet i = e.get(t);\n\t\tif (i === void 0) continue;\n\t\tlet a = h(r.attr.properties);\n\t\tn.push({\n\t\t\tidref: t,\n\t\t\tid: i.id,\n\t\t\thref: i.href,\n\t\t\t...i.mediaType === void 0 ? {} : { mediaType: i.mediaType },\n\t\t\t...i.properties === void 0 ? {} : { properties: i.properties },\n\t\t\t...a.renditionLayout === void 0 ? {} : { renditionLayout: a.renditionLayout },\n\t\t\t...a.renditionFlow === void 0 ? {} : { renditionFlow: a.renditionFlow },\n\t\t\t...a.pageSpreadLeft === void 0 ? {} : { pageSpreadLeft: a.pageSpreadLeft },\n\t\t\t...a.pageSpreadRight === void 0 ? {} : { pageSpreadRight: a.pageSpreadRight }\n\t\t});\n\t}\n\treturn n;\n}, j = (t) => {\n\tlet n = new e(t), r = y(n, \"manifest\"), i = y(n, \"spine\"), a = y(n, \"metadata\"), o = [], s = [];\n\tif (r !== void 0) {\n\t\tlet { items: e, byId: t } = k(r);\n\t\to = e, i !== void 0 && (s = A(t, i));\n\t}\n\tlet c = i?.attr[\"page-progression-direction\"], l = c !== void 0 && c.trim().length > 0 ? c : void 0, u = i?.attr.toc, d = u !== void 0 && u.trim().length > 0 ? u.trim() : void 0, f, p, m, h, g = [], _ = [], v = [], b, w, O, j = [];\n\ta !== void 0 && (f = S(a, \"title\"), p = S(a, \"publisher\"), m = S(a, \"rights\"), h = S(a, \"date\"), g = C(a, \"creator\"), _ = C(a, \"language\"), v = C(a, \"subject\"), b = E(a, \"rendition:layout\"), w = E(a, \"rendition:flow\"), O = E(a, \"rendition:spread\"), j.push(...x(a)));\n\tlet M = T({\n\t\tmanifestItems: o,\n\t\tmetadataEl: a\n\t}), N = D(n);\n\treturn {\n\t\tkind: \"opf\",\n\t\tmanifestItems: o,\n\t\tspineRows: s,\n\t\tspineTocIdref: d,\n\t\tidentifiers: j,\n\t\ttitle: f,\n\t\tcreators: g,\n\t\tpublisher: p,\n\t\trights: m,\n\t\tlanguages: _,\n\t\tsubjects: v,\n\t\tdate: h,\n\t\tcoverHref: M,\n\t\trenditionLayoutMeta: b,\n\t\trenditionFlowMeta: w,\n\t\trenditionSpreadMeta: O,\n\t\tpageProgressionDirection: l,\n\t\tguide: N\n\t};\n}, M = (e) => ({\n\tgtin: void 0,\n\tisbn: void 0,\n\treadingDirection: void 0,\n\trenditionLayout: (e.displayOptions?.platform?.options?.find((e) => e.name === \"fixed-layout\")?.value)?.trim().toLowerCase() === \"true\" ? \"pre-paginated\" : void 0,\n\ttitle: void 0,\n\tauthors: void 0,\n\tpublisher: void 0,\n\trights: void 0,\n\tlanguages: void 0,\n\tdate: void 0,\n\tsubjects: void 0\n}), N = new Set([\n\t8,\n\t12,\n\t13,\n\t14\n]), P = (e) => {\n\tif (e == null) return;\n\tlet t = String(e).replace(/\\D/g, \"\");\n\tif (!(t.length === 0 || !N.has(t.length))) return t;\n}, F = /(?:97[89])?\\d{9}[\\dXx]/, I = (e) => {\n\tif (e == null) return;\n\tlet t = String(e).trim().replace(/^urn:isbn:/i, \"\").replace(/^isbn[:\\s-]*/i, \"\"), n = t.replace(/[^0-9Xx]/g, \"\");\n\tif (n.length === 10 || n.length === 13) return n.toUpperCase();\n\tlet r = t.match(F);\n\tif (r) return r[0].toUpperCase();\n}, L = (e) => {\n\tswitch (e.Manga) {\n\t\tcase \"YesAndRightToLeft\": return \"rtl\";\n\t\tcase \"Yes\":\n\t\tcase \"No\": return \"ltr\";\n\t\tdefault: return;\n\t}\n}, R = (e) => {\n\tif (e === void 0) return;\n\tlet t = e.trim();\n\treturn t.length > 0 ? t : void 0;\n}, z = (e) => e === void 0 ? [] : e.split(\",\").map((e) => e.trim()).filter((e) => e.length > 0), B = (e) => {\n\tlet t = R(e);\n\tif (t === void 0 || !/^\\d+$/.test(t)) return;\n\tlet n = Number.parseInt(t, 10);\n\treturn Number.isFinite(n) ? n : void 0;\n}, V = (e) => {\n\tlet t = B(e.Year), n = B(e.Month), r = B(e.Day);\n\tif (!(t === void 0 && n === void 0 && r === void 0)) return {\n\t\t...t === void 0 ? {} : { year: t },\n\t\t...n === void 0 ? {} : { month: n },\n\t\t...r === void 0 ? {} : { day: r }\n\t};\n}, H = (e) => {\n\tlet t = e.GTIN, n = R(e.LanguageISO), r = z(e.Writer), i = [...z(e.Genre), ...z(e.Tags)];\n\treturn {\n\t\tgtin: P(t),\n\t\tisbn: I(t),\n\t\treadingDirection: L(e),\n\t\trenditionLayout: void 0,\n\t\ttitle: R(e.Title),\n\t\tauthors: r.length > 0 ? r : void 0,\n\t\tpublisher: R(e.Publisher),\n\t\trights: void 0,\n\t\tlanguages: n === void 0 ? void 0 : [n],\n\t\tdate: V(e),\n\t\tsubjects: i.length > 0 ? i : void 0\n\t};\n}, U = (e) => ({\n\tgtin: void 0,\n\tisbn: void 0,\n\treadingDirection: void 0,\n\trenditionLayout: e.renditionLayout,\n\ttitle: void 0,\n\tauthors: void 0,\n\tpublisher: void 0,\n\trights: void 0,\n\tlanguages: void 0,\n\tdate: void 0,\n\tsubjects: void 0\n}), W = (e) => {\n\tif (e === void 0) return;\n\tlet t = e.trim().match(/^(\\d{4})(?:-(\\d{2})(?:-(\\d{2}))?)?/);\n\tif (t === null) return;\n\tlet [, n, r, i] = t;\n\treturn {\n\t\t...n === void 0 ? {} : { year: Number.parseInt(n, 10) },\n\t\t...r === void 0 ? {} : { month: Number.parseInt(r, 10) },\n\t\t...i === void 0 ? {} : { day: Number.parseInt(i, 10) }\n\t};\n}, G = (e) => {\n\tfor (let t of e) if (t.scheme !== void 0 && t.scheme.trim().toLowerCase() === \"isbn\" && I(t.value) !== void 0) return t.value;\n\tfor (let t of e) if (I(t.value) !== void 0) return t.value;\n}, K = (e) => {\n\tlet t = e.pageProgressionDirection?.trim().toLowerCase(), n = t === \"ltr\" || t === \"rtl\" ? t : void 0, r = e.renditionLayoutMeta?.trim().toLowerCase(), i = r === \"reflowable\" || r === \"pre-paginated\" ? r : void 0, a = G(e.identifiers);\n\treturn {\n\t\tgtin: P(a),\n\t\tisbn: I(a),\n\t\treadingDirection: n,\n\t\trenditionLayout: i,\n\t\ttitle: e.title,\n\t\tauthors: e.creators.length > 0 ? [...e.creators] : void 0,\n\t\tpublisher: e.publisher,\n\t\trights: e.rights,\n\t\tlanguages: e.languages.length > 0 ? [...e.languages] : void 0,\n\t\tdate: W(e.date),\n\t\tsubjects: e.subjects.length > 0 ? [...e.subjects] : void 0\n\t};\n}, q = (e) => e.kind === \"comicInfo\" ? H(e) : e.kind === \"kobo\" ? U(e) : e.kind === \"apple\" ? M(e) : K(e);\n//#endregion\nexport { t as APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME, o as COMIC_INFO_FILENAME, i as COMIC_INFO_MANGA_VALUES, d as KOBO_DISPLAY_OPTIONS_FILENAME, a as isComicInfoManga, P as normalizeGtin, I as normalizeIsbn, r as parseAppleDisplayOptionsXml, u as parseComicInfo, p as parseKoboXml, j as parseOpf, W as parseW3cDtfDate, q as resolveArchiveMetadata, m as tokenizeXmlSpaceSeparatedList };\n\n//# sourceMappingURL=index.js.map","import { n as e, t } from \"../createArchive-BB7-JJjh.js\";\nimport { i as n, n as r, r as i, t as a } from \"../uri-DBZYnB1I.js\";\nimport { n as o, t as s } from \"../fileAccessors-etcCPnpQ.js\";\nimport { detectMimeTypeFromName as c, escapeXmlAttributeValue as l, isMediaContentMimeType as u, isXmlBasedMimeType as d, parseContentType as f, urlJoin as p } from \"@prose-reader/shared\";\nimport { APPLE_IBOOKS_DISPLAY_OPTIONS_FILENAME as m, COMIC_INFO_FILENAME as h, KOBO_DISPLAY_OPTIONS_FILENAME as g, parseAppleDisplayOptionsXml as ee, parseComicInfo as te, parseKoboXml as ne, parseOpf as re, resolveArchiveMetadata as _, tokenizeXmlSpaceSeparatedList as ie } from \"@prose-reader/archive-parser\";\nimport { XmlDocument as v, XmlElement as ae, XmlTextNode as oe } from \"xmldoc\";\nimport { BehaviorSubject as se, EMPTY as y, NEVER as b, Subject as x, catchError as S, distinctUntilChanged as ce, filter as C, finalize as le, first as w, from as T, ignoreElements as ue, lastValueFrom as de, map as E, merge as D, mergeMap as O, of as fe, pairwise as pe, shareReplay as me, startWith as he, switchMap as k, takeUntil as ge, tap as A, timer as _e } from \"rxjs\";\n//#region src/archives/createArchiveFromArrayBufferList.ts\nvar ve = async (e, { orderByAlpha: i, name: a, encodingFormat: o } = {}) => {\n\tlet l = e;\n\treturn i && (l = l.slice().sort((e, t) => n(e.name, t.name))), t({\n\t\tfilename: a,\n\t\tencodingFormat: o,\n\t\trecords: l.map((e) => {\n\t\t\tlet t = r(e.name);\n\t\t\treturn e.isDir ? {\n\t\t\t\tdir: !0,\n\t\t\t\tbasename: t,\n\t\t\t\turi: e.name\n\t\t\t} : {\n\t\t\t\tdir: e.isDir,\n\t\t\t\tbasename: t,\n\t\t\t\tencodingFormat: c(e.name),\n\t\t\t\turi: e.name,\n\t\t\t\tsize: e.size,\n\t\t\t\t...s(e.data, c(e.name) ?? \"\")\n\t\t\t};\n\t\t}),\n\t\tclose: () => Promise.resolve()\n\t});\n}, ye = async (e, { mimeType: n, direction: i } = { mimeType: \"text/plain\" }) => {\n\tlet a = `\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <package xmlns=\"http://www.idpf.org/2007/opf\" version=\"3.0\" xml:lang=\"ja\" prefix=\"rendition: http://www.idpf.org/vocab/rendition/#\"\n unique-identifier=\"ootuya-id\">\n <metadata xmlns:opf=\"http://www.idpf.org/2007/opf\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n xmlns:dcterms=\"http://purl.org/dc/terms/\">\n <meta property=\"rendition:layout\">reflowable</meta>\n </metadata>\n <manifest>\n <item id=\"p01\" href=\"p01.txt\" media-type=\"text/plain\"/>\n </manifest>\n <spine page-progression-direction=\"${i ?? \"ltr\"}\">\n <itemref idref=\"p01\" />\n </spine>\n </package>\n `;\n\treturn t({\n\t\tfilename: \"content.txt\",\n\t\tencodingFormat: n,\n\t\trecords: [{\n\t\t\tdir: !1,\n\t\t\tbasename: r(\"generated.opf\"),\n\t\t\turi: \"generated.opf\",\n\t\t\tsize: 0,\n\t\t\t...o(async () => new Blob([a]))\n\t\t}, {\n\t\t\tdir: !1,\n\t\t\tbasename: r(\"p01.txt\"),\n\t\t\turi: \"p01.txt\",\n\t\t\tsize: typeof e == \"string\" ? new Blob([e]).size : e.size,\n\t\t\tencodingFormat: n,\n\t\t\t...o(async () => typeof e == \"string\" ? new Blob([e]) : e)\n\t\t}],\n\t\tclose: () => Promise.resolve()\n\t});\n}, be = /^[A-Za-z0-9_][A-Za-z0-9_.-]*$/, xe = /^[A-Za-z0-9_]/, j = /^xml/i, Se = /[^A-Za-z0-9_.-]+/g, M = \"_\", Ce = (e) => e.replace(/^_+|_+$/g, \"\"), we = (e) => Ce(e.trim().replaceAll(\"/\", \"_\").replace(Se, \"_\")), N = (e) => {\n\tif (be.test(e) && !j.test(e)) return e;\n\tlet t = we(e), n = t && !j.test(t) ? t : `${M}${t}`;\n\treturn xe.test(n) ? n : `${M}${n}`;\n}, P = (e, t) => {\n\tlet n = N(e);\n\tif (!t.has(n)) return t.add(n), n;\n\tlet r = 2, i = `${n}-${r}`;\n\tfor (; t.has(i);) r += 1, i = `${n}-${r}`;\n\treturn t.add(i), i;\n}, F = () => {\n\tlet e = /* @__PURE__ */ new Set();\n\treturn (t) => P(t, e);\n}, Te = async (e, n) => {\n\tlet i = F(), a = e.map((e) => ({\n\t\tid: i(e),\n\t\turl: e\n\t})), s = `\n <?xml version=\"1.0\" encoding=\"UTF-8\"?><package xmlns=\"http://www.idpf.org/2007/opf\" version=\"2.0\" unique-identifier=\"bookid\">\n <metadata>\n <meta property=\"rendition:layout\">${n?.useRenditionFlow ? \"reflowable\" : \"pre-paginated\"}</meta>\n ${n?.useRenditionFlow ? \"<meta property=\\\"rendition:flow\\\">scrolled-continuous</meta>\" : \"\"}\n </metadata>\n <manifest>\n ${a.map(({ id: e, url: t }) => {\n\t\tlet n = c(t);\n\t\treturn `<item id=\"${e}\" href=\"${l(t)}\" media-type=\"${l(n ?? \"\")}\"/>`;\n\t}).join(\"\\n\")}\n </manifest>\n <spine>\n ${a.map(({ id: e }) => `<itemref idref=\"${e}\" />`).join(\"\\n\")}\n </spine>\n </package>\n `, u = e.map((e) => ({\n\t\tdir: !1,\n\t\tbasename: r(e),\n\t\tencodingFormat: c(e),\n\t\turi: e,\n\t\tsize: 0,\n\t\t...o(async () => (await fetch(e)).blob())\n\t}));\n\treturn t({\n\t\trecords: [{\n\t\t\tdir: !1,\n\t\t\tbasename: \"content.opf\",\n\t\t\turi: \"content.opf\",\n\t\t\tsize: 0,\n\t\t\t...o(async () => new Blob([s]))\n\t\t}, ...u],\n\t\tclose: () => Promise.resolve()\n\t});\n}, I = (e) => !e.dir, Ee = (e) => e.dir, L = (e, t) => {\n\tlet n = e.recordsByUri.get(t);\n\treturn n && I(n) ? n : void 0;\n}, De = h.toLowerCase(), R = (e) => e.records.find((e) => I(e) && e.basename.toLowerCase() === De), z = async (e) => new TextDecoder().decode(await e.arrayBuffer()), Oe = ({ enableReport: t } = {}) => {\n\te.enable(!!t);\n}, B = (e) => {\n\tlet t = e.records.filter((e) => !e.dir).find((e) => e.uri.endsWith(\".opf\"));\n\treturn {\n\t\tdata: t,\n\t\tbasePath: t?.uri.substring(0, t.uri.lastIndexOf(\"/\")) || \"\"\n\t};\n};\n//#endregion\n//#region src/epubs/readArchiveOpf.ts\nasync function V(e) {\n\tlet { data: t, basePath: n } = B(e) || {};\n\tif (!(!t || t.dir)) return {\n\t\topf: re(await z(t)),\n\t\tbasePath: n\n\t};\n}\n//#endregion\n//#region src/generators/manifest/hooks/apple.ts\nvar ke = m.toLowerCase(), Ae = ({ archive: e }) => async (t) => {\n\tlet n = e.records.find((e) => !e.dir && e.basename.toLowerCase() === ke);\n\tif (!n || n.dir) return t;\n\tlet r = await z(n);\n\ttry {\n\t\tlet { renditionLayout: e } = _(ee(r));\n\t\treturn {\n\t\t\t...t,\n\t\t\trenditionLayout: t.renditionLayout ?? e\n\t\t};\n\t} catch (e) {\n\t\treturn console.error(`Unable to parse ${m} for content\\n`, r), console.error(e), t;\n\t}\n}, je = h.toLowerCase(), Me = ({ archive: e }) => async (t) => {\n\tlet n = R(e);\n\tif (!n) return t;\n\tlet r = {\n\t\t...t,\n\t\tspineItems: t.spineItems.filter((e) => !e.id.toLowerCase().endsWith(je)).map((e, t, n) => ({\n\t\t\t...e,\n\t\t\tprogressionWeight: 1 / n.length\n\t\t}))\n\t}, i = await z(n);\n\ttry {\n\t\tlet e = _(te(i));\n\t\treturn {\n\t\t\t...r,\n\t\t\treadingDirection: e.readingDirection ?? r.readingDirection\n\t\t};\n\t} catch (e) {\n\t\treturn console.error(`Unable to parse ${h} for content\\n`, i), console.error(e), r;\n\t}\n}, Ne = ({ baseUrl: e = \"\", resourcePath: t }) => {\n\tif (!e && /^https?:\\/\\//.test(t)) return encodeURI(t);\n\tlet n = e ? `${e}${e.endsWith(\"/\") ? \"\" : \"/\"}` : \"file://\";\n\treturn encodeURI(`${n}${t}`);\n}, Pe = ({ archive: e, baseUrl: t }) => async () => {\n\tlet n = e.records.filter((e) => !e.dir), r = F(), i = n.map((e) => ({\n\t\tfile: e,\n\t\tid: r(e.uri)\n\t}));\n\treturn {\n\t\tfilename: e.filename ?? \"\",\n\t\ttitle: e.records.find(({ dir: e }) => e)?.basename.replace(/\\/$/, \"\") || e.filename || \"\",\n\t\trenditionLayout: void 0,\n\t\trenditionSpread: \"auto\",\n\t\treadingDirection: void 0,\n\t\tspineItems: i.filter(({ file: e }) => !e.basename.endsWith(\".db\")).map(({ file: e, id: r }, i) => ({\n\t\t\tid: r,\n\t\t\tindex: i,\n\t\t\thref: Ne({\n\t\t\t\tbaseUrl: t,\n\t\t\t\tresourcePath: e.uri\n\t\t\t}),\n\t\t\trenditionLayout: void 0,\n\t\t\tprogressionWeight: 1 / n.length,\n\t\t\tpageSpreadLeft: void 0,\n\t\t\tpageSpreadRight: void 0,\n\t\t\tmediaType: e.encodingFormat\n\t\t})),\n\t\titems: i.map(({ file: e, id: n }) => ({\n\t\t\tid: n,\n\t\t\thref: encodeURI(`${t}${e.uri}`)\n\t\t}))\n\t};\n}, H = async ({ archive: e, archiveOpf: t }) => {\n\tif (!t) return [];\n\tlet { opf: n, basePath: r } = t, { spineRows: i } = n;\n\treturn e.records.filter((e) => i.find((t) => r ? `${r}/${t.href}` === e.uri : `${t.href}` === e.uri));\n}, U = (e, t, n) => {\n\tlet { basePath: r } = B(t) || {};\n\treturn e.map((e) => {\n\t\tlet t = e.href, i = n?.(t) ?? \"\";\n\t\treturn {\n\t\t\thref: r ? `${i}${r}/${t}` : `${i}${t}`,\n\t\t\tid: e.id,\n\t\t\tmediaType: e.mediaType\n\t\t};\n\t});\n}, Fe = (e) => {\n\tlet t = e?.trim();\n\treturn t === \"scrolled-continuous\" || t === \"scrolled-doc\" || t === \"paginated\" || t === \"auto\" ? t : \"auto\";\n}, Ie = (e) => {\n\tlet t = e?.trim();\n\tif (t === \"none\" || t === \"landscape\" || t === \"portrait\" || t === \"both\" || t === \"auto\") return t;\n}, Le = (e) => {\n\tlet t = e?.trim();\n\tif (t === \"cover\" || t === \"title-page\" || t === \"copyright-page\" || t === \"text\") return t;\n}, Re = ({ archive: t, baseUrl: n, archiveOpf: r }) => async (i) => {\n\tif (!r) return i;\n\tlet { opf: a, basePath: o } = r, s = _(a);\n\te.groupCollapsed(...e.getGroupArgs(\"OPF parsed\")), e.log(\"opf\", a), e.groupEnd();\n\tlet c = a.renditionLayoutMeta?.trim(), l = c === \"reflowable\" || c === \"pre-paginated\" ? c : s.renditionLayout, u = a.title?.trim() || t.records.find(({ dir: e }) => e)?.basename || \"\", d = s.readingDirection ?? i.readingDirection, f = (await H({\n\t\tarchive: t,\n\t\tarchiveOpf: r\n\t})).filter(I).reduce((e, t) => t.size + e, 0), p = a.guide, m = [];\n\tfor (let e of p) {\n\t\tlet t = Le(e.type);\n\t\tt !== void 0 && m.push({\n\t\t\thref: e.href,\n\t\t\ttitle: e.title,\n\t\t\ttype: t\n\t\t});\n\t}\n\treturn {\n\t\tfilename: t.filename ?? \"\",\n\t\trenditionLayout: l,\n\t\trenditionFlow: Fe(a.renditionFlowMeta),\n\t\trenditionSpread: Ie(a.renditionSpreadMeta),\n\t\ttitle: u,\n\t\treadingDirection: d,\n\t\tspineItems: a.spineRows.map((e, r) => {\n\t\t\tlet i = L(t, o ? `${o}/${e.href}` : e.href), s = i ? i.size : 0, c = n || (/^https?:\\/\\//.test(e.href) ? \"\" : \"file://\");\n\t\t\treturn {\n\t\t\t\tid: e.id,\n\t\t\t\tindex: r,\n\t\t\t\thref: e.href.startsWith(\"https://\") ? e.href : o ? `${c}${o}/${e.href}` : `${c}${e.href}`,\n\t\t\t\trenditionLayout: e.renditionLayout ?? l,\n\t\t\t\t...e.renditionFlow === void 0 ? {} : { renditionFlow: e.renditionFlow },\n\t\t\t\tprogressionWeight: f > 0 ? s / f : 1 / a.spineRows.length,\n\t\t\t\tpageSpreadLeft: e.pageSpreadLeft,\n\t\t\t\tpageSpreadRight: e.pageSpreadRight,\n\t\t\t\tmediaType: e.mediaType\n\t\t\t};\n\t\t}),\n\t\titems: U(a.manifestItems, t, (e) => /^https?:\\/\\//.test(e) ? \"\" : n || \"file://\"),\n\t\tguide: m.length > 0 ? m : void 0\n\t};\n}, ze = (e) => {\n\tlet t = e.descendantWithPath(\"head\")?.childrenNamed(\"meta\").find((e) => e.attr.name === \"viewport\");\n\treturn !!(t && t.attr.name === \"viewport\");\n}, Be = (e) => e.reduce(async (e, t) => {\n\tif (!await e || !d({\n\t\tmimeType: I(t) ? t.encodingFormat : void 0,\n\t\turi: t.uri\n\t})) return !1;\n\tlet n = t.dir ? null : await z(t);\n\treturn n ? ze(new v(n)) : !1;\n}, Promise.resolve(!0)), Ve = ({ archive: e, archiveOpf: t }) => async (n) => n.renditionLayout === \"reflowable\" && n.spineItems.every((e) => e.renditionLayout === \"reflowable\") && await Be(await H({\n\tarchive: e,\n\tarchiveOpf: t\n})) ? {\n\t...n,\n\tspineItems: n.spineItems.map((e) => ({\n\t\t...e,\n\t\trenditionLayout: \"pre-paginated\"\n\t})),\n\trenditionLayout: \"pre-paginated\"\n} : n, He = () => (e) => ({\n\t...e,\n\treadingDirection: e.readingDirection ?? \"ltr\"\n}), Ue = async (e) => {\n\tlet t;\n\treturn await Promise.all(e.records.map(async (e) => {\n\t\tif (e.dir || !e.uri.endsWith(g)) return;\n\t\tlet n = await z(e);\n\t\ttry {\n\t\t\tlet { renditionLayout: e } = ne(n);\n\t\t\te && (t = e);\n\t\t} catch (e) {\n\t\t\tconsole.error(`Unable to parse ${g} for content\\n`, n), console.error(e);\n\t\t}\n\t})), {\n\t\tkind: \"kobo\",\n\t\t...t === void 0 ? {} : { renditionLayout: t }\n\t};\n}, We = ({ archive: e }) => async (t) => {\n\tlet { renditionLayout: n } = _(await Ue(e));\n\treturn {\n\t\t...t,\n\t\trenditionLayout: t.renditionLayout ?? n\n\t};\n}, W = (e) => e.toLowerCase().endsWith(\".opf\"), Ge = (e) => e.records.some((e) => !e.dir && (W(e.basename) || W(e.uri))), Ke = ({ archive: e }) => async (t) => Ge(e) ? t : {\n\t...t,\n\tspineItems: t.spineItems.map((t) => {\n\t\tlet n = e.records.find((e) => decodeURI(t.href).endsWith(e.uri)), r = f((n && I(n) ? n.encodingFormat : void 0) ?? \"\") || c(n?.basename ?? \"\");\n\t\treturn {\n\t\t\t...t,\n\t\t\trenditionLayout: r && u(r) ? \"pre-paginated\" : t.renditionLayout\n\t\t};\n\t})\n}, G = (e) => e ? e.children.map((e) => e instanceof oe ? e.text : e instanceof ae ? G(e) : \"\").join(\"\").trim() : \"\", qe = (e) => ie(e.properties).includes(\"nav\"), K = (e, { basePath: t, baseUrl: n }) => {\n\tlet r = {\n\t\tcontents: [],\n\t\tpath: \"\",\n\t\thref: \"\",\n\t\ttitle: \"\"\n\t}, i = e.childNamed(\"span\") || e.childNamed(\"a\");\n\tr.title = (i?.attr.title || i?.val.trim() || G(i)) ?? \"\";\n\tlet a = i?.name;\n\ta !== \"a\" && (i = e.descendantWithPath(`${a}.a`), i && (a = i.name.toLowerCase())), a === \"a\" && i?.attr.href && (r.path = p(t, i.attr.href), r.href = p(n, t, i.attr.href));\n\tlet o = e.childNamed(\"ol\");\n\tif (o) {\n\t\tlet e = o.childrenNamed(\"li\");\n\t\te && e.length > 0 && (r.contents = e.map((e) => K(e, {\n\t\t\tbasePath: t,\n\t\t\tbaseUrl: n\n\t\t})));\n\t}\n\treturn r;\n}, Je = (e, { basePath: t, baseUrl: n }) => {\n\tlet r = [], i;\n\treturn e.descendantWithPath(\"body.nav.ol\") ? i = e.descendantWithPath(\"body.nav.ol\")?.children : e.descendantWithPath(\"body.section.nav.ol\") && (i = e.descendantWithPath(\"body.section.nav.ol\")?.children), i && i.length > 0 && i.filter((e) => e.name === \"li\").forEach((e) => {\n\t\tr.push(K(e, {\n\t\t\tbasePath: t,\n\t\t\tbaseUrl: n\n\t\t}));\n\t}), r;\n}, Ye = async (e, t, { baseUrl: n }) => {\n\tlet r = e.manifestItems.find(qe);\n\tif (r?.href) {\n\t\tlet e = t.records.find((e) => e.uri.endsWith(r.href));\n\t\tif (e && !e.dir) return Je(new v(await z(e)), {\n\t\t\tbasePath: a(e.uri),\n\t\t\tbaseUrl: n\n\t\t});\n\t}\n}, q = (e, { opfBasePath: t, baseUrl: n, prefix: r }) => {\n\tlet i = e?.childNamed(`${r}content`)?.attr.src || \"\", a = {\n\t\ttitle: e?.descendantWithPath(`${r}navLabel.${r}text`)?.val || \"\",\n\t\tpath: p(t, i),\n\t\thref: p(n, t, i),\n\t\tcontents: []\n\t}, o = e.childrenNamed(`${r}navPoint`);\n\treturn o && o.length > 0 && (a.contents = o.map((e) => q(e, {\n\t\topfBasePath: t,\n\t\tbaseUrl: n,\n\t\tprefix: r\n\t}))), a;\n}, Xe = (e, { opfBasePath: t, baseUrl: n }) => {\n\tlet r = [], i = e.name, a = \"\";\n\treturn i.indexOf(\":\") !== -1 && (a = `${i.split(\":\")[0]}:`), e.childNamed(`${a}navMap`)?.childrenNamed(`${a}navPoint`).forEach((e) => {\n\t\tr.push(q(e, {\n\t\t\topfBasePath: t,\n\t\t\tbaseUrl: n,\n\t\t\tprefix: a\n\t\t}));\n\t}), r;\n}, Ze = async ({ opf: e, opfBasePath: t, baseUrl: n, archive: r }) => {\n\tlet i = e.spineTocIdref;\n\tif (i) {\n\t\tlet a = e.manifestItems.find((e) => e.id === i);\n\t\tif (a) {\n\t\t\tlet e = `${t}${t === \"\" ? \"\" : \"/\"}${a.href}`, i = r.records.find((t) => t.uri.endsWith(e));\n\t\t\tif (i && !i.dir) return Xe(new v(await z(i)), {\n\t\t\t\topfBasePath: t,\n\t\t\t\tbaseUrl: n\n\t\t\t});\n\t\t}\n\t}\n}, Qe = async (e, t, { baseUrl: n }) => {\n\tlet { basePath: r } = B(t) || {}, i = await Ye(e, t, { baseUrl: n });\n\tif (i) return i;\n\tlet a = await Ze({\n\t\topf: e,\n\t\topfBasePath: r ?? \"\",\n\t\tarchive: t,\n\t\tbaseUrl: n\n\t});\n\tif (a) return a;\n}, $e = (e) => e.replace(/\\.[^.]+$/, \"\").replace(/[_-]/g, \" \").replace(/\\s+/g, \" \").trim(), et = (e, t) => {\n\tif (e.spineItems.length !== 0 && e.spineItems.every((e) => (f(e.mediaType ?? \"\") || c(e.href))?.startsWith(\"audio/\"))) return e.spineItems.map((e) => {\n\t\tlet n = t.records.find((t) => !t.dir && decodeURI(e.href).endsWith(t.uri));\n\t\treturn {\n\t\t\ttitle: $e(n?.basename ?? e.href),\n\t\t\thref: e.href,\n\t\t\tpath: n?.uri ?? e.href,\n\t\t\tcontents: []\n\t\t};\n\t});\n}, tt = (e, { baseUrl: t }) => {\n\tlet r = [...e.records].sort((e, t) => n(e.uri, t.uri)), i = (e, t, n, r, a) => {\n\t\tlet o = e.find((e) => e.title === t), [s, ...c] = n;\n\t\treturn o ? s ? [...e.filter((e) => e !== o), {\n\t\t\t...o,\n\t\t\tcontents: [...o.contents, ...i(o.contents, s, c, r, a)]\n\t\t}] : o.path.split(\"/\").length > a.split(\"/\").length ? [...e.filter((e) => e !== o), {\n\t\t\t...o,\n\t\t\tpath: a,\n\t\t\thref: r\n\t\t}] : e : s ? [...e, {\n\t\t\tcontents: i([], s, c, r, a),\n\t\t\thref: r,\n\t\t\tpath: a,\n\t\t\ttitle: t\n\t\t}] : [...e, {\n\t\t\tcontents: [],\n\t\t\thref: r,\n\t\t\tpath: a,\n\t\t\ttitle: t\n\t\t}];\n\t};\n\treturn r.reduce((e, n) => {\n\t\tif (n.dir) return e;\n\t\tlet [r, ...a] = n.uri.split(\"/\").slice(0, -1);\n\t\treturn r ? i(e, r, a, p(t, encodeURI(n.uri)).replace(/\\/$/, \"\"), n.uri.replace(/\\/$/, \"\")) : e;\n\t}, []);\n}, nt = async (e, t, { baseUrl: n, archiveOpf: r }) => {\n\tif (r) return await Qe(r.opf, e, { baseUrl: n }) || [];\n\tlet i = et(t, e);\n\tif (i) return i;\n\tlet a = tt(e, { baseUrl: n });\n\tif (a.length !== 0) return a;\n}, rt = ({ archive: e, baseUrl: t, archiveOpf: n }) => async (r) => {\n\tif (r.nav) return r;\n\tlet i = await nt(e, r, {\n\t\tbaseUrl: t,\n\t\tarchiveOpf: n\n\t});\n\treturn i ? {\n\t\t...r,\n\t\tnav: { toc: i }\n\t} : r;\n}, it = (e) => e ? e.endsWith(\"/\") ? e : `${e}/` : \"\", J = async (t, { baseUrl: n = \"\", hooks: r = {} } = {}) => {\n\te.log(\"Generating manifest from archive\", t);\n\tlet i = await V(t), a = it(n), o = (e) => (e ?? []).map((e) => e({\n\t\tarchive: t,\n\t\tbaseUrl: a\n\t})), s = [\n\t\tRe({\n\t\t\tarchive: t,\n\t\t\tbaseUrl: a,\n\t\t\tarchiveOpf: i\n\t\t}),\n\t\tMe({\n\t\t\tarchive: t,\n\t\t\tbaseUrl: a\n\t\t}),\n\t\tAe({\n\t\t\tarchive: t,\n\t\t\tbaseUrl: a\n\t\t}),\n\t\tKe({\n\t\t\tarchive: t,\n\t\t\tbaseUrl: a\n\t\t}),\n\t\t...o(r.content)\n\t], c = o(r.spine), l = [\n\t\tVe({\n\t\t\tarchive: t,\n\t\t\tbaseUrl: a,\n\t\t\tarchiveOpf: i\n\t\t}),\n\t\tWe({\n\t\t\tarchive: t,\n\t\t\tbaseUrl: a\n\t\t}),\n\t\t...o(r.presentation)\n\t], u = [rt({\n\t\tarchive: t,\n\t\tbaseUrl: a,\n\t\tarchiveOpf: i\n\t}), ...o(r.navigation)], d = [\n\t\t...s,\n\t\t...c,\n\t\t...l,\n\t\t...u,\n\t\tHe()\n\t];\n\ttry {\n\t\tlet n = Pe({\n\t\t\tarchive: t,\n\t\t\tbaseUrl: a\n\t\t})(), r = await d.reduce(async (e, t) => await t(await e), n);\n\t\tif (e.log(\"Generated manifest\", r), process.env.NODE_ENV === \"development\" && e.isEnabled()) {\n\t\t\tlet t = JSON.stringify(r, null, 2);\n\t\t\te.groupCollapsed(...e.getGroupArgs(\"Generated manifest\")), e.log(`\\n${t}`), e.groupEnd();\n\t\t}\n\t\treturn r;\n\t} catch (t) {\n\t\tthrow e.error(t), t;\n\t}\n}, at = (e) => {\n\tlet t = e.descendantWithPath(\"head\")?.childrenNamed(\"meta\").find((e) => e.attr.name === \"calibre:cover\");\n\treturn !!(t && t.attr.name === \"calibre:cover\");\n}, ot = (e) => e.descendantWithPath(\"body\")?.descendantWithPath(\"div\")?.childrenNamed(\"svg\")?.find((e) => e.attr.width === \"100%\" && e.attr.preserveAspectRatio === \"none\"), st = ({ archive: e, resourcePath: t }) => async (n) => {\n\tlet r = L(e, t);\n\tif (r?.basename.endsWith(\".xhtml\")) {\n\t\tlet e = new v(typeof n.body == \"string\" ? n.body : await z(r));\n\t\tif (at(e)) {\n\t\t\tlet t = ot(e);\n\t\t\treturn t && delete t.attr.preserveAspectRatio, {\n\t\t\t\t...n,\n\t\t\t\tbody: e?.toString()\n\t\t\t};\n\t\t}\n\t}\n\treturn n;\n}, ct = ({ archive: e, resourcePath: t }) => async (n) => st({\n\tarchive: e,\n\tresourcePath: t\n})(n), lt = ({ archive: e, resourcePath: t }) => async (n) => {\n\tlet r = L(e, t);\n\tif (r?.basename.endsWith(\".css\")) {\n\t\tlet e = (typeof n.body == \"string\" ? n.body : await z(r)).replaceAll(\"-webkit-writing-mode\", \"writing-mode\");\n\t\treturn {\n\t\t\t...n,\n\t\t\tbody: e\n\t\t};\n\t}\n\treturn n;\n}, ut = async (e, t) => {\n\tlet n = await V(e);\n\tif (n) {\n\t\tlet { opf: r } = n, i = U(r.manifestItems, e, () => \"\").find((e) => t.endsWith(e.href))?.mediaType;\n\t\tif (i) return { mediaType: i };\n\t}\n\treturn { mediaType: dt(t) };\n}, dt = (e) => {\n\tif (e.endsWith(\".css\")) return \"text/css; charset=UTF-8\";\n\tif (e.endsWith(\".jpg\")) return \"image/jpg\";\n\tif (e.endsWith(\".xhtml\")) return \"application/xhtml+xml\";\n\tif (e.endsWith(\".mp4\")) return \"video/mp4\";\n\tif (e.endsWith(\".svg\")) return \"image/svg+xml\";\n}, ft = ({ archive: e, resourcePath: t }) => async (n) => {\n\tlet r = L(e, t);\n\tif (!r) return n;\n\tlet i = await ut(e, t);\n\treturn {\n\t\t...n,\n\t\tparams: {\n\t\t\t...n.params,\n\t\t\t...r?.encodingFormat && { contentType: r.encodingFormat },\n\t\t\t...i.mediaType && { contentType: i.mediaType }\n\t\t}\n\t};\n}, Y = /* @__PURE__ */ \"div.span.p.a.li.ul.ol.h1.h2.h3.h4.h5.h6.table.tr.td.th.thead.tbody.tfoot.section.article.header.footer.nav.aside.main.figure.figcaption.blockquote.pre.code.form.textarea.select.option.button.label.fieldset.legend.caption.dl.dt.dd.iframe.video.audio.canvas.script.style\".split(\".\"), pt = ({ archive: e, resourcePath: t }) => async (n) => {\n\tlet r = L(e, t);\n\tif (r?.basename.endsWith(\".xhtml\")) {\n\t\tlet e = typeof n.body == \"string\" ? n.body : await z(r);\n\t\tif (!RegExp(`<(${Y.join(\"|\")})[\\\\s/>]`, \"i\").test(e)) return n;\n\t\tlet t = RegExp(`<(${Y.join(\"|\")})(\\\\s[^>]*)?\\\\s*/>`, \"gi\"), i = e.replace(t, (e, t, n = \"\") => `<${t} ${n.trim()}></${t}>`);\n\t\treturn {\n\t\t\t...n,\n\t\t\tbody: i\n\t\t};\n\t}\n\treturn n;\n}, X = async (t, n, { hooks: r = [] } = {}) => {\n\tlet i = { params: {} }, a = [\n\t\t...r.map((e) => e({\n\t\t\tarchive: t,\n\t\t\tresourcePath: n\n\t\t})),\n\t\tft({\n\t\t\tarchive: t,\n\t\t\tresourcePath: n\n\t\t}),\n\t\tpt({\n\t\t\tarchive: t,\n\t\t\tresourcePath: n\n\t\t}),\n\t\tlt({\n\t\t\tarchive: t,\n\t\t\tresourcePath: n\n\t\t}),\n\t\tct({\n\t\t\tarchive: t,\n\t\t\tresourcePath: n\n\t\t})\n\t];\n\ttry {\n\t\tlet r = await a.reduce(async (e, t) => await t(await e), Promise.resolve(i));\n\t\tif (e.log(\"Generated resource\", n, r), r.body !== void 0) return r;\n\t\tlet o = L(t, n);\n\t\tif (!o) throw Error(`no file found for resourcePath:${n}`);\n\t\treturn {\n\t\t\t...r,\n\t\t\tbody: await o.blob()\n\t\t};\n\t} catch (t) {\n\t\tthrow e.error(t), t;\n\t}\n}, mt = class {\n\tconstructor(e) {\n\t\tthis.cleanArchiveAfter = e, this.state$ = new se({\n\t\t\tstatus: \"idle\",\n\t\t\tlocks: 0\n\t\t});\n\t}\n\tupdate(e) {\n\t\tthis.state$.next({\n\t\t\t...this.state$.getValue(),\n\t\t\t...e\n\t\t});\n\t}\n\tget locks$() {\n\t\treturn this.state$.pipe(E(({ locks: e }) => e));\n\t}\n\tget state() {\n\t\treturn this.state$.getValue();\n\t}\n\tget isUnlocked$() {\n\t\treturn this.locks$.pipe(E((e) => e <= 0), ce(), me());\n\t}\n\tget overTTL$() {\n\t\treturn this.isUnlocked$.pipe(k((e) => e ? this.cleanArchiveAfter === Infinity ? b : _e(this.cleanArchiveAfter) : b));\n\t}\n}, ht = ({ getArchive: t, cleanArchiveAfter: n = 300 * 1e3 }) => {\n\tlet r = new x(), i = new x(), a = new x(), o = {};\n\treturn r.pipe(O((n) => {\n\t\tlet r = o[n];\n\t\tif (!r || r.state.status !== \"idle\") return y;\n\t\tlet i = !1, s = (t) => {\n\t\t\te.debug(`Cleaning up archive with key: ${t}`);\n\t\t\tlet n = o[t];\n\t\t\tdelete o[t], i ||= (n?.state.archive?.close(), !0);\n\t\t};\n\t\tr.update({ status: \"loading\" });\n\t\tlet c = r.locks$, l = r.isUnlocked$, u = c.pipe(pe(), C(([e, t]) => t > e), he(!0));\n\t\treturn T(t(n)).pipe(A((e) => {\n\t\t\tr.update({\n\t\t\t\tarchive: e,\n\t\t\t\tstatus: \"success\"\n\t\t\t});\n\t\t}), S((e) => (s(n), r.update({\n\t\t\tstatus: \"error\",\n\t\t\terror: e\n\t\t}), y)), k(() => D(u.pipe(k(() => a), k(() => l), C((e) => e)), r.overTTL$).pipe(w(), A(() => {\n\t\t\ts(n);\n\t\t}))));\n\t}), ge(i)).subscribe(), {\n\t\taccess: (e) => {\n\t\t\tlet t = !1, i = o[e] ?? new mt(n);\n\t\t\to[e] = i, i.update({ locks: i.state.locks + 1 });\n\t\t\tlet a = () => {\n\t\t\t\tt || (t = !0, i.update({ locks: i.state.locks - 1 }));\n\t\t\t};\n\t\t\treturn r.next(e), D(i.state$.pipe(E(({ archive: e }) => e), C((e) => !!e)), i.state$.pipe(A(({ error: e }) => {\n\t\t\t\tif (e) throw e;\n\t\t\t}), ue())).pipe(w(), E((e) => ({\n\t\t\t\tarchive: e,\n\t\t\t\trelease: a\n\t\t\t})), S((e) => {\n\t\t\t\tthrow a(), e;\n\t\t\t}));\n\t\t},\n\t\tpurge: () => {\n\t\t\ta.next();\n\t\t},\n\t\t_archives: o\n\t};\n}, Z = (e) => e ? /^\\d+$/.test(e) ? {\n\tvalid: !0,\n\tvalue: Number.parseInt(e, 10)\n} : {\n\tvalid: !1,\n\tvalue: void 0\n} : {\n\tvalid: !0,\n\tvalue: void 0\n}, gt = (e) => {\n\tif (!e.toLowerCase().startsWith(\"bytes=\")) return { kind: \"missing\" };\n\tlet t = e.slice(6).trim();\n\tif (!t) return { kind: \"invalid\" };\n\tif (t.includes(\",\")) return { kind: \"multi\" };\n\tlet n = /^(\\d*)-(\\d*)$/.exec(t);\n\tif (!n) return { kind: \"invalid\" };\n\tlet [, r = \"\", i = \"\"] = n, a = Z(r.trim()), o = Z(i.trim());\n\treturn !a.valid || !o.valid ? { kind: \"invalid\" } : {\n\t\tkind: \"single\",\n\t\tstart: a.value,\n\t\tend: o.value\n\t};\n}, _t = (e) => {\n\tif (e instanceof Blob) return {\n\t\tsize: e.size,\n\t\tslice: (t, n) => {\n\t\t\tlet r = e.slice(t, n);\n\t\t\treturn {\n\t\t\t\tcontent: r,\n\t\t\t\tlength: r.size\n\t\t\t};\n\t\t}\n\t};\n\tlet t = new TextEncoder().encode(e);\n\treturn {\n\t\tsize: t.byteLength,\n\t\tslice: (e, n) => {\n\t\t\tlet r = t.slice(e, n);\n\t\t\treturn {\n\t\t\t\tcontent: r,\n\t\t\t\tlength: r.byteLength\n\t\t\t};\n\t\t}\n\t};\n}, vt = ({ body: e, contentType: t, rangeHeader: n }) => {\n\tlet r = new Headers();\n\tif (t && r.set(\"Content-Type\", t), r.set(\"Accept-Ranges\", \"bytes\"), !n) return e instanceof Blob && r.set(\"Content-Length\", String(e.size)), new Response(e, {\n\t\tstatus: 200,\n\t\theaders: r\n\t});\n\tlet i = gt(n);\n\tif (i.kind === \"missing\" || i.kind === \"multi\") return e instanceof Blob && r.set(\"Content-Length\", String(e.size)), new Response(e, {\n\t\tstatus: 200,\n\t\theaders: r\n\t});\n\tlet a = _t(e), o = a.size;\n\tif (i.kind === \"invalid\") return new Response(null, {\n\t\tstatus: 416,\n\t\theaders: { \"Content-Range\": `bytes */${o}` }\n\t});\n\tlet s = i.start, c = i.end;\n\tif (s === void 0 && c === void 0 || (s === void 0 ? (s = Math.max(0, o - Math.min(c ?? 0, o)), c = o - 1) : (c === void 0 || c >= o) && (c = o - 1), s < 0 || c < 0 || s >= o || c >= o || s > c)) return new Response(null, {\n\t\tstatus: 416,\n\t\theaders: { \"Content-Range\": `bytes */${o}` }\n\t});\n\tlet l = a.slice(s, c + 1);\n\treturn r.set(\"Content-Length\", String(l.length)), r.set(\"Content-Range\", `bytes ${s}-${c}/${o}`), new Response(l.content, {\n\t\tstatus: 206,\n\t\theaders: r\n\t});\n}, Q = \"file://\", yt = /^https?:\\/\\//, bt = (e) => {\n\ttry {\n\t\treturn decodeURIComponent(e);\n\t} catch {\n\t\treturn e;\n\t}\n}, xt = (e) => e.startsWith(Q) ? e.slice(Q.length) : e, St = (e) => {\n\tlet t = xt(e);\n\treturn yt.test(t) ? t : xt(bt(t));\n}, $ = class {\n\tconstructor({ hooks: e, onError: t, onManifestSuccess: n, ...r }) {\n\t\tthis.onError = (e) => (console.error(e), new Response(String(e), { status: 500 })), this.archiveLoader = ht(r), this.hooks = e ?? {}, this.onManifestSuccess = n ?? (({ manifest: e }) => Promise.resolve(e)), this.onError = t ?? this.onError;\n\t}\n\tprune() {\n\t\tthis.archiveLoader.purge();\n\t}\n\taccessArchive(e) {\n\t\treturn this.lastAccessedKey !== void 0 && this.lastAccessedKey !== e && this.archiveLoader.purge(), this.lastAccessedKey = e, this.archiveLoader.access(e);\n\t}\n\taccessArchiveWithoutLock(e) {\n\t\treturn this.accessArchive(e).pipe(E(({ archive: e, release: t }) => (t(), e)));\n\t}\n\twithArchiveResponse({ key: e, getResponse: t }) {\n\t\treturn de(this.accessArchive(e).pipe(O(({ archive: e, release: n }) => T(t(e)).pipe(le(() => {\n\t\t\tn();\n\t\t}))), S((e) => fe(this.onError(e)))));\n\t}\n\tfetchManifest({ key: e, baseUrl: t }) {\n\t\treturn this.withArchiveResponse({\n\t\t\tkey: e,\n\t\t\tgetResponse: (e) => T(J(e, {\n\t\t\t\tbaseUrl: t,\n\t\t\t\thooks: this.hooks.manifest\n\t\t\t})).pipe(k((t) => T(this.onManifestSuccess({\n\t\t\t\tmanifest: t,\n\t\t\t\tarchive: e\n\t\t\t}))), E((e) => new Response(JSON.stringify(e), { status: 200 })))\n\t\t});\n\t}\n\tfetchResource({ key: e, resourcePath: t, request: n }) {\n\t\treturn this.withArchiveResponse({\n\t\t\tkey: e,\n\t\t\tgetResponse: (e) => T(X(e, St(t), { hooks: this.hooks.resource })).pipe(E((e) => vt({\n\t\t\t\tbody: e.body ?? \"\",\n\t\t\t\tcontentType: e.params.contentType,\n\t\t\t\trangeHeader: n?.headers.get(\"range\")\n\t\t\t})))\n\t\t});\n\t}\n}, Ct = class extends $ {\n\tconstructor({ getUriInfo: e, ...t }) {\n\t\tsuper(t), this.getUriInfo = e, this.fetchEventListener = this.fetchEventListener.bind(this);\n\t}\n\tfetchEventListener(e) {\n\t\ttry {\n\t\t\tlet t = this.getUriInfo(e);\n\t\t\tif (!t) return;\n\t\t\tlet n = i(t.baseUrl), r = e.request.url.substring(n.length + 1), [a = \"\"] = r.split(\"/\"), o = i(r.substring(a.length + 1));\n\t\t\tr.endsWith(\"/manifest\") ? e.respondWith(this.fetchManifest({\n\t\t\t\tkey: a,\n\t\t\t\tbaseUrl: `${n}/${a}/`\n\t\t\t})) : e.respondWith(this.fetchResource({\n\t\t\t\tkey: a,\n\t\t\t\tresourcePath: o,\n\t\t\t\trequest: e.request\n\t\t\t}));\n\t\t} catch (t) {\n\t\t\te.respondWith(new Response(String(t), { status: 500 }));\n\t\t}\n\t}\n};\n//#endregion\nexport { Ct as ServiceWorkerStreamer, $ as Streamer, s as arrayBufferFileAccessors, o as blobFileAccessors, Oe as configure, t as createArchive, ve as createArchiveFromArrayBufferList, ye as createArchiveFromText, Te as createArchiveFromUrls, P as createUniqueXmlSafeId, N as createXmlSafeId, F as createXmlSafeIdFactory, J as generateManifestFromArchive, X as generateResourceFromArchive, L as getArchiveFileRecordByUri, R as getArchiveHasComicInfo, B as getArchiveOpfInfo, a as getUriBasePath, r as getUriBasename, Ee as isDirectoryRecord, I as isFileRecord, z as readRecordAsText, i as removeTrailingSlash, n as sortByTitleComparator };\n\n//# sourceMappingURL=index.es.js.map","import {\n type Archive,\n blobFileAccessors,\n createArchive,\n} from \"@prose-reader/streamer\"\nimport * as pdfjsLib from \"pdfjs-dist\"\n\ntype PdfJsArchive = Archive & {\n _symbol: symbol\n proxyDocument: pdfjsLib.PDFDocumentProxy\n}\n\nconst PDF_SYMBOL = Symbol(`pdfjs`)\n\nexport const isPdfJsArchive = (archive: Archive): archive is PdfJsArchive =>\n \"_symbol\" in archive && archive._symbol === PDF_SYMBOL\n\n/**\n * @important\n * Make sure the urls are on the same origin or the cors header is set otherwise\n * the resource cannot be consumed as it is on the web.\n */\nexport const createArchiveFromPdf = async (\n file: Blob,\n filename: string,\n): Promise<Archive> => {\n const loadingTask = pdfjsLib.getDocument(await file.arrayBuffer())\n\n const pdf = await loadingTask.promise\n\n const pages = Array.from({ length: pdf.numPages })\n const pageEntries = pages.map((_, index) => ({\n id: `page-${index}`,\n resourcePath: `${index}.pdf`,\n }))\n\n const opfFileData = `\n <?xml version=\"1.0\" encoding=\"UTF-8\"?><package xmlns=\"http://www.idpf.org/2007/opf\" version=\"2.0\" unique-identifier=\"bookid\">\n <metadata>\n <meta property=\"rendition:layout\">pre-paginated</meta>\n </metadata>\n <manifest>\n ${pageEntries.map(({ id, resourcePath }) => `<item id=\"${id}\" href=\"${resourcePath}\" />`).join(`\\n`)}\n </manifest>\n <spine>\n ${pageEntries.map(({ id }) => `<itemref idref=\"${id}\" />`).join(`\\n`)}\n </spine>\n </package>\n `\n\n const opfFile: Archive[`records`][number] = {\n dir: false,\n basename: `content.opf`,\n uri: `content.opf`,\n size: 0,\n ...blobFileAccessors(async () => new Blob([opfFileData])),\n }\n\n const archive = createArchive({\n filename,\n encodingFormat: \"application/pdf\",\n records: [\n opfFile,\n ...pages.map((_, index) => ({\n dir: false,\n basename: `${index}.pdf`,\n uri: `${index}.pdf`,\n size: 0,\n ...blobFileAccessors(async () => {\n throw new Error(\"Unable to get blob from pdf\")\n }),\n })),\n ],\n close: () => pdf.cleanup(),\n })\n\n const pdfArchive: PdfJsArchive = {\n ...archive,\n proxyDocument: pdf,\n _symbol: PDF_SYMBOL,\n }\n\n return pdfArchive\n}\n","html {\n /* Pdf are always pre-paginated so its safe to disable touch action */\n touch-action: none;\n}\n\nbody {\n width: 100%;\n height: 100%;\n margin: 0;\n padding: 0;\n /* This will prevent scrollbar and wrong offset of annotation layer */\n overflow: hidden;\n}\n","import {\n setPropertyIfChanged,\n setStylePropertyIfChanged,\n type Viewport,\n} from \"@prose-reader/core\"\nimport type { PDFPageProxy } from \"pdfjs-dist\"\n\nexport const layoutContainer = (\n container: HTMLElement | undefined,\n spreadPosition: `none` | `left` | `right`,\n viewport: Viewport,\n) => {\n if (!container) return\n\n // first we try to get the desired viewport for a comfortable reading based on theh current page size\n const { height: pageHeight, width: pageWidth } = viewport.pageSize\n\n setStylePropertyIfChanged(container.style, `width`, `${pageWidth}px`)\n setStylePropertyIfChanged(container.style, `height`, `${pageHeight}px`)\n\n if (spreadPosition === `right`) {\n setStylePropertyIfChanged(container.style, `justify-content`, `flex-start`)\n } else if (spreadPosition === `left`) {\n setStylePropertyIfChanged(container.style, `justify-content`, `flex-end`)\n } else {\n setStylePropertyIfChanged(container.style, `justify-content`, `center`)\n }\n}\n\nexport const layoutCanvas = (\n pageProxy: PDFPageProxy,\n canvas: HTMLCanvasElement,\n readerViewport: Viewport,\n) => {\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n const { height: pageHeight, width: pageWidth } = readerViewport.pageSize\n const { width: viewportWidth, height: viewportHeight } =\n pageProxy.getViewport({ scale: 1 })\n const pageScale = Math.max(\n pageWidth / viewportWidth,\n pageHeight / viewportHeight,\n )\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = pageProxy.getViewport({ scale: pageScale })\n\n // Then we define which axis should stretch or shrink to ratio\n const viewportRatio = viewport.width / viewport.height\n const pageRatio = pageWidth / pageHeight\n const isWiderThanPage = viewportRatio > pageRatio\n const canvasWidth = isWiderThanPage ? pageWidth : pageHeight * viewportRatio\n const canvasHeight =\n viewportRatio > pageRatio ? pageWidth / viewportRatio : pageHeight\n\n setPropertyIfChanged(\n canvas,\n `width`,\n Math.floor(viewport.width * pixelRatioScale),\n )\n setPropertyIfChanged(\n canvas,\n `height`,\n Math.floor(viewport.height * pixelRatioScale),\n )\n setStylePropertyIfChanged(\n canvas.style,\n `width`,\n `${Math.floor(canvasWidth)}px`,\n )\n setStylePropertyIfChanged(\n canvas.style,\n `height`,\n `${Math.floor(canvasHeight)}px`,\n )\n}\n","import {\n DocumentRenderer,\n injectCSSToFrame,\n setAttributeIfChanged,\n setStylePropertyIfChanged,\n upsertCSSToFrame,\n waitForFrameLoad,\n waitForFrameReady,\n waitForSwitch,\n} from \"@prose-reader/core\"\nimport {\n type PDFPageProxy,\n RenderingCancelledException,\n type RenderTask,\n TextLayer,\n} from \"pdfjs-dist\"\nimport {\n catchError,\n EMPTY,\n from,\n map,\n type Observable,\n of,\n switchMap,\n tap,\n} from \"rxjs\"\nimport pdfFrameStyle from \"./frame.css?inline\"\nimport { layoutCanvas, layoutContainer } from \"./layout\"\n\nconst pdfScaleStyle = `:root {\n --scale-factor: 1;\n --user-unit: 1;\n --total-scale-factor: calc(var(--scale-factor) * var(--user-unit));\n --scale-round-x: 1px;\n --scale-round-y: 1px;\n}`\n\nexport class PdfRenderer extends DocumentRenderer {\n private pageProxy: PDFPageProxy | undefined\n private renderTask: RenderTask | undefined\n private textLayer: TextLayer | undefined\n\n constructor(\n private pdfViewerStyle: string,\n params: ConstructorParameters<typeof DocumentRenderer>[0],\n ) {\n super(params)\n }\n\n private getCanvas() {\n const element = this.documentContainer?.children[0]\n\n if (!(element instanceof HTMLCanvasElement)) return\n\n return element\n }\n\n private getFrameElement() {\n const frame = this.documentContainer?.children[1]?.children[0]\n\n if (!(frame instanceof HTMLIFrameElement)) return\n\n return frame\n }\n\n private getPageProxy() {\n if (this.pageProxy) return of(this.pageProxy)\n\n return from(this.resourcesHandler.fetchResource()).pipe(\n switchMap((resource) => {\n if (!(\"custom\" in resource)) return EMPTY\n\n this.pageProxy = resource.data as PDFPageProxy\n\n return of(this.pageProxy)\n }),\n )\n }\n\n onUnload(): Observable<unknown> {\n this.detach()\n\n if (this.renderTask) {\n this.renderTask.cancel()\n }\n\n this.textLayer?.cancel()\n this.pageProxy?.cleanup()\n\n return EMPTY\n }\n\n onCreateDocument(): Observable<HTMLElement> {\n const frameElement = document.createElement(`iframe`)\n frameElement.style.cssText = `\n overflow: hidden;\n height: 100%;\n width: 100%;\n `\n\n frameElement.setAttribute(\"tabIndex\", \"0\")\n frameElement.setAttribute(\"frameBorder\", \"0\")\n frameElement.setAttribute(`src`, \"about:blank\")\n\n const frameContainer =\n this.containerElement.ownerDocument.createElement(\"div\")\n frameContainer.style.cssText = `\n mix-blend-mode: multiply;\n -webkit-transform: translateZ(0);\n transform: translateZ(0);\n position: absolute;\n height: 100%;\n width: 100%;\n top: 0;\n `\n\n /**\n * The canvas is never attached to the DOM and will be used for offscreen rendering\n * then copied into the frame.\n */\n const canvas = this.containerElement.ownerDocument.createElement(\"canvas\")\n\n frameContainer.appendChild(frameElement)\n\n const rootElement = this.containerElement.ownerDocument.createElement(`div`)\n rootElement.style.cssText = `\n display: flex;\n align-items: center;\n justify-content: center;\n `\n\n rootElement.appendChild(canvas)\n rootElement.appendChild(frameContainer)\n\n this.setDocumentContainer(rootElement)\n\n return of(rootElement)\n }\n\n onLoadDocument(): Observable<unknown> {\n return this.getPageProxy().pipe(\n switchMap(() => {\n const frameElement = this.getFrameElement()\n const pageProxy = this.pageProxy\n\n if (!frameElement || !pageProxy) return EMPTY\n\n return of(frameElement).pipe(\n waitForSwitch(this.context.bridgeEvent.viewportFree$),\n tap(() => {\n this.attach()\n }),\n waitForFrameLoad,\n switchMap(() => {\n injectCSSToFrame(\n frameElement,\n \"pdfjs-viewer-style\",\n this.pdfViewerStyle,\n )\n injectCSSToFrame(frameElement, \"enhancer-pdf-style\", pdfFrameStyle)\n upsertCSSToFrame(frameElement, \"pdf-scale-scale\", pdfScaleStyle)\n\n /**\n * We make sure to render the text layer to simulate the document being loaded.\n * It will be correctly re-layout later. Consumers looking for document load have at least\n * the actual text document ready. (cfi lookup, etc.)\n */\n const frameBody = frameElement.contentDocument?.body\n\n if (!frameBody || !this.pageProxy) return EMPTY\n\n setAttributeIfChanged(frameBody, \"class\", \"textLayer\")\n\n this.textLayer = new TextLayer({\n container: frameBody,\n textContentSource: this.pageProxy.streamTextContent(),\n viewport: this.pageProxy.getViewport({ scale: 1 }),\n })\n\n return from(this.textLayer.render())\n }),\n waitForFrameReady,\n )\n }),\n )\n }\n\n onLayout({\n spreadPosition,\n }: {\n minPageSpread: number\n blankPagePosition: `before` | `after` | `none`\n spreadPosition: `none` | `left` | `right`\n }) {\n const frameElement = this.getFrameElement()\n const canvas = this.getCanvas()\n\n if (!frameElement || !canvas) return of(undefined)\n\n // first we try to get the desired viewport for a comfortable reading based on the current page size\n const { height: pageHeight, width: pageWidth } = this.viewport.pageSize\n\n layoutContainer(this.documentContainer, spreadPosition, this.viewport)\n\n const context = canvas.getContext(\"2d\")\n // Support HiDPI-screens.\n const pixelRatioScale = window.devicePixelRatio || 1\n\n if (!this.pageProxy || !context) return of(undefined)\n\n if (this.renderTask) {\n this.renderTask.cancel()\n this.renderTask = undefined\n }\n\n layoutCanvas(this.pageProxy, canvas, this.viewport)\n\n const { width: viewportWidth, height: viewportHeight } =\n this.pageProxy.getViewport({ scale: 1 })\n\n const pageScale = Math.max(\n pageWidth / viewportWidth,\n pageHeight / viewportHeight,\n )\n\n // then we generate the viewport for the canvas based on the page scale\n const viewport = this.pageProxy.getViewport({ scale: pageScale })\n\n const transform =\n pixelRatioScale !== 1\n ? [pixelRatioScale, 0, 0, pixelRatioScale, 0, 0]\n : null\n\n this.renderTask = this.pageProxy.render({\n ...(transform && { transform }),\n canvasContext: context,\n viewport,\n canvas,\n })\n\n return from(this.renderTask.promise).pipe(\n switchMap(() => {\n this.renderTask = undefined\n\n const frameDoc = frameElement?.contentDocument\n const pdfPage = this.pageProxy\n\n if (!frameDoc || !frameElement || !pdfPage || !this.textLayer) {\n throw new Error(\"Unable to update text layer due to missing elements\")\n }\n\n const textLayerElement = frameDoc.body\n const canvasScale = canvas.clientWidth / viewportWidth\n\n setStylePropertyIfChanged(\n textLayerElement.style,\n `top`,\n `${canvas.offsetTop}px`,\n )\n setStylePropertyIfChanged(\n textLayerElement.style,\n `left`,\n `${canvas.offsetLeft}px`,\n )\n setStylePropertyIfChanged(\n textLayerElement.style,\n `height`,\n canvas.style.height,\n )\n setStylePropertyIfChanged(\n textLayerElement.style,\n `width`,\n canvas.style.width,\n )\n\n /**\n * Taking inspiration from https://github.com/mozilla/pdf.js/blob/master/web/pdf_viewer.css.\n * Not sure why pdfjs DOES rely on css from the viewer to works. Or in another words, why is it\n * not more obvious that TextLayer requires a set of variables to work correctly.\n */\n setStylePropertyIfChanged(\n frameDoc.documentElement.style,\n `--scale-factor`,\n `${canvasScale}`,\n )\n\n this.textLayer.update({\n viewport,\n })\n\n return of(undefined)\n }),\n catchError((e) => {\n if (!(e instanceof RenderingCancelledException)) console.error(e)\n\n return of(undefined)\n }),\n )\n }\n\n /**\n * @important\n * We should keep the same node structure to preserve CFI integrity.\n */\n onRenderHeadless() {\n return this.getPageProxy().pipe(\n switchMap((pageProxy) => {\n const headlessDocument = document.implementation.createHTMLDocument()\n const textLayerElement = headlessDocument.body\n\n const textLayer = new TextLayer({\n container: textLayerElement,\n textContentSource: pageProxy.streamTextContent(),\n viewport: pageProxy.getViewport({ scale: 1 }),\n })\n\n return from(textLayer.render()).pipe(map(() => headlessDocument))\n }),\n )\n }\n\n getDocumentFrame() {\n return this.getFrameElement()\n }\n}\n","import type { createReader, Reader } from \"@prose-reader/core\"\nimport { from, map, mergeMap, of } from \"rxjs\"\nimport { isPdfJsArchive } from \"./createArchiveFromPdf\"\nimport { PdfRenderer } from \"./renderer/PdfRenderer\"\nimport type { EnhancerOptions } from \"./types\"\n\ntype CreateReader = typeof createReader\ntype CreateReaderOptions = Parameters<CreateReader>[0]\n\nexport const pdfEnhancer =\n <InheritOptions extends CreateReaderOptions, InheritOutput extends Reader>(\n next: (options: InheritOptions) => InheritOutput,\n ) =>\n (options: InheritOptions & EnhancerOptions): InheritOutput => {\n const reader = next({\n ...options,\n /**\n * We have a special renderer for pdf so we need to inject it\n * for the relevant items. The enhancer could be configurable but for\n * the sake of simplicity we will assume that an item ending with .pdf should\n * be treated as a pdf document.\n *\n * The `getRenderer` hook should be non destructive, if we detect a renderer already\n * setup we should return it.\n */\n getRenderer(item) {\n const maybeFactory = options.getRenderer?.(item)\n\n if (!maybeFactory && item.href.endsWith(`.pdf`)) {\n return (params) =>\n new PdfRenderer(options.pdf.pdfjsViewerInlineCss, params)\n }\n\n return maybeFactory\n },\n getResource: (item) =>\n options.pdf.getArchiveForItem(item).pipe(\n mergeMap((archive) => {\n if (!archive) return of(undefined)\n\n if (!isPdfJsArchive(archive)) {\n console.warn(`You provided an invalid pdf archive`)\n\n return of(undefined)\n }\n\n // we account for opf file\n const fileIndex =\n archive.records.findIndex((file) =>\n item.href.endsWith(file.uri),\n ) - 1\n\n return from(archive.proxyDocument.getPage(fileIndex + 1)).pipe(\n map((pageProxy) => ({\n custom: true as const,\n data: pageProxy,\n })),\n )\n }),\n ),\n })\n\n return reader\n }\n"],"x_google_ignoreList":[4,5],"mappings":"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"}