valyrian.js 8.0.13 → 8.0.14

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.
Files changed (42) hide show
  1. package/dist/lib/native-store/index.d.ts +1 -1
  2. package/dist/lib/native-store/index.d.ts.map +1 -1
  3. package/dist/lib/node/index.d.ts +2 -2
  4. package/dist/lib/node/index.d.ts.map +1 -1
  5. package/dist/lib/node/utils/server-storage.d.ts +12 -0
  6. package/dist/lib/node/utils/server-storage.d.ts.map +1 -0
  7. package/dist/lib/node/utils/tree-adapter.d.ts.map +1 -1
  8. package/dist/lib/request/index.d.ts.map +1 -1
  9. package/dist/lib/translate/index.d.ts +6 -2
  10. package/dist/lib/translate/index.d.ts.map +1 -1
  11. package/dist/native-store/index.js +26 -13
  12. package/dist/native-store/index.js.map +3 -3
  13. package/dist/native-store/index.min.js +1 -1
  14. package/dist/native-store/index.min.js.map +1 -1
  15. package/dist/native-store/index.mjs +26 -13
  16. package/dist/native-store/index.mjs.map +3 -3
  17. package/dist/node/index.js +57 -94
  18. package/dist/node/index.js.map +4 -4
  19. package/dist/node/index.mjs +57 -94
  20. package/dist/node/index.mjs.map +4 -4
  21. package/dist/request/index.js +20 -7
  22. package/dist/request/index.js.map +2 -2
  23. package/dist/request/index.min.js +1 -1
  24. package/dist/request/index.min.js.map +1 -1
  25. package/dist/request/index.mjs +20 -7
  26. package/dist/request/index.mjs.map +2 -2
  27. package/dist/translate/index.js +36 -26
  28. package/dist/translate/index.js.map +3 -3
  29. package/dist/translate/index.min.js +1 -1
  30. package/dist/translate/index.min.js.map +1 -1
  31. package/dist/translate/index.mjs +36 -26
  32. package/dist/translate/index.mjs.map +3 -3
  33. package/lib/native-store/index.ts +22 -8
  34. package/lib/node/index.ts +4 -4
  35. package/lib/node/utils/server-storage.ts +71 -0
  36. package/lib/node/utils/tree-adapter.ts +25 -1
  37. package/lib/request/index.ts +28 -8
  38. package/lib/translate/index.ts +37 -26
  39. package/package.json +14 -14
  40. package/dist/lib/node/utils/session-storage.d.ts +0 -22
  41. package/dist/lib/node/utils/session-storage.d.ts.map +0 -1
  42. package/lib/node/utils/session-storage.ts +0 -120
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../lib/node/utils/tree-adapter.ts", "../../lib/node/index.ts", "../../lib/node/utils/icons.ts", "../../lib/node/utils/inline.ts", "../../lib/node/utils/sw.ts", "../../lib/node/utils/session-storage.ts"],
4
- "sourcesContent": ["/* eslint-disable no-use-before-define */\n/* eslint-disable complexity */\ninterface ChildNodes extends Array<Node | Element | Text | DocumentFragment> {}\n\nexport class Node implements Node {\n // eslint-disable-next-line no-use-before-define\n childNodes: ChildNodes = [];\n baseURI: string = \"\";\n\n tag_name!: string;\n get nodeName(): string {\n return this.tag_name.toLowerCase();\n }\n set nodeName(name: string) {\n this.tag_name = name;\n }\n get tagName(): string {\n return this.tag_name;\n }\n set tagName(name: string) {\n this.tag_name = name;\n }\n\n node_type!: number;\n get nodeType(): number {\n return this.node_type;\n }\n set nodeType(type: number) {\n this.node_type = type;\n }\n\n node_value = \"\";\n attributes: Attr[] = [];\n set textContent(text) {\n this.node_value = String(text);\n }\n get textContent() {\n return this.node_value;\n }\n set nodeValue(text) {\n this.node_value = String(text);\n }\n get nodeValue() {\n return this.node_value;\n }\n\n // eslint-disable-next-line no-use-before-define\n parent_node: Node | null = null;\n get parentNode() {\n return this.parent_node;\n }\n set parentNode(node) {\n this.parent_node = node;\n }\n\n get parentElement(): Element | null {\n return this.parentNode instanceof Element ? this.parentNode : null;\n }\n\n set parentElement(node) {\n this.parentNode = node;\n }\n\n #dataset: Record<string | number, any> = {};\n\n get dataset() {\n return this.#dataset;\n }\n\n set dataset(value) {\n this.#dataset = value;\n }\n\n constructor() {}\n\n appendChild<T extends Node>(node: T): T {\n if (node) {\n node.parentNode && node.parentNode.removeChild(node as Node);\n this.childNodes.push(node);\n node.parentNode = this;\n node.parentElement = this instanceof Element ? this : null;\n }\n return node;\n }\n\n insertBefore<T extends Node>(node: T, child: Node | null): T {\n if (node) {\n node.parentNode && node.parentNode.removeChild(node as Node);\n node.parentNode = this;\n node.parentElement = this instanceof Element ? this : null;\n if (child) {\n const idx = this.childNodes.indexOf(child);\n this.childNodes.splice(idx, 0, node);\n } else {\n this.childNodes.push(node);\n }\n }\n return node;\n }\n\n replaceChild<T extends Node>(node: Node, child: T): T {\n if (node && child && child.parentNode === this) {\n this.insertBefore(node, child);\n child.parentNode && child.parentNode.removeChild(child);\n }\n return child;\n }\n removeChild<T extends Node>(child: T): T {\n if (child && child.parentNode === this) {\n const idx = (this.childNodes as unknown as Node[]).indexOf(child);\n (this.childNodes as unknown as Node[]).splice(idx, 1);\n child.parentNode = null;\n child.parentElement = null;\n }\n return child;\n }\n\n remove(): Node {\n return this.parentNode ? this.parentNode.removeChild(this) : this;\n }\n\n cloneNode(deep?: boolean | undefined): Node {\n if (this.nodeType === 3) {\n return new Text(this.nodeValue);\n }\n\n if (this.nodeType === 1) {\n const node = new Element();\n node.nodeType = this.nodeType;\n this.nodeName = this.nodeName;\n if (this.attributes) {\n for (let i = 0, l = this.attributes.length; i < l; i++) {\n node.setAttribute(this.attributes[i].nodeName, this.attributes[i].nodeValue);\n }\n }\n\n for (const key in this.dataset) {\n node.dataset[key] = this.dataset[key];\n }\n\n if (deep) {\n for (let i = 0, l = this.childNodes.length; i < l; i++) {\n node.appendChild(this.childNodes[i].cloneNode(deep));\n }\n }\n return node;\n }\n\n const node = new Node();\n node.nodeType = this.nodeType;\n node.nodeName = this.nodeName;\n return node;\n }\n\n setAttribute(name: string, value: any) {\n const attr = {\n nodeName: name,\n nodeValue: value\n };\n let idx = -1;\n for (let i = 0, l = this.attributes.length; i < l; i++) {\n if (this.attributes[i].nodeName === name) {\n idx = i;\n break;\n }\n }\n idx === -1 ? this.attributes.push(attr as Attr) : this.attributes.splice(idx, 1, attr as Attr);\n }\n\n getAttribute(name: string) {\n for (let i = 0, l = this.attributes.length; i < l; i++) {\n if (this.attributes[i].nodeName === name) {\n return this.attributes[i].nodeValue;\n }\n }\n }\n\n removeAttribute(name: string) {\n let idx = -1;\n for (let i = 0, l = this.attributes.length; i < l; i++) {\n if (this.attributes[i].nodeName === name) {\n idx = i;\n break;\n }\n }\n if (idx > -1) {\n this.attributes.splice(idx, 1);\n }\n }\n\n getElementById(id: string): Node | null {\n let elementFound;\n for (let i = 0, l = this.childNodes.length; i < l; i++) {\n if (this.childNodes[i].nodeType === 1) {\n if (this.childNodes[i].getAttribute(\"id\") === id) {\n elementFound = this.childNodes[i];\n break;\n }\n elementFound = this.childNodes[i].getElementById(id);\n if (elementFound) {\n break;\n }\n }\n }\n return elementFound || null;\n }\n\n // Not implemented\n // firstChild!: ChildNode | null;\n // isConnected!: boolean;\n // lastChild!: ChildNode | null;\n // nextSibling!: ChildNode | null;\n // ownerDocument!: Document | null;\n // parentElement!: HTMLElement | null;\n // previousSibling!: ChildNode | null;\n // compareDocumentPosition(other: Node): number {\n // throw new Error(\"Method not implemented.\");\n // }\n // contains(other: Node | null): boolean {\n // throw new Error(\"Method not implemented.\");\n // }\n // getRootNode(options?: GetRootNodeOptions | undefined): Node {\n // throw new Error(\"Method not implemented.\");\n // }\n // hasChildNodes(): boolean {\n // throw new Error(\"Method not implemented.\");\n // }\n // isDefaultNamespace(namespace: string | null): boolean {\n // throw new Error(\"Method not implemented.\");\n // }\n // isEqualNode(otherNode: Node | null): boolean {\n // throw new Error(\"Method not implemented.\");\n // }\n // isSameNode(otherNode: Node | null): boolean {\n // throw new Error(\"Method not implemented.\");\n // }\n // lookupNamespaceURI(prefix: string | null): string | null {\n // throw new Error(\"Method not implemented.\");\n // }\n // lookupPrefix(namespace: string | null): string | null {\n // throw new Error(\"Method not implemented.\");\n // }\n // normalize(): void {\n // throw new Error(\"Method not implemented.\");\n // }\n // ATTRIBUTE_NODE!: number;\n // CDATA_SECTION_NODE!: number;\n // COMMENT_NODE!: number;\n // DOCUMENT_FRAGMENT_NODE!: number;\n // DOCUMENT_NODE!: number;\n // DOCUMENT_POSITION_CONTAINED_BY!: number;\n // DOCUMENT_POSITION_CONTAINS!: number;\n // DOCUMENT_POSITION_DISCONNECTED!: number;\n // DOCUMENT_POSITION_FOLLOWING!: number;\n // DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC!: number;\n // DOCUMENT_POSITION_PRECEDING!: number;\n // DOCUMENT_TYPE_NODE!: number;\n // ELEMENT_NODE!: number;\n // ENTITY_NODE!: number;\n // ENTITY_REFERENCE_NODE!: number;\n // NOTATION_NODE!: number;\n // PROCESSING_INSTRUCTION_NODE!: number;\n // TEXT_NODE!: number;\n addEventListener(\n // eslint-disable-next-line no-unused-vars\n type: string,\n // eslint-disable-next-line no-unused-vars\n callback: EventListenerOrEventListenerObject | null,\n // eslint-disable-next-line no-unused-vars\n options?: boolean | AddEventListenerOptions | undefined\n ): void {\n // throw new Error(\"Method not implemented.\");\n }\n // dispatchEvent(event: Event): boolean {\n // throw new Error(\"Method not implemented.\");\n // }\n removeEventListener(\n // eslint-disable-next-line no-unused-vars\n type: string,\n // eslint-disable-next-line no-unused-vars\n callback: EventListenerOrEventListenerObject | null,\n // eslint-disable-next-line no-unused-vars\n options?: boolean | EventListenerOptions | undefined\n ): void {\n // throw new Error(\"Method not implemented.\");\n }\n}\n\nexport class Text extends Node {\n constructor(text: any) {\n super();\n this.nodeType = 3;\n this.nodeName = \"#text\";\n this.node_value = String(text);\n }\n}\n\nfunction updateElementStyles(element: Element, state: Record<string, any>) {\n let str = \"\";\n for (const key in state) {\n const value = state[key];\n if (typeof value !== \"undefined\" && value !== null && String(value).length > 0) {\n str += `${key}: ${state[key]};`;\n }\n }\n if (str.length === 0) {\n element.removeAttribute(\"style\");\n } else {\n element.setAttribute(\"style\", str);\n }\n}\n\nexport class Element extends Node {\n constructor() {\n super();\n this.nodeType = 1;\n this.attributes = [];\n this.childNodes = [];\n }\n\n _style = new Proxy(\n {},\n {\n get: (state: Record<string, any>, prop: string) => state[prop],\n set: (state: Record<string, any>, prop: string, value: any) => {\n state[prop] = value;\n updateElementStyles(this, state);\n return true;\n },\n deleteProperty: (state: Record<string, any>, prop: string) => {\n Reflect.deleteProperty(state, prop);\n updateElementStyles(this, state);\n return true;\n }\n }\n );\n\n get style() {\n return this._style as any;\n }\n\n set style(value: string) {\n if (typeof value === \"string\") {\n // should match pairs like \"color: red; font-size: 12px; background: url(http://example.com/image.png?s=1024x1024&amp;w=is&amp;k=20&amp;c=ASa_AG8uP5Di7azXgJraSA6ME7fbLB0GX4YT_OzCARI=);\"\n const regex = /([^:\\s]+):\\s*((url\\([^)]+\\))|[^;]+(?=(;|$)))/g;\n let match;\n\n while ((match = regex.exec(value)) !== null) {\n this._style[match[1]] = match[2].trim();\n }\n\n return;\n }\n\n throw new Error(\"Cannot set style\");\n }\n\n get className(): string {\n return this.getAttribute(\"class\") || \"\";\n }\n\n set className(value: string | boolean) {\n if (value == null || value === false) {\n this.removeAttribute(\"class\");\n } else {\n this.setAttribute(\"class\", String(value));\n }\n }\n\n classList = {\n toggle: (item: any, force: any) => {\n if (item) {\n const classes = (this.className || \"\").split(\" \");\n const itemIndex = classes.indexOf(item);\n if (force && itemIndex === -1) {\n classes.push(item);\n }\n\n if (!force && itemIndex !== -1) {\n classes.splice(itemIndex, 1);\n }\n\n const final = classes.join(\" \").trim();\n if (final.length) {\n this.className = classes.join(\" \").trim();\n } else {\n this.className = false;\n }\n }\n }\n };\n\n get id(): string {\n return this.getAttribute(\"id\") || \"\";\n }\n\n set id(value: string | boolean) {\n if (value == null || value === false) {\n this.removeAttribute(\"id\");\n } else {\n this.setAttribute(\"id\", String(value));\n }\n }\n\n set textContent(text) {\n this.nodeValue = String(text);\n this.childNodes = this.nodeValue ? [new Text(this.nodeValue)] : [];\n }\n get textContent() {\n return this.nodeValue;\n }\n\n set innerText(text) {\n this.nodeValue = String(text);\n }\n\n get innerText() {\n return this.nodeValue;\n }\n\n get innerHTML() {\n let str = \"\";\n for (let i = 0, l = this.childNodes.length; i < l; i++) {\n // console.log(\"domToHtml\", this.childNodes[i], domToHtml(this.childNodes[i] as Element));\n str += domToHtml(this.childNodes[i] as Element);\n }\n return str;\n }\n\n set innerHTML(html) {\n this.textContent = \"\";\n const result = htmlToDom(html);\n if (result instanceof DocumentFragment) {\n for (let i = 0, l = result.childNodes.length; i < l; i++) {\n this.appendChild(result.childNodes[i]);\n }\n } else {\n this.appendChild(result);\n }\n }\n\n get outerHTML(): string {\n return domToHtml(this);\n }\n}\n\nexport class DocumentFragment extends Element {\n constructor() {\n super();\n this.nodeType = 11;\n this.nodeName = \"#document-fragment\";\n }\n}\n\nexport class Document extends Element {\n constructor() {\n super();\n this.nodeType = 9;\n this.nodeName = \"#document\";\n this.body = this.createElement(\"body\");\n }\n\n body: Element;\n\n createDocumentFragment(): DocumentFragment {\n return new DocumentFragment();\n }\n\n createElement(type: string) {\n const element = new Element();\n element.nodeName = type.toUpperCase();\n return element;\n }\n\n createElementNS(ns: string, type: string) {\n const element = this.createElement(type);\n element.baseURI = ns;\n return element;\n }\n\n createTextNode(text: any) {\n return new Text(text);\n }\n}\n\nconst selfClosingTags = [\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n \"!doctype\"\n];\n\nexport function domToHtml(dom: Element | Text | DocumentFragment): string {\n if (dom.nodeType === 3) {\n return dom.textContent;\n }\n\n if (dom.nodeType === 1) {\n const name = dom.nodeName.toLowerCase();\n let str = \"<\" + name;\n for (let i = 0, l = dom.attributes.length; i < l; i++) {\n str += \" \" + dom.attributes[i].nodeName + '=\"' + dom.attributes[i].nodeValue + '\"';\n }\n\n if (selfClosingTags.indexOf(name) === -1) {\n str += \">\";\n if (dom.childNodes && dom.childNodes.length > 0) {\n for (let i = 0, l = dom.childNodes.length; i < l; i++) {\n const child = domToHtml(dom.childNodes[i] as Element);\n if (child) {\n str += child;\n }\n }\n }\n str += \"</\" + name + \">\";\n } else {\n str += \"/>\";\n }\n\n return str;\n }\n\n return \"\";\n}\n\nexport function domToHyperscript(childNodes: ChildNodes, depth = 1) {\n let spaces = \"\";\n for (let i = 0; i < depth; i++) {\n spaces += \" \";\n }\n\n return childNodes\n .map((item) => {\n if (item.nodeType === 10) {\n return `\\n${spaces}\"<!DOCTYPE html>\"`;\n } else if (item.nodeType === 3) {\n return `\\n${spaces}\"${item.nodeValue}\"`;\n } else {\n let str = `\\n${spaces}v(\"${item.nodeName}\", `;\n\n if (item.attributes) {\n const attrs: Record<string, any> = {};\n for (let i = 0, l = item.attributes.length; i < l; i++) {\n const attr = item.attributes[i];\n attrs[attr.nodeName] = attr.nodeValue;\n }\n str += JSON.stringify(attrs);\n } else {\n str += \"{}\";\n }\n\n str += \", [\";\n if (item.childNodes && item.childNodes.length > 0) {\n str += `${domToHyperscript(item.childNodes as unknown as Element[], depth + 1)}\\n${spaces}`;\n }\n\n str += `])`;\n return str;\n }\n })\n .join(\",\");\n}\n\ninterface ObjectIndexItem {\n tagName: string;\n startsAt: number;\n endsAt: number | null;\n contentStartsAt: number;\n contentEndsAt: number | null;\n attributes: { [key: string]: any };\n children: ObjectIndexItem[];\n nodeValue: string | null;\n}\n\ninterface ObjectIndexItemWithContent extends ObjectIndexItem {\n endsAt: number;\n contentEndsAt: number;\n children: ObjectIndexItemWithContent[];\n}\n\ninterface ObjectIndexList extends Array<ObjectIndexItem> {}\n\nfunction findTexts(item: ObjectIndexItemWithContent, html: string) {\n const newChildren: ObjectIndexItemWithContent[] = [];\n\n // If the item has children\n if (item.children.length) {\n // Search for texts in the children.\n for (let i = 0; i < item.children.length; i++) {\n const child = item.children[i];\n const nextChild = item.children[i + 1];\n\n // If is the first child and the child startsAt is greater than the item contentStartsAt then\n // the content between the item contentStartsAt and the child startsAt is a text child of the item.\n if (i === 0 && child.startsAt > item.contentStartsAt) {\n const childContent = html.substring(item.contentStartsAt, child.startsAt);\n\n const childText: ObjectIndexItemWithContent = {\n tagName: \"#text\",\n startsAt: item.contentStartsAt,\n endsAt: item.contentStartsAt + childContent.length,\n contentStartsAt: item.contentStartsAt,\n contentEndsAt: item.contentStartsAt + childContent.length,\n attributes: {},\n children: [],\n nodeValue: childContent\n };\n\n newChildren.push(childText);\n }\n\n // Add the child to the newChildren array.\n newChildren.push(child);\n\n // If there is a next child and the child endsAt is less than the next child startsAt then\n // the content between the child endsAt and the next child startsAt is a text child of the item.\n if (nextChild && child.endsAt < nextChild.startsAt) {\n const childContent = html.substring(child.endsAt, nextChild.startsAt);\n\n const childText: ObjectIndexItemWithContent = {\n tagName: \"#text\",\n startsAt: child.endsAt,\n endsAt: child.endsAt + childContent.length,\n contentStartsAt: child.endsAt,\n contentEndsAt: child.endsAt + childContent.length,\n attributes: {},\n children: [],\n nodeValue: childContent\n };\n\n newChildren.push(childText);\n }\n\n // If there are no next child and the child endsAt is less than the item contentEndsAt then\n // the content between the child endsAt and the item contentEndsAt is a text child of the item.\n if (!nextChild && child.endsAt < item.contentEndsAt) {\n const childContent = html.substring(child.endsAt, item.contentEndsAt);\n\n const childText: ObjectIndexItemWithContent = {\n tagName: \"#text\",\n startsAt: child.endsAt,\n endsAt: child.endsAt + childContent.length,\n contentStartsAt: child.endsAt,\n contentEndsAt: item.contentEndsAt,\n attributes: {},\n children: [],\n nodeValue: childContent\n };\n\n newChildren.push(childText);\n }\n\n // Find texts in the child.\n findTexts(child, html);\n }\n }\n\n // If the item has no children then set the contents between the item contentStartsAt and the item contentEndsAt\n // as a text child of the item.\n if (!item.children.length) {\n const childContent = html.substring(item.contentStartsAt, item.contentEndsAt);\n\n if (childContent.length) {\n const childText: ObjectIndexItemWithContent = {\n tagName: \"#text\",\n startsAt: item.contentStartsAt,\n endsAt: item.contentEndsAt,\n contentStartsAt: item.contentStartsAt,\n contentEndsAt: item.contentEndsAt,\n attributes: {},\n children: [],\n nodeValue: childContent\n };\n\n newChildren.push(childText);\n }\n }\n\n item.children = newChildren;\n}\n\nfunction convertToDom<T extends Node>(item: ObjectIndexItemWithContent): T {\n let node: T;\n\n if (item.tagName === \"#text\") {\n node = document.createTextNode(item.nodeValue as string) as unknown as T;\n } else {\n node = (item.tagName === \"#document-fragment\"\n ? document.createDocumentFragment()\n : document.createElement(item.tagName)) as unknown as T;\n\n for (const key in item.attributes) {\n node.setAttribute(key, item.attributes[key]);\n }\n\n for (let i = 0; i < item.children.length; i++) {\n const child = convertToDom(item.children[i]);\n node.appendChild(child);\n }\n }\n\n return node;\n}\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nfunction getObjectIndexTree(html: string): DocumentFragment {\n let item;\n const regex = RegExp(\"<([^>|^!]+)>\", \"g\");\n const items: ObjectIndexList = [];\n\n // Make the initial list of items.\n while ((item = regex.exec(html))) {\n // If is a closing tag\n if (item[0].startsWith(\"</\")) {\n const lastOpenedItem = [...items].reverse().find((item) => item.endsAt === null);\n if (lastOpenedItem) {\n lastOpenedItem.endsAt = item.index + item[0].length;\n lastOpenedItem.contentEndsAt = item.index;\n\n // Find the last opened item again, this will be the parent of the current item.\n const parent = [...items].reverse().find((item) => item.endsAt === null);\n if (parent) {\n // Find the index of the current item in the items array.\n const index = items.indexOf(lastOpenedItem);\n // Remove the last opened item from the items array.\n items.splice(index, 1);\n\n // Add the last opened item as a child of the parent.\n parent.children.push(lastOpenedItem);\n }\n }\n\n continue;\n }\n\n // If is an opening tag\n const element: ObjectIndexItem = {\n tagName: item[1].split(\" \")[0],\n startsAt: item.index,\n endsAt: null,\n contentStartsAt: item.index + item[0].length,\n contentEndsAt: null,\n attributes: {},\n children: [],\n nodeValue: null\n };\n\n // Find the attributes of the tag.\n let string = (item[1] || \"\").substring(element.tagName.length + 1).replace(/\\/$/g, \"\");\n const attributesWithValues = string.match(/\\S+=\"[^\"]+\"/g);\n\n if (attributesWithValues) {\n for (const attribute of attributesWithValues) {\n const [name, ...value] = attribute.trim().split(\"=\");\n string = string.replace(attribute, \"\");\n if (value) {\n element.attributes[name] = value.join(\"=\").replace(/(^\"|\"$)/g, \"\");\n }\n }\n }\n\n const attributesWithBooleanValues = string.match(/\\s\\S+=[^\"]+/g);\n if (attributesWithBooleanValues) {\n for (const attribute of attributesWithBooleanValues) {\n const [name, ...value] = attribute.trim().split(\"=\");\n string = string.replace(attribute, \"\");\n if (value) {\n element.attributes[name] = value.join(\"=\").replace(/(^\"|\"$)/g, \"\");\n }\n }\n }\n\n const attributesWithEmptyValues = string.match(/\\s?\\S+/g);\n if (attributesWithEmptyValues) {\n for (const attribute of attributesWithEmptyValues) {\n const name = attribute.trim();\n element.attributes[name] = true;\n }\n }\n\n // If the tag is self closing\n if (item[0].endsWith(\"/>\")) {\n element.endsAt = element.startsAt + item[0].length;\n element.contentStartsAt = element.contentEndsAt = element.endsAt;\n\n // Find the last opened item, this will be the parent of the current item.\n const parent = [...items].reverse().find((item) => item.endsAt === null);\n if (parent) {\n // Add the last opened item as a child of the parent.\n parent.children.push(element);\n continue;\n }\n }\n\n items.push(element);\n }\n\n const fragmentItem: ObjectIndexItemWithContent = {\n tagName: \"#document-fragment\",\n startsAt: 0,\n endsAt: html.length,\n contentStartsAt: 0,\n contentEndsAt: html.length,\n attributes: {},\n children: items as ObjectIndexItemWithContent[],\n nodeValue: null\n };\n\n findTexts(fragmentItem, html);\n\n return convertToDom<DocumentFragment>(fragmentItem);\n}\n\n// First we create a tree of object indexes from the HTML string.\n// The resulting array is then reordered to match the order of the html string.\n// And to move the children to the correct position in its parents.\n// This resulting array is populated with a object node version of the object index.\n// If the final result have more than 1 node, then return a document fragment node.\n// If the final result have 1 node, then return the node.\n// eslint-disable-next-line complexity\nexport function htmlToDom(html: string): Element | Text | DocumentFragment {\n // Search for the opening and closing tags of the root element.\n // The opening tag could be in the middle of the string, so we need to\n // search for the first opening tag.\n const openingTag = html.match(/<[^>]+>/g);\n\n const document = new Document();\n\n // If the opening tag is not found, return a document fragment node with the html string as text content.\n if (!openingTag) {\n const documentFragment = document.createDocumentFragment();\n documentFragment.appendChild(document.createTextNode(html));\n return documentFragment;\n }\n\n const fragment = getObjectIndexTree(html);\n\n if (fragment.childNodes.length > 1) {\n return fragment;\n }\n\n return fragment.childNodes[0];\n}\n\nexport function htmlToHyperscript(html: string) {\n const domTree = htmlToDom(html);\n const hyperscript = domToHyperscript(domTree instanceof DocumentFragment ? domTree.childNodes : [domTree]);\n return `[${hyperscript}\\n]`;\n}\n\nexport const document = new Document();\n\nconst html = document.createElement(\"html\");\nhtml.appendChild(document.createElement(\"head\"));\nhtml.appendChild(document.body);\n", "import { document, domToHtml, domToHyperscript, htmlToDom, htmlToHyperscript } from \"./utils/tree-adapter\";\nimport { mount, unmount } from \"valyrian.js\";\n\nimport FormData from \"form-data\";\nimport { icons } from \"./utils/icons\";\nimport { inline } from \"./utils/inline\";\nimport { sw } from \"./utils/sw\";\nimport { SessionStorage } from \"./utils/session-storage\";\n\nglobal.FormData = FormData as any;\nglobal.document = document as any;\nglobal.sessionStorage = new SessionStorage();\nglobal.localStorage = new SessionStorage();\n\nfunction render(...args: any[]) {\n const Component = () => args;\n const result = mount(\"div\", Component);\n unmount();\n return result;\n}\n\nexport { domToHtml, domToHyperscript, htmlToDom, htmlToHyperscript, inline, sw, icons, render, SessionStorage };\n", "import fs from \"fs\";\nimport { htmlToHyperscript } from \"./tree-adapter\";\n\nexport interface IconsOptions {\n iconsPath: string | null;\n linksViewPath: string | null;\n logging: boolean;\n\n // favicons options\n path: string;\n appName?: string;\n appDescription?: string;\n developerName?: string;\n developerURL?: string;\n dir?: \"auto\" | \"ltr\" | \"rtl\" | string;\n lang?: string;\n background?: string;\n theme_color?: string;\n display?: \"browser\" | \"standalone\" | string;\n orientation?: \"any\" | \"portrait\" | \"landscape\" | string;\n start_url?: string;\n version?: string;\n icons: {\n android: boolean;\n appleIcon: boolean;\n appleStartup: boolean;\n coast: boolean;\n favicons: boolean;\n firefox: boolean;\n windows: boolean;\n yandex: boolean;\n };\n}\n\nexport async function icons(source: string, configuration?: IconsOptions) {\n const options = {\n ...icons.options,\n ...(configuration || {})\n };\n\n if (options.iconsPath) {\n options.iconsPath = options.iconsPath.replace(/\\/$/gi, \"\") + \"/\";\n }\n\n if (options.linksViewPath) {\n options.linksViewPath = options.linksViewPath.replace(/\\/$/gi, \"\") + \"/\";\n }\n\n const { favicons } = await import(\"favicons\");\n\n try {\n const response = await favicons(source, options);\n\n if (options.iconsPath) {\n for (const i in response.images) {\n fs.writeFileSync(options.iconsPath + response.images[i].name, response.images[i].contents);\n }\n\n for (const i in response.files) {\n fs.writeFileSync(options.iconsPath + response.files[i].name, response.files[i].contents);\n }\n }\n\n if (options.linksViewPath) {\n const html = `\n function Links(){\n return ${htmlToHyperscript(response.html.join(\"\"))};\n }\n \n Links.default = Links;\n module.exports = Links;\n `;\n\n fs.writeFileSync(`${options.linksViewPath}/links.js`, html);\n }\n } catch (err) {\n process.stdout.write((err as any).status + \"\\n\"); // HTTP error code (e.g. `200`) or `null`\n process.stdout.write((err as any).name + \"\\n\"); // Error name e.g. \"API Error\"\n process.stdout.write((err as any).message + \"\\n\"); // Error description e.g. \"An unknown error has occurred\"\n }\n}\n\nicons.options = {\n iconsPath: null,\n linksViewPath: null,\n\n // favicons options\n path: \"\",\n appName: null,\n appDescription: null,\n developerName: null,\n developerURL: null,\n dir: \"auto\",\n lang: \"en-US\",\n background: \"#fff\",\n theme_color: \"#fff\",\n display: \"standalone\",\n orientation: \"any\",\n start_url: \"/\",\n version: \"1.0\",\n logging: false,\n icons: {\n android: true,\n appleIcon: true,\n appleStartup: true,\n coast: false,\n favicons: true,\n firefox: false,\n windows: true,\n yandex: false // Create Yandex browser icon. `boolean`\n }\n} as unknown as IconsOptions;\n", "import * as tsc from \"tsc-prog\";\n\nimport CleanCSS from \"clean-css\";\nimport { PurgeCSS } from \"purgecss\";\nimport esbuild from \"esbuild\";\n/* eslint-disable sonarjs/cognitive-complexity */\nimport fs from \"fs\";\n\n// eslint-disable-next-line complexity\nexport async function inline(\n file: string | { raw: string; map?: string | null; file: string },\n options: Record<string, any> = {}\n) {\n if (typeof file === \"string\") {\n const ext = file.split(\".\").pop();\n if (ext && /(js|cjs|jsx|mjs|ts|tsx)/.test(ext)) {\n if (/(ts|tsx)/.test(ext) && !options.noValidate) {\n const declarationDir = options.declarationDir;\n const emitDeclaration = !!declarationDir;\n\n const tscProgOptions = {\n basePath: process.cwd(), // always required, used for relative paths\n configFilePath: \"tsconfig.json\", // config to inherit from (optional)\n files: [file],\n include: [\"**/*.ts\", \"**/*.js\", \"**/*.tsx\", \"**/*.jsx\", \"**/*.mjs\"],\n exclude: [\"test*/**/*\", \"**/*.test.ts\", \"**/*.spec.ts\", \"dist/**\"],\n pretty: true,\n copyOtherToOutDir: false,\n clean: emitDeclaration ? [declarationDir] : [],\n ...(options.tsc || {}),\n compilerOptions: {\n rootDir: \"./\",\n outDir: \"dist\",\n noEmitOnError: true,\n noEmit: !emitDeclaration,\n declaration: emitDeclaration,\n declarationDir,\n emitDeclarationOnly: emitDeclaration,\n allowJs: true,\n esModuleInterop: true,\n inlineSourceMap: true,\n resolveJsonModule: true,\n removeComments: true,\n ...(options.tsc || {}).compilerOptions\n },\n jsxFactory: \"v\",\n jsxFragment: \"v.fragment\"\n };\n\n // eslint-disable-next-line no-console\n console.log(\"tsc\", tscProgOptions);\n\n tsc.build(tscProgOptions);\n }\n\n const esbuildOptions = {\n entryPoints: [file],\n bundle: \"bundle\" in options ? options.bundle : true,\n sourcemap: \"external\",\n write: false,\n minify: options.compact,\n outdir: \"out\",\n target: \"esnext\",\n jsxFactory: \"v\",\n jsxFragment: \"v.fragment\",\n loader: {\n \".js\": \"jsx\",\n \".cjs\": \"jsx\",\n \".mjs\": \"jsx\",\n \".ts\": \"tsx\"\n },\n ...(options.esbuild || {})\n };\n\n const result = await esbuild.build(esbuildOptions);\n if (result.outputFiles?.length !== 2) {\n throw new Error(result.errors.join(\"\\n\"));\n }\n\n if (options.compact) {\n const terser = await import(\"terser\");\n const result2 = await terser.minify(result.outputFiles[1].text, {\n sourceMap: {\n content: result.outputFiles[0].text.toString()\n },\n compress: {\n booleans_as_integers: false\n },\n output: {\n wrap_func_args: false\n },\n ecma: 2022,\n ...(options.terser || {})\n });\n\n if (!result2.code || !result2.map) {\n throw new Error(\"Unknown error\");\n }\n\n const mapBase64 = Buffer.from(result2.map.toString()).toString(\"base64\");\n const suffix = `//# sourceMappingURL=data:application/json;charset=utf-8;base64,${mapBase64}`;\n return { raw: result2.code, map: suffix, file };\n } else {\n const mapBase64 = Buffer.from(result.outputFiles[0].text.toString()).toString(\"base64\");\n const suffix = `//# sourceMappingURL=data:application/json;charset=utf-8;base64,${mapBase64}`;\n return { raw: result.outputFiles[1].text, map: suffix, file };\n }\n } else if (ext && /(css|scss|styl)/.test(ext)) {\n const result = await new CleanCSS({\n sourceMap: true,\n level: {\n 1: {\n roundingPrecision: \"all=3\"\n },\n 2: {\n restructureRules: true // controls rule restructuring; defaults to false\n }\n },\n ...(options.cleanCss || {})\n }).minify([file]);\n\n return { raw: result.styles, map: null, file };\n } else {\n return { raw: fs.readFileSync(file, \"utf8\"), map: null, file };\n }\n } else if (typeof file === \"object\" && \"raw\" in file) {\n return { map: null, ...file };\n }\n\n throw new Error(`Unknown file type: ${file}`);\n}\n\ninline.uncss = async function (\n renderedHtml: (string | Promise<string>)[],\n css: string,\n options: Record<string, any> = {}\n) {\n const html = await Promise.all(renderedHtml);\n\n const contents = html.map((item) => {\n return {\n raw: item,\n extension: \"html\"\n };\n });\n\n const purgecss = new PurgeCSS();\n\n const output = await purgecss.purge({\n fontFace: true,\n keyframes: true,\n variables: true,\n defaultExtractor: (content) => content.match(/[A-Za-z0-9-_/:@]*[A-Za-z0-9-_/:@/]+/g) || [],\n ...options,\n content: contents,\n css: [{ raw: css }]\n });\n\n const cleanCss = await new CleanCSS({\n sourceMap: false,\n level: {\n 1: {\n roundingPrecision: \"all=3\"\n },\n 2: {\n restructureRules: true // controls rule restructuring; defaults to false\n }\n },\n ...(options.cleanCss || {})\n }).minify(output[0].css);\n\n return cleanCss.styles;\n};\n", "import fs from \"fs\";\nimport path from \"path\";\n\nexport function sw(file: string, options = {}) {\n const swfiletemplate = path.resolve(__dirname, \"./node.sw.js\");\n const swTpl = fs.readFileSync(swfiletemplate, \"utf8\");\n const opt = {\n version: \"1\",\n name: \"Valyrian.js\",\n urls: [\"/\"],\n debug: false,\n logFetch: false,\n offlinePage: \"/offline.html\",\n ...options\n };\n let contents = swTpl\n .replace(\"v1\", `v${opt.version}`)\n .replace(\"Valyrian.js\", opt.name)\n .replace('[\"/\"]', '[\"' + opt.urls.join('\",\"') + '\"]')\n .replace(\"/offline.html\", opt.offlinePage)\n .replace(\"logFetch: false\", opt.logFetch ? \"logFetch: true\" : \"logFetch: false\");\n\n if (!opt.debug) {\n contents = contents.replace(\"console.log\", \"() => {}\");\n }\n\n fs.writeFileSync(file, contents, \"utf8\");\n}\n\n/*\n // On the server side to generate the service worker\n sw(\"sw.js\", {\n version: \"1\",\n name: \"Valyrian.js\",\n urls: [\"/\"],\n debug: false,\n logFetch: false,\n offlinePage: \"/offline.html\"\n });\n\n\n // On the client side\n if (\"serviceWorker\" in navigator) {\n const registration = await navigator.serviceWorker.register(\"/sw.js\");\n registration.addEventListener(\"updatefound\", () => {\n const newWorker = registration.installing as ServiceWorker;\n newWorker.addEventListener(\"statechange\", () => {\n if (newWorker.state === \"installed\") {\n // Notify the user about the new version and ask if they want to update\n if (confirm(\"There is a new version available. Do you want to update?\")) {\n // Send a message to the service worker to skip the waiting\n navigator.serviceWorker.controller.postMessage({ type: \"SKIP_WAITING\" });\n }\n }\n });\n });\n\n navigator.serviceWorker.addEventListener(\"controllerchange\", () => {\n window.location.reload();\n });\n }\n*/\n", "import fs from \"fs\";\nimport path from \"path\";\n\nexport class SessionStorage {\n private storage: { [key: string]: string };\n private limit: number;\n private persist: boolean;\n private filePath: string;\n private directory: string = \".session-storage\";\n\n constructor({ persist = false, filePath = \"./sessionData.json\" }: { persist?: boolean; filePath?: string } = {}) {\n this.storage = {};\n this.limit = 5 * 1024 * 1024; // 5MB storage limit\n this.persist = persist;\n this.filePath = path.resolve(this.directory, filePath);\n\n if (this.persist) {\n if (!fs.existsSync(this.directory)) {\n fs.mkdirSync(this.directory, { recursive: true });\n }\n\n // Load data from file if persistence is enabled\n this.loadFromFile();\n }\n }\n\n // Calculate total size in bytes of stored data\n private getStorageSize(): number {\n return new TextEncoder().encode(JSON.stringify(this.storage)).length;\n }\n\n // Check if storage limit is exceeded\n private checkSizeLimit(): void {\n const size = this.getStorageSize();\n if (size > this.limit) {\n throw new DOMException(\"Storage limit exceeded\", \"QuotaExceededError\");\n }\n }\n\n // Store value under the specified key\n setItem(key: string | null | undefined, value: string | null | undefined): void {\n if (key === null || key === undefined) {\n throw new TypeError(\"Failed to execute 'setItem' on 'Storage': 1 argument required, but only 0 present.\");\n }\n\n if (value === null) {\n value = \"null\"; // Convert null to \"null\"\n } else if (value === undefined) {\n value = \"undefined\"; // Convert undefined to \"undefined\"\n }\n\n this.loadFromFile();\n this.storage[key] = String(value); // Store as string\n this.checkSizeLimit(); // Check storage limit\n this.saveToFile(); // Save to file if persistence is enabled\n }\n\n // Retrieve value stored under the specified key\n getItem(key: string | null | undefined): string | null {\n if (key === null || key === undefined) {\n throw new TypeError(\"Failed to execute 'getItem' on 'Storage': 1 argument required, but only 0 present.\");\n }\n\n this.loadFromFile();\n return this.storage[key] || null; // Return null if key doesn't exist\n }\n\n // Remove the value under the specified key\n removeItem(key: string | null | undefined): void {\n if (key === null || key === undefined) {\n throw new TypeError(\"Failed to execute 'removeItem' on 'Storage': 1 argument required, but only 0 present.\");\n }\n this.loadFromFile();\n Reflect.deleteProperty(this.storage, key); // Remove key from storage\n this.saveToFile(); // Save to file if persistence is enabled\n }\n\n // Clear all stored values\n clear(): void {\n this.storage = {};\n this.saveToFile(); // Save to file if persistence is enabled\n }\n\n // Return the number of stored items\n get length(): number {\n return Object.keys(this.storage).length;\n }\n\n // Return the key at the specified index\n key(index: number): string | null {\n this.loadFromFile();\n const keys = Object.keys(this.storage);\n return keys[index] || null;\n }\n\n // Save data to a file (only if persistence is enabled)\n private saveToFile(): void {\n if (this.persist) {\n try {\n fs.writeFileSync(this.filePath, JSON.stringify(this.storage), \"utf-8\");\n } catch (error) {\n throw new Error(`Error saving data to file: ${(error as any).message}`);\n }\n }\n }\n\n // Load data from a file (only if persistence is enabled)\n private loadFromFile(): void {\n if (this.persist) {\n try {\n if (fs.existsSync(this.filePath)) {\n const data = fs.readFileSync(this.filePath, \"utf-8\");\n this.storage = JSON.parse(data || \"{}\");\n }\n } catch (error) {\n throw new Error(`Error loading data from file: ${(error as any).message}`);\n }\n }\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["node", "html", "item", "document", "html", "fs", "html", "fs", "fs", "path"]
3
+ "sources": ["../../lib/node/utils/tree-adapter.ts", "../../lib/node/index.ts", "../../lib/node/utils/icons.ts", "../../lib/node/utils/inline.ts", "../../lib/node/utils/sw.ts", "../../lib/node/utils/server-storage.ts"],
4
+ "sourcesContent": ["/* eslint-disable no-use-before-define */\n/* eslint-disable complexity */\ninterface ChildNodes extends Array<Node | Element | Text | DocumentFragment> {}\n\nexport class Node implements Node {\n // eslint-disable-next-line no-use-before-define\n childNodes: ChildNodes = [];\n baseURI: string = \"\";\n\n tag_name!: string;\n get nodeName(): string {\n return this.tag_name.toLowerCase();\n }\n set nodeName(name: string) {\n this.tag_name = name;\n }\n get tagName(): string {\n return this.tag_name;\n }\n set tagName(name: string) {\n this.tag_name = name;\n }\n\n node_type!: number;\n get nodeType(): number {\n return this.node_type;\n }\n set nodeType(type: number) {\n this.node_type = type;\n }\n\n node_value = \"\";\n attributes: Attr[] = [];\n set textContent(text) {\n this.node_value = String(text);\n }\n get textContent() {\n return this.node_value;\n }\n set nodeValue(text) {\n this.node_value = String(text);\n }\n get nodeValue() {\n return this.node_value;\n }\n\n // eslint-disable-next-line no-use-before-define\n parent_node: Node | null = null;\n get parentNode() {\n return this.parent_node;\n }\n set parentNode(node) {\n this.parent_node = node;\n }\n\n get parentElement(): Element | null {\n return this.parentNode instanceof Element ? this.parentNode : null;\n }\n\n set parentElement(node) {\n this.parentNode = node;\n }\n\n #dataset: Record<string | number, any> = {};\n\n get dataset() {\n return this.#dataset;\n }\n\n set dataset(value) {\n this.#dataset = value;\n }\n\n constructor() {}\n\n appendChild<T extends Node>(node: T): T {\n if (node) {\n node.parentNode && node.parentNode.removeChild(node as Node);\n this.childNodes.push(node);\n node.parentNode = this;\n node.parentElement = this instanceof Element ? this : null;\n }\n return node;\n }\n\n insertBefore<T extends Node>(node: T, child: Node | null): T {\n if (node) {\n node.parentNode && node.parentNode.removeChild(node as Node);\n node.parentNode = this;\n node.parentElement = this instanceof Element ? this : null;\n if (child) {\n const idx = this.childNodes.indexOf(child);\n this.childNodes.splice(idx, 0, node);\n } else {\n this.childNodes.push(node);\n }\n }\n return node;\n }\n\n replaceChild<T extends Node>(node: Node, child: T): T {\n if (node && child && child.parentNode === this) {\n this.insertBefore(node, child);\n child.parentNode && child.parentNode.removeChild(child);\n }\n return child;\n }\n removeChild<T extends Node>(child: T): T {\n if (child && child.parentNode === this) {\n const idx = (this.childNodes as unknown as Node[]).indexOf(child);\n (this.childNodes as unknown as Node[]).splice(idx, 1);\n child.parentNode = null;\n child.parentElement = null;\n }\n return child;\n }\n\n remove(): Node {\n return this.parentNode ? this.parentNode.removeChild(this) : this;\n }\n\n cloneNode(deep?: boolean | undefined): Node {\n if (this.nodeType === 3) {\n return new Text(this.nodeValue);\n }\n\n if (this.nodeType === 1) {\n const node = new Element();\n node.nodeType = this.nodeType;\n this.nodeName = this.nodeName;\n if (this.attributes) {\n for (let i = 0, l = this.attributes.length; i < l; i++) {\n node.setAttribute(this.attributes[i].nodeName, this.attributes[i].nodeValue);\n }\n }\n\n for (const key in this.dataset) {\n node.dataset[key] = this.dataset[key];\n }\n\n if (deep) {\n for (let i = 0, l = this.childNodes.length; i < l; i++) {\n node.appendChild(this.childNodes[i].cloneNode(deep));\n }\n }\n return node;\n }\n\n const node = new Node();\n node.nodeType = this.nodeType;\n node.nodeName = this.nodeName;\n return node;\n }\n\n setAttribute(name: string, value: any) {\n const attr = {\n nodeName: name,\n nodeValue: value\n };\n let idx = -1;\n for (let i = 0, l = this.attributes.length; i < l; i++) {\n if (this.attributes[i].nodeName === name) {\n idx = i;\n break;\n }\n }\n idx === -1 ? this.attributes.push(attr as Attr) : this.attributes.splice(idx, 1, attr as Attr);\n }\n\n getAttribute(name: string) {\n for (let i = 0, l = this.attributes.length; i < l; i++) {\n if (this.attributes[i].nodeName === name) {\n return this.attributes[i].nodeValue;\n }\n }\n }\n\n removeAttribute(name: string) {\n let idx = -1;\n for (let i = 0, l = this.attributes.length; i < l; i++) {\n if (this.attributes[i].nodeName === name) {\n idx = i;\n break;\n }\n }\n if (idx > -1) {\n this.attributes.splice(idx, 1);\n }\n }\n\n getElementById(id: string): Node | null {\n let elementFound;\n for (let i = 0, l = this.childNodes.length; i < l; i++) {\n if (this.childNodes[i].nodeType === 1) {\n if (this.childNodes[i].getAttribute(\"id\") === id) {\n elementFound = this.childNodes[i];\n break;\n }\n elementFound = this.childNodes[i].getElementById(id);\n if (elementFound) {\n break;\n }\n }\n }\n return elementFound || null;\n }\n\n // Not implemented\n // firstChild!: ChildNode | null;\n // isConnected!: boolean;\n // lastChild!: ChildNode | null;\n // nextSibling!: ChildNode | null;\n // ownerDocument!: Document | null;\n // parentElement!: HTMLElement | null;\n // previousSibling!: ChildNode | null;\n // compareDocumentPosition(other: Node): number {\n // throw new Error(\"Method not implemented.\");\n // }\n // contains(other: Node | null): boolean {\n // throw new Error(\"Method not implemented.\");\n // }\n // getRootNode(options?: GetRootNodeOptions | undefined): Node {\n // throw new Error(\"Method not implemented.\");\n // }\n // hasChildNodes(): boolean {\n // throw new Error(\"Method not implemented.\");\n // }\n // isDefaultNamespace(namespace: string | null): boolean {\n // throw new Error(\"Method not implemented.\");\n // }\n // isEqualNode(otherNode: Node | null): boolean {\n // throw new Error(\"Method not implemented.\");\n // }\n // isSameNode(otherNode: Node | null): boolean {\n // throw new Error(\"Method not implemented.\");\n // }\n // lookupNamespaceURI(prefix: string | null): string | null {\n // throw new Error(\"Method not implemented.\");\n // }\n // lookupPrefix(namespace: string | null): string | null {\n // throw new Error(\"Method not implemented.\");\n // }\n // normalize(): void {\n // throw new Error(\"Method not implemented.\");\n // }\n // ATTRIBUTE_NODE!: number;\n // CDATA_SECTION_NODE!: number;\n // COMMENT_NODE!: number;\n // DOCUMENT_FRAGMENT_NODE!: number;\n // DOCUMENT_NODE!: number;\n // DOCUMENT_POSITION_CONTAINED_BY!: number;\n // DOCUMENT_POSITION_CONTAINS!: number;\n // DOCUMENT_POSITION_DISCONNECTED!: number;\n // DOCUMENT_POSITION_FOLLOWING!: number;\n // DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC!: number;\n // DOCUMENT_POSITION_PRECEDING!: number;\n // DOCUMENT_TYPE_NODE!: number;\n // ELEMENT_NODE!: number;\n // ENTITY_NODE!: number;\n // ENTITY_REFERENCE_NODE!: number;\n // NOTATION_NODE!: number;\n // PROCESSING_INSTRUCTION_NODE!: number;\n // TEXT_NODE!: number;\n addEventListener(\n // eslint-disable-next-line no-unused-vars\n type: string,\n // eslint-disable-next-line no-unused-vars\n callback: EventListenerOrEventListenerObject | null,\n // eslint-disable-next-line no-unused-vars\n options?: boolean | AddEventListenerOptions | undefined\n ): void {\n // throw new Error(\"Method not implemented.\");\n }\n // dispatchEvent(event: Event): boolean {\n // throw new Error(\"Method not implemented.\");\n // }\n removeEventListener(\n // eslint-disable-next-line no-unused-vars\n type: string,\n // eslint-disable-next-line no-unused-vars\n callback: EventListenerOrEventListenerObject | null,\n // eslint-disable-next-line no-unused-vars\n options?: boolean | EventListenerOptions | undefined\n ): void {\n // throw new Error(\"Method not implemented.\");\n }\n}\n\nexport class Text extends Node {\n constructor(text: any) {\n super();\n this.nodeType = 3;\n this.nodeName = \"#text\";\n this.node_value = String(text);\n }\n}\n\nfunction updateElementStyles(element: Element, state: Record<string, any>) {\n let str = \"\";\n for (const key in state) {\n const value = state[key];\n if (typeof value !== \"undefined\" && value !== null && String(value).length > 0) {\n str += `${key}: ${state[key]};`;\n }\n }\n if (str.length === 0) {\n element.removeAttribute(\"style\");\n } else {\n element.setAttribute(\"style\", str);\n }\n}\n\nexport class Element extends Node {\n constructor() {\n super();\n this.nodeType = 1;\n this.attributes = [];\n this.childNodes = [];\n }\n\n _style = new Proxy(\n {},\n {\n get: (state: Record<string, any>, prop: string) => state[prop],\n set: (state: Record<string, any>, prop: string, value: any) => {\n state[prop] = value;\n updateElementStyles(this, state);\n return true;\n },\n deleteProperty: (state: Record<string, any>, prop: string) => {\n Reflect.deleteProperty(state, prop);\n updateElementStyles(this, state);\n return true;\n }\n }\n );\n\n get style() {\n return this._style as any;\n }\n\n set style(value: string) {\n if (typeof value === \"string\") {\n // should match pairs like \"color: red; font-size: 12px; background: url(http://example.com/image.png?s=1024x1024&amp;w=is&amp;k=20&amp;c=ASa_AG8uP5Di7azXgJraSA6ME7fbLB0GX4YT_OzCARI=);\"\n const regex = /([^:\\s]+):\\s*((url\\([^)]+\\))|[^;]+(?=(;|$)))/g;\n let match;\n\n while ((match = regex.exec(value)) !== null) {\n this._style[match[1]] = match[2].trim();\n }\n\n return;\n }\n\n throw new Error(\"Cannot set style\");\n }\n\n get className(): string {\n return this.getAttribute(\"class\") || \"\";\n }\n\n set className(value: string | boolean) {\n if (value == null || value === false) {\n this.removeAttribute(\"class\");\n } else {\n this.setAttribute(\"class\", String(value));\n }\n }\n\n classList = {\n toggle: (item: any, force: any) => {\n if (item) {\n const classes = (this.className || \"\").split(\" \");\n const itemIndex = classes.indexOf(item);\n if (force && itemIndex === -1) {\n classes.push(item);\n }\n\n if (!force && itemIndex !== -1) {\n classes.splice(itemIndex, 1);\n }\n\n const final = classes.join(\" \").trim();\n if (final.length) {\n this.className = classes.join(\" \").trim();\n } else {\n this.className = false;\n }\n }\n }\n };\n\n get id(): string {\n return this.getAttribute(\"id\") || \"\";\n }\n\n set id(value: string | boolean) {\n if (value == null || value === false) {\n this.removeAttribute(\"id\");\n } else {\n this.setAttribute(\"id\", String(value));\n }\n }\n\n set textContent(text) {\n this.nodeValue = String(text);\n this.childNodes = this.nodeValue ? [new Text(this.nodeValue)] : [];\n }\n get textContent() {\n return this.nodeValue;\n }\n\n set innerText(text) {\n this.nodeValue = String(text);\n }\n\n get innerText() {\n return this.nodeValue;\n }\n\n get innerHTML() {\n let str = \"\";\n for (let i = 0, l = this.childNodes.length; i < l; i++) {\n // console.log(\"domToHtml\", this.childNodes[i], domToHtml(this.childNodes[i] as Element));\n str += domToHtml(this.childNodes[i] as Element);\n }\n return str;\n }\n\n set innerHTML(html) {\n this.textContent = \"\";\n const result = htmlToDom(html);\n if (result instanceof DocumentFragment) {\n for (let i = 0, l = result.childNodes.length; i < l; i++) {\n this.appendChild(result.childNodes[i]);\n }\n } else {\n this.appendChild(result);\n }\n }\n\n get outerHTML(): string {\n return domToHtml(this);\n }\n}\n\nexport class DocumentFragment extends Element {\n constructor() {\n super();\n this.nodeType = 11;\n this.nodeName = \"#document-fragment\";\n }\n}\n\nexport class Document extends Element {\n constructor() {\n super();\n this.nodeType = 9;\n this.nodeName = \"#document\";\n this.body = this.createElement(\"body\");\n }\n\n body: Element;\n\n createDocumentFragment(): DocumentFragment {\n return new DocumentFragment();\n }\n\n createElement(type: string) {\n const element = new Element();\n element.nodeName = type.toUpperCase();\n return element;\n }\n\n createElementNS(ns: string, type: string) {\n const element = this.createElement(type);\n element.baseURI = ns;\n return element;\n }\n\n createTextNode(text: any) {\n return new Text(text);\n }\n}\n\nconst ESCAPE_LOOKUP: { [key: string]: string } = {\n \"&\": \"&amp;\",\n \">\": \"&gt;\",\n \"<\": \"&lt;\",\n '\"': \"&quot;\",\n \"'\": \"&#39;\"\n};\n\nconst ESCAPE_REGEX = /[&><\"']/g;\n\nfunction escapeHtml(str: string | any): string {\n if (typeof str !== \"string\") {\n return String(str);\n }\n\n if (ESCAPE_REGEX.test(str) === false) {\n return str;\n }\n\n return str.replace(ESCAPE_REGEX, (match) => ESCAPE_LOOKUP[match]).replace(/&amp;amp;/g, \"&amp;\");\n}\n\nconst selfClosingTags = [\n \"area\",\n \"base\",\n \"br\",\n \"col\",\n \"embed\",\n \"hr\",\n \"img\",\n \"input\",\n \"link\",\n \"meta\",\n \"param\",\n \"source\",\n \"track\",\n \"wbr\",\n \"!doctype\"\n];\n\nexport function domToHtml(dom: Element | Text | DocumentFragment): string {\n if (dom.nodeType === 3) {\n return dom.textContent;\n }\n\n if (dom.nodeType === 1) {\n const name = dom.nodeName.toLowerCase();\n let str = \"<\" + name;\n\n for (let i = 0, l = dom.attributes.length; i < l; i++) {\n const attr = dom.attributes[i];\n str += \" \" + attr.nodeName + '=\"' + escapeHtml(attr.nodeValue) + '\"';\n }\n\n if (selfClosingTags.indexOf(name) === -1) {\n str += \">\";\n if (dom.childNodes && dom.childNodes.length > 0) {\n for (let i = 0, l = dom.childNodes.length; i < l; i++) {\n const child = domToHtml(dom.childNodes[i] as Element);\n if (child) {\n str += child;\n }\n }\n }\n str += \"</\" + name + \">\";\n } else {\n str += \"/>\";\n }\n\n return str;\n }\n\n return \"\";\n}\n\nexport function domToHyperscript(childNodes: ChildNodes, depth = 1) {\n let spaces = \"\";\n for (let i = 0; i < depth; i++) {\n spaces += \" \";\n }\n\n return childNodes\n .map((item) => {\n if (item.nodeType === 10) {\n return `\\n${spaces}\"<!DOCTYPE html>\"`;\n } else if (item.nodeType === 3) {\n return `\\n${spaces}\"${item.nodeValue}\"`;\n } else {\n let str = `\\n${spaces}v(\"${item.nodeName}\", `;\n\n if (item.attributes) {\n const attrs: Record<string, any> = {};\n for (let i = 0, l = item.attributes.length; i < l; i++) {\n const attr = item.attributes[i];\n attrs[attr.nodeName] = attr.nodeValue;\n }\n str += JSON.stringify(attrs);\n } else {\n str += \"{}\";\n }\n\n str += \", [\";\n if (item.childNodes && item.childNodes.length > 0) {\n str += `${domToHyperscript(item.childNodes as unknown as Element[], depth + 1)}\\n${spaces}`;\n }\n\n str += `])`;\n return str;\n }\n })\n .join(\",\");\n}\n\ninterface ObjectIndexItem {\n tagName: string;\n startsAt: number;\n endsAt: number | null;\n contentStartsAt: number;\n contentEndsAt: number | null;\n attributes: { [key: string]: any };\n children: ObjectIndexItem[];\n nodeValue: string | null;\n}\n\ninterface ObjectIndexItemWithContent extends ObjectIndexItem {\n endsAt: number;\n contentEndsAt: number;\n children: ObjectIndexItemWithContent[];\n}\n\ninterface ObjectIndexList extends Array<ObjectIndexItem> {}\n\nfunction findTexts(item: ObjectIndexItemWithContent, html: string) {\n const newChildren: ObjectIndexItemWithContent[] = [];\n\n // If the item has children\n if (item.children.length) {\n // Search for texts in the children.\n for (let i = 0; i < item.children.length; i++) {\n const child = item.children[i];\n const nextChild = item.children[i + 1];\n\n // If is the first child and the child startsAt is greater than the item contentStartsAt then\n // the content between the item contentStartsAt and the child startsAt is a text child of the item.\n if (i === 0 && child.startsAt > item.contentStartsAt) {\n const childContent = html.substring(item.contentStartsAt, child.startsAt);\n\n const childText: ObjectIndexItemWithContent = {\n tagName: \"#text\",\n startsAt: item.contentStartsAt,\n endsAt: item.contentStartsAt + childContent.length,\n contentStartsAt: item.contentStartsAt,\n contentEndsAt: item.contentStartsAt + childContent.length,\n attributes: {},\n children: [],\n nodeValue: childContent\n };\n\n newChildren.push(childText);\n }\n\n // Add the child to the newChildren array.\n newChildren.push(child);\n\n // If there is a next child and the child endsAt is less than the next child startsAt then\n // the content between the child endsAt and the next child startsAt is a text child of the item.\n if (nextChild && child.endsAt < nextChild.startsAt) {\n const childContent = html.substring(child.endsAt, nextChild.startsAt);\n\n const childText: ObjectIndexItemWithContent = {\n tagName: \"#text\",\n startsAt: child.endsAt,\n endsAt: child.endsAt + childContent.length,\n contentStartsAt: child.endsAt,\n contentEndsAt: child.endsAt + childContent.length,\n attributes: {},\n children: [],\n nodeValue: childContent\n };\n\n newChildren.push(childText);\n }\n\n // If there are no next child and the child endsAt is less than the item contentEndsAt then\n // the content between the child endsAt and the item contentEndsAt is a text child of the item.\n if (!nextChild && child.endsAt < item.contentEndsAt) {\n const childContent = html.substring(child.endsAt, item.contentEndsAt);\n\n const childText: ObjectIndexItemWithContent = {\n tagName: \"#text\",\n startsAt: child.endsAt,\n endsAt: child.endsAt + childContent.length,\n contentStartsAt: child.endsAt,\n contentEndsAt: item.contentEndsAt,\n attributes: {},\n children: [],\n nodeValue: childContent\n };\n\n newChildren.push(childText);\n }\n\n // Find texts in the child.\n findTexts(child, html);\n }\n }\n\n // If the item has no children then set the contents between the item contentStartsAt and the item contentEndsAt\n // as a text child of the item.\n if (!item.children.length) {\n const childContent = html.substring(item.contentStartsAt, item.contentEndsAt);\n\n if (childContent.length) {\n const childText: ObjectIndexItemWithContent = {\n tagName: \"#text\",\n startsAt: item.contentStartsAt,\n endsAt: item.contentEndsAt,\n contentStartsAt: item.contentStartsAt,\n contentEndsAt: item.contentEndsAt,\n attributes: {},\n children: [],\n nodeValue: childContent\n };\n\n newChildren.push(childText);\n }\n }\n\n item.children = newChildren;\n}\n\nfunction convertToDom<T extends Node>(item: ObjectIndexItemWithContent): T {\n let node: T;\n\n if (item.tagName === \"#text\") {\n node = document.createTextNode(item.nodeValue as string) as unknown as T;\n } else {\n node = (item.tagName === \"#document-fragment\"\n ? document.createDocumentFragment()\n : document.createElement(item.tagName)) as unknown as T;\n\n for (const key in item.attributes) {\n node.setAttribute(key, item.attributes[key]);\n }\n\n for (let i = 0; i < item.children.length; i++) {\n const child = convertToDom(item.children[i]);\n node.appendChild(child);\n }\n }\n\n return node;\n}\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nfunction getObjectIndexTree(html: string): DocumentFragment {\n let item;\n const regex = RegExp(\"<([^>|^!]+)>\", \"g\");\n const items: ObjectIndexList = [];\n\n // Make the initial list of items.\n while ((item = regex.exec(html))) {\n // If is a closing tag\n if (item[0].startsWith(\"</\")) {\n const lastOpenedItem = [...items].reverse().find((item) => item.endsAt === null);\n if (lastOpenedItem) {\n lastOpenedItem.endsAt = item.index + item[0].length;\n lastOpenedItem.contentEndsAt = item.index;\n\n // Find the last opened item again, this will be the parent of the current item.\n const parent = [...items].reverse().find((item) => item.endsAt === null);\n if (parent) {\n // Find the index of the current item in the items array.\n const index = items.indexOf(lastOpenedItem);\n // Remove the last opened item from the items array.\n items.splice(index, 1);\n\n // Add the last opened item as a child of the parent.\n parent.children.push(lastOpenedItem);\n }\n }\n\n continue;\n }\n\n // If is an opening tag\n const element: ObjectIndexItem = {\n tagName: item[1].split(\" \")[0],\n startsAt: item.index,\n endsAt: null,\n contentStartsAt: item.index + item[0].length,\n contentEndsAt: null,\n attributes: {},\n children: [],\n nodeValue: null\n };\n\n // Find the attributes of the tag.\n let string = (item[1] || \"\").substring(element.tagName.length + 1).replace(/\\/$/g, \"\");\n const attributesWithValues = string.match(/\\S+=\"[^\"]+\"/g);\n\n if (attributesWithValues) {\n for (const attribute of attributesWithValues) {\n const [name, ...value] = attribute.trim().split(\"=\");\n string = string.replace(attribute, \"\");\n if (value) {\n element.attributes[name] = value.join(\"=\").replace(/(^\"|\"$)/g, \"\");\n }\n }\n }\n\n const attributesWithBooleanValues = string.match(/\\s\\S+=[^\"]+/g);\n if (attributesWithBooleanValues) {\n for (const attribute of attributesWithBooleanValues) {\n const [name, ...value] = attribute.trim().split(\"=\");\n string = string.replace(attribute, \"\");\n if (value) {\n element.attributes[name] = value.join(\"=\").replace(/(^\"|\"$)/g, \"\");\n }\n }\n }\n\n const attributesWithEmptyValues = string.match(/\\s?\\S+/g);\n if (attributesWithEmptyValues) {\n for (const attribute of attributesWithEmptyValues) {\n const name = attribute.trim();\n element.attributes[name] = true;\n }\n }\n\n // If the tag is self closing\n if (item[0].endsWith(\"/>\")) {\n element.endsAt = element.startsAt + item[0].length;\n element.contentStartsAt = element.contentEndsAt = element.endsAt;\n\n // Find the last opened item, this will be the parent of the current item.\n const parent = [...items].reverse().find((item) => item.endsAt === null);\n if (parent) {\n // Add the last opened item as a child of the parent.\n parent.children.push(element);\n continue;\n }\n }\n\n items.push(element);\n }\n\n const fragmentItem: ObjectIndexItemWithContent = {\n tagName: \"#document-fragment\",\n startsAt: 0,\n endsAt: html.length,\n contentStartsAt: 0,\n contentEndsAt: html.length,\n attributes: {},\n children: items as ObjectIndexItemWithContent[],\n nodeValue: null\n };\n\n findTexts(fragmentItem, html);\n\n return convertToDom<DocumentFragment>(fragmentItem);\n}\n\n// First we create a tree of object indexes from the HTML string.\n// The resulting array is then reordered to match the order of the html string.\n// And to move the children to the correct position in its parents.\n// This resulting array is populated with a object node version of the object index.\n// If the final result have more than 1 node, then return a document fragment node.\n// If the final result have 1 node, then return the node.\n// eslint-disable-next-line complexity\nexport function htmlToDom(html: string): Element | Text | DocumentFragment {\n // Search for the opening and closing tags of the root element.\n // The opening tag could be in the middle of the string, so we need to\n // search for the first opening tag.\n const openingTag = html.match(/<[^>]+>/g);\n\n const document = new Document();\n\n // If the opening tag is not found, return a document fragment node with the html string as text content.\n if (!openingTag) {\n const documentFragment = document.createDocumentFragment();\n documentFragment.appendChild(document.createTextNode(html));\n return documentFragment;\n }\n\n const fragment = getObjectIndexTree(html);\n\n if (fragment.childNodes.length > 1) {\n return fragment;\n }\n\n return fragment.childNodes[0];\n}\n\nexport function htmlToHyperscript(html: string) {\n const domTree = htmlToDom(html);\n const hyperscript = domToHyperscript(domTree instanceof DocumentFragment ? domTree.childNodes : [domTree]);\n return `[${hyperscript}\\n]`;\n}\n\nexport const document = new Document();\n\nconst html = document.createElement(\"html\");\nhtml.appendChild(document.createElement(\"head\"));\nhtml.appendChild(document.body);\n", "import { document, domToHtml, domToHyperscript, htmlToDom, htmlToHyperscript } from \"./utils/tree-adapter\";\nimport { mount, unmount } from \"valyrian.js\";\n\nimport FormData from \"form-data\";\nimport { icons } from \"./utils/icons\";\nimport { inline } from \"./utils/inline\";\nimport { sw } from \"./utils/sw\";\nimport { ServerStorage } from \"./utils/server-storage\";\n\nglobal.FormData = FormData as any;\nglobal.document = document as any;\nglobal.sessionStorage = new ServerStorage();\nglobal.localStorage = new ServerStorage();\n\nfunction render(...args: any[]) {\n const Component = () => args;\n const result = mount(\"div\", Component);\n unmount();\n return result;\n}\n\nexport { domToHtml, domToHyperscript, htmlToDom, htmlToHyperscript, inline, sw, icons, render, ServerStorage };\n", "import fs from \"fs\";\nimport { htmlToHyperscript } from \"./tree-adapter\";\n\nexport interface IconsOptions {\n iconsPath: string | null;\n linksViewPath: string | null;\n logging: boolean;\n\n // favicons options\n path: string;\n appName?: string;\n appDescription?: string;\n developerName?: string;\n developerURL?: string;\n dir?: \"auto\" | \"ltr\" | \"rtl\" | string;\n lang?: string;\n background?: string;\n theme_color?: string;\n display?: \"browser\" | \"standalone\" | string;\n orientation?: \"any\" | \"portrait\" | \"landscape\" | string;\n start_url?: string;\n version?: string;\n icons: {\n android: boolean;\n appleIcon: boolean;\n appleStartup: boolean;\n coast: boolean;\n favicons: boolean;\n firefox: boolean;\n windows: boolean;\n yandex: boolean;\n };\n}\n\nexport async function icons(source: string, configuration?: IconsOptions) {\n const options = {\n ...icons.options,\n ...(configuration || {})\n };\n\n if (options.iconsPath) {\n options.iconsPath = options.iconsPath.replace(/\\/$/gi, \"\") + \"/\";\n }\n\n if (options.linksViewPath) {\n options.linksViewPath = options.linksViewPath.replace(/\\/$/gi, \"\") + \"/\";\n }\n\n const { favicons } = await import(\"favicons\");\n\n try {\n const response = await favicons(source, options);\n\n if (options.iconsPath) {\n for (const i in response.images) {\n fs.writeFileSync(options.iconsPath + response.images[i].name, response.images[i].contents);\n }\n\n for (const i in response.files) {\n fs.writeFileSync(options.iconsPath + response.files[i].name, response.files[i].contents);\n }\n }\n\n if (options.linksViewPath) {\n const html = `\n function Links(){\n return ${htmlToHyperscript(response.html.join(\"\"))};\n }\n \n Links.default = Links;\n module.exports = Links;\n `;\n\n fs.writeFileSync(`${options.linksViewPath}/links.js`, html);\n }\n } catch (err) {\n process.stdout.write((err as any).status + \"\\n\"); // HTTP error code (e.g. `200`) or `null`\n process.stdout.write((err as any).name + \"\\n\"); // Error name e.g. \"API Error\"\n process.stdout.write((err as any).message + \"\\n\"); // Error description e.g. \"An unknown error has occurred\"\n }\n}\n\nicons.options = {\n iconsPath: null,\n linksViewPath: null,\n\n // favicons options\n path: \"\",\n appName: null,\n appDescription: null,\n developerName: null,\n developerURL: null,\n dir: \"auto\",\n lang: \"en-US\",\n background: \"#fff\",\n theme_color: \"#fff\",\n display: \"standalone\",\n orientation: \"any\",\n start_url: \"/\",\n version: \"1.0\",\n logging: false,\n icons: {\n android: true,\n appleIcon: true,\n appleStartup: true,\n coast: false,\n favicons: true,\n firefox: false,\n windows: true,\n yandex: false // Create Yandex browser icon. `boolean`\n }\n} as unknown as IconsOptions;\n", "import * as tsc from \"tsc-prog\";\n\nimport CleanCSS from \"clean-css\";\nimport { PurgeCSS } from \"purgecss\";\nimport esbuild from \"esbuild\";\n/* eslint-disable sonarjs/cognitive-complexity */\nimport fs from \"fs\";\n\n// eslint-disable-next-line complexity\nexport async function inline(\n file: string | { raw: string; map?: string | null; file: string },\n options: Record<string, any> = {}\n) {\n if (typeof file === \"string\") {\n const ext = file.split(\".\").pop();\n if (ext && /(js|cjs|jsx|mjs|ts|tsx)/.test(ext)) {\n if (/(ts|tsx)/.test(ext) && !options.noValidate) {\n const declarationDir = options.declarationDir;\n const emitDeclaration = !!declarationDir;\n\n const tscProgOptions = {\n basePath: process.cwd(), // always required, used for relative paths\n configFilePath: \"tsconfig.json\", // config to inherit from (optional)\n files: [file],\n include: [\"**/*.ts\", \"**/*.js\", \"**/*.tsx\", \"**/*.jsx\", \"**/*.mjs\"],\n exclude: [\"test*/**/*\", \"**/*.test.ts\", \"**/*.spec.ts\", \"dist/**\"],\n pretty: true,\n copyOtherToOutDir: false,\n clean: emitDeclaration ? [declarationDir] : [],\n ...(options.tsc || {}),\n compilerOptions: {\n rootDir: \"./\",\n outDir: \"dist\",\n noEmitOnError: true,\n noEmit: !emitDeclaration,\n declaration: emitDeclaration,\n declarationDir,\n emitDeclarationOnly: emitDeclaration,\n allowJs: true,\n esModuleInterop: true,\n inlineSourceMap: true,\n resolveJsonModule: true,\n removeComments: true,\n ...(options.tsc || {}).compilerOptions\n },\n jsxFactory: \"v\",\n jsxFragment: \"v.fragment\"\n };\n\n // eslint-disable-next-line no-console\n console.log(\"tsc\", tscProgOptions);\n\n tsc.build(tscProgOptions);\n }\n\n const esbuildOptions = {\n entryPoints: [file],\n bundle: \"bundle\" in options ? options.bundle : true,\n sourcemap: \"external\",\n write: false,\n minify: options.compact,\n outdir: \"out\",\n target: \"esnext\",\n jsxFactory: \"v\",\n jsxFragment: \"v.fragment\",\n loader: {\n \".js\": \"jsx\",\n \".cjs\": \"jsx\",\n \".mjs\": \"jsx\",\n \".ts\": \"tsx\"\n },\n ...(options.esbuild || {})\n };\n\n const result = await esbuild.build(esbuildOptions);\n if (result.outputFiles?.length !== 2) {\n throw new Error(result.errors.join(\"\\n\"));\n }\n\n if (options.compact) {\n const terser = await import(\"terser\");\n const result2 = await terser.minify(result.outputFiles[1].text, {\n sourceMap: {\n content: result.outputFiles[0].text.toString()\n },\n compress: {\n booleans_as_integers: false\n },\n output: {\n wrap_func_args: false\n },\n ecma: 2022,\n ...(options.terser || {})\n });\n\n if (!result2.code || !result2.map) {\n throw new Error(\"Unknown error\");\n }\n\n const mapBase64 = Buffer.from(result2.map.toString()).toString(\"base64\");\n const suffix = `//# sourceMappingURL=data:application/json;charset=utf-8;base64,${mapBase64}`;\n return { raw: result2.code, map: suffix, file };\n } else {\n const mapBase64 = Buffer.from(result.outputFiles[0].text.toString()).toString(\"base64\");\n const suffix = `//# sourceMappingURL=data:application/json;charset=utf-8;base64,${mapBase64}`;\n return { raw: result.outputFiles[1].text, map: suffix, file };\n }\n } else if (ext && /(css|scss|styl)/.test(ext)) {\n const result = await new CleanCSS({\n sourceMap: true,\n level: {\n 1: {\n roundingPrecision: \"all=3\"\n },\n 2: {\n restructureRules: true // controls rule restructuring; defaults to false\n }\n },\n ...(options.cleanCss || {})\n }).minify([file]);\n\n return { raw: result.styles, map: null, file };\n } else {\n return { raw: fs.readFileSync(file, \"utf8\"), map: null, file };\n }\n } else if (typeof file === \"object\" && \"raw\" in file) {\n return { map: null, ...file };\n }\n\n throw new Error(`Unknown file type: ${file}`);\n}\n\ninline.uncss = async function (\n renderedHtml: (string | Promise<string>)[],\n css: string,\n options: Record<string, any> = {}\n) {\n const html = await Promise.all(renderedHtml);\n\n const contents = html.map((item) => {\n return {\n raw: item,\n extension: \"html\"\n };\n });\n\n const purgecss = new PurgeCSS();\n\n const output = await purgecss.purge({\n fontFace: true,\n keyframes: true,\n variables: true,\n defaultExtractor: (content) => content.match(/[A-Za-z0-9-_/:@]*[A-Za-z0-9-_/:@/]+/g) || [],\n ...options,\n content: contents,\n css: [{ raw: css }]\n });\n\n const cleanCss = await new CleanCSS({\n sourceMap: false,\n level: {\n 1: {\n roundingPrecision: \"all=3\"\n },\n 2: {\n restructureRules: true // controls rule restructuring; defaults to false\n }\n },\n ...(options.cleanCss || {})\n }).minify(output[0].css);\n\n return cleanCss.styles;\n};\n", "import fs from \"fs\";\nimport path from \"path\";\n\nexport function sw(file: string, options = {}) {\n const swfiletemplate = path.resolve(__dirname, \"./node.sw.js\");\n const swTpl = fs.readFileSync(swfiletemplate, \"utf8\");\n const opt = {\n version: \"1\",\n name: \"Valyrian.js\",\n urls: [\"/\"],\n debug: false,\n logFetch: false,\n offlinePage: \"/offline.html\",\n ...options\n };\n let contents = swTpl\n .replace(\"v1\", `v${opt.version}`)\n .replace(\"Valyrian.js\", opt.name)\n .replace('[\"/\"]', '[\"' + opt.urls.join('\",\"') + '\"]')\n .replace(\"/offline.html\", opt.offlinePage)\n .replace(\"logFetch: false\", opt.logFetch ? \"logFetch: true\" : \"logFetch: false\");\n\n if (!opt.debug) {\n contents = contents.replace(\"console.log\", \"() => {}\");\n }\n\n fs.writeFileSync(file, contents, \"utf8\");\n}\n\n/*\n // On the server side to generate the service worker\n sw(\"sw.js\", {\n version: \"1\",\n name: \"Valyrian.js\",\n urls: [\"/\"],\n debug: false,\n logFetch: false,\n offlinePage: \"/offline.html\"\n });\n\n\n // On the client side\n if (\"serviceWorker\" in navigator) {\n const registration = await navigator.serviceWorker.register(\"/sw.js\");\n registration.addEventListener(\"updatefound\", () => {\n const newWorker = registration.installing as ServiceWorker;\n newWorker.addEventListener(\"statechange\", () => {\n if (newWorker.state === \"installed\") {\n // Notify the user about the new version and ask if they want to update\n if (confirm(\"There is a new version available. Do you want to update?\")) {\n // Send a message to the service worker to skip the waiting\n navigator.serviceWorker.controller.postMessage({ type: \"SKIP_WAITING\" });\n }\n }\n });\n });\n\n navigator.serviceWorker.addEventListener(\"controllerchange\", () => {\n window.location.reload();\n });\n }\n*/\n", "import { AsyncLocalStorage } from \"node:async_hooks\";\n\nconst storageContext = new AsyncLocalStorage<Record<string, string>>();\nlet globalStore: Record<string, string> = {};\n\nexport class ServerStorage implements Storage {\n get store(): Record<string, string> {\n return storageContext.getStore() || globalStore;\n }\n\n get length(): number {\n const store = this.store;\n return store ? Object.keys(store).length : 0;\n }\n\n clear(): void {\n const store = this.store;\n if (store) {\n for (const key in store) {\n Reflect.deleteProperty(store, key);\n }\n }\n }\n\n getItem(key: string): string | null {\n const store = this.store;\n return store ? store[key] || null : null;\n }\n\n key(index: number): string | null {\n const store = this.store;\n return store ? Object.keys(store)[index] || null : null;\n }\n\n removeItem(key: string): void {\n const store = this.store;\n if (store) {\n Reflect.deleteProperty(store, key);\n }\n }\n\n setItem(key: string, value: string): void {\n const store = this.store;\n if (store) {\n store[key] = String(value);\n }\n }\n\n static run(callback: () => void) {\n storageContext.run({}, callback);\n }\n\n toJSON(): Record<string, string> {\n const store = this.store;\n return store ? { ...store } : {};\n }\n}\n\n/*\nOn node.js environment, use ServerStorage for session storage.\nAt each request, a new storage context is created using ServerStorage.run method.\nIn browser environment, use the native sessionStorage.\n\nserver.get(\"*\", (req, res) => {\n ServerStorage.run(() => {\n const html = router.go(req.url);\n res.send(html);\n \n });\n});\n*/\n"],
5
+ "mappings": ";AAIO,IAAM,OAAN,MAAM,MAAqB;AAAA;AAAA,EAEhC,aAAyB,CAAC;AAAA,EAC1B,UAAkB;AAAA,EAElB;AAAA,EACA,IAAI,WAAmB;AACrB,WAAO,KAAK,SAAS,YAAY;AAAA,EACnC;AAAA,EACA,IAAI,SAAS,MAAc;AACzB,SAAK,WAAW;AAAA,EAClB;AAAA,EACA,IAAI,UAAkB;AACpB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,QAAQ,MAAc;AACxB,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA;AAAA,EACA,IAAI,WAAmB;AACrB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,SAAS,MAAc;AACzB,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,aAAa;AAAA,EACb,aAAqB,CAAC;AAAA,EACtB,IAAI,YAAY,MAAM;AACpB,SAAK,aAAa,OAAO,IAAI;AAAA,EAC/B;AAAA,EACA,IAAI,cAAc;AAChB,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,UAAU,MAAM;AAClB,SAAK,aAAa,OAAO,IAAI;AAAA,EAC/B;AAAA,EACA,IAAI,YAAY;AACd,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,cAA2B;AAAA,EAC3B,IAAI,aAAa;AACf,WAAO,KAAK;AAAA,EACd;AAAA,EACA,IAAI,WAAW,MAAM;AACnB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,IAAI,gBAAgC;AAClC,WAAO,KAAK,sBAAsB,UAAU,KAAK,aAAa;AAAA,EAChE;AAAA,EAEA,IAAI,cAAc,MAAM;AACtB,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,WAAyC,CAAC;AAAA,EAE1C,IAAI,UAAU;AACZ,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,QAAQ,OAAO;AACjB,SAAK,WAAW;AAAA,EAClB;AAAA,EAEA,cAAc;AAAA,EAAC;AAAA,EAEf,YAA4B,MAAY;AACtC,QAAI,MAAM;AACR,WAAK,cAAc,KAAK,WAAW,YAAY,IAAY;AAC3D,WAAK,WAAW,KAAK,IAAI;AACzB,WAAK,aAAa;AAClB,WAAK,gBAAgB,gBAAgB,UAAU,OAAO;AAAA,IACxD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,aAA6B,MAAS,OAAuB;AAC3D,QAAI,MAAM;AACR,WAAK,cAAc,KAAK,WAAW,YAAY,IAAY;AAC3D,WAAK,aAAa;AAClB,WAAK,gBAAgB,gBAAgB,UAAU,OAAO;AACtD,UAAI,OAAO;AACT,cAAM,MAAM,KAAK,WAAW,QAAQ,KAAK;AACzC,aAAK,WAAW,OAAO,KAAK,GAAG,IAAI;AAAA,MACrC,OAAO;AACL,aAAK,WAAW,KAAK,IAAI;AAAA,MAC3B;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,aAA6B,MAAY,OAAa;AACpD,QAAI,QAAQ,SAAS,MAAM,eAAe,MAAM;AAC9C,WAAK,aAAa,MAAM,KAAK;AAC7B,YAAM,cAAc,MAAM,WAAW,YAAY,KAAK;AAAA,IACxD;AACA,WAAO;AAAA,EACT;AAAA,EACA,YAA4B,OAAa;AACvC,QAAI,SAAS,MAAM,eAAe,MAAM;AACtC,YAAM,MAAO,KAAK,WAAiC,QAAQ,KAAK;AAChE,MAAC,KAAK,WAAiC,OAAO,KAAK,CAAC;AACpD,YAAM,aAAa;AACnB,YAAM,gBAAgB;AAAA,IACxB;AACA,WAAO;AAAA,EACT;AAAA,EAEA,SAAe;AACb,WAAO,KAAK,aAAa,KAAK,WAAW,YAAY,IAAI,IAAI;AAAA,EAC/D;AAAA,EAEA,UAAU,MAAkC;AAC1C,QAAI,KAAK,aAAa,GAAG;AACvB,aAAO,IAAI,KAAK,KAAK,SAAS;AAAA,IAChC;AAEA,QAAI,KAAK,aAAa,GAAG;AACvB,YAAMA,QAAO,IAAI,QAAQ;AACzB,MAAAA,MAAK,WAAW,KAAK;AACrB,WAAK,WAAW,KAAK;AACrB,UAAI,KAAK,YAAY;AACnB,iBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,IAAI,GAAG,KAAK;AACtD,UAAAA,MAAK,aAAa,KAAK,WAAW,CAAC,EAAE,UAAU,KAAK,WAAW,CAAC,EAAE,SAAS;AAAA,QAC7E;AAAA,MACF;AAEA,iBAAW,OAAO,KAAK,SAAS;AAC9B,QAAAA,MAAK,QAAQ,GAAG,IAAI,KAAK,QAAQ,GAAG;AAAA,MACtC;AAEA,UAAI,MAAM;AACR,iBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,IAAI,GAAG,KAAK;AACtD,UAAAA,MAAK,YAAY,KAAK,WAAW,CAAC,EAAE,UAAU,IAAI,CAAC;AAAA,QACrD;AAAA,MACF;AACA,aAAOA;AAAA,IACT;AAEA,UAAM,OAAO,IAAI,MAAK;AACtB,SAAK,WAAW,KAAK;AACrB,SAAK,WAAW,KAAK;AACrB,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,MAAc,OAAY;AACrC,UAAM,OAAO;AAAA,MACX,UAAU;AAAA,MACV,WAAW;AAAA,IACb;AACA,QAAI,MAAM;AACV,aAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,IAAI,GAAG,KAAK;AACtD,UAAI,KAAK,WAAW,CAAC,EAAE,aAAa,MAAM;AACxC,cAAM;AACN;AAAA,MACF;AAAA,IACF;AACA,YAAQ,KAAK,KAAK,WAAW,KAAK,IAAY,IAAI,KAAK,WAAW,OAAO,KAAK,GAAG,IAAY;AAAA,EAC/F;AAAA,EAEA,aAAa,MAAc;AACzB,aAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,IAAI,GAAG,KAAK;AACtD,UAAI,KAAK,WAAW,CAAC,EAAE,aAAa,MAAM;AACxC,eAAO,KAAK,WAAW,CAAC,EAAE;AAAA,MAC5B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,gBAAgB,MAAc;AAC5B,QAAI,MAAM;AACV,aAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,IAAI,GAAG,KAAK;AACtD,UAAI,KAAK,WAAW,CAAC,EAAE,aAAa,MAAM;AACxC,cAAM;AACN;AAAA,MACF;AAAA,IACF;AACA,QAAI,MAAM,IAAI;AACZ,WAAK,WAAW,OAAO,KAAK,CAAC;AAAA,IAC/B;AAAA,EACF;AAAA,EAEA,eAAe,IAAyB;AACtC,QAAI;AACJ,aAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,IAAI,GAAG,KAAK;AACtD,UAAI,KAAK,WAAW,CAAC,EAAE,aAAa,GAAG;AACrC,YAAI,KAAK,WAAW,CAAC,EAAE,aAAa,IAAI,MAAM,IAAI;AAChD,yBAAe,KAAK,WAAW,CAAC;AAChC;AAAA,QACF;AACA,uBAAe,KAAK,WAAW,CAAC,EAAE,eAAe,EAAE;AACnD,YAAI,cAAc;AAChB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AACA,WAAO,gBAAgB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0DA,iBAEE,MAEA,UAEA,SACM;AAAA,EAER;AAAA;AAAA;AAAA;AAAA,EAIA,oBAEE,MAEA,UAEA,SACM;AAAA,EAER;AACF;AAEO,IAAM,OAAN,cAAmB,KAAK;AAAA,EAC7B,YAAY,MAAW;AACrB,UAAM;AACN,SAAK,WAAW;AAChB,SAAK,WAAW;AAChB,SAAK,aAAa,OAAO,IAAI;AAAA,EAC/B;AACF;AAEA,SAAS,oBAAoB,SAAkB,OAA4B;AACzE,MAAI,MAAM;AACV,aAAW,OAAO,OAAO;AACvB,UAAM,QAAQ,MAAM,GAAG;AACvB,QAAI,OAAO,UAAU,eAAe,UAAU,QAAQ,OAAO,KAAK,EAAE,SAAS,GAAG;AAC9E,aAAO,GAAG,GAAG,KAAK,MAAM,GAAG,CAAC;AAAA,IAC9B;AAAA,EACF;AACA,MAAI,IAAI,WAAW,GAAG;AACpB,YAAQ,gBAAgB,OAAO;AAAA,EACjC,OAAO;AACL,YAAQ,aAAa,SAAS,GAAG;AAAA,EACnC;AACF;AAEO,IAAM,UAAN,cAAsB,KAAK;AAAA,EAChC,cAAc;AACZ,UAAM;AACN,SAAK,WAAW;AAChB,SAAK,aAAa,CAAC;AACnB,SAAK,aAAa,CAAC;AAAA,EACrB;AAAA,EAEA,SAAS,IAAI;AAAA,IACX,CAAC;AAAA,IACD;AAAA,MACE,KAAK,CAAC,OAA4B,SAAiB,MAAM,IAAI;AAAA,MAC7D,KAAK,CAAC,OAA4B,MAAc,UAAe;AAC7D,cAAM,IAAI,IAAI;AACd,4BAAoB,MAAM,KAAK;AAC/B,eAAO;AAAA,MACT;AAAA,MACA,gBAAgB,CAAC,OAA4B,SAAiB;AAC5D,gBAAQ,eAAe,OAAO,IAAI;AAClC,4BAAoB,MAAM,KAAK;AAC/B,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,QAAQ;AACV,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,MAAM,OAAe;AACvB,QAAI,OAAO,UAAU,UAAU;AAE7B,YAAM,QAAQ;AACd,UAAI;AAEJ,cAAQ,QAAQ,MAAM,KAAK,KAAK,OAAO,MAAM;AAC3C,aAAK,OAAO,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE,KAAK;AAAA,MACxC;AAEA;AAAA,IACF;AAEA,UAAM,IAAI,MAAM,kBAAkB;AAAA,EACpC;AAAA,EAEA,IAAI,YAAoB;AACtB,WAAO,KAAK,aAAa,OAAO,KAAK;AAAA,EACvC;AAAA,EAEA,IAAI,UAAU,OAAyB;AACrC,QAAI,SAAS,QAAQ,UAAU,OAAO;AACpC,WAAK,gBAAgB,OAAO;AAAA,IAC9B,OAAO;AACL,WAAK,aAAa,SAAS,OAAO,KAAK,CAAC;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,YAAY;AAAA,IACV,QAAQ,CAAC,MAAW,UAAe;AACjC,UAAI,MAAM;AACR,cAAM,WAAW,KAAK,aAAa,IAAI,MAAM,GAAG;AAChD,cAAM,YAAY,QAAQ,QAAQ,IAAI;AACtC,YAAI,SAAS,cAAc,IAAI;AAC7B,kBAAQ,KAAK,IAAI;AAAA,QACnB;AAEA,YAAI,CAAC,SAAS,cAAc,IAAI;AAC9B,kBAAQ,OAAO,WAAW,CAAC;AAAA,QAC7B;AAEA,cAAM,QAAQ,QAAQ,KAAK,GAAG,EAAE,KAAK;AACrC,YAAI,MAAM,QAAQ;AAChB,eAAK,YAAY,QAAQ,KAAK,GAAG,EAAE,KAAK;AAAA,QAC1C,OAAO;AACL,eAAK,YAAY;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEA,IAAI,KAAa;AACf,WAAO,KAAK,aAAa,IAAI,KAAK;AAAA,EACpC;AAAA,EAEA,IAAI,GAAG,OAAyB;AAC9B,QAAI,SAAS,QAAQ,UAAU,OAAO;AACpC,WAAK,gBAAgB,IAAI;AAAA,IAC3B,OAAO;AACL,WAAK,aAAa,MAAM,OAAO,KAAK,CAAC;AAAA,IACvC;AAAA,EACF;AAAA,EAEA,IAAI,YAAY,MAAM;AACpB,SAAK,YAAY,OAAO,IAAI;AAC5B,SAAK,aAAa,KAAK,YAAY,CAAC,IAAI,KAAK,KAAK,SAAS,CAAC,IAAI,CAAC;AAAA,EACnE;AAAA,EACA,IAAI,cAAc;AAChB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,UAAU,MAAM;AAClB,SAAK,YAAY,OAAO,IAAI;AAAA,EAC9B;AAAA,EAEA,IAAI,YAAY;AACd,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,IAAI,YAAY;AACd,QAAI,MAAM;AACV,aAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,IAAI,GAAG,KAAK;AAEtD,aAAO,UAAU,KAAK,WAAW,CAAC,CAAY;AAAA,IAChD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,UAAUC,OAAM;AAClB,SAAK,cAAc;AACnB,UAAM,SAAS,UAAUA,KAAI;AAC7B,QAAI,kBAAkB,kBAAkB;AACtC,eAAS,IAAI,GAAG,IAAI,OAAO,WAAW,QAAQ,IAAI,GAAG,KAAK;AACxD,aAAK,YAAY,OAAO,WAAW,CAAC,CAAC;AAAA,MACvC;AAAA,IACF,OAAO;AACL,WAAK,YAAY,MAAM;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,IAAI,YAAoB;AACtB,WAAO,UAAU,IAAI;AAAA,EACvB;AACF;AAEO,IAAM,mBAAN,cAA+B,QAAQ;AAAA,EAC5C,cAAc;AACZ,UAAM;AACN,SAAK,WAAW;AAChB,SAAK,WAAW;AAAA,EAClB;AACF;AAEO,IAAM,WAAN,cAAuB,QAAQ;AAAA,EACpC,cAAc;AACZ,UAAM;AACN,SAAK,WAAW;AAChB,SAAK,WAAW;AAChB,SAAK,OAAO,KAAK,cAAc,MAAM;AAAA,EACvC;AAAA,EAEA;AAAA,EAEA,yBAA2C;AACzC,WAAO,IAAI,iBAAiB;AAAA,EAC9B;AAAA,EAEA,cAAc,MAAc;AAC1B,UAAM,UAAU,IAAI,QAAQ;AAC5B,YAAQ,WAAW,KAAK,YAAY;AACpC,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,IAAY,MAAc;AACxC,UAAM,UAAU,KAAK,cAAc,IAAI;AACvC,YAAQ,UAAU;AAClB,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,MAAW;AACxB,WAAO,IAAI,KAAK,IAAI;AAAA,EACtB;AACF;AAEA,IAAM,gBAA2C;AAAA,EAC/C,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AACP;AAEA,IAAM,eAAe;AAErB,SAAS,WAAW,KAA2B;AAC7C,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO,OAAO,GAAG;AAAA,EACnB;AAEA,MAAI,aAAa,KAAK,GAAG,MAAM,OAAO;AACpC,WAAO;AAAA,EACT;AAEA,SAAO,IAAI,QAAQ,cAAc,CAAC,UAAU,cAAc,KAAK,CAAC,EAAE,QAAQ,cAAc,OAAO;AACjG;AAEA,IAAM,kBAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,UAAU,KAAgD;AACxE,MAAI,IAAI,aAAa,GAAG;AACtB,WAAO,IAAI;AAAA,EACb;AAEA,MAAI,IAAI,aAAa,GAAG;AACtB,UAAM,OAAO,IAAI,SAAS,YAAY;AACtC,QAAI,MAAM,MAAM;AAEhB,aAAS,IAAI,GAAG,IAAI,IAAI,WAAW,QAAQ,IAAI,GAAG,KAAK;AACrD,YAAM,OAAO,IAAI,WAAW,CAAC;AAC7B,aAAO,MAAM,KAAK,WAAW,OAAO,WAAW,KAAK,SAAS,IAAI;AAAA,IACnE;AAEA,QAAI,gBAAgB,QAAQ,IAAI,MAAM,IAAI;AACxC,aAAO;AACP,UAAI,IAAI,cAAc,IAAI,WAAW,SAAS,GAAG;AAC/C,iBAAS,IAAI,GAAG,IAAI,IAAI,WAAW,QAAQ,IAAI,GAAG,KAAK;AACrD,gBAAM,QAAQ,UAAU,IAAI,WAAW,CAAC,CAAY;AACpD,cAAI,OAAO;AACT,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AACA,aAAO,OAAO,OAAO;AAAA,IACvB,OAAO;AACL,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEO,SAAS,iBAAiB,YAAwB,QAAQ,GAAG;AAClE,MAAI,SAAS;AACb,WAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAC9B,cAAU;AAAA,EACZ;AAEA,SAAO,WACJ,IAAI,CAAC,SAAS;AACb,QAAI,KAAK,aAAa,IAAI;AACxB,aAAO;AAAA,EAAK,MAAM;AAAA,IACpB,WAAW,KAAK,aAAa,GAAG;AAC9B,aAAO;AAAA,EAAK,MAAM,IAAI,KAAK,SAAS;AAAA,IACtC,OAAO;AACL,UAAI,MAAM;AAAA,EAAK,MAAM,MAAM,KAAK,QAAQ;AAExC,UAAI,KAAK,YAAY;AACnB,cAAM,QAA6B,CAAC;AACpC,iBAAS,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,IAAI,GAAG,KAAK;AACtD,gBAAM,OAAO,KAAK,WAAW,CAAC;AAC9B,gBAAM,KAAK,QAAQ,IAAI,KAAK;AAAA,QAC9B;AACA,eAAO,KAAK,UAAU,KAAK;AAAA,MAC7B,OAAO;AACL,eAAO;AAAA,MACT;AAEA,aAAO;AACP,UAAI,KAAK,cAAc,KAAK,WAAW,SAAS,GAAG;AACjD,eAAO,GAAG,iBAAiB,KAAK,YAAoC,QAAQ,CAAC,CAAC;AAAA,EAAK,MAAM;AAAA,MAC3F;AAEA,aAAO;AACP,aAAO;AAAA,IACT;AAAA,EACF,CAAC,EACA,KAAK,GAAG;AACb;AAqBA,SAAS,UAAU,MAAkCA,OAAc;AACjE,QAAM,cAA4C,CAAC;AAGnD,MAAI,KAAK,SAAS,QAAQ;AAExB,aAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC7C,YAAM,QAAQ,KAAK,SAAS,CAAC;AAC7B,YAAM,YAAY,KAAK,SAAS,IAAI,CAAC;AAIrC,UAAI,MAAM,KAAK,MAAM,WAAW,KAAK,iBAAiB;AACpD,cAAM,eAAeA,MAAK,UAAU,KAAK,iBAAiB,MAAM,QAAQ;AAExE,cAAM,YAAwC;AAAA,UAC5C,SAAS;AAAA,UACT,UAAU,KAAK;AAAA,UACf,QAAQ,KAAK,kBAAkB,aAAa;AAAA,UAC5C,iBAAiB,KAAK;AAAA,UACtB,eAAe,KAAK,kBAAkB,aAAa;AAAA,UACnD,YAAY,CAAC;AAAA,UACb,UAAU,CAAC;AAAA,UACX,WAAW;AAAA,QACb;AAEA,oBAAY,KAAK,SAAS;AAAA,MAC5B;AAGA,kBAAY,KAAK,KAAK;AAItB,UAAI,aAAa,MAAM,SAAS,UAAU,UAAU;AAClD,cAAM,eAAeA,MAAK,UAAU,MAAM,QAAQ,UAAU,QAAQ;AAEpE,cAAM,YAAwC;AAAA,UAC5C,SAAS;AAAA,UACT,UAAU,MAAM;AAAA,UAChB,QAAQ,MAAM,SAAS,aAAa;AAAA,UACpC,iBAAiB,MAAM;AAAA,UACvB,eAAe,MAAM,SAAS,aAAa;AAAA,UAC3C,YAAY,CAAC;AAAA,UACb,UAAU,CAAC;AAAA,UACX,WAAW;AAAA,QACb;AAEA,oBAAY,KAAK,SAAS;AAAA,MAC5B;AAIA,UAAI,CAAC,aAAa,MAAM,SAAS,KAAK,eAAe;AACnD,cAAM,eAAeA,MAAK,UAAU,MAAM,QAAQ,KAAK,aAAa;AAEpE,cAAM,YAAwC;AAAA,UAC5C,SAAS;AAAA,UACT,UAAU,MAAM;AAAA,UAChB,QAAQ,MAAM,SAAS,aAAa;AAAA,UACpC,iBAAiB,MAAM;AAAA,UACvB,eAAe,KAAK;AAAA,UACpB,YAAY,CAAC;AAAA,UACb,UAAU,CAAC;AAAA,UACX,WAAW;AAAA,QACb;AAEA,oBAAY,KAAK,SAAS;AAAA,MAC5B;AAGA,gBAAU,OAAOA,KAAI;AAAA,IACvB;AAAA,EACF;AAIA,MAAI,CAAC,KAAK,SAAS,QAAQ;AACzB,UAAM,eAAeA,MAAK,UAAU,KAAK,iBAAiB,KAAK,aAAa;AAE5E,QAAI,aAAa,QAAQ;AACvB,YAAM,YAAwC;AAAA,QAC5C,SAAS;AAAA,QACT,UAAU,KAAK;AAAA,QACf,QAAQ,KAAK;AAAA,QACb,iBAAiB,KAAK;AAAA,QACtB,eAAe,KAAK;AAAA,QACpB,YAAY,CAAC;AAAA,QACb,UAAU,CAAC;AAAA,QACX,WAAW;AAAA,MACb;AAEA,kBAAY,KAAK,SAAS;AAAA,IAC5B;AAAA,EACF;AAEA,OAAK,WAAW;AAClB;AAEA,SAAS,aAA6B,MAAqC;AACzE,MAAI;AAEJ,MAAI,KAAK,YAAY,SAAS;AAC5B,WAAO,SAAS,eAAe,KAAK,SAAmB;AAAA,EACzD,OAAO;AACL,WAAQ,KAAK,YAAY,uBACrB,SAAS,uBAAuB,IAChC,SAAS,cAAc,KAAK,OAAO;AAEvC,eAAW,OAAO,KAAK,YAAY;AACjC,WAAK,aAAa,KAAK,KAAK,WAAW,GAAG,CAAC;AAAA,IAC7C;AAEA,aAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC7C,YAAM,QAAQ,aAAa,KAAK,SAAS,CAAC,CAAC;AAC3C,WAAK,YAAY,KAAK;AAAA,IACxB;AAAA,EACF;AAEA,SAAO;AACT;AAGA,SAAS,mBAAmBA,OAAgC;AAC1D,MAAI;AACJ,QAAM,QAAQ,OAAO,gBAAgB,GAAG;AACxC,QAAM,QAAyB,CAAC;AAGhC,SAAQ,OAAO,MAAM,KAAKA,KAAI,GAAI;AAEhC,QAAI,KAAK,CAAC,EAAE,WAAW,IAAI,GAAG;AAC5B,YAAM,iBAAiB,CAAC,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,CAACC,UAASA,MAAK,WAAW,IAAI;AAC/E,UAAI,gBAAgB;AAClB,uBAAe,SAAS,KAAK,QAAQ,KAAK,CAAC,EAAE;AAC7C,uBAAe,gBAAgB,KAAK;AAGpC,cAAM,SAAS,CAAC,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,CAACA,UAASA,MAAK,WAAW,IAAI;AACvE,YAAI,QAAQ;AAEV,gBAAM,QAAQ,MAAM,QAAQ,cAAc;AAE1C,gBAAM,OAAO,OAAO,CAAC;AAGrB,iBAAO,SAAS,KAAK,cAAc;AAAA,QACrC;AAAA,MACF;AAEA;AAAA,IACF;AAGA,UAAM,UAA2B;AAAA,MAC/B,SAAS,KAAK,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;AAAA,MAC7B,UAAU,KAAK;AAAA,MACf,QAAQ;AAAA,MACR,iBAAiB,KAAK,QAAQ,KAAK,CAAC,EAAE;AAAA,MACtC,eAAe;AAAA,MACf,YAAY,CAAC;AAAA,MACb,UAAU,CAAC;AAAA,MACX,WAAW;AAAA,IACb;AAGA,QAAI,UAAU,KAAK,CAAC,KAAK,IAAI,UAAU,QAAQ,QAAQ,SAAS,CAAC,EAAE,QAAQ,QAAQ,EAAE;AACrF,UAAM,uBAAuB,OAAO,MAAM,cAAc;AAExD,QAAI,sBAAsB;AACxB,iBAAW,aAAa,sBAAsB;AAC5C,cAAM,CAAC,MAAM,GAAG,KAAK,IAAI,UAAU,KAAK,EAAE,MAAM,GAAG;AACnD,iBAAS,OAAO,QAAQ,WAAW,EAAE;AACrC,YAAI,OAAO;AACT,kBAAQ,WAAW,IAAI,IAAI,MAAM,KAAK,GAAG,EAAE,QAAQ,YAAY,EAAE;AAAA,QACnE;AAAA,MACF;AAAA,IACF;AAEA,UAAM,8BAA8B,OAAO,MAAM,cAAc;AAC/D,QAAI,6BAA6B;AAC/B,iBAAW,aAAa,6BAA6B;AACnD,cAAM,CAAC,MAAM,GAAG,KAAK,IAAI,UAAU,KAAK,EAAE,MAAM,GAAG;AACnD,iBAAS,OAAO,QAAQ,WAAW,EAAE;AACrC,YAAI,OAAO;AACT,kBAAQ,WAAW,IAAI,IAAI,MAAM,KAAK,GAAG,EAAE,QAAQ,YAAY,EAAE;AAAA,QACnE;AAAA,MACF;AAAA,IACF;AAEA,UAAM,4BAA4B,OAAO,MAAM,SAAS;AACxD,QAAI,2BAA2B;AAC7B,iBAAW,aAAa,2BAA2B;AACjD,cAAM,OAAO,UAAU,KAAK;AAC5B,gBAAQ,WAAW,IAAI,IAAI;AAAA,MAC7B;AAAA,IACF;AAGA,QAAI,KAAK,CAAC,EAAE,SAAS,IAAI,GAAG;AAC1B,cAAQ,SAAS,QAAQ,WAAW,KAAK,CAAC,EAAE;AAC5C,cAAQ,kBAAkB,QAAQ,gBAAgB,QAAQ;AAG1D,YAAM,SAAS,CAAC,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,CAACA,UAASA,MAAK,WAAW,IAAI;AACvE,UAAI,QAAQ;AAEV,eAAO,SAAS,KAAK,OAAO;AAC5B;AAAA,MACF;AAAA,IACF;AAEA,UAAM,KAAK,OAAO;AAAA,EACpB;AAEA,QAAM,eAA2C;AAAA,IAC/C,SAAS;AAAA,IACT,UAAU;AAAA,IACV,QAAQD,MAAK;AAAA,IACb,iBAAiB;AAAA,IACjB,eAAeA,MAAK;AAAA,IACpB,YAAY,CAAC;AAAA,IACb,UAAU;AAAA,IACV,WAAW;AAAA,EACb;AAEA,YAAU,cAAcA,KAAI;AAE5B,SAAO,aAA+B,YAAY;AACpD;AASO,SAAS,UAAUA,OAAiD;AAIzE,QAAM,aAAaA,MAAK,MAAM,UAAU;AAExC,QAAME,YAAW,IAAI,SAAS;AAG9B,MAAI,CAAC,YAAY;AACf,UAAM,mBAAmBA,UAAS,uBAAuB;AACzD,qBAAiB,YAAYA,UAAS,eAAeF,KAAI,CAAC;AAC1D,WAAO;AAAA,EACT;AAEA,QAAM,WAAW,mBAAmBA,KAAI;AAExC,MAAI,SAAS,WAAW,SAAS,GAAG;AAClC,WAAO;AAAA,EACT;AAEA,SAAO,SAAS,WAAW,CAAC;AAC9B;AAEO,SAAS,kBAAkBA,OAAc;AAC9C,QAAM,UAAU,UAAUA,KAAI;AAC9B,QAAM,cAAc,iBAAiB,mBAAmB,mBAAmB,QAAQ,aAAa,CAAC,OAAO,CAAC;AACzG,SAAO,IAAI,WAAW;AAAA;AACxB;AAEO,IAAM,WAAW,IAAI,SAAS;AAErC,IAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,KAAK,YAAY,SAAS,cAAc,MAAM,CAAC;AAC/C,KAAK,YAAY,SAAS,IAAI;;;ACx3B9B,SAAS,OAAO,eAAe;AAE/B,OAAO,cAAc;;;ACHrB,OAAO,QAAQ;AAkCf,eAAsB,MAAM,QAAgB,eAA8B;AACxE,QAAM,UAAU;AAAA,IACd,GAAG,MAAM;AAAA,IACT,GAAI,iBAAiB,CAAC;AAAA,EACxB;AAEA,MAAI,QAAQ,WAAW;AACrB,YAAQ,YAAY,QAAQ,UAAU,QAAQ,SAAS,EAAE,IAAI;AAAA,EAC/D;AAEA,MAAI,QAAQ,eAAe;AACzB,YAAQ,gBAAgB,QAAQ,cAAc,QAAQ,SAAS,EAAE,IAAI;AAAA,EACvE;AAEA,QAAM,EAAE,SAAS,IAAI,MAAM,OAAO,UAAU;AAE5C,MAAI;AACF,UAAM,WAAW,MAAM,SAAS,QAAQ,OAAO;AAE/C,QAAI,QAAQ,WAAW;AACrB,iBAAW,KAAK,SAAS,QAAQ;AAC/B,WAAG,cAAc,QAAQ,YAAY,SAAS,OAAO,CAAC,EAAE,MAAM,SAAS,OAAO,CAAC,EAAE,QAAQ;AAAA,MAC3F;AAEA,iBAAW,KAAK,SAAS,OAAO;AAC9B,WAAG,cAAc,QAAQ,YAAY,SAAS,MAAM,CAAC,EAAE,MAAM,SAAS,MAAM,CAAC,EAAE,QAAQ;AAAA,MACzF;AAAA,IACF;AAEA,QAAI,QAAQ,eAAe;AACzB,YAAMG,QAAO;AAAA;AAAA,aAEN,kBAAkB,SAAS,KAAK,KAAK,EAAE,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAOhD,SAAG,cAAc,GAAG,QAAQ,aAAa,aAAaA,KAAI;AAAA,IAC5D;AAAA,EACF,SAAS,KAAK;AACZ,YAAQ,OAAO,MAAO,IAAY,SAAS,IAAI;AAC/C,YAAQ,OAAO,MAAO,IAAY,OAAO,IAAI;AAC7C,YAAQ,OAAO,MAAO,IAAY,UAAU,IAAI;AAAA,EAClD;AACF;AAEA,MAAM,UAAU;AAAA,EACd,WAAW;AAAA,EACX,eAAe;AAAA;AAAA,EAGf,MAAM;AAAA,EACN,SAAS;AAAA,EACT,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,KAAK;AAAA,EACL,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,SAAS;AAAA,EACT,aAAa;AAAA,EACb,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AAAA,EACT,OAAO;AAAA,IACL,SAAS;AAAA,IACT,WAAW;AAAA,IACX,cAAc;AAAA,IACd,OAAO;AAAA,IACP,UAAU;AAAA,IACV,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA;AAAA,EACV;AACF;;;AC/GA,YAAY,SAAS;AAErB,OAAO,cAAc;AACrB,SAAS,gBAAgB;AACzB,OAAO,aAAa;AAEpB,OAAOC,SAAQ;AAGf,eAAsB,OACpB,MACA,UAA+B,CAAC,GAChC;AACA,MAAI,OAAO,SAAS,UAAU;AAC5B,UAAM,MAAM,KAAK,MAAM,GAAG,EAAE,IAAI;AAChC,QAAI,OAAO,0BAA0B,KAAK,GAAG,GAAG;AAC9C,UAAI,WAAW,KAAK,GAAG,KAAK,CAAC,QAAQ,YAAY;AAC/C,cAAM,iBAAiB,QAAQ;AAC/B,cAAM,kBAAkB,CAAC,CAAC;AAE1B,cAAM,iBAAiB;AAAA,UACrB,UAAU,QAAQ,IAAI;AAAA;AAAA,UACtB,gBAAgB;AAAA;AAAA,UAChB,OAAO,CAAC,IAAI;AAAA,UACZ,SAAS,CAAC,WAAW,WAAW,YAAY,YAAY,UAAU;AAAA,UAClE,SAAS,CAAC,cAAc,gBAAgB,gBAAgB,SAAS;AAAA,UACjE,QAAQ;AAAA,UACR,mBAAmB;AAAA,UACnB,OAAO,kBAAkB,CAAC,cAAc,IAAI,CAAC;AAAA,UAC7C,GAAI,QAAQ,OAAO,CAAC;AAAA,UACpB,iBAAiB;AAAA,YACf,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,eAAe;AAAA,YACf,QAAQ,CAAC;AAAA,YACT,aAAa;AAAA,YACb;AAAA,YACA,qBAAqB;AAAA,YACrB,SAAS;AAAA,YACT,iBAAiB;AAAA,YACjB,iBAAiB;AAAA,YACjB,mBAAmB;AAAA,YACnB,gBAAgB;AAAA,YAChB,IAAI,QAAQ,OAAO,CAAC,GAAG;AAAA,UACzB;AAAA,UACA,YAAY;AAAA,UACZ,aAAa;AAAA,QACf;AAGA,gBAAQ,IAAI,OAAO,cAAc;AAEjC,QAAI,UAAM,cAAc;AAAA,MAC1B;AAEA,YAAM,iBAAiB;AAAA,QACrB,aAAa,CAAC,IAAI;AAAA,QAClB,QAAQ,YAAY,UAAU,QAAQ,SAAS;AAAA,QAC/C,WAAW;AAAA,QACX,OAAO;AAAA,QACP,QAAQ,QAAQ;AAAA,QAChB,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,QAAQ;AAAA,UACN,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,QAAQ;AAAA,UACR,OAAO;AAAA,QACT;AAAA,QACA,GAAI,QAAQ,WAAW,CAAC;AAAA,MAC1B;AAEA,YAAM,SAAS,MAAM,QAAQ,MAAM,cAAc;AACjD,UAAI,OAAO,aAAa,WAAW,GAAG;AACpC,cAAM,IAAI,MAAM,OAAO,OAAO,KAAK,IAAI,CAAC;AAAA,MAC1C;AAEA,UAAI,QAAQ,SAAS;AACnB,cAAM,SAAS,MAAM,OAAO,QAAQ;AACpC,cAAM,UAAU,MAAM,OAAO,OAAO,OAAO,YAAY,CAAC,EAAE,MAAM;AAAA,UAC9D,WAAW;AAAA,YACT,SAAS,OAAO,YAAY,CAAC,EAAE,KAAK,SAAS;AAAA,UAC/C;AAAA,UACA,UAAU;AAAA,YACR,sBAAsB;AAAA,UACxB;AAAA,UACA,QAAQ;AAAA,YACN,gBAAgB;AAAA,UAClB;AAAA,UACA,MAAM;AAAA,UACN,GAAI,QAAQ,UAAU,CAAC;AAAA,QACzB,CAAC;AAED,YAAI,CAAC,QAAQ,QAAQ,CAAC,QAAQ,KAAK;AACjC,gBAAM,IAAI,MAAM,eAAe;AAAA,QACjC;AAEA,cAAM,YAAY,OAAO,KAAK,QAAQ,IAAI,SAAS,CAAC,EAAE,SAAS,QAAQ;AACvE,cAAM,SAAS,mEAAmE,SAAS;AAC3F,eAAO,EAAE,KAAK,QAAQ,MAAM,KAAK,QAAQ,KAAK;AAAA,MAChD,OAAO;AACL,cAAM,YAAY,OAAO,KAAK,OAAO,YAAY,CAAC,EAAE,KAAK,SAAS,CAAC,EAAE,SAAS,QAAQ;AACtF,cAAM,SAAS,mEAAmE,SAAS;AAC3F,eAAO,EAAE,KAAK,OAAO,YAAY,CAAC,EAAE,MAAM,KAAK,QAAQ,KAAK;AAAA,MAC9D;AAAA,IACF,WAAW,OAAO,kBAAkB,KAAK,GAAG,GAAG;AAC7C,YAAM,SAAS,MAAM,IAAI,SAAS;AAAA,QAChC,WAAW;AAAA,QACX,OAAO;AAAA,UACL,GAAG;AAAA,YACD,mBAAmB;AAAA,UACrB;AAAA,UACA,GAAG;AAAA,YACD,kBAAkB;AAAA;AAAA,UACpB;AAAA,QACF;AAAA,QACA,GAAI,QAAQ,YAAY,CAAC;AAAA,MAC3B,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC;AAEhB,aAAO,EAAE,KAAK,OAAO,QAAQ,KAAK,MAAM,KAAK;AAAA,IAC/C,OAAO;AACL,aAAO,EAAE,KAAKA,IAAG,aAAa,MAAM,MAAM,GAAG,KAAK,MAAM,KAAK;AAAA,IAC/D;AAAA,EACF,WAAW,OAAO,SAAS,YAAY,SAAS,MAAM;AACpD,WAAO,EAAE,KAAK,MAAM,GAAG,KAAK;AAAA,EAC9B;AAEA,QAAM,IAAI,MAAM,sBAAsB,IAAI,EAAE;AAC9C;AAEA,OAAO,QAAQ,eACb,cACA,KACA,UAA+B,CAAC,GAChC;AACA,QAAMC,QAAO,MAAM,QAAQ,IAAI,YAAY;AAE3C,QAAM,WAAWA,MAAK,IAAI,CAAC,SAAS;AAClC,WAAO;AAAA,MACL,KAAK;AAAA,MACL,WAAW;AAAA,IACb;AAAA,EACF,CAAC;AAED,QAAM,WAAW,IAAI,SAAS;AAE9B,QAAM,SAAS,MAAM,SAAS,MAAM;AAAA,IAClC,UAAU;AAAA,IACV,WAAW;AAAA,IACX,WAAW;AAAA,IACX,kBAAkB,CAAC,YAAY,QAAQ,MAAM,sCAAsC,KAAK,CAAC;AAAA,IACzF,GAAG;AAAA,IACH,SAAS;AAAA,IACT,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,EACpB,CAAC;AAED,QAAM,WAAW,MAAM,IAAI,SAAS;AAAA,IAClC,WAAW;AAAA,IACX,OAAO;AAAA,MACL,GAAG;AAAA,QACD,mBAAmB;AAAA,MACrB;AAAA,MACA,GAAG;AAAA,QACD,kBAAkB;AAAA;AAAA,MACpB;AAAA,IACF;AAAA,IACA,GAAI,QAAQ,YAAY,CAAC;AAAA,EAC3B,CAAC,EAAE,OAAO,OAAO,CAAC,EAAE,GAAG;AAEvB,SAAO,SAAS;AAClB;;;AC5KA,OAAOC,SAAQ;AACf,OAAO,UAAU;AAEV,SAAS,GAAG,MAAc,UAAU,CAAC,GAAG;AAC7C,QAAM,iBAAiB,KAAK,QAAQ,WAAW,cAAc;AAC7D,QAAM,QAAQA,IAAG,aAAa,gBAAgB,MAAM;AACpD,QAAM,MAAM;AAAA,IACV,SAAS;AAAA,IACT,MAAM;AAAA,IACN,MAAM,CAAC,GAAG;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,aAAa;AAAA,IACb,GAAG;AAAA,EACL;AACA,MAAI,WAAW,MACZ,QAAQ,MAAM,IAAI,IAAI,OAAO,EAAE,EAC/B,QAAQ,eAAe,IAAI,IAAI,EAC/B,QAAQ,SAAS,OAAO,IAAI,KAAK,KAAK,KAAK,IAAI,IAAI,EACnD,QAAQ,iBAAiB,IAAI,WAAW,EACxC,QAAQ,mBAAmB,IAAI,WAAW,mBAAmB,iBAAiB;AAEjF,MAAI,CAAC,IAAI,OAAO;AACd,eAAW,SAAS,QAAQ,eAAe,UAAU;AAAA,EACvD;AAEA,EAAAA,IAAG,cAAc,MAAM,UAAU,MAAM;AACzC;;;AC3BA,SAAS,yBAAyB;AAElC,IAAM,iBAAiB,IAAI,kBAA0C;AACrE,IAAI,cAAsC,CAAC;AAEpC,IAAM,gBAAN,MAAuC;AAAA,EAC5C,IAAI,QAAgC;AAClC,WAAO,eAAe,SAAS,KAAK;AAAA,EACtC;AAAA,EAEA,IAAI,SAAiB;AACnB,UAAM,QAAQ,KAAK;AACnB,WAAO,QAAQ,OAAO,KAAK,KAAK,EAAE,SAAS;AAAA,EAC7C;AAAA,EAEA,QAAc;AACZ,UAAM,QAAQ,KAAK;AACnB,QAAI,OAAO;AACT,iBAAW,OAAO,OAAO;AACvB,gBAAQ,eAAe,OAAO,GAAG;AAAA,MACnC;AAAA,IACF;AAAA,EACF;AAAA,EAEA,QAAQ,KAA4B;AAClC,UAAM,QAAQ,KAAK;AACnB,WAAO,QAAQ,MAAM,GAAG,KAAK,OAAO;AAAA,EACtC;AAAA,EAEA,IAAI,OAA8B;AAChC,UAAM,QAAQ,KAAK;AACnB,WAAO,QAAQ,OAAO,KAAK,KAAK,EAAE,KAAK,KAAK,OAAO;AAAA,EACrD;AAAA,EAEA,WAAW,KAAmB;AAC5B,UAAM,QAAQ,KAAK;AACnB,QAAI,OAAO;AACT,cAAQ,eAAe,OAAO,GAAG;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,QAAQ,KAAa,OAAqB;AACxC,UAAM,QAAQ,KAAK;AACnB,QAAI,OAAO;AACT,YAAM,GAAG,IAAI,OAAO,KAAK;AAAA,IAC3B;AAAA,EACF;AAAA,EAEA,OAAO,IAAI,UAAsB;AAC/B,mBAAe,IAAI,CAAC,GAAG,QAAQ;AAAA,EACjC;AAAA,EAEA,SAAiC;AAC/B,UAAM,QAAQ,KAAK;AACnB,WAAO,QAAQ,EAAE,GAAG,MAAM,IAAI,CAAC;AAAA,EACjC;AACF;;;AJ/CA,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,iBAAiB,IAAI,cAAc;AAC1C,OAAO,eAAe,IAAI,cAAc;AAExC,SAAS,UAAU,MAAa;AAC9B,QAAM,YAAY,MAAM;AACxB,QAAM,SAAS,MAAM,OAAO,SAAS;AACrC,UAAQ;AACR,SAAO;AACT;",
6
+ "names": ["node", "html", "item", "document", "html", "fs", "html", "fs"]
7
7
  }
