summaryrefslogtreecommitdiff
path: root/includes/external/addressbook/node_modules/domhandler/lib
diff options
context:
space:
mode:
Diffstat (limited to 'includes/external/addressbook/node_modules/domhandler/lib')
-rw-r--r--includes/external/addressbook/node_modules/domhandler/lib/esm/index.d.ts76
-rw-r--r--includes/external/addressbook/node_modules/domhandler/lib/esm/index.d.ts.map1
-rw-r--r--includes/external/addressbook/node_modules/domhandler/lib/esm/index.js146
-rw-r--r--includes/external/addressbook/node_modules/domhandler/lib/esm/node.d.ts245
-rw-r--r--includes/external/addressbook/node_modules/domhandler/lib/esm/node.d.ts.map1
-rw-r--r--includes/external/addressbook/node_modules/domhandler/lib/esm/node.js338
-rw-r--r--includes/external/addressbook/node_modules/domhandler/lib/esm/package.json1
-rw-r--r--includes/external/addressbook/node_modules/domhandler/lib/index.d.ts76
-rw-r--r--includes/external/addressbook/node_modules/domhandler/lib/index.d.ts.map1
-rw-r--r--includes/external/addressbook/node_modules/domhandler/lib/index.js165
-rw-r--r--includes/external/addressbook/node_modules/domhandler/lib/node.d.ts245
-rw-r--r--includes/external/addressbook/node_modules/domhandler/lib/node.d.ts.map1
-rw-r--r--includes/external/addressbook/node_modules/domhandler/lib/node.js474
13 files changed, 1770 insertions, 0 deletions
diff --git a/includes/external/addressbook/node_modules/domhandler/lib/esm/index.d.ts b/includes/external/addressbook/node_modules/domhandler/lib/esm/index.d.ts
new file mode 100644
index 0000000..5d322c1
--- /dev/null
+++ b/includes/external/addressbook/node_modules/domhandler/lib/esm/index.d.ts
@@ -0,0 +1,76 @@
+import { ChildNode, Element, DataNode, Document, ParentNode } from "./node.js";
+export * from "./node.js";
+export interface DomHandlerOptions {
+ /**
+ * Add a `startIndex` property to nodes.
+ * When the parser is used in a non-streaming fashion, `startIndex` is an integer
+ * indicating the position of the start of the node in the document.
+ *
+ * @default false
+ */
+ withStartIndices?: boolean;
+ /**
+ * Add an `endIndex` property to nodes.
+ * When the parser is used in a non-streaming fashion, `endIndex` is an integer
+ * indicating the position of the end of the node in the document.
+ *
+ * @default false
+ */
+ withEndIndices?: boolean;
+ /**
+ * Treat the markup as XML.
+ *
+ * @default false
+ */
+ xmlMode?: boolean;
+}
+interface ParserInterface {
+ startIndex: number | null;
+ endIndex: number | null;
+}
+declare type Callback = (error: Error | null, dom: ChildNode[]) => void;
+declare type ElementCallback = (element: Element) => void;
+export declare class DomHandler {
+ /** The elements of the DOM */
+ dom: ChildNode[];
+ /** The root element for the DOM */
+ root: Document;
+ /** Called once parsing has completed. */
+ private readonly callback;
+ /** Settings for the handler. */
+ private readonly options;
+ /** Callback whenever a tag is closed. */
+ private readonly elementCB;
+ /** Indicated whether parsing has been completed. */
+ private done;
+ /** Stack of open tags. */
+ protected tagStack: ParentNode[];
+ /** A data node that is still being written to. */
+ protected lastNode: DataNode | null;
+ /** Reference to the parser instance. Used for location information. */
+ private parser;
+ /**
+ * @param callback Called once parsing has completed.
+ * @param options Settings for the handler.
+ * @param elementCB Callback whenever a tag is closed.
+ */
+ constructor(callback?: Callback | null, options?: DomHandlerOptions | null, elementCB?: ElementCallback);
+ onparserinit(parser: ParserInterface): void;
+ onreset(): void;
+ onend(): void;
+ onerror(error: Error): void;
+ onclosetag(): void;
+ onopentag(name: string, attribs: {
+ [key: string]: string;
+ }): void;
+ ontext(data: string): void;
+ oncomment(data: string): void;
+ oncommentend(): void;
+ oncdatastart(): void;
+ oncdataend(): void;
+ onprocessinginstruction(name: string, data: string): void;
+ protected handleCallback(error: Error | null): void;
+ protected addNode(node: ChildNode): void;
+}
+export default DomHandler;
+//# sourceMappingURL=index.d.ts.map \ No newline at end of file
diff --git a/includes/external/addressbook/node_modules/domhandler/lib/esm/index.d.ts.map b/includes/external/addressbook/node_modules/domhandler/lib/esm/index.d.ts.map
new file mode 100644
index 0000000..54497b0
--- /dev/null
+++ b/includes/external/addressbook/node_modules/domhandler/lib/esm/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACH,SAAS,EACT,OAAO,EACP,QAAQ,EAIR,QAAQ,EAER,UAAU,EACb,MAAM,WAAW,CAAC;AAEnB,cAAc,WAAW,CAAC;AAE1B,MAAM,WAAW,iBAAiB;IAC9B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AASD,UAAU,eAAe;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,aAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;AAChE,aAAK,eAAe,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAElD,qBAAa,UAAU;IACnB,8BAA8B;IACvB,GAAG,EAAE,SAAS,EAAE,CAAM;IAE7B,mCAAmC;IAC5B,IAAI,WAA0B;IAErC,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAE3C,gCAAgC;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAE5C,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAEnD,oDAAoD;IACpD,OAAO,CAAC,IAAI,CAAS;IAErB,0BAA0B;IAC1B,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAe;IAE/C,kDAAkD;IAClD,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAQ;IAE3C,uEAAuE;IACvE,OAAO,CAAC,MAAM,CAAgC;IAE9C;;;;OAIG;gBAEC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI,EAClC,SAAS,CAAC,EAAE,eAAe;IAiBxB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAK3C,OAAO,IAAI,IAAI;IAUf,KAAK,IAAI,IAAI;IAOb,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI3B,UAAU,IAAI,IAAI;IAYlB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,IAAI;IAOjE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAe1B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAW7B,YAAY,IAAI,IAAI;IAIpB,YAAY,IAAI,IAAI;IAUpB,UAAU,IAAI,IAAI;IAIlB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhE,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI;IAQnD,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;CAwB3C;AAED,eAAe,UAAU,CAAC"} \ No newline at end of file
diff --git a/includes/external/addressbook/node_modules/domhandler/lib/esm/index.js b/includes/external/addressbook/node_modules/domhandler/lib/esm/index.js
new file mode 100644
index 0000000..3c1e7d1
--- /dev/null
+++ b/includes/external/addressbook/node_modules/domhandler/lib/esm/index.js
@@ -0,0 +1,146 @@
+import { ElementType } from "domelementtype";
+import { Element, Text, Comment, CDATA, Document, ProcessingInstruction, } from "./node.js";
+export * from "./node.js";
+// Default options
+const defaultOpts = {
+ withStartIndices: false,
+ withEndIndices: false,
+ xmlMode: false,
+};
+export class DomHandler {
+ /**
+ * @param callback Called once parsing has completed.
+ * @param options Settings for the handler.
+ * @param elementCB Callback whenever a tag is closed.
+ */
+ constructor(callback, options, elementCB) {
+ /** The elements of the DOM */
+ this.dom = [];
+ /** The root element for the DOM */
+ this.root = new Document(this.dom);
+ /** Indicated whether parsing has been completed. */
+ this.done = false;
+ /** Stack of open tags. */
+ this.tagStack = [this.root];
+ /** A data node that is still being written to. */
+ this.lastNode = null;
+ /** Reference to the parser instance. Used for location information. */
+ this.parser = null;
+ // Make it possible to skip arguments, for backwards-compatibility
+ if (typeof options === "function") {
+ elementCB = options;
+ options = defaultOpts;
+ }
+ if (typeof callback === "object") {
+ options = callback;
+ callback = undefined;
+ }
+ this.callback = callback !== null && callback !== void 0 ? callback : null;
+ this.options = options !== null && options !== void 0 ? options : defaultOpts;
+ this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;
+ }
+ onparserinit(parser) {
+ this.parser = parser;
+ }
+ // Resets the handler back to starting state
+ onreset() {
+ this.dom = [];
+ this.root = new Document(this.dom);
+ this.done = false;
+ this.tagStack = [this.root];
+ this.lastNode = null;
+ this.parser = null;
+ }
+ // Signals the handler that parsing is done
+ onend() {
+ if (this.done)
+ return;
+ this.done = true;
+ this.parser = null;
+ this.handleCallback(null);
+ }
+ onerror(error) {
+ this.handleCallback(error);
+ }
+ onclosetag() {
+ this.lastNode = null;
+ const elem = this.tagStack.pop();
+ if (this.options.withEndIndices) {
+ elem.endIndex = this.parser.endIndex;
+ }
+ if (this.elementCB)
+ this.elementCB(elem);
+ }
+ onopentag(name, attribs) {
+ const type = this.options.xmlMode ? ElementType.Tag : undefined;
+ const element = new Element(name, attribs, undefined, type);
+ this.addNode(element);
+ this.tagStack.push(element);
+ }
+ ontext(data) {
+ const { lastNode } = this;
+ if (lastNode && lastNode.type === ElementType.Text) {
+ lastNode.data += data;
+ if (this.options.withEndIndices) {
+ lastNode.endIndex = this.parser.endIndex;
+ }
+ }
+ else {
+ const node = new Text(data);
+ this.addNode(node);
+ this.lastNode = node;
+ }
+ }
+ oncomment(data) {
+ if (this.lastNode && this.lastNode.type === ElementType.Comment) {
+ this.lastNode.data += data;
+ return;
+ }
+ const node = new Comment(data);
+ this.addNode(node);
+ this.lastNode = node;
+ }
+ oncommentend() {
+ this.lastNode = null;
+ }
+ oncdatastart() {
+ const text = new Text("");
+ const node = new CDATA([text]);
+ this.addNode(node);
+ text.parent = node;
+ this.lastNode = text;
+ }
+ oncdataend() {
+ this.lastNode = null;
+ }
+ onprocessinginstruction(name, data) {
+ const node = new ProcessingInstruction(name, data);
+ this.addNode(node);
+ }
+ handleCallback(error) {
+ if (typeof this.callback === "function") {
+ this.callback(error, this.dom);
+ }
+ else if (error) {
+ throw error;
+ }
+ }
+ addNode(node) {
+ const parent = this.tagStack[this.tagStack.length - 1];
+ const previousSibling = parent.children[parent.children.length - 1];
+ if (this.options.withStartIndices) {
+ node.startIndex = this.parser.startIndex;
+ }
+ if (this.options.withEndIndices) {
+ node.endIndex = this.parser.endIndex;
+ }
+ parent.children.push(node);
+ if (previousSibling) {
+ node.prev = previousSibling;
+ previousSibling.next = node;
+ }
+ node.parent = parent;
+ this.lastNode = null;
+ }
+}
+export default DomHandler;
diff --git a/includes/external/addressbook/node_modules/domhandler/lib/esm/node.d.ts b/includes/external/addressbook/node_modules/domhandler/lib/esm/node.d.ts
new file mode 100644
index 0000000..b71c88a
--- /dev/null
+++ b/includes/external/addressbook/node_modules/domhandler/lib/esm/node.d.ts
@@ -0,0 +1,245 @@
+import { ElementType } from "domelementtype";
+interface SourceCodeLocation {
+ /** One-based line index of the first character. */
+ startLine: number;
+ /** One-based column index of the first character. */
+ startCol: number;
+ /** Zero-based first character index. */
+ startOffset: number;
+ /** One-based line index of the last character. */
+ endLine: number;
+ /** One-based column index of the last character. Points directly *after* the last character. */
+ endCol: number;
+ /** Zero-based last character index. Points directly *after* the last character. */
+ endOffset: number;
+}
+interface TagSourceCodeLocation extends SourceCodeLocation {
+ startTag?: SourceCodeLocation;
+ endTag?: SourceCodeLocation;
+}
+export declare type ParentNode = Document | Element | CDATA;
+export declare type ChildNode = Text | Comment | ProcessingInstruction | Element | CDATA | Document;
+export declare type AnyNode = ParentNode | ChildNode;
+/**
+ * This object will be used as the prototype for Nodes when creating a
+ * DOM-Level-1-compliant structure.
+ */
+export declare abstract class Node {
+ /** The type of the node. */
+ abstract readonly type: ElementType;
+ /** Parent of the node */
+ parent: ParentNode | null;
+ /** Previous sibling */
+ prev: ChildNode | null;
+ /** Next sibling */
+ next: ChildNode | null;
+ /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */
+ startIndex: number | null;
+ /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */
+ endIndex: number | null;
+ /**
+ * `parse5` source code location info.
+ *
+ * Available if parsing with parse5 and location info is enabled.
+ */
+ sourceCodeLocation?: SourceCodeLocation | null;
+ /**
+ * [DOM spec](https://dom.spec.whatwg.org/#dom-node-nodetype)-compatible
+ * node {@link type}.
+ */
+ abstract readonly nodeType: number;
+ /**
+ * Same as {@link parent}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get parentNode(): ParentNode | null;
+ set parentNode(parent: ParentNode | null);
+ /**
+ * Same as {@link prev}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get previousSibling(): ChildNode | null;
+ set previousSibling(prev: ChildNode | null);
+ /**
+ * Same as {@link next}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get nextSibling(): ChildNode | null;
+ set nextSibling(next: ChildNode | null);
+ /**
+ * Clone this node, and optionally its children.
+ *
+ * @param recursive Clone child nodes as well.
+ * @returns A clone of the node.
+ */
+ cloneNode<T extends Node>(this: T, recursive?: boolean): T;
+}
+/**
+ * A node that contains some data.
+ */
+export declare abstract class DataNode extends Node {
+ data: string;
+ /**
+ * @param data The content of the data node
+ */
+ constructor(data: string);
+ /**
+ * Same as {@link data}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get nodeValue(): string;
+ set nodeValue(data: string);
+}
+/**
+ * Text within the document.
+ */
+export declare class Text extends DataNode {
+ type: ElementType.Text;
+ get nodeType(): 3;
+}
+/**
+ * Comments within the document.
+ */
+export declare class Comment extends DataNode {
+ type: ElementType.Comment;
+ get nodeType(): 8;
+}
+/**
+ * Processing instructions, including doc types.
+ */
+export declare class ProcessingInstruction extends DataNode {
+ name: string;
+ type: ElementType.Directive;
+ constructor(name: string, data: string);
+ get nodeType(): 1;
+ /** If this is a doctype, the document type name (parse5 only). */
+ "x-name"?: string;
+ /** If this is a doctype, the document type public identifier (parse5 only). */
+ "x-publicId"?: string;
+ /** If this is a doctype, the document type system identifier (parse5 only). */
+ "x-systemId"?: string;
+}
+/**
+ * A `Node` that can have children.
+ */
+export declare abstract class NodeWithChildren extends Node {
+ children: ChildNode[];
+ /**
+ * @param children Children of the node. Only certain node types can have children.
+ */
+ constructor(children: ChildNode[]);
+ /** First child of the node. */
+ get firstChild(): ChildNode | null;
+ /** Last child of the node. */
+ get lastChild(): ChildNode | null;
+ /**
+ * Same as {@link children}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get childNodes(): ChildNode[];
+ set childNodes(children: ChildNode[]);
+}
+export declare class CDATA extends NodeWithChildren {
+ type: ElementType.CDATA;
+ get nodeType(): 4;
+}
+/**
+ * The root node of the document.
+ */
+export declare class Document extends NodeWithChildren {
+ type: ElementType.Root;
+ get nodeType(): 9;
+ /** [Document mode](https://dom.spec.whatwg.org/#concept-document-limited-quirks) (parse5 only). */
+ "x-mode"?: "no-quirks" | "quirks" | "limited-quirks";
+}
+/**
+ * The description of an individual attribute.
+ */
+interface Attribute {
+ name: string;
+ value: string;
+ namespace?: string;
+ prefix?: string;
+}
+/**
+ * An element within the DOM.
+ */
+export declare class Element extends NodeWithChildren {
+ name: string;
+ attribs: {
+ [name: string]: string;
+ };
+ type: ElementType.Tag | ElementType.Script | ElementType.Style;
+ /**
+ * @param name Name of the tag, eg. `div`, `span`.
+ * @param attribs Object mapping attribute names to attribute values.
+ * @param children Children of the node.
+ */
+ constructor(name: string, attribs: {
+ [name: string]: string;
+ }, children?: ChildNode[], type?: ElementType.Tag | ElementType.Script | ElementType.Style);
+ get nodeType(): 1;
+ /**
+ * `parse5` source code location info, with start & end tags.
+ *
+ * Available if parsing with parse5 and location info is enabled.
+ */
+ sourceCodeLocation?: TagSourceCodeLocation | null;
+ /**
+ * Same as {@link name}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get tagName(): string;
+ set tagName(name: string);
+ get attributes(): Attribute[];
+ /** Element namespace (parse5 only). */
+ namespace?: string;
+ /** Element attribute namespaces (parse5 only). */
+ "x-attribsNamespace"?: Record<string, string>;
+ /** Element attribute namespace-related prefixes (parse5 only). */
+ "x-attribsPrefix"?: Record<string, string>;
+}
+/**
+ * @param node Node to check.
+ * @returns `true` if the node is a `Element`, `false` otherwise.
+ */
+export declare function isTag(node: Node): node is Element;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `CDATA`, `false` otherwise.
+ */
+export declare function isCDATA(node: Node): node is CDATA;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `Text`, `false` otherwise.
+ */
+export declare function isText(node: Node): node is Text;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `Comment`, `false` otherwise.
+ */
+export declare function isComment(node: Node): node is Comment;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.
+ */
+export declare function isDirective(node: Node): node is ProcessingInstruction;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.
+ */
+export declare function isDocument(node: Node): node is Document;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has children, `false` otherwise.
+ */
+export declare function hasChildren(node: Node): node is ParentNode;
+/**
+ * Clone a node, and optionally its children.
+ *
+ * @param recursive Clone child nodes as well.
+ * @returns A clone of the node.
+ */
+export declare function cloneNode<T extends Node>(node: T, recursive?: boolean): T;
+export {};
+//# sourceMappingURL=node.d.ts.map \ No newline at end of file
diff --git a/includes/external/addressbook/node_modules/domhandler/lib/esm/node.d.ts.map b/includes/external/addressbook/node_modules/domhandler/lib/esm/node.d.ts.map
new file mode 100644
index 0000000..b8868ab
--- /dev/null
+++ b/includes/external/addressbook/node_modules/domhandler/lib/esm/node.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAqB,MAAM,gBAAgB,CAAC;AAEhE,UAAU,kBAAkB;IACxB,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,gGAAgG;IAChG,MAAM,EAAE,MAAM,CAAC;IACf,mFAAmF;IACnF,SAAS,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,qBAAsB,SAAQ,kBAAkB;IACtD,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC/B;AAED,oBAAY,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,KAAK,CAAC;AACpD,oBAAY,SAAS,GACf,IAAI,GACJ,OAAO,GACP,qBAAqB,GACrB,OAAO,GACP,KAAK,GAEL,QAAQ,CAAC;AACf,oBAAY,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;AAE7C;;;GAGG;AACH,8BAAsB,IAAI;IACtB,4BAA4B;IAC5B,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAEpC,yBAAyB;IACzB,MAAM,EAAE,UAAU,GAAG,IAAI,CAAQ;IAEjC,uBAAuB;IACvB,IAAI,EAAE,SAAS,GAAG,IAAI,CAAQ;IAE9B,mBAAmB;IACnB,IAAI,EAAE,SAAS,GAAG,IAAI,CAAQ;IAE9B,2FAA2F;IAC3F,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEjC,uFAAuF;IACvF,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAE/B;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAI/C;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAInC;;;OAGG;IACH,IAAI,UAAU,IAAI,UAAU,GAAG,IAAI,CAElC;IAED,IAAI,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,EAEvC;IAED;;;OAGG;IACH,IAAI,eAAe,IAAI,SAAS,GAAG,IAAI,CAEtC;IAED,IAAI,eAAe,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,EAEzC;IAED;;;OAGG;IACH,IAAI,WAAW,IAAI,SAAS,GAAG,IAAI,CAElC;IAED,IAAI,WAAW,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,EAErC;IAED;;;;;OAKG;IACH,SAAS,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,UAAQ,GAAG,CAAC;CAG3D;AAED;;GAEG;AACH,8BAAsB,QAAS,SAAQ,IAAI;IAIpB,IAAI,EAAE,MAAM;IAH/B;;OAEG;gBACgB,IAAI,EAAE,MAAM;IAI/B;;;OAGG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,SAAS,CAAC,IAAI,EAAE,MAAM,EAEzB;CACJ;AAED;;GAEG;AACH,qBAAa,IAAK,SAAQ,QAAQ;IAC9B,IAAI,EAAE,WAAW,CAAC,IAAI,CAAoB;IAE1C,IAAI,QAAQ,IAAI,CAAC,CAEhB;CACJ;AAED;;GAEG;AACH,qBAAa,OAAQ,SAAQ,QAAQ;IACjC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAuB;IAEhD,IAAI,QAAQ,IAAI,CAAC,CAEhB;CACJ;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,QAAQ;IAG5B,IAAI,EAAE,MAAM;IAF/B,IAAI,EAAE,WAAW,CAAC,SAAS,CAAyB;gBAEjC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAI7C,IAAa,QAAQ,IAAI,CAAC,CAEzB;IAED,kEAAkE;IAClE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,8BAAsB,gBAAiB,SAAQ,IAAI;IAI5B,QAAQ,EAAE,SAAS,EAAE;IAHxC;;OAEG;gBACgB,QAAQ,EAAE,SAAS,EAAE;IAKxC,+BAA+B;IAC/B,IAAI,UAAU,IAAI,SAAS,GAAG,IAAI,CAEjC;IAED,8BAA8B;IAC9B,IAAI,SAAS,IAAI,SAAS,GAAG,IAAI,CAIhC;IAED;;;OAGG;IACH,IAAI,UAAU,IAAI,SAAS,EAAE,CAE5B;IAED,IAAI,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE,EAEnC;CACJ;AAED,qBAAa,KAAM,SAAQ,gBAAgB;IACvC,IAAI,EAAE,WAAW,CAAC,KAAK,CAAqB;IAE5C,IAAI,QAAQ,IAAI,CAAC,CAEhB;CACJ;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,gBAAgB;IAC1C,IAAI,EAAE,WAAW,CAAC,IAAI,CAAoB;IAE1C,IAAI,QAAQ,IAAI,CAAC,CAEhB;IAED,mGAAmG;IACnG,QAAQ,CAAC,EAAE,WAAW,GAAG,QAAQ,GAAG,gBAAgB,CAAC;CACxD;AAED;;GAEG;AACH,UAAU,SAAS;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,OAAQ,SAAQ,gBAAgB;IAO9B,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;IAEnC,IAAI,EACL,WAAW,CAAC,GAAG,GACf,WAAW,CAAC,MAAM,GAClB,WAAW,CAAC,KAAK;IAZ3B;;;;OAIG;gBAEQ,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,EAC1C,QAAQ,GAAE,SAAS,EAAO,EACnB,IAAI,GACL,WAAW,CAAC,GAAG,GACf,WAAW,CAAC,MAAM,GAClB,WAAW,CAAC,KAIG;IAKzB,IAAI,QAAQ,IAAI,CAAC,CAEhB;IAED;;;;OAIG;IACH,kBAAkB,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAIlD;;;OAGG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,MAAM,EAEvB;IAED,IAAI,UAAU,IAAI,SAAS,EAAE,CAO5B;IAED,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9C,kEAAkE;IAClE,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C;AAED;;;GAGG;AACH,wBAAgB,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,OAAO,CAEjD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,KAAK,CAEjD;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,IAAI,CAE/C;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,OAAO,CAErD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,qBAAqB,CAErE;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,QAAQ,CAEvD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,UAAU,CAE1D;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,SAAS,UAAQ,GAAG,CAAC,CA4DvE"} \ No newline at end of file
diff --git a/includes/external/addressbook/node_modules/domhandler/lib/esm/node.js b/includes/external/addressbook/node_modules/domhandler/lib/esm/node.js
new file mode 100644
index 0000000..972d9e1
--- /dev/null
+++ b/includes/external/addressbook/node_modules/domhandler/lib/esm/node.js
@@ -0,0 +1,338 @@
+import { ElementType, isTag as isTagRaw } from "domelementtype";
+/**
+ * This object will be used as the prototype for Nodes when creating a
+ * DOM-Level-1-compliant structure.
+ */
+export class Node {
+ constructor() {
+ /** Parent of the node */
+ this.parent = null;
+ /** Previous sibling */
+ this.prev = null;
+ /** Next sibling */
+ this.next = null;
+ /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */
+ this.startIndex = null;
+ /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */
+ this.endIndex = null;
+ }
+ // Read-write aliases for properties
+ /**
+ * Same as {@link parent}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get parentNode() {
+ return this.parent;
+ }
+ set parentNode(parent) {
+ this.parent = parent;
+ }
+ /**
+ * Same as {@link prev}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get previousSibling() {
+ return this.prev;
+ }
+ set previousSibling(prev) {
+ this.prev = prev;
+ }
+ /**
+ * Same as {@link next}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get nextSibling() {
+ return this.next;
+ }
+ set nextSibling(next) {
+ this.next = next;
+ }
+ /**
+ * Clone this node, and optionally its children.
+ *
+ * @param recursive Clone child nodes as well.
+ * @returns A clone of the node.
+ */
+ cloneNode(recursive = false) {
+ return cloneNode(this, recursive);
+ }
+}
+/**
+ * A node that contains some data.
+ */
+export class DataNode extends Node {
+ /**
+ * @param data The content of the data node
+ */
+ constructor(data) {
+ super();
+ this.data = data;
+ }
+ /**
+ * Same as {@link data}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get nodeValue() {
+ return this.data;
+ }
+ set nodeValue(data) {
+ this.data = data;
+ }
+}
+/**
+ * Text within the document.
+ */
+export class Text extends DataNode {
+ constructor() {
+ super(...arguments);
+ this.type = ElementType.Text;
+ }
+ get nodeType() {
+ return 3;
+ }
+}
+/**
+ * Comments within the document.
+ */
+export class Comment extends DataNode {
+ constructor() {
+ super(...arguments);
+ this.type = ElementType.Comment;
+ }
+ get nodeType() {
+ return 8;
+ }
+}
+/**
+ * Processing instructions, including doc types.
+ */
+export class ProcessingInstruction extends DataNode {
+ constructor(name, data) {
+ super(data);
+ this.name = name;
+ this.type = ElementType.Directive;
+ }
+ get nodeType() {
+ return 1;
+ }
+}
+/**
+ * A `Node` that can have children.
+ */
+export class NodeWithChildren extends Node {
+ /**
+ * @param children Children of the node. Only certain node types can have children.
+ */
+ constructor(children) {
+ super();
+ this.children = children;
+ }
+ // Aliases
+ /** First child of the node. */
+ get firstChild() {
+ var _a;
+ return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;
+ }
+ /** Last child of the node. */
+ get lastChild() {
+ return this.children.length > 0
+ ? this.children[this.children.length - 1]
+ : null;
+ }
+ /**
+ * Same as {@link children}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get childNodes() {
+ return this.children;
+ }
+ set childNodes(children) {
+ this.children = children;
+ }
+}
+export class CDATA extends NodeWithChildren {
+ constructor() {
+ super(...arguments);
+ this.type = ElementType.CDATA;
+ }
+ get nodeType() {
+ return 4;
+ }
+}
+/**
+ * The root node of the document.
+ */
+export class Document extends NodeWithChildren {
+ constructor() {
+ super(...arguments);
+ this.type = ElementType.Root;
+ }
+ get nodeType() {
+ return 9;
+ }
+}
+/**
+ * An element within the DOM.
+ */
+export class Element extends NodeWithChildren {
+ /**
+ * @param name Name of the tag, eg. `div`, `span`.
+ * @param attribs Object mapping attribute names to attribute values.
+ * @param children Children of the node.
+ */
+ constructor(name, attribs, children = [], type = name === "script"
+ ? ElementType.Script
+ : name === "style"
+ ? ElementType.Style
+ : ElementType.Tag) {
+ super(children);
+ this.name = name;
+ this.attribs = attribs;
+ this.type = type;
+ }
+ get nodeType() {
+ return 1;
+ }
+ // DOM Level 1 aliases
+ /**
+ * Same as {@link name}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get tagName() {
+ return this.name;
+ }
+ set tagName(name) {
+ this.name = name;
+ }
+ get attributes() {
+ return Object.keys(this.attribs).map((name) => {
+ var _a, _b;
+ return ({
+ name,
+ value: this.attribs[name],
+ namespace: (_a = this["x-attribsNamespace"]) === null || _a === void 0 ? void 0 : _a[name],
+ prefix: (_b = this["x-attribsPrefix"]) === null || _b === void 0 ? void 0 : _b[name],
+ });
+ });
+ }
+}
+/**
+ * @param node Node to check.
+ * @returns `true` if the node is a `Element`, `false` otherwise.
+ */
+export function isTag(node) {
+ return isTagRaw(node);
+}
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `CDATA`, `false` otherwise.
+ */
+export function isCDATA(node) {
+ return node.type === ElementType.CDATA;
+}
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `Text`, `false` otherwise.
+ */
+export function isText(node) {
+ return node.type === ElementType.Text;
+}
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `Comment`, `false` otherwise.
+ */
+export function isComment(node) {
+ return node.type === ElementType.Comment;
+}
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.
+ */
+export function isDirective(node) {
+ return node.type === ElementType.Directive;
+}
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.
+ */
+export function isDocument(node) {
+ return node.type === ElementType.Root;
+}
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has children, `false` otherwise.
+ */
+export function hasChildren(node) {
+ return Object.prototype.hasOwnProperty.call(node, "children");
+}
+/**
+ * Clone a node, and optionally its children.
+ *
+ * @param recursive Clone child nodes as well.
+ * @returns A clone of the node.
+ */
+export function cloneNode(node, recursive = false) {
+ let result;
+ if (isText(node)) {
+ result = new Text(node.data);
+ }
+ else if (isComment(node)) {
+ result = new Comment(node.data);
+ }
+ else if (isTag(node)) {
+ const children = recursive ? cloneChildren(node.children) : [];
+ const clone = new Element(node.name, { ...node.attribs }, children);
+ children.forEach((child) => (child.parent = clone));
+ if (node.namespace != null) {
+ clone.namespace = node.namespace;
+ }
+ if (node["x-attribsNamespace"]) {
+ clone["x-attribsNamespace"] = { ...node["x-attribsNamespace"] };
+ }
+ if (node["x-attribsPrefix"]) {
+ clone["x-attribsPrefix"] = { ...node["x-attribsPrefix"] };
+ }
+ result = clone;
+ }
+ else if (isCDATA(node)) {
+ const children = recursive ? cloneChildren(node.children) : [];
+ const clone = new CDATA(children);
+ children.forEach((child) => (child.parent = clone));
+ result = clone;
+ }
+ else if (isDocument(node)) {
+ const children = recursive ? cloneChildren(node.children) : [];
+ const clone = new Document(children);
+ children.forEach((child) => (child.parent = clone));
+ if (node["x-mode"]) {
+ clone["x-mode"] = node["x-mode"];
+ }
+ result = clone;
+ }
+ else if (isDirective(node)) {
+ const instruction = new ProcessingInstruction(node.name, node.data);
+ if (node["x-name"] != null) {
+ instruction["x-name"] = node["x-name"];
+ instruction["x-publicId"] = node["x-publicId"];
+ instruction["x-systemId"] = node["x-systemId"];
+ }
+ result = instruction;
+ }
+ else {
+ throw new Error(`Not implemented yet: ${node.type}`);
+ }
+ result.startIndex = node.startIndex;
+ result.endIndex = node.endIndex;
+ if (node.sourceCodeLocation != null) {
+ result.sourceCodeLocation = node.sourceCodeLocation;
+ }
+ return result;
+}
+function cloneChildren(childs) {
+ const children = childs.map((child) => cloneNode(child, true));
+ for (let i = 1; i < children.length; i++) {
+ children[i].prev = children[i - 1];
+ children[i - 1].next = children[i];
+ }
+ return children;
+}
diff --git a/includes/external/addressbook/node_modules/domhandler/lib/esm/package.json b/includes/external/addressbook/node_modules/domhandler/lib/esm/package.json
new file mode 100644
index 0000000..089153b
--- /dev/null
+++ b/includes/external/addressbook/node_modules/domhandler/lib/esm/package.json
@@ -0,0 +1 @@
+{"type":"module"}
diff --git a/includes/external/addressbook/node_modules/domhandler/lib/index.d.ts b/includes/external/addressbook/node_modules/domhandler/lib/index.d.ts
new file mode 100644
index 0000000..5d322c1
--- /dev/null
+++ b/includes/external/addressbook/node_modules/domhandler/lib/index.d.ts
@@ -0,0 +1,76 @@
+import { ChildNode, Element, DataNode, Document, ParentNode } from "./node.js";
+export * from "./node.js";
+export interface DomHandlerOptions {
+ /**
+ * Add a `startIndex` property to nodes.
+ * When the parser is used in a non-streaming fashion, `startIndex` is an integer
+ * indicating the position of the start of the node in the document.
+ *
+ * @default false
+ */
+ withStartIndices?: boolean;
+ /**
+ * Add an `endIndex` property to nodes.
+ * When the parser is used in a non-streaming fashion, `endIndex` is an integer
+ * indicating the position of the end of the node in the document.
+ *
+ * @default false
+ */
+ withEndIndices?: boolean;
+ /**
+ * Treat the markup as XML.
+ *
+ * @default false
+ */
+ xmlMode?: boolean;
+}
+interface ParserInterface {
+ startIndex: number | null;
+ endIndex: number | null;
+}
+declare type Callback = (error: Error | null, dom: ChildNode[]) => void;
+declare type ElementCallback = (element: Element) => void;
+export declare class DomHandler {
+ /** The elements of the DOM */
+ dom: ChildNode[];
+ /** The root element for the DOM */
+ root: Document;
+ /** Called once parsing has completed. */
+ private readonly callback;
+ /** Settings for the handler. */
+ private readonly options;
+ /** Callback whenever a tag is closed. */
+ private readonly elementCB;
+ /** Indicated whether parsing has been completed. */
+ private done;
+ /** Stack of open tags. */
+ protected tagStack: ParentNode[];
+ /** A data node that is still being written to. */
+ protected lastNode: DataNode | null;
+ /** Reference to the parser instance. Used for location information. */
+ private parser;
+ /**
+ * @param callback Called once parsing has completed.
+ * @param options Settings for the handler.
+ * @param elementCB Callback whenever a tag is closed.
+ */
+ constructor(callback?: Callback | null, options?: DomHandlerOptions | null, elementCB?: ElementCallback);
+ onparserinit(parser: ParserInterface): void;
+ onreset(): void;
+ onend(): void;
+ onerror(error: Error): void;
+ onclosetag(): void;
+ onopentag(name: string, attribs: {
+ [key: string]: string;
+ }): void;
+ ontext(data: string): void;
+ oncomment(data: string): void;
+ oncommentend(): void;
+ oncdatastart(): void;
+ oncdataend(): void;
+ onprocessinginstruction(name: string, data: string): void;
+ protected handleCallback(error: Error | null): void;
+ protected addNode(node: ChildNode): void;
+}
+export default DomHandler;
+//# sourceMappingURL=index.d.ts.map \ No newline at end of file
diff --git a/includes/external/addressbook/node_modules/domhandler/lib/index.d.ts.map b/includes/external/addressbook/node_modules/domhandler/lib/index.d.ts.map
new file mode 100644
index 0000000..90dbc4b
--- /dev/null
+++ b/includes/external/addressbook/node_modules/domhandler/lib/index.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EACH,SAAS,EACT,OAAO,EACP,QAAQ,EAIR,QAAQ,EAER,UAAU,EACb,MAAM,WAAW,CAAC;AAEnB,cAAc,WAAW,CAAC;AAE1B,MAAM,WAAW,iBAAiB;IAC9B;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AASD,UAAU,eAAe;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,aAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;AAChE,aAAK,eAAe,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAElD,qBAAa,UAAU;IACnB,8BAA8B;IACvB,GAAG,EAAE,SAAS,EAAE,CAAM;IAE7B,mCAAmC;IAC5B,IAAI,WAA0B;IAErC,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAE3C,gCAAgC;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAE5C,yCAAyC;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;IAEnD,oDAAoD;IACpD,OAAO,CAAC,IAAI,CAAS;IAErB,0BAA0B;IAC1B,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,CAAe;IAE/C,kDAAkD;IAClD,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAQ;IAE3C,uEAAuE;IACvE,OAAO,CAAC,MAAM,CAAgC;IAE9C;;;;OAIG;gBAEC,QAAQ,CAAC,EAAE,QAAQ,GAAG,IAAI,EAC1B,OAAO,CAAC,EAAE,iBAAiB,GAAG,IAAI,EAClC,SAAS,CAAC,EAAE,eAAe;IAiBxB,YAAY,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAK3C,OAAO,IAAI,IAAI;IAUf,KAAK,IAAI,IAAI;IAOb,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAI3B,UAAU,IAAI,IAAI;IAYlB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,IAAI;IAOjE,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAe1B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAW7B,YAAY,IAAI,IAAI;IAIpB,YAAY,IAAI,IAAI;IAUpB,UAAU,IAAI,IAAI;IAIlB,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAKhE,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI;IAQnD,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI;CAwB3C;AAED,eAAe,UAAU,CAAC"} \ No newline at end of file
diff --git a/includes/external/addressbook/node_modules/domhandler/lib/index.js b/includes/external/addressbook/node_modules/domhandler/lib/index.js
new file mode 100644
index 0000000..9c4ea0e
--- /dev/null
+++ b/includes/external/addressbook/node_modules/domhandler/lib/index.js
@@ -0,0 +1,165 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.DomHandler = void 0;
+var domelementtype_1 = require("domelementtype");
+var node_js_1 = require("./node.js");
+__exportStar(require("./node.js"), exports);
+// Default options
+var defaultOpts = {
+ withStartIndices: false,
+ withEndIndices: false,
+ xmlMode: false,
+};
+var DomHandler = /** @class */ (function () {
+ /**
+ * @param callback Called once parsing has completed.
+ * @param options Settings for the handler.
+ * @param elementCB Callback whenever a tag is closed.
+ */
+ function DomHandler(callback, options, elementCB) {
+ /** The elements of the DOM */
+ this.dom = [];
+ /** The root element for the DOM */
+ this.root = new node_js_1.Document(this.dom);
+ /** Indicated whether parsing has been completed. */
+ this.done = false;
+ /** Stack of open tags. */
+ this.tagStack = [this.root];
+ /** A data node that is still being written to. */
+ this.lastNode = null;
+ /** Reference to the parser instance. Used for location information. */
+ this.parser = null;
+ // Make it possible to skip arguments, for backwards-compatibility
+ if (typeof options === "function") {
+ elementCB = options;
+ options = defaultOpts;
+ }
+ if (typeof callback === "object") {
+ options = callback;
+ callback = undefined;
+ }
+ this.callback = callback !== null && callback !== void 0 ? callback : null;
+ this.options = options !== null && options !== void 0 ? options : defaultOpts;
+ this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;
+ }
+ DomHandler.prototype.onparserinit = function (parser) {
+ this.parser = parser;
+ };
+ // Resets the handler back to starting state
+ DomHandler.prototype.onreset = function () {
+ this.dom = [];
+ this.root = new node_js_1.Document(this.dom);
+ this.done = false;
+ this.tagStack = [this.root];
+ this.lastNode = null;
+ this.parser = null;
+ };
+ // Signals the handler that parsing is done
+ DomHandler.prototype.onend = function () {
+ if (this.done)
+ return;
+ this.done = true;
+ this.parser = null;
+ this.handleCallback(null);
+ };
+ DomHandler.prototype.onerror = function (error) {
+ this.handleCallback(error);
+ };
+ DomHandler.prototype.onclosetag = function () {
+ this.lastNode = null;
+ var elem = this.tagStack.pop();
+ if (this.options.withEndIndices) {
+ elem.endIndex = this.parser.endIndex;
+ }
+ if (this.elementCB)
+ this.elementCB(elem);
+ };
+ DomHandler.prototype.onopentag = function (name, attribs) {
+ var type = this.options.xmlMode ? domelementtype_1.ElementType.Tag : undefined;
+ var element = new node_js_1.Element(name, attribs, undefined, type);
+ this.addNode(element);
+ this.tagStack.push(element);
+ };
+ DomHandler.prototype.ontext = function (data) {
+ var lastNode = this.lastNode;
+ if (lastNode && lastNode.type === domelementtype_1.ElementType.Text) {
+ lastNode.data += data;
+ if (this.options.withEndIndices) {
+ lastNode.endIndex = this.parser.endIndex;
+ }
+ }
+ else {
+ var node = new node_js_1.Text(data);
+ this.addNode(node);
+ this.lastNode = node;
+ }
+ };
+ DomHandler.prototype.oncomment = function (data) {
+ if (this.lastNode && this.lastNode.type === domelementtype_1.ElementType.Comment) {
+ this.lastNode.data += data;
+ return;
+ }
+ var node = new node_js_1.Comment(data);
+ this.addNode(node);
+ this.lastNode = node;
+ };
+ DomHandler.prototype.oncommentend = function () {
+ this.lastNode = null;
+ };
+ DomHandler.prototype.oncdatastart = function () {
+ var text = new node_js_1.Text("");
+ var node = new node_js_1.CDATA([text]);
+ this.addNode(node);
+ text.parent = node;
+ this.lastNode = text;
+ };
+ DomHandler.prototype.oncdataend = function () {
+ this.lastNode = null;
+ };
+ DomHandler.prototype.onprocessinginstruction = function (name, data) {
+ var node = new node_js_1.ProcessingInstruction(name, data);
+ this.addNode(node);
+ };
+ DomHandler.prototype.handleCallback = function (error) {
+ if (typeof this.callback === "function") {
+ this.callback(error, this.dom);
+ }
+ else if (error) {
+ throw error;
+ }
+ };
+ DomHandler.prototype.addNode = function (node) {
+ var parent = this.tagStack[this.tagStack.length - 1];
+ var previousSibling = parent.children[parent.children.length - 1];
+ if (this.options.withStartIndices) {
+ node.startIndex = this.parser.startIndex;
+ }
+ if (this.options.withEndIndices) {
+ node.endIndex = this.parser.endIndex;
+ }
+ parent.children.push(node);
+ if (previousSibling) {
+ node.prev = previousSibling;
+ previousSibling.next = node;
+ }
+ node.parent = parent;
+ this.lastNode = null;
+ };
+ return DomHandler;
+}());
+exports.DomHandler = DomHandler;
+exports.default = DomHandler;
diff --git a/includes/external/addressbook/node_modules/domhandler/lib/node.d.ts b/includes/external/addressbook/node_modules/domhandler/lib/node.d.ts
new file mode 100644
index 0000000..b71c88a
--- /dev/null
+++ b/includes/external/addressbook/node_modules/domhandler/lib/node.d.ts
@@ -0,0 +1,245 @@
+import { ElementType } from "domelementtype";
+interface SourceCodeLocation {
+ /** One-based line index of the first character. */
+ startLine: number;
+ /** One-based column index of the first character. */
+ startCol: number;
+ /** Zero-based first character index. */
+ startOffset: number;
+ /** One-based line index of the last character. */
+ endLine: number;
+ /** One-based column index of the last character. Points directly *after* the last character. */
+ endCol: number;
+ /** Zero-based last character index. Points directly *after* the last character. */
+ endOffset: number;
+}
+interface TagSourceCodeLocation extends SourceCodeLocation {
+ startTag?: SourceCodeLocation;
+ endTag?: SourceCodeLocation;
+}
+export declare type ParentNode = Document | Element | CDATA;
+export declare type ChildNode = Text | Comment | ProcessingInstruction | Element | CDATA | Document;
+export declare type AnyNode = ParentNode | ChildNode;
+/**
+ * This object will be used as the prototype for Nodes when creating a
+ * DOM-Level-1-compliant structure.
+ */
+export declare abstract class Node {
+ /** The type of the node. */
+ abstract readonly type: ElementType;
+ /** Parent of the node */
+ parent: ParentNode | null;
+ /** Previous sibling */
+ prev: ChildNode | null;
+ /** Next sibling */
+ next: ChildNode | null;
+ /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */
+ startIndex: number | null;
+ /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */
+ endIndex: number | null;
+ /**
+ * `parse5` source code location info.
+ *
+ * Available if parsing with parse5 and location info is enabled.
+ */
+ sourceCodeLocation?: SourceCodeLocation | null;
+ /**
+ * [DOM spec](https://dom.spec.whatwg.org/#dom-node-nodetype)-compatible
+ * node {@link type}.
+ */
+ abstract readonly nodeType: number;
+ /**
+ * Same as {@link parent}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get parentNode(): ParentNode | null;
+ set parentNode(parent: ParentNode | null);
+ /**
+ * Same as {@link prev}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get previousSibling(): ChildNode | null;
+ set previousSibling(prev: ChildNode | null);
+ /**
+ * Same as {@link next}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get nextSibling(): ChildNode | null;
+ set nextSibling(next: ChildNode | null);
+ /**
+ * Clone this node, and optionally its children.
+ *
+ * @param recursive Clone child nodes as well.
+ * @returns A clone of the node.
+ */
+ cloneNode<T extends Node>(this: T, recursive?: boolean): T;
+}
+/**
+ * A node that contains some data.
+ */
+export declare abstract class DataNode extends Node {
+ data: string;
+ /**
+ * @param data The content of the data node
+ */
+ constructor(data: string);
+ /**
+ * Same as {@link data}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get nodeValue(): string;
+ set nodeValue(data: string);
+}
+/**
+ * Text within the document.
+ */
+export declare class Text extends DataNode {
+ type: ElementType.Text;
+ get nodeType(): 3;
+}
+/**
+ * Comments within the document.
+ */
+export declare class Comment extends DataNode {
+ type: ElementType.Comment;
+ get nodeType(): 8;
+}
+/**
+ * Processing instructions, including doc types.
+ */
+export declare class ProcessingInstruction extends DataNode {
+ name: string;
+ type: ElementType.Directive;
+ constructor(name: string, data: string);
+ get nodeType(): 1;
+ /** If this is a doctype, the document type name (parse5 only). */
+ "x-name"?: string;
+ /** If this is a doctype, the document type public identifier (parse5 only). */
+ "x-publicId"?: string;
+ /** If this is a doctype, the document type system identifier (parse5 only). */
+ "x-systemId"?: string;
+}
+/**
+ * A `Node` that can have children.
+ */
+export declare abstract class NodeWithChildren extends Node {
+ children: ChildNode[];
+ /**
+ * @param children Children of the node. Only certain node types can have children.
+ */
+ constructor(children: ChildNode[]);
+ /** First child of the node. */
+ get firstChild(): ChildNode | null;
+ /** Last child of the node. */
+ get lastChild(): ChildNode | null;
+ /**
+ * Same as {@link children}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get childNodes(): ChildNode[];
+ set childNodes(children: ChildNode[]);
+}
+export declare class CDATA extends NodeWithChildren {
+ type: ElementType.CDATA;
+ get nodeType(): 4;
+}
+/**
+ * The root node of the document.
+ */
+export declare class Document extends NodeWithChildren {
+ type: ElementType.Root;
+ get nodeType(): 9;
+ /** [Document mode](https://dom.spec.whatwg.org/#concept-document-limited-quirks) (parse5 only). */
+ "x-mode"?: "no-quirks" | "quirks" | "limited-quirks";
+}
+/**
+ * The description of an individual attribute.
+ */
+interface Attribute {
+ name: string;
+ value: string;
+ namespace?: string;
+ prefix?: string;
+}
+/**
+ * An element within the DOM.
+ */
+export declare class Element extends NodeWithChildren {
+ name: string;
+ attribs: {
+ [name: string]: string;
+ };
+ type: ElementType.Tag | ElementType.Script | ElementType.Style;
+ /**
+ * @param name Name of the tag, eg. `div`, `span`.
+ * @param attribs Object mapping attribute names to attribute values.
+ * @param children Children of the node.
+ */
+ constructor(name: string, attribs: {
+ [name: string]: string;
+ }, children?: ChildNode[], type?: ElementType.Tag | ElementType.Script | ElementType.Style);
+ get nodeType(): 1;
+ /**
+ * `parse5` source code location info, with start & end tags.
+ *
+ * Available if parsing with parse5 and location info is enabled.
+ */
+ sourceCodeLocation?: TagSourceCodeLocation | null;
+ /**
+ * Same as {@link name}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get tagName(): string;
+ set tagName(name: string);
+ get attributes(): Attribute[];
+ /** Element namespace (parse5 only). */
+ namespace?: string;
+ /** Element attribute namespaces (parse5 only). */
+ "x-attribsNamespace"?: Record<string, string>;
+ /** Element attribute namespace-related prefixes (parse5 only). */
+ "x-attribsPrefix"?: Record<string, string>;
+}
+/**
+ * @param node Node to check.
+ * @returns `true` if the node is a `Element`, `false` otherwise.
+ */
+export declare function isTag(node: Node): node is Element;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `CDATA`, `false` otherwise.
+ */
+export declare function isCDATA(node: Node): node is CDATA;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `Text`, `false` otherwise.
+ */
+export declare function isText(node: Node): node is Text;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `Comment`, `false` otherwise.
+ */
+export declare function isComment(node: Node): node is Comment;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.
+ */
+export declare function isDirective(node: Node): node is ProcessingInstruction;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.
+ */
+export declare function isDocument(node: Node): node is Document;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has children, `false` otherwise.
+ */
+export declare function hasChildren(node: Node): node is ParentNode;
+/**
+ * Clone a node, and optionally its children.
+ *
+ * @param recursive Clone child nodes as well.
+ * @returns A clone of the node.
+ */
+export declare function cloneNode<T extends Node>(node: T, recursive?: boolean): T;
+export {};
+//# sourceMappingURL=node.d.ts.map \ No newline at end of file
diff --git a/includes/external/addressbook/node_modules/domhandler/lib/node.d.ts.map b/includes/external/addressbook/node_modules/domhandler/lib/node.d.ts.map
new file mode 100644
index 0000000..40fa82e
--- /dev/null
+++ b/includes/external/addressbook/node_modules/domhandler/lib/node.d.ts.map
@@ -0,0 +1 @@
+{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"} \ No newline at end of file
diff --git a/includes/external/addressbook/node_modules/domhandler/lib/node.js b/includes/external/addressbook/node_modules/domhandler/lib/node.js
new file mode 100644
index 0000000..df08e5b
--- /dev/null
+++ b/includes/external/addressbook/node_modules/domhandler/lib/node.js
@@ -0,0 +1,474 @@
+"use strict";
+var __extends = (this && this.__extends) || (function () {
+ var extendStatics = function (d, b) {
+ extendStatics = Object.setPrototypeOf ||
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
+ return extendStatics(d, b);
+ };
+ return function (d, b) {
+ if (typeof b !== "function" && b !== null)
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
+ extendStatics(d, b);
+ function __() { this.constructor = d; }
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
+ };
+})();
+var __assign = (this && this.__assign) || function () {
+ __assign = Object.assign || function(t) {
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
+ s = arguments[i];
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
+ t[p] = s[p];
+ }
+ return t;
+ };
+ return __assign.apply(this, arguments);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.cloneNode = exports.hasChildren = exports.isDocument = exports.isDirective = exports.isComment = exports.isText = exports.isCDATA = exports.isTag = exports.Element = exports.Document = exports.CDATA = exports.NodeWithChildren = exports.ProcessingInstruction = exports.Comment = exports.Text = exports.DataNode = exports.Node = void 0;
+var domelementtype_1 = require("domelementtype");
+/**
+ * This object will be used as the prototype for Nodes when creating a
+ * DOM-Level-1-compliant structure.
+ */
+var Node = /** @class */ (function () {
+ function Node() {
+ /** Parent of the node */
+ this.parent = null;
+ /** Previous sibling */
+ this.prev = null;
+ /** Next sibling */
+ this.next = null;
+ /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */
+ this.startIndex = null;
+ /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */
+ this.endIndex = null;
+ }
+ Object.defineProperty(Node.prototype, "parentNode", {
+ // Read-write aliases for properties
+ /**
+ * Same as {@link parent}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get: function () {
+ return this.parent;
+ },
+ set: function (parent) {
+ this.parent = parent;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(Node.prototype, "previousSibling", {
+ /**
+ * Same as {@link prev}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get: function () {
+ return this.prev;
+ },
+ set: function (prev) {
+ this.prev = prev;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(Node.prototype, "nextSibling", {
+ /**
+ * Same as {@link next}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get: function () {
+ return this.next;
+ },
+ set: function (next) {
+ this.next = next;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ /**
+ * Clone this node, and optionally its children.
+ *
+ * @param recursive Clone child nodes as well.
+ * @returns A clone of the node.
+ */
+ Node.prototype.cloneNode = function (recursive) {
+ if (recursive === void 0) { recursive = false; }
+ return cloneNode(this, recursive);
+ };
+ return Node;
+}());
+exports.Node = Node;
+/**
+ * A node that contains some data.
+ */
+var DataNode = /** @class */ (function (_super) {
+ __extends(DataNode, _super);
+ /**
+ * @param data The content of the data node
+ */
+ function DataNode(data) {
+ var _this = _super.call(this) || this;
+ _this.data = data;
+ return _this;
+ }
+ Object.defineProperty(DataNode.prototype, "nodeValue", {
+ /**
+ * Same as {@link data}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get: function () {
+ return this.data;
+ },
+ set: function (data) {
+ this.data = data;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ return DataNode;
+}(Node));
+exports.DataNode = DataNode;
+/**
+ * Text within the document.
+ */
+var Text = /** @class */ (function (_super) {
+ __extends(Text, _super);
+ function Text() {
+ var _this = _super !== null && _super.apply(this, arguments) || this;
+ _this.type = domelementtype_1.ElementType.Text;
+ return _this;
+ }
+ Object.defineProperty(Text.prototype, "nodeType", {
+ get: function () {
+ return 3;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ return Text;
+}(DataNode));
+exports.Text = Text;
+/**
+ * Comments within the document.
+ */
+var Comment = /** @class */ (function (_super) {
+ __extends(Comment, _super);
+ function Comment() {
+ var _this = _super !== null && _super.apply(this, arguments) || this;
+ _this.type = domelementtype_1.ElementType.Comment;
+ return _this;
+ }
+ Object.defineProperty(Comment.prototype, "nodeType", {
+ get: function () {
+ return 8;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ return Comment;
+}(DataNode));
+exports.Comment = Comment;
+/**
+ * Processing instructions, including doc types.
+ */
+var ProcessingInstruction = /** @class */ (function (_super) {
+ __extends(ProcessingInstruction, _super);
+ function ProcessingInstruction(name, data) {
+ var _this = _super.call(this, data) || this;
+ _this.name = name;
+ _this.type = domelementtype_1.ElementType.Directive;
+ return _this;
+ }
+ Object.defineProperty(ProcessingInstruction.prototype, "nodeType", {
+ get: function () {
+ return 1;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ return ProcessingInstruction;
+}(DataNode));
+exports.ProcessingInstruction = ProcessingInstruction;
+/**
+ * A `Node` that can have children.
+ */
+var NodeWithChildren = /** @class */ (function (_super) {
+ __extends(NodeWithChildren, _super);
+ /**
+ * @param children Children of the node. Only certain node types can have children.
+ */
+ function NodeWithChildren(children) {
+ var _this = _super.call(this) || this;
+ _this.children = children;
+ return _this;
+ }
+ Object.defineProperty(NodeWithChildren.prototype, "firstChild", {
+ // Aliases
+ /** First child of the node. */
+ get: function () {
+ var _a;
+ return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(NodeWithChildren.prototype, "lastChild", {
+ /** Last child of the node. */
+ get: function () {
+ return this.children.length > 0
+ ? this.children[this.children.length - 1]
+ : null;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(NodeWithChildren.prototype, "childNodes", {
+ /**
+ * Same as {@link children}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get: function () {
+ return this.children;
+ },
+ set: function (children) {
+ this.children = children;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ return NodeWithChildren;
+}(Node));
+exports.NodeWithChildren = NodeWithChildren;
+var CDATA = /** @class */ (function (_super) {
+ __extends(CDATA, _super);
+ function CDATA() {
+ var _this = _super !== null && _super.apply(this, arguments) || this;
+ _this.type = domelementtype_1.ElementType.CDATA;
+ return _this;
+ }
+ Object.defineProperty(CDATA.prototype, "nodeType", {
+ get: function () {
+ return 4;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ return CDATA;
+}(NodeWithChildren));
+exports.CDATA = CDATA;
+/**
+ * The root node of the document.
+ */
+var Document = /** @class */ (function (_super) {
+ __extends(Document, _super);
+ function Document() {
+ var _this = _super !== null && _super.apply(this, arguments) || this;
+ _this.type = domelementtype_1.ElementType.Root;
+ return _this;
+ }
+ Object.defineProperty(Document.prototype, "nodeType", {
+ get: function () {
+ return 9;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ return Document;
+}(NodeWithChildren));
+exports.Document = Document;
+/**
+ * An element within the DOM.
+ */
+var Element = /** @class */ (function (_super) {
+ __extends(Element, _super);
+ /**
+ * @param name Name of the tag, eg. `div`, `span`.
+ * @param attribs Object mapping attribute names to attribute values.
+ * @param children Children of the node.
+ */
+ function Element(name, attribs, children, type) {
+ if (children === void 0) { children = []; }
+ if (type === void 0) { type = name === "script"
+ ? domelementtype_1.ElementType.Script
+ : name === "style"
+ ? domelementtype_1.ElementType.Style
+ : domelementtype_1.ElementType.Tag; }
+ var _this = _super.call(this, children) || this;
+ _this.name = name;
+ _this.attribs = attribs;
+ _this.type = type;
+ return _this;
+ }
+ Object.defineProperty(Element.prototype, "nodeType", {
+ get: function () {
+ return 1;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(Element.prototype, "tagName", {
+ // DOM Level 1 aliases
+ /**
+ * Same as {@link name}.
+ * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
+ */
+ get: function () {
+ return this.name;
+ },
+ set: function (name) {
+ this.name = name;
+ },
+ enumerable: false,
+ configurable: true
+ });
+ Object.defineProperty(Element.prototype, "attributes", {
+ get: function () {
+ var _this = this;
+ return Object.keys(this.attribs).map(function (name) {
+ var _a, _b;
+ return ({
+ name: name,
+ value: _this.attribs[name],
+ namespace: (_a = _this["x-attribsNamespace"]) === null || _a === void 0 ? void 0 : _a[name],
+ prefix: (_b = _this["x-attribsPrefix"]) === null || _b === void 0 ? void 0 : _b[name],
+ });
+ });
+ },
+ enumerable: false,
+ configurable: true
+ });
+ return Element;
+}(NodeWithChildren));
+exports.Element = Element;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node is a `Element`, `false` otherwise.
+ */
+function isTag(node) {
+ return (0, domelementtype_1.isTag)(node);
+}
+exports.isTag = isTag;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `CDATA`, `false` otherwise.
+ */
+function isCDATA(node) {
+ return node.type === domelementtype_1.ElementType.CDATA;
+}
+exports.isCDATA = isCDATA;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `Text`, `false` otherwise.
+ */
+function isText(node) {
+ return node.type === domelementtype_1.ElementType.Text;
+}
+exports.isText = isText;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `Comment`, `false` otherwise.
+ */
+function isComment(node) {
+ return node.type === domelementtype_1.ElementType.Comment;
+}
+exports.isComment = isComment;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.
+ */
+function isDirective(node) {
+ return node.type === domelementtype_1.ElementType.Directive;
+}
+exports.isDirective = isDirective;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.
+ */
+function isDocument(node) {
+ return node.type === domelementtype_1.ElementType.Root;
+}
+exports.isDocument = isDocument;
+/**
+ * @param node Node to check.
+ * @returns `true` if the node has children, `false` otherwise.
+ */
+function hasChildren(node) {
+ return Object.prototype.hasOwnProperty.call(node, "children");
+}
+exports.hasChildren = hasChildren;
+/**
+ * Clone a node, and optionally its children.
+ *
+ * @param recursive Clone child nodes as well.
+ * @returns A clone of the node.
+ */
+function cloneNode(node, recursive) {
+ if (recursive === void 0) { recursive = false; }
+ var result;
+ if (isText(node)) {
+ result = new Text(node.data);
+ }
+ else if (isComment(node)) {
+ result = new Comment(node.data);
+ }
+ else if (isTag(node)) {
+ var children = recursive ? cloneChildren(node.children) : [];
+ var clone_1 = new Element(node.name, __assign({}, node.attribs), children);
+ children.forEach(function (child) { return (child.parent = clone_1); });
+ if (node.namespace != null) {
+ clone_1.namespace = node.namespace;
+ }
+ if (node["x-attribsNamespace"]) {
+ clone_1["x-attribsNamespace"] = __assign({}, node["x-attribsNamespace"]);
+ }
+ if (node["x-attribsPrefix"]) {
+ clone_1["x-attribsPrefix"] = __assign({}, node["x-attribsPrefix"]);
+ }
+ result = clone_1;
+ }
+ else if (isCDATA(node)) {
+ var children = recursive ? cloneChildren(node.children) : [];
+ var clone_2 = new CDATA(children);
+ children.forEach(function (child) { return (child.parent = clone_2); });
+ result = clone_2;
+ }
+ else if (isDocument(node)) {
+ var children = recursive ? cloneChildren(node.children) : [];
+ var clone_3 = new Document(children);
+ children.forEach(function (child) { return (child.parent = clone_3); });
+ if (node["x-mode"]) {
+ clone_3["x-mode"] = node["x-mode"];
+ }
+ result = clone_3;
+ }
+ else if (isDirective(node)) {
+ var instruction = new ProcessingInstruction(node.name, node.data);
+ if (node["x-name"] != null) {
+ instruction["x-name"] = node["x-name"];
+ instruction["x-publicId"] = node["x-publicId"];
+ instruction["x-systemId"] = node["x-systemId"];
+ }
+ result = instruction;
+ }
+ else {
+ throw new Error("Not implemented yet: ".concat(node.type));
+ }
+ result.startIndex = node.startIndex;
+ result.endIndex = node.endIndex;
+ if (node.sourceCodeLocation != null) {
+ result.sourceCodeLocation = node.sourceCodeLocation;
+ }
+ return result;
+}
+exports.cloneNode = cloneNode;
+function cloneChildren(childs) {
+ var children = childs.map(function (child) { return cloneNode(child, true); });
+ for (var i = 1; i < children.length; i++) {
+ children[i].prev = children[i - 1];
+ children[i - 1].next = children[i];
+ }
+ return children;
+}