UNPKG

11 kBSource Map (JSON)View Raw
1{"version":3,"file":"support.js","sourceRoot":"","sources":["src/support.ts"],"names":[],"mappings":"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","sourcesContent":["export type Awaitable<T> = T | Promise<T>;\n\nexport function append<K, V>(m: Map<K, V[]>, k: K, v: V) {\n const vs = m.get(k) ?? [];\n vs.push(v);\n return m.set(k, vs);\n}\n\nexport async function* promiseToAsyncIterable<T>(promise: Promise<T>): AsyncIterableIterator<T> {\n yield await promise;\n}\n\nexport function* treeWalkerToIter(walker: TreeWalker): IterableIterator<Node> {\n let node = walker.nextNode();\n while (node) {\n yield node;\n node = walker.nextNode();\n }\n}\n\ntype Content = string;\n\n/** Fragment form string function that works with linkedom. */\nfunction fragmentFromString(document: Document, html: string) {\n const temp = document.createElement('template');\n temp.innerHTML = html;\n return temp.content;\n}\n\nfunction replace(document: Document, node: Element | Text | Comment | null, content: string, opts?: ContentOptions) {\n node?.replaceWith(...opts?.html\n ? fragmentFromString(document, content).childNodes // depends on DOM.Iterable\n : [content]);\n}\n\nexport class ParsedHTMLRewriterNode {\n #node: Element | Text | Comment | null;\n #doc: Document;\n constructor(node: Element | Text | Comment | null, document: Document) {\n this.#node = node;\n this.#doc = document;\n }\n\n get removed() { return !this.#doc.contains(this.#node) }\n\n before(content: Content, opts?: ContentOptions): this {\n const before = this.#doc.createComment('');\n this.#node?.parentElement?.insertBefore(before, this.#node)\n replace(this.#doc, before, content, opts);\n return this;\n }\n\n after(content: Content, opts?: ContentOptions): this {\n const after = this.#doc.createComment('');\n this.#node?.parentElement?.insertBefore(after, this.#node.nextSibling)\n replace(this.#doc, after, content, opts);\n return this;\n }\n\n replace(content: Content, opts?: ContentOptions): this {\n replace(this.#doc, this.#node, content, opts);\n return this;\n }\n\n remove(): this {\n this.#node?.remove()\n return this;\n }\n}\n\nexport class ParsedHTMLRewriterElement extends ParsedHTMLRewriterNode {\n #node: Element;\n\n constructor(node: Element, document: Document) {\n super(node, document)\n this.#node = node;\n }\n\n get tagName() { return this.#node.tagName.toLowerCase() }\n get attributes(): Iterable<[string, string]> {\n return [...this.#node.attributes].map(attr => [attr.name, attr.value]);\n }\n get namespaceURI() { return this.#node.namespaceURI }\n\n getAttribute(name: string) {\n return this.#node.getAttribute(name);\n }\n\n hasAttribute(name: string) {\n return this.#node.hasAttribute(name);\n }\n\n setAttribute(name: string, value: string): this {\n this.#node.setAttribute(name, value);\n return this;\n }\n\n removeAttribute(name: string): this {\n this.#node.removeAttribute(name);\n return this;\n }\n\n prepend(content: Content, opts?: ContentOptions): this {\n return this.before(content, opts);\n }\n\n append(content: Content, opts?: ContentOptions): this {\n return this.after(content, opts);\n }\n\n setInnerContent(content: Content, opts?: ContentOptions): this {\n this.#node[opts?.html ? 'innerHTML' : 'textContent'] = content;\n return this;\n }\n\n removeAndKeepContent(): this {\n this.#node?.replaceWith(...this.#node.childNodes);\n return this;\n }\n}\n\nexport class ParsedHTMLRewriterText extends ParsedHTMLRewriterNode {\n #text: Text | null;\n #done: boolean;\n\n constructor(text: Text | null, document: Document) {\n super(text, document);\n this.#text = text;\n this.#done = text === null;\n }\n get text() { return this.#text?.textContent ?? '' }\n get lastInTextNode() { return this.#done }\n}\n\nexport class ParsedHTMLRewriterComment extends ParsedHTMLRewriterNode {\n #comm: Comment;\n constructor(comm: Comment, document: Document) {\n super(comm, document);\n this.#comm = comm;\n }\n get text() { return this.#comm.textContent ?? '' }\n set text(value: string) { this.#comm.textContent = value }\n}\n\nexport class ParsedHTMLRewriterDocumentType {\n #doctype: DocumentType;\n\n constructor(doctype: DocumentType) {\n this.#doctype = doctype;\n }\n get name() { return this.#doctype.name }\n get publicId() { return this.#doctype.publicId }\n get systemId() { return this.#doctype.systemId }\n}\n\nexport class ParsedHTMLRewriterEnd {\n #doc: Document;\n\n constructor(document: Document) {\n this.#doc = document;\n }\n\n append(content: Content, opts?: ContentOptions): this {\n const after = this.#doc.createComment('');\n this.#doc.insertBefore(after, null);\n replace(this.#doc, after, content, opts);\n return this;\n }\n}\n\n// function* ancestors(el: Node) {\n// while (el.parentElement) {\n// yield el.parentElement\n// el = el.parentElement\n// }\n// }\n\n// function root(el: Node): globalThis.HTMLElement | undefined {\n// const ancs = [...ancestors(el)]\n// return ancs[ancs.length - 1];\n// }\n\n// function* zip<X, Y>(xs: Iterable<X>, ys: Iterable<Y>): IterableIterator<[X, Y]> {\n// const xit = xs[Symbol.iterator]();\n// const yit = ys[Symbol.iterator]();\n// while (true) {\n// const [xr, yr] = [xit.next(), yit.next()];\n// if (xr.done || yr.done) break;\n// yield [xr.value, yr.value];\n// }\n// }\n\n// /* Checks if this element or any of its parents matches a given `selector`. */\n// function matchesAncestors(el: Element | null, selector: string): Element | null {\n// let curr = el;\n// while (curr != null) {\n// if (curr.matches(selector)) return curr;\n// curr = curr.parentElement;\n// }\n// return null;\n// }"]}
\No newline at end of file