@@ -38,10 +38,16 @@ function serialize(obj, prefix = "") {
38
38
  return params;
39
39
  }
40
40
  function serializeFormData(data) {
41
- return Object.entries(data).reduce((fd, [key, value]) => {
42
- fd.append(key, value);
43
- return fd;
44
- }, new FormData());
41
+ const fd = new FormData();
42
+ Object.entries(data).forEach(([key, value]) => {
43
+ if (value === null || value === void 0) return;
44
+ if (Array.isArray(value)) {
45
+ value.forEach((v) => fd.append(key, v));
46
+ } else {
47
+ fd.append(key, value);
48
+ }
49
+ });
50
+ return fd;
45
51
  }
46
52
  function parseUrl(url, options) {
47
53
  const urlWithoutSlash = url.replace(/\/+$/, "").trim();
@@ -60,6 +66,7 @@ function parseUrl(url, options) {
60
66
  return new URL(u, options.urls.base);
61
67
  }
62
68
  var defaultOptions = { allowedMethods: ["get", "post", "put", "patch", "delete", "head", "options"] };
69
+ var isNativeBody = (data) => data instanceof FormData || data instanceof URLSearchParams || data instanceof Blob || data instanceof ArrayBuffer || typeof DataView !== "undefined" && data instanceof DataView || typeof ReadableStream !== "undefined" && data instanceof ReadableStream;
63
70
  function Requester(baseUrl = "", options = defaultOptions) {
64
71
  const url = baseUrl.replace(/\/$/gi, "").trim();
65
72
  if (!options.urls) {
@@ -104,11 +111,17 @@ function Requester(baseUrl = "", options = defaultOptions) {
104
111
  throw new Error(`Failed to parse URL: ${url2}`);
105
112
  }
106
113
  if (data) {
107
- const isJson = /json/gi.test(contentType);
108
114
  if (innerOptions.method === "GET" && typeof data === "object") {
109
115
  finalUrl.search = serialize(data).toString();
110
- } else if (innerOptions.method !== "GET") {
111
- innerOptions.body = isJson ? JSON.stringify(data) : serializeFormData(data);
116
+ } else if (isNativeBody(data) || typeof data === "string") {
117
+ innerOptions.body = data;
118
+ } else {
119
+ const isJson = /json/gi.test(contentType);
120
+ if (isJson) {
121
+ innerOptions.body = JSON.stringify(data);
122
+ } else {
123
+ innerOptions.body = serializeFormData(data);
124
+ }
112
125
  }
113
126
  }
114
127
  const response = await fetch(finalUrl.toString(), innerOptions);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../lib/request/index.ts"],
4
- "sourcesContent": ["import { isNodeJs } from \"valyrian.js\";\nimport { get, set } from \"valyrian.js/utils\";\n\ninterface UrlOptions {\n base?: string; // Used to prefix the url for scoped requests.\n node?: string | null; // Used to redirect local requests to node server for server side rendering.\n api?: string | null; // Used to redirect api requests to node server for server side rendering.\n}\n\ninterface RequestOptions {\n allowedMethods?: string[];\n urls?: UrlOptions;\n [key: string | number | symbol]: any;\n}\n\ninterface RequestOptionsWithUrls extends RequestOptions {\n urls: UrlOptions;\n allowedMethods: string[];\n}\n\ninterface SendOptions extends RequestOptionsWithUrls, RequestInit {\n allowedMethods: string[];\n method: string;\n headers: Record<string, string>;\n resolveWithFullResponse?: boolean;\n}\n\nexport interface RequestInterface {\n // eslint-disable-next-line no-unused-vars\n (method: string, url: string, data?: Record<string, any> | null, options?: Partial<SendOptions>): any | Response;\n // eslint-disable-next-line no-unused-vars\n new: (baseUrl: string, options?: RequestOptions) => RequestInterface;\n // eslint-disable-next-line no-unused-vars\n setOptions: (key: string, value: any) => void;\n // eslint-disable-next-line no-unused-vars\n getOptions: (key?: string) => RequestOptions | void;\n // eslint-disable-next-line no-unused-vars\n get: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n post: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n put: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n patch: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n delete: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n head: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n options: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n [key: string | number | symbol]: any;\n}\n\n// This method is used to serialize an object into a query string.\nfunction serialize(obj: Record<string, any>, prefix: string = \"\"): URLSearchParams {\n const params = new URLSearchParams();\n\n Object.keys(obj).forEach((prop: string) => {\n const key = prefix ? `${prefix}[${prop}]` : prop;\n if (typeof obj[prop] === \"object\") {\n params.append(key, serialize(obj[prop], key).toString());\n } else {\n params.append(key, obj[prop]);\n }\n });\n\n return params;\n}\n\nfunction serializeFormData(data: Record<string, any>): FormData {\n return Object.entries(data).reduce((fd, [key, value]) => {\n fd.append(key, value);\n return fd;\n }, new FormData());\n}\n\nfunction parseUrl(url: string, options: RequestOptionsWithUrls) {\n const urlWithoutSlash = url.replace(/\\/+$/, \"\").trim();\n const u = /^https?/gi.test(urlWithoutSlash) ? urlWithoutSlash : `${options.urls.base}${urlWithoutSlash}`;\n\n if (isNodeJs && typeof options.urls.node === \"string\") {\n if (typeof options.urls.api === \"string\") {\n return new URL(u.replace(options.urls.api, options.urls.node));\n }\n\n if (!/^https?/gi.test(u)) {\n return new URL(u, options.urls.node);\n }\n }\n\n if (/^https?/gi.test(u)) {\n return new URL(u);\n }\n\n return new URL(u, options.urls.base);\n}\n\nconst defaultOptions: RequestOptions = { allowedMethods: [\"get\", \"post\", \"put\", \"patch\", \"delete\", \"head\", \"options\"] };\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nfunction Requester(baseUrl = \"\", options: RequestOptions = defaultOptions) {\n const url = baseUrl.replace(/\\/$/gi, \"\").trim();\n if (!options.urls) {\n options.urls = {\n base: \"\",\n node: null,\n api: null\n };\n }\n\n if (!options.allowedMethods) {\n options.allowedMethods = defaultOptions.allowedMethods;\n }\n\n const opts: RequestOptionsWithUrls = {\n ...(options as RequestOptionsWithUrls),\n urls: {\n node: options.urls.node || null,\n api: options.urls.api || null,\n base: options.urls.base ? options.urls.base + url : url\n }\n };\n\n // eslint-disable-next-line complexity\n const request = async function request(\n method: string,\n url: string,\n data?: Record<string, any> | null,\n options: Record<string, any> = {}\n ) {\n const innerOptions: SendOptions = {\n method: method.toUpperCase(),\n headers: {},\n resolveWithFullResponse: false,\n ...opts,\n ...options\n } as SendOptions;\n\n innerOptions.headers = { ...innerOptions.headers, ...opts.headers, ...options.headers };\n\n if (!innerOptions.headers.Accept) {\n innerOptions.headers.Accept = \"application/json\";\n }\n\n const acceptType = innerOptions.headers.Accept;\n const contentType = innerOptions.headers[\"Content-Type\"] || innerOptions.headers[\"content-type\"] || \"\";\n\n if (!innerOptions.allowedMethods.includes(method)) {\n throw new Error(`Method ${method} not allowed. Allowed methods: ${innerOptions.allowedMethods.join(\", \")}`);\n }\n\n let finalUrl: URL;\n try {\n finalUrl = parseUrl(url, opts);\n } catch (error) {\n throw new Error(`Failed to parse URL: ${url}`);\n }\n\n if (data) {\n const isJson = /json/gi.test(contentType);\n\n if (innerOptions.method === \"GET\" && typeof data === \"object\") {\n finalUrl.search = serialize(data).toString();\n } else if (innerOptions.method !== \"GET\") {\n innerOptions.body = isJson ? JSON.stringify(data) : serializeFormData(data);\n }\n }\n\n const response = await fetch(finalUrl.toString(), innerOptions);\n let body = null;\n if (!response.ok) {\n const err = new Error(`${response.status}: ${response.statusText}`) as Error & { response?: any; body?: any };\n err.response = response;\n if (/text/gi.test(acceptType)) {\n err.body = await response.text();\n }\n\n if (/json/gi.test(acceptType)) {\n try {\n err.body = await response.json();\n } catch (error) {\n err.body = null;\n // eslint-disable-next-line no-console\n console.warn(\"Failed to parse JSON response:\", error);\n }\n }\n\n throw err;\n }\n\n if (innerOptions.resolveWithFullResponse) {\n return response;\n }\n\n if (/text/gi.test(acceptType)) {\n body = await response.text();\n } else if (/json/gi.test(acceptType)) {\n try {\n body = await response.json();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(\"Failed to parse JSON response:\", error);\n body = null;\n }\n } else if (/blob/gi.test(acceptType)) {\n body = await response.blob();\n } else if (/arraybuffer/gi.test(acceptType)) {\n body = await response.arrayBuffer();\n } else {\n body = response;\n }\n\n return body || response;\n } as unknown as RequestInterface;\n\n request.new = (baseUrl: string, options?: RequestOptions) => Requester(baseUrl, { ...opts, ...(options || {}) });\n\n request.setOption = (key: string, value: any) => {\n set(opts, key, value);\n return opts;\n };\n\n request.getOptions = (key?: string) => {\n if (key) {\n return get(opts, key);\n }\n\n return opts;\n };\n\n Object.assign(\n request,\n opts.allowedMethods.reduce((acc: Record<string, any>, method) => {\n acc[method] = (url: string, data?: Record<string, any> | null, options?: Record<string, any>) =>\n request(method, url, data, options);\n return acc;\n }, {})\n );\n\n return request;\n}\n\nexport const request = Requester();\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { isNodeJs } from \"valyrian.js\";\nimport { get, set } from \"valyrian.js/utils\";\n\ninterface UrlOptions {\n base?: string; // Used to prefix the url for scoped requests.\n node?: string | null; // Used to redirect local requests to node server for server side rendering.\n api?: string | null; // Used to redirect api requests to node server for server side rendering.\n}\n\ninterface RequestOptions {\n allowedMethods?: string[];\n urls?: UrlOptions;\n [key: string | number | symbol]: any;\n}\n\ninterface RequestOptionsWithUrls extends RequestOptions {\n urls: UrlOptions;\n allowedMethods: string[];\n}\n\ninterface SendOptions extends RequestOptionsWithUrls, RequestInit {\n allowedMethods: string[];\n method: string;\n headers: Record<string, string>;\n resolveWithFullResponse?: boolean;\n}\n\nexport interface RequestInterface {\n // eslint-disable-next-line no-unused-vars\n (method: string, url: string, data?: Record<string, any> | null, options?: Partial<SendOptions>): any | Response;\n // eslint-disable-next-line no-unused-vars\n new: (baseUrl: string, options?: RequestOptions) => RequestInterface;\n // eslint-disable-next-line no-unused-vars\n setOptions: (key: string, value: any) => void;\n // eslint-disable-next-line no-unused-vars\n getOptions: (key?: string) => RequestOptions | void;\n // eslint-disable-next-line no-unused-vars\n get: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n post: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n put: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n patch: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n delete: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n head: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n // eslint-disable-next-line no-unused-vars\n options: (url: string, data?: Record<string, any> | null, options?: Record<string, any>) => any | Response;\n [key: string | number | symbol]: any;\n}\n\n// This method is used to serialize an object into a query string.\nfunction serialize(obj: Record<string, any>, prefix: string = \"\"): URLSearchParams {\n const params = new URLSearchParams();\n\n Object.keys(obj).forEach((prop: string) => {\n const key = prefix ? `${prefix}[${prop}]` : prop;\n if (typeof obj[prop] === \"object\") {\n params.append(key, serialize(obj[prop], key).toString());\n } else {\n params.append(key, obj[prop]);\n }\n });\n\n return params;\n}\n\nfunction serializeFormData(data: Record<string, any>): FormData {\n const fd = new FormData();\n Object.entries(data).forEach(([key, value]) => {\n if (value === null || value === undefined) return; // Ignorar nulos\n\n if (Array.isArray(value)) {\n value.forEach((v) => fd.append(key, v));\n } else {\n fd.append(key, value);\n }\n });\n return fd;\n}\n\nfunction parseUrl(url: string, options: RequestOptionsWithUrls) {\n const urlWithoutSlash = url.replace(/\\/+$/, \"\").trim();\n const u = /^https?/gi.test(urlWithoutSlash) ? urlWithoutSlash : `${options.urls.base}${urlWithoutSlash}`;\n\n if (isNodeJs && typeof options.urls.node === \"string\") {\n if (typeof options.urls.api === \"string\") {\n return new URL(u.replace(options.urls.api, options.urls.node));\n }\n\n if (!/^https?/gi.test(u)) {\n return new URL(u, options.urls.node);\n }\n }\n\n if (/^https?/gi.test(u)) {\n return new URL(u);\n }\n\n return new URL(u, options.urls.base);\n}\n\nconst defaultOptions: RequestOptions = { allowedMethods: [\"get\", \"post\", \"put\", \"patch\", \"delete\", \"head\", \"options\"] };\n\nconst isNativeBody = (data: any) =>\n data instanceof FormData ||\n data instanceof URLSearchParams ||\n data instanceof Blob ||\n data instanceof ArrayBuffer ||\n (typeof DataView !== \"undefined\" && data instanceof DataView) ||\n (typeof ReadableStream !== \"undefined\" && data instanceof ReadableStream);\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nfunction Requester(baseUrl = \"\", options: RequestOptions = defaultOptions) {\n const url = baseUrl.replace(/\\/$/gi, \"\").trim();\n if (!options.urls) {\n options.urls = {\n base: \"\",\n node: null,\n api: null\n };\n }\n\n if (!options.allowedMethods) {\n options.allowedMethods = defaultOptions.allowedMethods;\n }\n\n const opts: RequestOptionsWithUrls = {\n ...(options as RequestOptionsWithUrls),\n urls: {\n node: options.urls.node || null,\n api: options.urls.api || null,\n base: options.urls.base ? options.urls.base + url : url\n }\n };\n\n // eslint-disable-next-line complexity\n const request = async function request(\n method: string,\n url: string,\n data?: Record<string, any> | null,\n options: Record<string, any> = {}\n ) {\n const innerOptions: SendOptions = {\n method: method.toUpperCase(),\n headers: {},\n resolveWithFullResponse: false,\n ...opts,\n ...options\n } as SendOptions;\n\n innerOptions.headers = { ...innerOptions.headers, ...opts.headers, ...options.headers };\n\n if (!innerOptions.headers.Accept) {\n innerOptions.headers.Accept = \"application/json\";\n }\n\n const acceptType = innerOptions.headers.Accept;\n const contentType = innerOptions.headers[\"Content-Type\"] || innerOptions.headers[\"content-type\"] || \"\";\n\n if (!innerOptions.allowedMethods.includes(method)) {\n throw new Error(`Method ${method} not allowed. Allowed methods: ${innerOptions.allowedMethods.join(\", \")}`);\n }\n\n let finalUrl: URL;\n try {\n finalUrl = parseUrl(url, opts);\n } catch (error) {\n throw new Error(`Failed to parse URL: ${url}`);\n }\n\n if (data) {\n if (innerOptions.method === \"GET\" && typeof data === \"object\") {\n finalUrl.search = serialize(data).toString();\n } else if (isNativeBody(data) || typeof data === \"string\") {\n innerOptions.body = data as BodyInit;\n } else {\n const isJson = /json/gi.test(contentType);\n if (isJson) {\n innerOptions.body = JSON.stringify(data);\n } else {\n innerOptions.body = serializeFormData(data);\n }\n }\n }\n\n const response = await fetch(finalUrl.toString(), innerOptions);\n let body = null;\n if (!response.ok) {\n const err = new Error(`${response.status}: ${response.statusText}`) as Error & { response?: any; body?: any };\n err.response = response;\n if (/text/gi.test(acceptType)) {\n err.body = await response.text();\n }\n\n if (/json/gi.test(acceptType)) {\n try {\n err.body = await response.json();\n } catch (error) {\n err.body = null;\n // eslint-disable-next-line no-console\n console.warn(\"Failed to parse JSON response:\", error);\n }\n }\n\n throw err;\n }\n\n if (innerOptions.resolveWithFullResponse) {\n return response;\n }\n\n if (/text/gi.test(acceptType)) {\n body = await response.text();\n } else if (/json/gi.test(acceptType)) {\n try {\n body = await response.json();\n } catch (error) {\n // eslint-disable-next-line no-console\n console.warn(\"Failed to parse JSON response:\", error);\n body = null;\n }\n } else if (/blob/gi.test(acceptType)) {\n body = await response.blob();\n } else if (/arraybuffer/gi.test(acceptType)) {\n body = await response.arrayBuffer();\n } else {\n body = response;\n }\n\n return body || response;\n } as unknown as RequestInterface;\n\n request.new = (baseUrl: string, options?: RequestOptions) => Requester(baseUrl, { ...opts, ...(options || {}) });\n\n request.setOption = (key: string, value: any) => {\n set(opts, key, value);\n return opts;\n };\n\n request.getOptions = (key?: string) => {\n if (key) {\n return get(opts, key);\n }\n\n return opts;\n };\n\n Object.assign(\n request,\n opts.allowedMethods.reduce((acc: Record<string, any>, method) => {\n acc[method] = (url: string, data?: Record<string, any> | null, options?: Record<string, any>) =>\n request(method, url, data, options);\n return acc;\n }, {})\n );\n\n return request;\n}\n\nexport const request = Requester();\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAyB;AACzB,mBAAyB;AAqDzB,SAAS,UAAU,KAA0B,SAAiB,IAAqB;AACjF,QAAM,SAAS,IAAI,gBAAgB;AAEnC,SAAO,KAAK,GAAG,EAAE,QAAQ,CAAC,SAAiB;AACzC,UAAM,MAAM,SAAS,GAAG,MAAM,IAAI,IAAI,MAAM;AAC5C,QAAI,OAAO,IAAI,IAAI,MAAM,UAAU;AACjC,aAAO,OAAO,KAAK,UAAU,IAAI,IAAI,GAAG,GAAG,EAAE,SAAS,CAAC;AAAA,IACzD,OAAO;AACL,aAAO,OAAO,KAAK,IAAI,IAAI,CAAC;AAAA,IAC9B;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEA,SAAS,kBAAkB,MAAqC;AAC9D,QAAM,KAAK,IAAI,SAAS;AACxB,SAAO,QAAQ,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC7C,QAAI,UAAU,QAAQ,UAAU,OAAW;AAE3C,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,YAAM,QAAQ,CAAC,MAAM,GAAG,OAAO,KAAK,CAAC,CAAC;AAAA,IACxC,OAAO;AACL,SAAG,OAAO,KAAK,KAAK;AAAA,IACtB;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAEA,SAAS,SAAS,KAAa,SAAiC;AAC9D,QAAM,kBAAkB,IAAI,QAAQ,QAAQ,EAAE,EAAE,KAAK;AACrD,QAAM,IAAI,YAAY,KAAK,eAAe,IAAI,kBAAkB,GAAG,QAAQ,KAAK,IAAI,GAAG,eAAe;AAEtG,MAAI,4BAAY,OAAO,QAAQ,KAAK,SAAS,UAAU;AACrD,QAAI,OAAO,QAAQ,KAAK,QAAQ,UAAU;AACxC,aAAO,IAAI,IAAI,EAAE,QAAQ,QAAQ,KAAK,KAAK,QAAQ,KAAK,IAAI,CAAC;AAAA,IAC/D;AAEA,QAAI,CAAC,YAAY,KAAK,CAAC,GAAG;AACxB,aAAO,IAAI,IAAI,GAAG,QAAQ,KAAK,IAAI;AAAA,IACrC;AAAA,EACF;AAEA,MAAI,YAAY,KAAK,CAAC,GAAG;AACvB,WAAO,IAAI,IAAI,CAAC;AAAA,EAClB;AAEA,SAAO,IAAI,IAAI,GAAG,QAAQ,KAAK,IAAI;AACrC;AAEA,IAAM,iBAAiC,EAAE,gBAAgB,CAAC,OAAO,QAAQ,OAAO,SAAS,UAAU,QAAQ,SAAS,EAAE;AAEtH,IAAM,eAAe,CAAC,SACpB,gBAAgB,YAChB,gBAAgB,mBAChB,gBAAgB,QAChB,gBAAgB,eACf,OAAO,aAAa,eAAe,gBAAgB,YACnD,OAAO,mBAAmB,eAAe,gBAAgB;AAG5D,SAAS,UAAU,UAAU,IAAI,UAA0B,gBAAgB;AACzE,QAAM,MAAM,QAAQ,QAAQ,SAAS,EAAE,EAAE,KAAK;AAC9C,MAAI,CAAC,QAAQ,MAAM;AACjB,YAAQ,OAAO;AAAA,MACb,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,IACP;AAAA,EACF;AAEA,MAAI,CAAC,QAAQ,gBAAgB;AAC3B,YAAQ,iBAAiB,eAAe;AAAA,EAC1C;AAEA,QAAM,OAA+B;AAAA,IACnC,GAAI;AAAA,IACJ,MAAM;AAAA,MACJ,MAAM,QAAQ,KAAK,QAAQ;AAAA,MAC3B,KAAK,QAAQ,KAAK,OAAO;AAAA,MACzB,MAAM,QAAQ,KAAK,OAAO,QAAQ,KAAK,OAAO,MAAM;AAAA,IACtD;AAAA,EACF;AAGA,QAAMA,WAAU,eAAeA,SAC7B,QACAC,MACA,MACAC,WAA+B,CAAC,GAChC;AACA,UAAM,eAA4B;AAAA,MAChC,QAAQ,OAAO,YAAY;AAAA,MAC3B,SAAS,CAAC;AAAA,MACV,yBAAyB;AAAA,MACzB,GAAG;AAAA,MACH,GAAGA;AAAA,IACL;AAEA,iBAAa,UAAU,EAAE,GAAG,aAAa,SAAS,GAAG,KAAK,SAAS,GAAGA,SAAQ,QAAQ;AAEtF,QAAI,CAAC,aAAa,QAAQ,QAAQ;AAChC,mBAAa,QAAQ,SAAS;AAAA,IAChC;AAEA,UAAM,aAAa,aAAa,QAAQ;AACxC,UAAM,cAAc,aAAa,QAAQ,cAAc,KAAK,aAAa,QAAQ,cAAc,KAAK;AAEpG,QAAI,CAAC,aAAa,eAAe,SAAS,MAAM,GAAG;AACjD,YAAM,IAAI,MAAM,UAAU,MAAM,kCAAkC,aAAa,eAAe,KAAK,IAAI,CAAC,EAAE;AAAA,IAC5G;AAEA,QAAI;AACJ,QAAI;AACF,iBAAW,SAASD,MAAK,IAAI;AAAA,IAC/B,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,wBAAwBA,IAAG,EAAE;AAAA,IAC/C;AAEA,QAAI,MAAM;AACR,UAAI,aAAa,WAAW,SAAS,OAAO,SAAS,UAAU;AAC7D,iBAAS,SAAS,UAAU,IAAI,EAAE,SAAS;AAAA,MAC7C,WAAW,aAAa,IAAI,KAAK,OAAO,SAAS,UAAU;AACzD,qBAAa,OAAO;AAAA,MACtB,OAAO;AACL,cAAM,SAAS,SAAS,KAAK,WAAW;AACxC,YAAI,QAAQ;AACV,uBAAa,OAAO,KAAK,UAAU,IAAI;AAAA,QACzC,OAAO;AACL,uBAAa,OAAO,kBAAkB,IAAI;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAEA,UAAM,WAAW,MAAM,MAAM,SAAS,SAAS,GAAG,YAAY;AAC9D,QAAI,OAAO;AACX,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,MAAM,IAAI,MAAM,GAAG,SAAS,MAAM,KAAK,SAAS,UAAU,EAAE;AAClE,UAAI,WAAW;AACf,UAAI,SAAS,KAAK,UAAU,GAAG;AAC7B,YAAI,OAAO,MAAM,SAAS,KAAK;AAAA,MACjC;AAEA,UAAI,SAAS,KAAK,UAAU,GAAG;AAC7B,YAAI;AACF,cAAI,OAAO,MAAM,SAAS,KAAK;AAAA,QACjC,SAAS,OAAO;AACd,cAAI,OAAO;AAEX,kBAAQ,KAAK,kCAAkC,KAAK;AAAA,QACtD;AAAA,MACF;AAEA,YAAM;AAAA,IACR;AAEA,QAAI,aAAa,yBAAyB;AACxC,aAAO;AAAA,IACT;AAEA,QAAI,SAAS,KAAK,UAAU,GAAG;AAC7B,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B,WAAW,SAAS,KAAK,UAAU,GAAG;AACpC,UAAI;AACF,eAAO,MAAM,SAAS,KAAK;AAAA,MAC7B,SAAS,OAAO;AAEd,gBAAQ,KAAK,kCAAkC,KAAK;AACpD,eAAO;AAAA,MACT;AAAA,IACF,WAAW,SAAS,KAAK,UAAU,GAAG;AACpC,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B,WAAW,gBAAgB,KAAK,UAAU,GAAG;AAC3C,aAAO,MAAM,SAAS,YAAY;AAAA,IACpC,OAAO;AACL,aAAO;AAAA,IACT;AAEA,WAAO,QAAQ;AAAA,EACjB;AAEA,EAAAD,SAAQ,MAAM,CAACG,UAAiBD,aAA6B,UAAUC,UAAS,EAAE,GAAG,MAAM,GAAID,YAAW,CAAC,EAAG,CAAC;AAE/G,EAAAF,SAAQ,YAAY,CAAC,KAAa,UAAe;AAC/C,0BAAI,MAAM,KAAK,KAAK;AACpB,WAAO;AAAA,EACT;AAEA,EAAAA,SAAQ,aAAa,CAAC,QAAiB;AACrC,QAAI,KAAK;AACP,iBAAO,kBAAI,MAAM,GAAG;AAAA,IACtB;AAEA,WAAO;AAAA,EACT;AAEA,SAAO;AAAA,IACLA;AAAA,IACA,KAAK,eAAe,OAAO,CAAC,KAA0B,WAAW;AAC/D,UAAI,MAAM,IAAI,CAACC,MAAa,MAAmCC,aAC7DF,SAAQ,QAAQC,MAAK,MAAMC,QAAO;AACpC,aAAO;AAAA,IACT,GAAG,CAAC,CAAC;AAAA,EACP;AAEA,SAAOF;AACT;AAEO,IAAM,UAAU,UAAU;",
6
6
  "names": ["request", "url", "options", "baseUrl"]
7
7
  }
@@ -1 +1 @@
1
- (()=>{"use strict";var e=Object.defineProperty,t=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,o={};((t,r)=>{for(var s in r)e(t,s,{get:r[s],enumerable:!0})})(o,{request:()=>c});var n,a=(n=o,((o,n,a,l)=>{if(n&&"object"==typeof n||"function"==typeof n)for(let i of r(n))s.call(o,i)||i===a||e(o,i,{get:()=>n[i],enumerable:!(l=t(n,i))||l.enumerable});return o})(e({},"__esModule",{value:!0}),n)),l=require("valyrian.js"),i=require("valyrian.js/utils");function u(e,t=""){const r=new URLSearchParams;return Object.keys(e).forEach(s=>{const o=t?`${t}[${s}]`:s;"object"==typeof e[s]?r.append(o,u(e[s],o).toString()):r.append(o,e[s])}),r}var d={allowedMethods:["get","post","put","patch","delete","head","options"]};var c=function e(t="",r=d){const s=t.replace(/\/$/gi,"").trim();r.urls||(r.urls={base:"",node:null,api:null}),r.allowedMethods||(r.allowedMethods=d.allowedMethods);const o={...r,urls:{node:r.urls.node||null,api:r.urls.api||null,base:r.urls.base?r.urls.base+s:s}},n=async function(e,t,r,s={}){const n={method:e.toUpperCase(),headers:{},resolveWithFullResponse:!1,...o,...s};n.headers={...n.headers,...o.headers,...s.headers},n.headers.Accept||(n.headers.Accept="application/json");const a=n.headers.Accept,i=n.headers["Content-Type"]||n.headers["content-type"]||"";if(!n.allowedMethods.includes(e))throw new Error(`Method ${e} not allowed. Allowed methods: ${n.allowedMethods.join(", ")}`);let d;try{d=function(e,t){const r=e.replace(/\/+$/,"").trim(),s=/^https?/gi.test(r)?r:`${t.urls.base}${r}`;if(l.isNodeJs&&"string"==typeof t.urls.node){if("string"==typeof t.urls.api)return new URL(s.replace(t.urls.api,t.urls.node));if(!/^https?/gi.test(s))return new URL(s,t.urls.node)}return/^https?/gi.test(s)?new URL(s):new URL(s,t.urls.base)}(t,o)}catch(e){throw new Error(`Failed to parse URL: ${t}`)}if(r){const e=/json/gi.test(i);"GET"===n.method&&"object"==typeof r?d.search=u(r).toString():"GET"!==n.method&&(n.body=e?JSON.stringify(r):function(e){return Object.entries(e).reduce((e,[t,r])=>(e.append(t,r),e),new FormData)}(r))}const c=await fetch(d.toString(),n);let p=null;if(!c.ok){const e=new Error(`${c.status}: ${c.statusText}`);if(e.response=c,/text/gi.test(a)&&(e.body=await c.text()),/json/gi.test(a))try{e.body=await c.json()}catch(t){e.body=null,console.warn("Failed to parse JSON response:",t)}throw e}if(n.resolveWithFullResponse)return c;if(/text/gi.test(a))p=await c.text();else if(/json/gi.test(a))try{p=await c.json()}catch(e){console.warn("Failed to parse JSON response:",e),p=null}else p=/blob/gi.test(a)?await c.blob():/arraybuffer/gi.test(a)?await c.arrayBuffer():c;return p||c};return n.new=(t,r)=>e(t,{...o,...r||{}}),n.setOption=(e,t)=>((0,i.set)(o,e,t),o),n.getOptions=e=>e?(0,i.get)(o,e):o,Object.assign(n,o.allowedMethods.reduce((e,t)=>(e[t]=(e,r,s)=>n(t,e,r,s),e),{})),n}();"undefined"!=typeof module?module.exports=a:self.ValyrianRequest=a})();//# sourceMappingURL=index.min.js.map
1
+ (()=>{"use strict";var e=Object.defineProperty,t=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,s=Object.prototype.hasOwnProperty,o={};((t,r)=>{for(var s in r)e(t,s,{get:r[s],enumerable:!0})})(o,{request:()=>u});var a,n=(a=o,((o,a,n,l)=>{if(a&&"object"==typeof a||"function"==typeof a)for(let i of r(a))s.call(o,i)||i===n||e(o,i,{get:()=>a[i],enumerable:!(l=t(a,i))||l.enumerable});return o})(e({},"__esModule",{value:!0}),a)),l=require("valyrian.js"),i=require("valyrian.js/utils");function c(e,t=""){const r=new URLSearchParams;return Object.keys(e).forEach(s=>{const o=t?`${t}[${s}]`:s;"object"==typeof e[s]?r.append(o,c(e[s],o).toString()):r.append(o,e[s])}),r}var d={allowedMethods:["get","post","put","patch","delete","head","options"]};var u=function e(t="",r=d){const s=t.replace(/\/$/gi,"").trim();r.urls||(r.urls={base:"",node:null,api:null}),r.allowedMethods||(r.allowedMethods=d.allowedMethods);const o={...r,urls:{node:r.urls.node||null,api:r.urls.api||null,base:r.urls.base?r.urls.base+s:s}},a=async function(e,t,r,s={}){const a={method:e.toUpperCase(),headers:{},resolveWithFullResponse:!1,...o,...s};a.headers={...a.headers,...o.headers,...s.headers},a.headers.Accept||(a.headers.Accept="application/json");const n=a.headers.Accept,i=a.headers["Content-Type"]||a.headers["content-type"]||"";if(!a.allowedMethods.includes(e))throw new Error(`Method ${e} not allowed. Allowed methods: ${a.allowedMethods.join(", ")}`);let d;try{d=function(e,t){const r=e.replace(/\/+$/,"").trim(),s=/^https?/gi.test(r)?r:`${t.urls.base}${r}`;if(l.isNodeJs&&"string"==typeof t.urls.node){if("string"==typeof t.urls.api)return new URL(s.replace(t.urls.api,t.urls.node));if(!/^https?/gi.test(s))return new URL(s,t.urls.node)}return/^https?/gi.test(s)?new URL(s):new URL(s,t.urls.base)}(t,o)}catch(e){throw new Error(`Failed to parse URL: ${t}`)}if(r)if("GET"===a.method&&"object"==typeof r)d.search=c(r).toString();else if((e=>e instanceof FormData||e instanceof URLSearchParams||e instanceof Blob||e instanceof ArrayBuffer||"undefined"!=typeof DataView&&e instanceof DataView||"undefined"!=typeof ReadableStream&&e instanceof ReadableStream)(r)||"string"==typeof r)a.body=r;else{const e=/json/gi.test(i);a.body=e?JSON.stringify(r):function(e){const t=new FormData;return Object.entries(e).forEach(([e,r])=>{null!=r&&(Array.isArray(r)?r.forEach(r=>t.append(e,r)):t.append(e,r))}),t}(r)}const u=await fetch(d.toString(),a);let p=null;if(!u.ok){const e=new Error(`${u.status}: ${u.statusText}`);if(e.response=u,/text/gi.test(n)&&(e.body=await u.text()),/json/gi.test(n))try{e.body=await u.json()}catch(t){e.body=null,console.warn("Failed to parse JSON response:",t)}throw e}if(a.resolveWithFullResponse)return u;if(/text/gi.test(n))p=await u.text();else if(/json/gi.test(n))try{p=await u.json()}catch(e){console.warn("Failed to parse JSON response:",e),p=null}else p=/blob/gi.test(n)?await u.blob():/arraybuffer/gi.test(n)?await u.arrayBuffer():u;return p||u};return a.new=(t,r)=>e(t,{...o,...r||{}}),a.setOption=(e,t)=>((0,i.set)(o,e,t),o),a.getOptions=e=>e?(0,i.get)(o,e):o,Object.assign(a,o.allowedMethods.reduce((e,t)=>(e[t]=(e,r,s)=>a(t,e,r,s),e),{})),a}();"undefined"!=typeof module?module.exports=n:self.ValyrianRequest=n})();//# sourceMappingURL=index.min.js.map
@@ -1 +1 @@
1
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbmRleF9leHBvcnRzIiwiX19leHBvcnQiLCJyZXF1ZXN0IiwiX19FWFBPUlRTX18iLCJpbXBvcnRfdmFseXJpYW4iLCJyZXF1aXJlIiwiaW1wb3J0X3V0aWxzIiwic2VyaWFsaXplIiwib2JqIiwicHJlZml4IiwicGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJwcm9wIiwia2V5IiwiYXBwZW5kIiwidG9TdHJpbmciLCJkZWZhdWx0T3B0aW9ucyIsImFsbG93ZWRNZXRob2RzIiwiUmVxdWVzdGVyIiwiYmFzZVVybCIsIm9wdGlvbnMiLCJ1cmwiLCJyZXBsYWNlIiwidHJpbSIsInVybHMiLCJiYXNlIiwibm9kZSIsImFwaSIsIm9wdHMiLCJhc3luYyIsIm1ldGhvZCIsImRhdGEiLCJpbm5lck9wdGlvbnMiLCJ0b1VwcGVyQ2FzZSIsImhlYWRlcnMiLCJyZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSIsIkFjY2VwdCIsImFjY2VwdFR5cGUiLCJjb250ZW50VHlwZSIsImluY2x1ZGVzIiwiRXJyb3IiLCJqb2luIiwiZmluYWxVcmwiLCJ1cmxXaXRob3V0U2xhc2giLCJ1IiwidGVzdCIsImlzTm9kZUpzIiwiVVJMIiwicGFyc2VVcmwiLCJlcnJvciIsImlzSnNvbiIsInNlYXJjaCIsImJvZHkiLCJKU09OIiwic3RyaW5naWZ5IiwiZW50cmllcyIsInJlZHVjZSIsImZkIiwidmFsdWUiLCJGb3JtRGF0YSIsInNlcmlhbGl6ZUZvcm1EYXRhIiwicmVzcG9uc2UiLCJmZXRjaCIsIm9rIiwiZXJyIiwic3RhdHVzIiwic3RhdHVzVGV4dCIsInRleHQiLCJqc29uIiwiY29uc29sZSIsIndhcm4iLCJibG9iIiwiYXJyYXlCdWZmZXIiLCJuZXciLCJzZXRPcHRpb24iLCJzZXQiLCJnZXRPcHRpb25zIiwiZ2V0IiwiYXNzaWduIiwiYWNjIl0sInNvdXJjZXMiOlsiLi4vLi4vbGliL3JlcXVlc3QvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNOb2RlSnMgfSBmcm9tIFwidmFseXJpYW4uanNcIjtcbmltcG9ydCB7IGdldCwgc2V0IH0gZnJvbSBcInZhbHlyaWFuLmpzL3V0aWxzXCI7XG5cbmludGVyZmFjZSBVcmxPcHRpb25zIHtcbiAgYmFzZT86IHN0cmluZzsgLy8gVXNlZCB0byBwcmVmaXggdGhlIHVybCBmb3Igc2NvcGVkIHJlcXVlc3RzLlxuICBub2RlPzogc3RyaW5nIHwgbnVsbDsgLy8gVXNlZCB0byByZWRpcmVjdCBsb2NhbCByZXF1ZXN0cyB0byBub2RlIHNlcnZlciBmb3Igc2VydmVyIHNpZGUgcmVuZGVyaW5nLlxuICBhcGk/OiBzdHJpbmcgfCBudWxsOyAvLyBVc2VkIHRvIHJlZGlyZWN0IGFwaSByZXF1ZXN0cyB0byBub2RlIHNlcnZlciBmb3Igc2VydmVyIHNpZGUgcmVuZGVyaW5nLlxufVxuXG5pbnRlcmZhY2UgUmVxdWVzdE9wdGlvbnMge1xuICBhbGxvd2VkTWV0aG9kcz86IHN0cmluZ1tdO1xuICB1cmxzPzogVXJsT3B0aW9ucztcbiAgW2tleTogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sXTogYW55O1xufVxuXG5pbnRlcmZhY2UgUmVxdWVzdE9wdGlvbnNXaXRoVXJscyBleHRlbmRzIFJlcXVlc3RPcHRpb25zIHtcbiAgdXJsczogVXJsT3B0aW9ucztcbiAgYWxsb3dlZE1ldGhvZHM6IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgU2VuZE9wdGlvbnMgZXh0ZW5kcyBSZXF1ZXN0T3B0aW9uc1dpdGhVcmxzLCBSZXF1ZXN0SW5pdCB7XG4gIGFsbG93ZWRNZXRob2RzOiBzdHJpbmdbXTtcbiAgbWV0aG9kOiBzdHJpbmc7XG4gIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZXF1ZXN0SW50ZXJmYWNlIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIChtZXRob2Q6IHN0cmluZywgdXJsOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCwgb3B0aW9ucz86IFBhcnRpYWw8U2VuZE9wdGlvbnM+KTogYW55IHwgUmVzcG9uc2U7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBuZXc6IChiYXNlVXJsOiBzdHJpbmcsIG9wdGlvbnM/OiBSZXF1ZXN0T3B0aW9ucykgPT4gUmVxdWVzdEludGVyZmFjZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHNldE9wdGlvbnM6IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gdm9pZDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGdldE9wdGlvbnM6IChrZXk/OiBzdHJpbmcpID0+IFJlcXVlc3RPcHRpb25zIHwgdm9pZDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGdldDogKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBhbnkgfCBSZXNwb25zZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHBvc3Q6ICh1cmw6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsLCBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55PikgPT4gYW55IHwgUmVzcG9uc2U7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBwdXQ6ICh1cmw6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsLCBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55PikgPT4gYW55IHwgUmVzcG9uc2U7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBwYXRjaDogKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBhbnkgfCBSZXNwb25zZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGRlbGV0ZTogKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBhbnkgfCBSZXNwb25zZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIGhlYWQ6ICh1cmw6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsLCBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55PikgPT4gYW55IHwgUmVzcG9uc2U7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBvcHRpb25zOiAodXJsOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGFueSB8IFJlc3BvbnNlO1xuICBba2V5OiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2xdOiBhbnk7XG59XG5cbi8vIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2VyaWFsaXplIGFuIG9iamVjdCBpbnRvIGEgcXVlcnkgc3RyaW5nLlxuZnVuY3Rpb24gc2VyaWFsaXplKG9iajogUmVjb3JkPHN0cmluZywgYW55PiwgcHJlZml4OiBzdHJpbmcgPSBcIlwiKTogVVJMU2VhcmNoUGFyYW1zIHtcbiAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXG4gIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaCgocHJvcDogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gcHJlZml4ID8gYCR7cHJlZml4fVske3Byb3B9XWAgOiBwcm9wO1xuICAgIGlmICh0eXBlb2Ygb2JqW3Byb3BdID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBwYXJhbXMuYXBwZW5kKGtleSwgc2VyaWFsaXplKG9ialtwcm9wXSwga2V5KS50b1N0cmluZygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1zLmFwcGVuZChrZXksIG9ialtwcm9wXSk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyYW1zO1xufVxuXG5mdW5jdGlvbiBzZXJpYWxpemVGb3JtRGF0YShkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogRm9ybURhdGEge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMoZGF0YSkucmVkdWNlKChmZCwgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgZmQuYXBwZW5kKGtleSwgdmFsdWUpO1xuICAgIHJldHVybiBmZDtcbiAgfSwgbmV3IEZvcm1EYXRhKCkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVybCh1cmw6IHN0cmluZywgb3B0aW9uczogUmVxdWVzdE9wdGlvbnNXaXRoVXJscykge1xuICBjb25zdCB1cmxXaXRob3V0U2xhc2ggPSB1cmwucmVwbGFjZSgvXFwvKyQvLCBcIlwiKS50cmltKCk7XG4gIGNvbnN0IHUgPSAvXmh0dHBzPy9naS50ZXN0KHVybFdpdGhvdXRTbGFzaCkgPyB1cmxXaXRob3V0U2xhc2ggOiBgJHtvcHRpb25zLnVybHMuYmFzZX0ke3VybFdpdGhvdXRTbGFzaH1gO1xuXG4gIGlmIChpc05vZGVKcyAmJiB0eXBlb2Ygb3B0aW9ucy51cmxzLm5vZGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudXJscy5hcGkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBuZXcgVVJMKHUucmVwbGFjZShvcHRpb25zLnVybHMuYXBpLCBvcHRpb25zLnVybHMubm9kZSkpO1xuICAgIH1cblxuICAgIGlmICghL15odHRwcz8vZ2kudGVzdCh1KSkge1xuICAgICAgcmV0dXJuIG5ldyBVUkwodSwgb3B0aW9ucy51cmxzLm5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICgvXmh0dHBzPy9naS50ZXN0KHUpKSB7XG4gICAgcmV0dXJuIG5ldyBVUkwodSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFVSTCh1LCBvcHRpb25zLnVybHMuYmFzZSk7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IHsgYWxsb3dlZE1ldGhvZHM6IFtcImdldFwiLCBcInBvc3RcIiwgXCJwdXRcIiwgXCJwYXRjaFwiLCBcImRlbGV0ZVwiLCBcImhlYWRcIiwgXCJvcHRpb25zXCJdIH07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL2NvZ25pdGl2ZS1jb21wbGV4aXR5XG5mdW5jdGlvbiBSZXF1ZXN0ZXIoYmFzZVVybCA9IFwiXCIsIG9wdGlvbnM6IFJlcXVlc3RPcHRpb25zID0gZGVmYXVsdE9wdGlvbnMpIHtcbiAgY29uc3QgdXJsID0gYmFzZVVybC5yZXBsYWNlKC9cXC8kL2dpLCBcIlwiKS50cmltKCk7XG4gIGlmICghb3B0aW9ucy51cmxzKSB7XG4gICAgb3B0aW9ucy51cmxzID0ge1xuICAgICAgYmFzZTogXCJcIixcbiAgICAgIG5vZGU6IG51bGwsXG4gICAgICBhcGk6IG51bGxcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFvcHRpb25zLmFsbG93ZWRNZXRob2RzKSB7XG4gICAgb3B0aW9ucy5hbGxvd2VkTWV0aG9kcyA9IGRlZmF1bHRPcHRpb25zLmFsbG93ZWRNZXRob2RzO1xuICB9XG5cbiAgY29uc3Qgb3B0czogUmVxdWVzdE9wdGlvbnNXaXRoVXJscyA9IHtcbiAgICAuLi4ob3B0aW9ucyBhcyBSZXF1ZXN0T3B0aW9uc1dpdGhVcmxzKSxcbiAgICB1cmxzOiB7XG4gICAgICBub2RlOiBvcHRpb25zLnVybHMubm9kZSB8fCBudWxsLFxuICAgICAgYXBpOiBvcHRpb25zLnVybHMuYXBpIHx8IG51bGwsXG4gICAgICBiYXNlOiBvcHRpb25zLnVybHMuYmFzZSA/IG9wdGlvbnMudXJscy5iYXNlICsgdXJsIDogdXJsXG4gICAgfVxuICB9O1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG4gIGNvbnN0IHJlcXVlc3QgPSBhc3luYyBmdW5jdGlvbiByZXF1ZXN0KFxuICAgIG1ldGhvZDogc3RyaW5nLFxuICAgIHVybDogc3RyaW5nLFxuICAgIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCxcbiAgICBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge31cbiAgKSB7XG4gICAgY29uc3QgaW5uZXJPcHRpb25zOiBTZW5kT3B0aW9ucyA9IHtcbiAgICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIHJlc29sdmVXaXRoRnVsbFJlc3BvbnNlOiBmYWxzZSxcbiAgICAgIC4uLm9wdHMsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSBhcyBTZW5kT3B0aW9ucztcblxuICAgIGlubmVyT3B0aW9ucy5oZWFkZXJzID0geyAuLi5pbm5lck9wdGlvbnMuaGVhZGVycywgLi4ub3B0cy5oZWFkZXJzLCAuLi5vcHRpb25zLmhlYWRlcnMgfTtcblxuICAgIGlmICghaW5uZXJPcHRpb25zLmhlYWRlcnMuQWNjZXB0KSB7XG4gICAgICBpbm5lck9wdGlvbnMuaGVhZGVycy5BY2NlcHQgPSBcImFwcGxpY2F0aW9uL2pzb25cIjtcbiAgICB9XG5cbiAgICBjb25zdCBhY2NlcHRUeXBlID0gaW5uZXJPcHRpb25zLmhlYWRlcnMuQWNjZXB0O1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaW5uZXJPcHRpb25zLmhlYWRlcnNbXCJDb250ZW50LVR5cGVcIl0gfHwgaW5uZXJPcHRpb25zLmhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gfHwgXCJcIjtcblxuICAgIGlmICghaW5uZXJPcHRpb25zLmFsbG93ZWRNZXRob2RzLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWV0aG9kICR7bWV0aG9kfSBub3QgYWxsb3dlZC4gQWxsb3dlZCBtZXRob2RzOiAke2lubmVyT3B0aW9ucy5hbGxvd2VkTWV0aG9kcy5qb2luKFwiLCBcIil9YCk7XG4gICAgfVxuXG4gICAgbGV0IGZpbmFsVXJsOiBVUkw7XG4gICAgdHJ5IHtcbiAgICAgIGZpbmFsVXJsID0gcGFyc2VVcmwodXJsLCBvcHRzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gcGFyc2UgVVJMOiAke3VybH1gKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgY29uc3QgaXNKc29uID0gL2pzb24vZ2kudGVzdChjb250ZW50VHlwZSk7XG5cbiAgICAgIGlmIChpbm5lck9wdGlvbnMubWV0aG9kID09PSBcIkdFVFwiICYmIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGZpbmFsVXJsLnNlYXJjaCA9IHNlcmlhbGl6ZShkYXRhKS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChpbm5lck9wdGlvbnMubWV0aG9kICE9PSBcIkdFVFwiKSB7XG4gICAgICAgIGlubmVyT3B0aW9ucy5ib2R5ID0gaXNKc29uID8gSlNPTi5zdHJpbmdpZnkoZGF0YSkgOiBzZXJpYWxpemVGb3JtRGF0YShkYXRhKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZpbmFsVXJsLnRvU3RyaW5nKCksIGlubmVyT3B0aW9ucyk7XG4gICAgbGV0IGJvZHkgPSBudWxsO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCkgYXMgRXJyb3IgJiB7IHJlc3BvbnNlPzogYW55OyBib2R5PzogYW55IH07XG4gICAgICBlcnIucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgIGlmICgvdGV4dC9naS50ZXN0KGFjY2VwdFR5cGUpKSB7XG4gICAgICAgIGVyci5ib2R5ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoL2pzb24vZ2kudGVzdChhY2NlcHRUeXBlKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGVyci5ib2R5ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGVyci5ib2R5ID0gbnVsbDtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGNvbnNvbGUud2FybihcIkZhaWxlZCB0byBwYXJzZSBKU09OIHJlc3BvbnNlOlwiLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIGlmIChpbm5lck9wdGlvbnMucmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICBpZiAoL3RleHQvZ2kudGVzdChhY2NlcHRUeXBlKSkge1xuICAgICAgYm9keSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICB9IGVsc2UgaWYgKC9qc29uL2dpLnRlc3QoYWNjZXB0VHlwZSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGJvZHkgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oXCJGYWlsZWQgdG8gcGFyc2UgSlNPTiByZXNwb25zZTpcIiwgZXJyb3IpO1xuICAgICAgICBib2R5ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKC9ibG9iL2dpLnRlc3QoYWNjZXB0VHlwZSkpIHtcbiAgICAgIGJvZHkgPSBhd2FpdCByZXNwb25zZS5ibG9iKCk7XG4gICAgfSBlbHNlIGlmICgvYXJyYXlidWZmZXIvZ2kudGVzdChhY2NlcHRUeXBlKSkge1xuICAgICAgYm9keSA9IGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvZHkgPSByZXNwb25zZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYm9keSB8fCByZXNwb25zZTtcbiAgfSBhcyB1bmtub3duIGFzIFJlcXVlc3RJbnRlcmZhY2U7XG5cbiAgcmVxdWVzdC5uZXcgPSAoYmFzZVVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+IFJlcXVlc3RlcihiYXNlVXJsLCB7IC4uLm9wdHMsIC4uLihvcHRpb25zIHx8IHt9KSB9KTtcblxuICByZXF1ZXN0LnNldE9wdGlvbiA9IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuICAgIHNldChvcHRzLCBrZXksIHZhbHVlKTtcbiAgICByZXR1cm4gb3B0cztcbiAgfTtcblxuICByZXF1ZXN0LmdldE9wdGlvbnMgPSAoa2V5Pzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGtleSkge1xuICAgICAgcmV0dXJuIGdldChvcHRzLCBrZXkpO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRzO1xuICB9O1xuXG4gIE9iamVjdC5hc3NpZ24oXG4gICAgcmVxdWVzdCxcbiAgICBvcHRzLmFsbG93ZWRNZXRob2RzLnJlZHVjZSgoYWNjOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBtZXRob2QpID0+IHtcbiAgICAgIGFjY1ttZXRob2RdID0gKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PlxuICAgICAgICByZXF1ZXN0KG1ldGhvZCwgdXJsLCBkYXRhLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pXG4gICk7XG5cbiAgcmV0dXJuIHJlcXVlc3Q7XG59XG5cbmV4cG9ydCBjb25zdCByZXF1ZXN0ID0gUmVxdWVzdGVyKCk7XG4iXSwibWFwcGluZ3MiOiJnSkFBQUEsRUFBQSxHLHlEQUFBQyxDQUFBRCxFQUFBLENBQUFFLFFBQUEsSUFBQUEsSUFBQSxJLEVBQUFDLEcsRUFBQUgsRSwwTUFBQUksRUFBeUJDLFFBQUEsZUFDekJDLEVBQXlCRCxRQUFBLHFCQXFEekIsU0FBU0UsRUFBVUMsRUFBMEJDLEVBQWlCLElBQzVELE1BQU1DLEVBQVMsSUFBSUMsZ0JBV25CLE9BVEFDLE9BQU9DLEtBQUtMLEdBQUtNLFFBQVNDLElBQ3hCLE1BQU1DLEVBQU1QLEVBQVMsR0FBR0EsS0FBVU0sS0FBVUEsRUFDbkIsaUJBQWRQLEVBQUlPLEdBQ2JMLEVBQU9PLE9BQU9ELEVBQUtULEVBQVVDLEVBQUlPLEdBQU9DLEdBQUtFLFlBRTdDUixFQUFPTyxPQUFPRCxFQUFLUixFQUFJTyxNQUlwQkwsQ0FDVCxDQThCQSxJQUFNUyxFQUFpQyxDQUFFQyxlQUFnQixDQUFDLE1BQU8sT0FBUSxNQUFPLFFBQVMsU0FBVSxPQUFRLFlBaUpwRyxJQUFNbEIsRUE5SWIsU0FBU21CLEVBQVVDLEVBQVUsR0FBSUMsRUFBMEJKLEdBQ3pELE1BQU1LLEVBQU1GLEVBQVFHLFFBQVEsUUFBUyxJQUFJQyxPQUNwQ0gsRUFBUUksT0FDWEosRUFBUUksS0FBTyxDQUNiQyxLQUFNLEdBQ05DLEtBQU0sS0FDTkMsSUFBSyxPQUlKUCxFQUFRSCxpQkFDWEcsRUFBUUgsZUFBaUJELEVBQWVDLGdCQUcxQyxNQUFNVyxFQUErQixJQUMvQlIsRUFDSkksS0FBTSxDQUNKRSxLQUFNTixFQUFRSSxLQUFLRSxNQUFRLEtBQzNCQyxJQUFLUCxFQUFRSSxLQUFLRyxLQUFPLEtBQ3pCRixLQUFNTCxFQUFRSSxLQUFLQyxLQUFPTCxFQUFRSSxLQUFLQyxLQUFPSixFQUFNQSxJQUtsRHRCLEVBQVU4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
1
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpbmRleF9leHBvcnRzIiwiX19leHBvcnQiLCJyZXF1ZXN0IiwiX19FWFBPUlRTX18iLCJpbXBvcnRfdmFseXJpYW4iLCJyZXF1aXJlIiwiaW1wb3J0X3V0aWxzIiwic2VyaWFsaXplIiwib2JqIiwicHJlZml4IiwicGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJwcm9wIiwia2V5IiwiYXBwZW5kIiwidG9TdHJpbmciLCJkZWZhdWx0T3B0aW9ucyIsImFsbG93ZWRNZXRob2RzIiwiUmVxdWVzdGVyIiwiYmFzZVVybCIsIm9wdGlvbnMiLCJ1cmwiLCJyZXBsYWNlIiwidHJpbSIsInVybHMiLCJiYXNlIiwibm9kZSIsImFwaSIsIm9wdHMiLCJhc3luYyIsIm1ldGhvZCIsImRhdGEiLCJpbm5lck9wdGlvbnMiLCJ0b1VwcGVyQ2FzZSIsImhlYWRlcnMiLCJyZXNvbHZlV2l0aEZ1bGxSZXNwb25zZSIsIkFjY2VwdCIsImFjY2VwdFR5cGUiLCJjb250ZW50VHlwZSIsImluY2x1ZGVzIiwiRXJyb3IiLCJqb2luIiwiZmluYWxVcmwiLCJ1cmxXaXRob3V0U2xhc2giLCJ1IiwidGVzdCIsImlzTm9kZUpzIiwiVVJMIiwicGFyc2VVcmwiLCJlcnJvciIsInNlYXJjaCIsIkZvcm1EYXRhIiwiQmxvYiIsIkFycmF5QnVmZmVyIiwiRGF0YVZpZXciLCJSZWFkYWJsZVN0cmVhbSIsImlzTmF0aXZlQm9keSIsImJvZHkiLCJpc0pzb24iLCJKU09OIiwic3RyaW5naWZ5IiwiZmQiLCJlbnRyaWVzIiwidmFsdWUiLCJBcnJheSIsImlzQXJyYXkiLCJ2Iiwic2VyaWFsaXplRm9ybURhdGEiLCJyZXNwb25zZSIsImZldGNoIiwib2siLCJlcnIiLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwidGV4dCIsImpzb24iLCJjb25zb2xlIiwid2FybiIsImJsb2IiLCJhcnJheUJ1ZmZlciIsIm5ldyIsInNldE9wdGlvbiIsInNldCIsImdldE9wdGlvbnMiLCJnZXQiLCJhc3NpZ24iLCJyZWR1Y2UiLCJhY2MiXSwic291cmNlcyI6WyIuLi8uLi9saWIvcmVxdWVzdC9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc05vZGVKcyB9IGZyb20gXCJ2YWx5cmlhbi5qc1wiO1xuaW1wb3J0IHsgZ2V0LCBzZXQgfSBmcm9tIFwidmFseXJpYW4uanMvdXRpbHNcIjtcblxuaW50ZXJmYWNlIFVybE9wdGlvbnMge1xuICBiYXNlPzogc3RyaW5nOyAvLyBVc2VkIHRvIHByZWZpeCB0aGUgdXJsIGZvciBzY29wZWQgcmVxdWVzdHMuXG4gIG5vZGU/OiBzdHJpbmcgfCBudWxsOyAvLyBVc2VkIHRvIHJlZGlyZWN0IGxvY2FsIHJlcXVlc3RzIHRvIG5vZGUgc2VydmVyIGZvciBzZXJ2ZXIgc2lkZSByZW5kZXJpbmcuXG4gIGFwaT86IHN0cmluZyB8IG51bGw7IC8vIFVzZWQgdG8gcmVkaXJlY3QgYXBpIHJlcXVlc3RzIHRvIG5vZGUgc2VydmVyIGZvciBzZXJ2ZXIgc2lkZSByZW5kZXJpbmcuXG59XG5cbmludGVyZmFjZSBSZXF1ZXN0T3B0aW9ucyB7XG4gIGFsbG93ZWRNZXRob2RzPzogc3RyaW5nW107XG4gIHVybHM/OiBVcmxPcHRpb25zO1xuICBba2V5OiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2xdOiBhbnk7XG59XG5cbmludGVyZmFjZSBSZXF1ZXN0T3B0aW9uc1dpdGhVcmxzIGV4dGVuZHMgUmVxdWVzdE9wdGlvbnMge1xuICB1cmxzOiBVcmxPcHRpb25zO1xuICBhbGxvd2VkTWV0aG9kczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBTZW5kT3B0aW9ucyBleHRlbmRzIFJlcXVlc3RPcHRpb25zV2l0aFVybHMsIFJlcXVlc3RJbml0IHtcbiAgYWxsb3dlZE1ldGhvZHM6IHN0cmluZ1tdO1xuICBtZXRob2Q6IHN0cmluZztcbiAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2U/OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJlcXVlc3RJbnRlcmZhY2Uge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgKG1ldGhvZDogc3RyaW5nLCB1cmw6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsLCBvcHRpb25zPzogUGFydGlhbDxTZW5kT3B0aW9ucz4pOiBhbnkgfCBSZXNwb25zZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIG5ldzogKGJhc2VVcmw6IHN0cmluZywgb3B0aW9ucz86IFJlcXVlc3RPcHRpb25zKSA9PiBSZXF1ZXN0SW50ZXJmYWNlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgc2V0T3B0aW9uczogKGtleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB2b2lkO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZ2V0T3B0aW9uczogKGtleT86IHN0cmluZykgPT4gUmVxdWVzdE9wdGlvbnMgfCB2b2lkO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZ2V0OiAodXJsOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGFueSB8IFJlc3BvbnNlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgcG9zdDogKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBhbnkgfCBSZXNwb25zZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHB1dDogKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBhbnkgfCBSZXNwb25zZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHBhdGNoOiAodXJsOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGFueSB8IFJlc3BvbnNlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgZGVsZXRlOiAodXJsOiBzdHJpbmcsIGRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCwgb3B0aW9ucz86IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IGFueSB8IFJlc3BvbnNlO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgaGVhZDogKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiBhbnkgfCBSZXNwb25zZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIG9wdGlvbnM6ICh1cmw6IHN0cmluZywgZGF0YT86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsLCBvcHRpb25zPzogUmVjb3JkPHN0cmluZywgYW55PikgPT4gYW55IHwgUmVzcG9uc2U7XG4gIFtrZXk6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbF06IGFueTtcbn1cblxuLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBzZXJpYWxpemUgYW4gb2JqZWN0IGludG8gYSBxdWVyeSBzdHJpbmcuXG5mdW5jdGlvbiBzZXJpYWxpemUob2JqOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBwcmVmaXg6IHN0cmluZyA9IFwiXCIpOiBVUkxTZWFyY2hQYXJhbXMge1xuICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKChwcm9wOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBrZXkgPSBwcmVmaXggPyBgJHtwcmVmaXh9WyR7cHJvcH1dYCA6IHByb3A7XG4gICAgaWYgKHR5cGVvZiBvYmpbcHJvcF0gPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHBhcmFtcy5hcHBlbmQoa2V5LCBzZXJpYWxpemUob2JqW3Byb3BdLCBrZXkpLnRvU3RyaW5nKCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXMuYXBwZW5kKGtleSwgb2JqW3Byb3BdKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmZ1bmN0aW9uIHNlcmlhbGl6ZUZvcm1EYXRhKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pOiBGb3JtRGF0YSB7XG4gIGNvbnN0IGZkID0gbmV3IEZvcm1EYXRhKCk7XG4gIE9iamVjdC5lbnRyaWVzKGRhdGEpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47IC8vIElnbm9yYXIgbnVsb3NcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUuZm9yRWFjaCgodikgPT4gZmQuYXBwZW5kKGtleSwgdikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmZC5hcHBlbmQoa2V5LCB2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZkO1xufVxuXG5mdW5jdGlvbiBwYXJzZVVybCh1cmw6IHN0cmluZywgb3B0aW9uczogUmVxdWVzdE9wdGlvbnNXaXRoVXJscykge1xuICBjb25zdCB1cmxXaXRob3V0U2xhc2ggPSB1cmwucmVwbGFjZSgvXFwvKyQvLCBcIlwiKS50cmltKCk7XG4gIGNvbnN0IHUgPSAvXmh0dHBzPy9naS50ZXN0KHVybFdpdGhvdXRTbGFzaCkgPyB1cmxXaXRob3V0U2xhc2ggOiBgJHtvcHRpb25zLnVybHMuYmFzZX0ke3VybFdpdGhvdXRTbGFzaH1gO1xuXG4gIGlmIChpc05vZGVKcyAmJiB0eXBlb2Ygb3B0aW9ucy51cmxzLm5vZGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMudXJscy5hcGkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBuZXcgVVJMKHUucmVwbGFjZShvcHRpb25zLnVybHMuYXBpLCBvcHRpb25zLnVybHMubm9kZSkpO1xuICAgIH1cblxuICAgIGlmICghL15odHRwcz8vZ2kudGVzdCh1KSkge1xuICAgICAgcmV0dXJuIG5ldyBVUkwodSwgb3B0aW9ucy51cmxzLm5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICgvXmh0dHBzPy9naS50ZXN0KHUpKSB7XG4gICAgcmV0dXJuIG5ldyBVUkwodSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFVSTCh1LCBvcHRpb25zLnVybHMuYmFzZSk7XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IHsgYWxsb3dlZE1ldGhvZHM6IFtcImdldFwiLCBcInBvc3RcIiwgXCJwdXRcIiwgXCJwYXRjaFwiLCBcImRlbGV0ZVwiLCBcImhlYWRcIiwgXCJvcHRpb25zXCJdIH07XG5cbmNvbnN0IGlzTmF0aXZlQm9keSA9IChkYXRhOiBhbnkpID0+XG4gIGRhdGEgaW5zdGFuY2VvZiBGb3JtRGF0YSB8fFxuICBkYXRhIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zIHx8XG4gIGRhdGEgaW5zdGFuY2VvZiBCbG9iIHx8XG4gIGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fFxuICAodHlwZW9mIERhdGFWaWV3ICE9PSBcInVuZGVmaW5lZFwiICYmIGRhdGEgaW5zdGFuY2VvZiBEYXRhVmlldykgfHxcbiAgKHR5cGVvZiBSZWFkYWJsZVN0cmVhbSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29uYXJqcy9jb2duaXRpdmUtY29tcGxleGl0eVxuZnVuY3Rpb24gUmVxdWVzdGVyKGJhc2VVcmwgPSBcIlwiLCBvcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zKSB7XG4gIGNvbnN0IHVybCA9IGJhc2VVcmwucmVwbGFjZSgvXFwvJC9naSwgXCJcIikudHJpbSgpO1xuICBpZiAoIW9wdGlvbnMudXJscykge1xuICAgIG9wdGlvbnMudXJscyA9IHtcbiAgICAgIGJhc2U6IFwiXCIsXG4gICAgICBub2RlOiBudWxsLFxuICAgICAgYXBpOiBudWxsXG4gICAgfTtcbiAgfVxuXG4gIGlmICghb3B0aW9ucy5hbGxvd2VkTWV0aG9kcykge1xuICAgIG9wdGlvbnMuYWxsb3dlZE1ldGhvZHMgPSBkZWZhdWx0T3B0aW9ucy5hbGxvd2VkTWV0aG9kcztcbiAgfVxuXG4gIGNvbnN0IG9wdHM6IFJlcXVlc3RPcHRpb25zV2l0aFVybHMgPSB7XG4gICAgLi4uKG9wdGlvbnMgYXMgUmVxdWVzdE9wdGlvbnNXaXRoVXJscyksXG4gICAgdXJsczoge1xuICAgICAgbm9kZTogb3B0aW9ucy51cmxzLm5vZGUgfHwgbnVsbCxcbiAgICAgIGFwaTogb3B0aW9ucy51cmxzLmFwaSB8fCBudWxsLFxuICAgICAgYmFzZTogb3B0aW9ucy51cmxzLmJhc2UgPyBvcHRpb25zLnVybHMuYmFzZSArIHVybCA6IHVybFxuICAgIH1cbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuICBjb25zdCByZXF1ZXN0ID0gYXN5bmMgZnVuY3Rpb24gcmVxdWVzdChcbiAgICBtZXRob2Q6IHN0cmluZyxcbiAgICB1cmw6IHN0cmluZyxcbiAgICBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsXG4gICAgb3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9XG4gICkge1xuICAgIGNvbnN0IGlubmVyT3B0aW9uczogU2VuZE9wdGlvbnMgPSB7XG4gICAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczoge30sXG4gICAgICByZXNvbHZlV2l0aEZ1bGxSZXNwb25zZTogZmFsc2UsXG4gICAgICAuLi5vcHRzLFxuICAgICAgLi4ub3B0aW9uc1xuICAgIH0gYXMgU2VuZE9wdGlvbnM7XG5cbiAgICBpbm5lck9wdGlvbnMuaGVhZGVycyA9IHsgLi4uaW5uZXJPcHRpb25zLmhlYWRlcnMsIC4uLm9wdHMuaGVhZGVycywgLi4ub3B0aW9ucy5oZWFkZXJzIH07XG5cbiAgICBpZiAoIWlubmVyT3B0aW9ucy5oZWFkZXJzLkFjY2VwdCkge1xuICAgICAgaW5uZXJPcHRpb25zLmhlYWRlcnMuQWNjZXB0ID0gXCJhcHBsaWNhdGlvbi9qc29uXCI7XG4gICAgfVxuXG4gICAgY29uc3QgYWNjZXB0VHlwZSA9IGlubmVyT3B0aW9ucy5oZWFkZXJzLkFjY2VwdDtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IGlubmVyT3B0aW9ucy5oZWFkZXJzW1wiQ29udGVudC1UeXBlXCJdIHx8IGlubmVyT3B0aW9ucy5oZWFkZXJzW1wiY29udGVudC10eXBlXCJdIHx8IFwiXCI7XG5cbiAgICBpZiAoIWlubmVyT3B0aW9ucy5hbGxvd2VkTWV0aG9kcy5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1ldGhvZCAke21ldGhvZH0gbm90IGFsbG93ZWQuIEFsbG93ZWQgbWV0aG9kczogJHtpbm5lck9wdGlvbnMuYWxsb3dlZE1ldGhvZHMuam9pbihcIiwgXCIpfWApO1xuICAgIH1cblxuICAgIGxldCBmaW5hbFVybDogVVJMO1xuICAgIHRyeSB7XG4gICAgICBmaW5hbFVybCA9IHBhcnNlVXJsKHVybCwgb3B0cyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHBhcnNlIFVSTDogJHt1cmx9YCk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChpbm5lck9wdGlvbnMubWV0aG9kID09PSBcIkdFVFwiICYmIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGZpbmFsVXJsLnNlYXJjaCA9IHNlcmlhbGl6ZShkYXRhKS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChpc05hdGl2ZUJvZHkoZGF0YSkgfHwgdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaW5uZXJPcHRpb25zLmJvZHkgPSBkYXRhIGFzIEJvZHlJbml0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaXNKc29uID0gL2pzb24vZ2kudGVzdChjb250ZW50VHlwZSk7XG4gICAgICAgIGlmIChpc0pzb24pIHtcbiAgICAgICAgICBpbm5lck9wdGlvbnMuYm9keSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlubmVyT3B0aW9ucy5ib2R5ID0gc2VyaWFsaXplRm9ybURhdGEoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGZpbmFsVXJsLnRvU3RyaW5nKCksIGlubmVyT3B0aW9ucyk7XG4gICAgbGV0IGJvZHkgPSBudWxsO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGNvbnN0IGVyciA9IG5ldyBFcnJvcihgJHtyZXNwb25zZS5zdGF0dXN9OiAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCkgYXMgRXJyb3IgJiB7IHJlc3BvbnNlPzogYW55OyBib2R5PzogYW55IH07XG4gICAgICBlcnIucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICAgIGlmICgvdGV4dC9naS50ZXN0KGFjY2VwdFR5cGUpKSB7XG4gICAgICAgIGVyci5ib2R5ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoL2pzb24vZ2kudGVzdChhY2NlcHRUeXBlKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGVyci5ib2R5ID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGVyci5ib2R5ID0gbnVsbDtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgIGNvbnNvbGUud2FybihcIkZhaWxlZCB0byBwYXJzZSBKU09OIHJlc3BvbnNlOlwiLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIGlmIChpbm5lck9wdGlvbnMucmVzb2x2ZVdpdGhGdWxsUmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG5cbiAgICBpZiAoL3RleHQvZ2kudGVzdChhY2NlcHRUeXBlKSkge1xuICAgICAgYm9keSA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICB9IGVsc2UgaWYgKC9qc29uL2dpLnRlc3QoYWNjZXB0VHlwZSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGJvZHkgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLndhcm4oXCJGYWlsZWQgdG8gcGFyc2UgSlNPTiByZXNwb25zZTpcIiwgZXJyb3IpO1xuICAgICAgICBib2R5ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKC9ibG9iL2dpLnRlc3QoYWNjZXB0VHlwZSkpIHtcbiAgICAgIGJvZHkgPSBhd2FpdCByZXNwb25zZS5ibG9iKCk7XG4gICAgfSBlbHNlIGlmICgvYXJyYXlidWZmZXIvZ2kudGVzdChhY2NlcHRUeXBlKSkge1xuICAgICAgYm9keSA9IGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJvZHkgPSByZXNwb25zZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYm9keSB8fCByZXNwb25zZTtcbiAgfSBhcyB1bmtub3duIGFzIFJlcXVlc3RJbnRlcmZhY2U7XG5cbiAgcmVxdWVzdC5uZXcgPSAoYmFzZVVybDogc3RyaW5nLCBvcHRpb25zPzogUmVxdWVzdE9wdGlvbnMpID0+IFJlcXVlc3RlcihiYXNlVXJsLCB7IC4uLm9wdHMsIC4uLihvcHRpb25zIHx8IHt9KSB9KTtcblxuICByZXF1ZXN0LnNldE9wdGlvbiA9IChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4ge1xuICAgIHNldChvcHRzLCBrZXksIHZhbHVlKTtcbiAgICByZXR1cm4gb3B0cztcbiAgfTtcblxuICByZXF1ZXN0LmdldE9wdGlvbnMgPSAoa2V5Pzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKGtleSkge1xuICAgICAgcmV0dXJuIGdldChvcHRzLCBrZXkpO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRzO1xuICB9O1xuXG4gIE9iamVjdC5hc3NpZ24oXG4gICAgcmVxdWVzdCxcbiAgICBvcHRzLmFsbG93ZWRNZXRob2RzLnJlZHVjZSgoYWNjOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBtZXRob2QpID0+IHtcbiAgICAgIGFjY1ttZXRob2RdID0gKHVybDogc3RyaW5nLCBkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PlxuICAgICAgICByZXF1ZXN0KG1ldGhvZCwgdXJsLCBkYXRhLCBvcHRpb25zKTtcbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pXG4gICk7XG5cbiAgcmV0dXJuIHJlcXVlc3Q7XG59XG5cbmV4cG9ydCBjb25zdCByZXF1ZXN0ID0gUmVxdWVzdGVyKCk7XG4iXSwibWFwcGluZ3MiOiJnSkFBQUEsRUFBQSxHLHlEQUFBQyxDQUFBRCxFQUFBLENB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
@@ -14,10 +14,16 @@ function serialize(obj, prefix = "") {
14
14
  return params;
15
15
  }
16
16
  function serializeFormData(data) {
17
- return Object.entries(data).reduce((fd, [key, value]) => {
18
- fd.append(key, value);
19
- return fd;
20
- }, new FormData());
17
+ const fd = new FormData();
18
+ Object.entries(data).forEach(([key, value]) => {
19
+ if (value === null || value === void 0) return;
20
+ if (Array.isArray(value)) {
21
+ value.forEach((v) => fd.append(key, v));
22
+ } else {
23
+ fd.append(key, value);
24
+ }
25
+ });
26
+ return fd;
21
27
  }
22
28
  function parseUrl(url, options) {
23
29
  const urlWithoutSlash = url.replace(/\/+$/, "").trim();
@@ -36,6 +42,7 @@ function parseUrl(url, options) {
36
42
  return new URL(u, options.urls.base);
37
43
  }
38
44
  var defaultOptions = { allowedMethods: ["get", "post", "put", "patch", "delete", "head", "options"] };
45
+ var isNativeBody = (data) => data instanceof FormData || data instanceof URLSearchParams || data instanceof Blob || data instanceof ArrayBuffer || typeof DataView !== "undefined" && data instanceof DataView || typeof ReadableStream !== "undefined" && data instanceof ReadableStream;
39
46
  function Requester(baseUrl = "", options = defaultOptions) {
40
47
  const url = baseUrl.replace(/\/$/gi, "").trim();
41
48
  if (!options.urls) {
@@ -80,11 +87,17 @@ function Requester(baseUrl = "", options = defaultOptions) {
80
87
  throw new Error(`Failed to parse URL: ${url2}`);
81
88
  }
82
89
  if (data) {
83
- const isJson = /json/gi.test(contentType);
84
90
  if (innerOptions.method === "GET" && typeof data === "object") {
85
91
  finalUrl.search = serialize(data).toString();
86
- } else if (innerOptions.method !== "GET") {
87
- innerOptions.body = isJson ? JSON.stringify(data) : serializeFormData(data);
92
+ } else if (isNativeBody(data) || typeof data === "string") {
93
+ innerOptions.body = data;
94
+ } else {
95
+ const isJson = /json/gi.test(contentType);
96
+ if (isJson) {
97
+ innerOptions.body = JSON.stringify(data);
98
+ } else {
99
+ innerOptions.body = serializeFormData(data);
100
+ }
88
101
  }
89
102
  }
90
103
  const response = await fetch(finalUrl.toString(), innerOptions);