valyrian.js 7.2.11 → 7.2.12

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 (64) hide show
  1. package/dist/dataset/index.d.ts +2 -2
  2. package/dist/dataset/index.d.ts.map +1 -1
  3. package/dist/dataset/index.js +21 -21
  4. package/dist/dataset/index.js.map +2 -2
  5. package/dist/dataset/index.mjs +22 -22
  6. package/dist/dataset/index.mjs.map +2 -2
  7. package/dist/hooks/index.d.ts.map +1 -1
  8. package/dist/hooks/index.js +17 -32
  9. package/dist/hooks/index.js.map +3 -3
  10. package/dist/hooks/index.mjs +17 -32
  11. package/dist/hooks/index.mjs.map +3 -3
  12. package/dist/index.d.ts +49 -53
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +378 -326
  15. package/dist/index.js.map +3 -3
  16. package/dist/index.min.js +1 -1
  17. package/dist/index.min.js.map +1 -1
  18. package/dist/index.mjs +378 -326
  19. package/dist/index.mjs.map +3 -3
  20. package/dist/node/index.js +101 -78
  21. package/dist/node/index.js.map +2 -2
  22. package/dist/node/index.mjs +101 -78
  23. package/dist/node/index.mjs.map +2 -2
  24. package/dist/node/utils/tree-adapter.d.ts +5 -0
  25. package/dist/node/utils/tree-adapter.d.ts.map +1 -1
  26. package/dist/proxy-signal/index.js +10 -10
  27. package/dist/proxy-signal/index.js.map +2 -2
  28. package/dist/proxy-signal/index.mjs +10 -10
  29. package/dist/proxy-signal/index.mjs.map +2 -2
  30. package/dist/request/index.js +16 -16
  31. package/dist/request/index.js.map +2 -2
  32. package/dist/request/index.mjs +16 -16
  33. package/dist/request/index.mjs.map +2 -2
  34. package/dist/router/index.d.ts.map +1 -1
  35. package/dist/router/index.js +21 -20
  36. package/dist/router/index.js.map +2 -2
  37. package/dist/router/index.mjs +21 -20
  38. package/dist/router/index.mjs.map +2 -2
  39. package/dist/signal/index.d.ts +7 -18
  40. package/dist/signal/index.d.ts.map +1 -1
  41. package/dist/signal/index.js +29 -48
  42. package/dist/signal/index.js.map +3 -3
  43. package/dist/signal/index.mjs +31 -50
  44. package/dist/signal/index.mjs.map +3 -3
  45. package/dist/store/index.js +2 -2
  46. package/dist/store/index.js.map +2 -2
  47. package/dist/store/index.mjs +2 -2
  48. package/dist/store/index.mjs.map +2 -2
  49. package/lib/dataset/index.ts +25 -25
  50. package/lib/hooks/index.ts +25 -54
  51. package/lib/index.ts +465 -715
  52. package/lib/node/index.ts +2 -2
  53. package/lib/node/utils/icons.ts +5 -5
  54. package/lib/node/utils/inline.ts +17 -17
  55. package/lib/node/utils/sw.ts +3 -3
  56. package/lib/node/utils/tree-adapter.ts +81 -52
  57. package/lib/proxy-signal/index.ts +10 -10
  58. package/lib/request/index.ts +16 -16
  59. package/lib/router/index.ts +21 -20
  60. package/lib/signal/index.ts +56 -131
  61. package/lib/store/index.ts +2 -2
  62. package/package.json +10 -3
  63. package/lib/index.d.ts +0 -0
  64. package/lib/interfaces.ts.bak +0 -141
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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"],
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 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 }\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 if (child) {\n let 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 let idx = (this.childNodes as unknown as Node[]).indexOf(child);\n (this.childNodes as unknown as Node[]).splice(idx, 1);\n child.parentNode = null;\n }\n return child;\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 let 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 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 let 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 let 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 (let key in state) {\n let 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 classList = {\n toggle: (item: any, force: any) => {\n if (item) {\n let classes = (this.getAttribute(\"class\") || \"\").split(\" \");\n let 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 let final = classes.join(\" \").trim();\n if (final.length) {\n this.setAttribute(\"class\", classes.join(\" \").trim());\n } else {\n this.removeAttribute(\"class\");\n }\n }\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 let 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 }\n\n createDocumentFragment(): DocumentFragment {\n return new DocumentFragment();\n }\n\n createElement(type: string) {\n let element = new Element();\n element.nodeName = type.toUpperCase();\n return element;\n }\n\n createElementNS(ns: string, type: string) {\n let 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\nlet 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): string {\n if (dom.nodeType === 3) {\n return dom.textContent;\n }\n\n if (dom.nodeType === 1) {\n let 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 let 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 let attrs: Record<string, any> = {};\n for (let i = 0, l = item.attributes.length; i < l; i++) {\n let 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 let 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 let child = item.children[i];\n let 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 let childContent = html.substring(item.contentStartsAt, child.startsAt);\n\n let 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 let childContent = html.substring(child.endsAt, nextChild.startsAt);\n\n let 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 let childContent = html.substring(child.endsAt, item.contentEndsAt);\n\n let 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 let childContent = html.substring(item.contentStartsAt, item.contentEndsAt);\n\n if (childContent.length) {\n let 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 (let key in item.attributes) {\n node.setAttribute(key, item.attributes[key]);\n }\n\n for (let i = 0; i < item.children.length; i++) {\n let 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 let regex = RegExp(\"<([^>|^!]+)>\", \"g\");\n let 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 let 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 let parent = [...items].reverse().find((item) => item.endsAt === null);\n if (parent) {\n // Find the index of the current item in the items array.\n let 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 let 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 let attributesWithValues = string.match(/\\S+=\"[^\"]+\"/g);\n\n if (attributesWithValues) {\n for (let 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 let attributesWithBooleanValues = string.match(/\\s\\S+=[^\"]+/g);\n if (attributesWithBooleanValues) {\n for (let 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 let attributesWithEmptyValues = string.match(/\\s?\\S+/g);\n if (attributesWithEmptyValues) {\n for (let 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 let 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 let 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 let 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 let documentFragment = document.createDocumentFragment();\n documentFragment.appendChild(document.createTextNode(html));\n return documentFragment;\n }\n\n let 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 let domTree = htmlToDom(html);\n let hyperscript = domToHyperscript(domTree instanceof DocumentFragment ? domTree.childNodes : [domTree]);\n return `[${hyperscript}\\n]`;\n}\n\nexport const document = new Document();\n", "import { document, domToHtml, domToHyperscript, htmlToDom, htmlToHyperscript } from \"./utils/tree-adapter\";\nimport { mount, unmount } from \"valyrian.js\";\n\nimport FormData from \"form-data\";\n// import fetch from \"node-fetch\";\nimport { icons } from \"./utils/icons\";\nimport { inline } from \"./utils/inline\";\nimport { sw } from \"./utils/sw\";\n\nglobal.FormData = FormData as any;\nglobal.document = document as any;\n\nfunction render(...args: any[]) {\n let Component = () => args;\n let result = mount(\"div\", Component);\n unmount();\n return result;\n}\n\nexport { domToHtml, domToHyperscript, htmlToDom, htmlToHyperscript, inline, sw, icons, render };\n", "import fs from \"fs\";\nimport { htmlToHyperscript } from \"./tree-adapter\";\n\ninterface 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\";\n lang?: string;\n background?: string;\n theme_color?: string;\n display?: \"browser\" | \"standalone\";\n orientation?: \"any\" | \"portrait\" | \"landscape\";\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 let 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 let response = await favicons(source, options);\n\n if (options.iconsPath) {\n for (let i in response.images) {\n fs.writeFileSync(options.iconsPath + response.images[i].name, response.images[i].contents);\n }\n\n for (let 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 let 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 let ext = file.split(\".\").pop();\n if (ext && /(js|cjs|jsx|mjs|ts|tsx)/.test(ext)) {\n if (/(ts|tsx)/.test(ext) && !options.noValidate) {\n let declarationDir = options.declarationDir;\n let emitDeclaration = !!declarationDir;\n\n let 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 let 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 let 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 let 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 let mapBase64 = Buffer.from(result2.map.toString()).toString(\"base64\");\n let suffix = `//# sourceMappingURL=data:application/json;charset=utf-8;base64,${mapBase64}`;\n return { raw: result2.code, map: suffix, file };\n } else {\n let mapBase64 = Buffer.from(result.outputFiles[0].text.toString()).toString(\"base64\");\n let 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 let 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\ninline.uncss = async function (\n renderedHtml: (string | Promise<string>)[],\n css: string,\n options: Record<string, any> = {}\n) {\n let html = await Promise.all(renderedHtml);\n\n let contents = html.map((item) => {\n return {\n raw: item,\n extension: \"html\"\n };\n });\n\n let purgecss = new PurgeCSS();\n\n let 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 let 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 let swfiletemplate = path.resolve(__dirname, \"./node.sw.tpl\");\n let swTpl = fs.readFileSync(swfiletemplate, \"utf8\");\n let opt = Object.assign(\n {\n version: \"v1::\",\n name: \"Valyrian.js\",\n urls: [\"/\"],\n debug: false\n },\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\n if (!opt.debug) {\n contents = contents.replace(\"console.log\", \"() => {}\");\n }\n\n fs.writeFileSync(file, contents, \"utf8\");\n}\n"],
5
- "mappings": "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",
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 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 }\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 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 }\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 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 }\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): 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", "import { document, domToHtml, domToHyperscript, htmlToDom, htmlToHyperscript } from \"./utils/tree-adapter\";\nimport { mount, unmount } from \"valyrian.js\";\n\nimport FormData from \"form-data\";\n// import fetch from \"node-fetch\";\nimport { icons } from \"./utils/icons\";\nimport { inline } from \"./utils/inline\";\nimport { sw } from \"./utils/sw\";\n\nglobal.FormData = FormData as any;\nglobal.document = document as any;\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 };\n", "import fs from \"fs\";\nimport { htmlToHyperscript } from \"./tree-adapter\";\n\ninterface 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\";\n lang?: string;\n background?: string;\n theme_color?: string;\n display?: \"browser\" | \"standalone\";\n orientation?: \"any\" | \"portrait\" | \"landscape\";\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\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.tpl\");\n const swTpl = fs.readFileSync(swfiletemplate, \"utf8\");\n const opt = Object.assign(\n {\n version: \"v1::\",\n name: \"Valyrian.js\",\n urls: [\"/\"],\n debug: false\n },\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\n if (!opt.debug) {\n contents = contents.replace(\"console.log\", \"() => {}\");\n }\n\n fs.writeFileSync(file, contents, \"utf8\");\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["node", "item", "document", "fs", "fs"]
7
7
  }
@@ -25,6 +25,7 @@ export declare class Node implements Node {
25
25
  insertBefore<T extends Node>(node: T, child: Node | null): T;
26
26
  replaceChild<T extends Node>(node: Node, child: T): T;
27
27
  removeChild<T extends Node>(child: T): T;
28
+ remove(): Node;
28
29
  cloneNode(deep?: boolean | undefined): Node;
29
30
  setAttribute(name: string, value: any): void;
30
31
  getAttribute(name: string): string | null | undefined;
@@ -41,9 +42,13 @@ export declare class Element extends Node {
41
42
  _style: Record<string, any>;
42
43
  get style(): string;
43
44
  set style(value: string);
45
+ get className(): string;
46
+ set className(value: string | boolean);
44
47
  classList: {
45
48
  toggle: (item: any, force: any) => void;
46
49
  };
50
+ get id(): string;
51
+ set id(value: string | boolean);
47
52
  set textContent(text: string);
48
53
  get textContent(): string;
49
54
  set innerText(text: string);
@@ -1 +1 @@
1
- {"version":3,"file":"tree-adapter.d.ts","sourceRoot":"","sources":["../../../lib/node/utils/tree-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tree-adapter.d.ts","sourceRoot":"","sources":["../../../lib/node/utils/tree-adapter.ts"],"names":[],"mappings":"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"}
@@ -35,8 +35,8 @@ function makeUnsubscribe(subscriptions, computed, handler, cleanup) {
35
35
  }
36
36
  function createSubscription(signal, subscriptions, handler) {
37
37
  if (subscriptions.has(handler) === false) {
38
- let computed = ProxySignal(() => handler(signal.value));
39
- let cleanup = computed();
38
+ const computed = ProxySignal(() => handler(signal.value));
39
+ const cleanup = computed();
40
40
  makeUnsubscribe(subscriptions, computed, handler, cleanup);
41
41
  subscriptions.set(handler, computed);
42
42
  }
@@ -48,10 +48,10 @@ function delayedUpdate() {
48
48
  updateTimeout = setTimeout(import_valyrian.update);
49
49
  }
50
50
  function ProxySignal(value) {
51
- let subscriptions = /* @__PURE__ */ new Map();
52
- let getters = {};
51
+ const subscriptions = /* @__PURE__ */ new Map();
52
+ const getters = {};
53
53
  let forceUpdate = false;
54
- let signal = new Proxy(
54
+ const signal = new Proxy(
55
55
  // eslint-disable-next-line no-unused-vars
56
56
  function(valOrPath, handler) {
57
57
  if (typeof valOrPath === "undefined") {
@@ -61,7 +61,7 @@ function ProxySignal(value) {
61
61
  return createSubscription(signal, subscriptions, valOrPath);
62
62
  }
63
63
  if (typeof valOrPath === "string" && typeof handler !== "undefined") {
64
- let parsed = valOrPath.split(".");
64
+ const parsed = valOrPath.split(".");
65
65
  let result = signal.value;
66
66
  let next;
67
67
  while (parsed.length) {
@@ -85,13 +85,13 @@ function ProxySignal(value) {
85
85
  {
86
86
  set(state, prop, val) {
87
87
  if (prop === "value" || prop === "unsubscribe" || prop === "cleanup") {
88
- let old = state[prop];
88
+ const old = state[prop];
89
89
  state[prop] = val;
90
90
  if (prop === "value" && (forceUpdate || val !== old)) {
91
91
  forceUpdate = false;
92
- for (let [handler, computed] of subscriptions) {
92
+ for (const [handler, computed] of subscriptions) {
93
93
  computed.cleanup();
94
- let cleanup = handler(val);
94
+ const cleanup = handler(val);
95
95
  makeUnsubscribe(subscriptions, computed, handler, cleanup);
96
96
  }
97
97
  delayedUpdate();
@@ -117,7 +117,7 @@ function ProxySignal(value) {
117
117
  value: { value, writable: true, enumerable: true },
118
118
  cleanup: {
119
119
  value() {
120
- for (let [handler, computed] of subscriptions) {
120
+ for (const [handler, computed] of subscriptions) {
121
121
  computed.unsubscribe();
122
122
  }
123
123
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../lib/proxy-signal/index.ts"],
4
- "sourcesContent": ["import { update } from \"valyrian.js\";\n\n/* eslint-disable no-use-before-define */\ninterface Cleanup {\n (): void;\n}\n\ninterface Subscription {\n // eslint-disable-next-line no-unused-vars\n (value: ProxySignal[\"value\"]): void | Cleanup;\n}\n\ninterface Subscriptions extends Map<Subscription, Cleanup> {}\n\ninterface Getter {\n // eslint-disable-next-line no-unused-vars\n (value: ProxySignal[\"value\"]): any;\n}\n\ninterface Getters {\n [key: string | symbol]: Getter;\n}\n\ninterface ProxySignal {\n // Works as a getter of the value\n (): ProxySignal[\"value\"];\n // Works as a subscription to the value\n // eslint-disable-next-line no-unused-vars\n (value: Subscription): ProxySignal;\n // Works as a setter with a path and a handler\n // eslint-disable-next-line no-unused-vars\n (path: string, handler: (valueAtPathPosition: any) => any): ProxySignal[\"value\"];\n // Works as a setter with a path and a value\n // eslint-disable-next-line no-unused-vars\n (path: string, value: any): ProxySignal[\"value\"];\n // Works as a setter with a value\n // eslint-disable-next-line no-unused-vars\n (value: any): ProxySignal[\"value\"];\n // Gets the current value of the signal.\n value: any;\n // Cleanup function to be called to remove all subscriptions.\n cleanup: () => void;\n // Creates a getter on the signal.\n // eslint-disable-next-line no-unused-vars\n getter: (name: string, handler: Getter) => any;\n // To access the getters on the signal.\n [key: string | number | symbol]: any;\n}\n\nfunction makeUnsubscribe(\n subscriptions: Subscriptions,\n computed: ProxySignal,\n handler: Subscription,\n cleanup?: Cleanup\n) {\n if (typeof cleanup === \"function\") {\n computed.cleanup = cleanup;\n }\n computed.unsubscribe = () => {\n subscriptions.delete(handler);\n computed?.cleanup();\n };\n}\n\nfunction createSubscription(signal: ProxySignal, subscriptions: Subscriptions, handler: Subscription) {\n if (subscriptions.has(handler) === false) {\n // eslint-disable-next-line no-use-before-define\n let computed = ProxySignal(() => handler(signal.value));\n let cleanup = computed(); // Execute to register itself\n makeUnsubscribe(subscriptions, computed, handler, cleanup);\n subscriptions.set(handler, computed);\n }\n\n return subscriptions.get(handler);\n}\n\nlet updateTimeout: any;\nfunction delayedUpdate() {\n clearTimeout(updateTimeout);\n updateTimeout = setTimeout(update);\n}\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nexport function ProxySignal(value: any): ProxySignal {\n let subscriptions = new Map();\n let getters: Getters = {};\n\n let forceUpdate = false;\n\n let signal: ProxySignal = new Proxy(\n // eslint-disable-next-line no-unused-vars\n function (valOrPath?: any | Subscription, handler?: (valueAtPathPosition: any) => any) {\n // Works as a getter\n if (typeof valOrPath === \"undefined\") {\n return signal.value;\n }\n\n // Works as a subscription\n if (typeof valOrPath === \"function\") {\n return createSubscription(signal, subscriptions, valOrPath);\n }\n\n // Works as a setter with a path\n if (typeof valOrPath === \"string\" && typeof handler !== \"undefined\") {\n let parsed = valOrPath.split(\".\");\n let result = signal.value;\n let next;\n while (parsed.length) {\n next = parsed.shift() as string;\n if (parsed.length > 0) {\n if (typeof result[next] !== \"object\") {\n result[next] = {};\n }\n result = result[next];\n } else {\n result[next] = typeof handler === \"function\" ? handler(result[next]) : handler;\n }\n }\n forceUpdate = true;\n signal.value = signal.value;\n return signal.value;\n }\n\n // Works as a setter with a value\n signal.value = valOrPath;\n return signal.value;\n } as ProxySignal,\n {\n set(state, prop, val) {\n if (prop === \"value\" || prop === \"unsubscribe\" || prop === \"cleanup\") {\n let old = state[prop];\n state[prop] = val;\n if (prop === \"value\" && (forceUpdate || val !== old)) {\n forceUpdate = false;\n for (let [handler, computed] of subscriptions) {\n computed.cleanup();\n let cleanup = handler(val);\n makeUnsubscribe(subscriptions, computed, handler, cleanup);\n }\n delayedUpdate();\n }\n return true;\n }\n return false;\n },\n get(state, prop) {\n if (prop === \"value\") {\n return typeof state.value === \"function\" ? state.value() : state.value;\n }\n\n if (prop === \"cleanup\" || prop === \"unsubscribe\" || prop === \"getter\") {\n return state[prop];\n }\n\n if (prop in getters) {\n return getters[prop](state.value);\n }\n }\n }\n );\n\n Object.defineProperties(signal, {\n value: { value, writable: true, enumerable: true },\n cleanup: {\n value() {\n // eslint-disable-next-line no-unused-vars\n for (let [handler, computed] of subscriptions) {\n computed.unsubscribe();\n }\n },\n writable: true,\n enumerable: true\n },\n getter: {\n value(name: string, handler: Getter) {\n if (name in getters) {\n throw new Error(\"Named computed already exists.\");\n }\n\n getters[name] = handler;\n },\n enumerable: true\n }\n });\n\n return signal;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { update } from \"valyrian.js\";\n\n/* eslint-disable no-use-before-define */\ninterface Cleanup {\n (): void;\n}\n\ninterface Subscription {\n // eslint-disable-next-line no-unused-vars\n (value: ProxySignal[\"value\"]): void | Cleanup;\n}\n\ninterface Subscriptions extends Map<Subscription, Cleanup> {}\n\ninterface Getter {\n // eslint-disable-next-line no-unused-vars\n (value: ProxySignal[\"value\"]): any;\n}\n\ninterface Getters {\n [key: string | symbol]: Getter;\n}\n\ninterface ProxySignal {\n // Works as a getter of the value\n (): ProxySignal[\"value\"];\n // Works as a subscription to the value\n // eslint-disable-next-line no-unused-vars\n (value: Subscription): ProxySignal;\n // Works as a setter with a path and a handler\n // eslint-disable-next-line no-unused-vars\n (path: string, handler: (valueAtPathPosition: any) => any): ProxySignal[\"value\"];\n // Works as a setter with a path and a value\n // eslint-disable-next-line no-unused-vars\n (path: string, value: any): ProxySignal[\"value\"];\n // Works as a setter with a value\n // eslint-disable-next-line no-unused-vars\n (value: any): ProxySignal[\"value\"];\n // Gets the current value of the signal.\n value: any;\n // Cleanup function to be called to remove all subscriptions.\n cleanup: () => void;\n // Creates a getter on the signal.\n // eslint-disable-next-line no-unused-vars\n getter: (name: string, handler: Getter) => any;\n // To access the getters on the signal.\n [key: string | number | symbol]: any;\n}\n\nfunction makeUnsubscribe(\n subscriptions: Subscriptions,\n computed: ProxySignal,\n handler: Subscription,\n cleanup?: Cleanup\n) {\n if (typeof cleanup === \"function\") {\n computed.cleanup = cleanup;\n }\n computed.unsubscribe = () => {\n subscriptions.delete(handler);\n computed?.cleanup();\n };\n}\n\nfunction createSubscription(signal: ProxySignal, subscriptions: Subscriptions, handler: Subscription) {\n if (subscriptions.has(handler) === false) {\n // eslint-disable-next-line no-use-before-define\n const computed = ProxySignal(() => handler(signal.value));\n const cleanup = computed(); // Execute to register itself\n makeUnsubscribe(subscriptions, computed, handler, cleanup);\n subscriptions.set(handler, computed);\n }\n\n return subscriptions.get(handler);\n}\n\nlet updateTimeout: any;\nfunction delayedUpdate() {\n clearTimeout(updateTimeout);\n updateTimeout = setTimeout(update);\n}\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nexport function ProxySignal(value: any): ProxySignal {\n const subscriptions = new Map();\n const getters: Getters = {};\n\n let forceUpdate = false;\n\n const signal: ProxySignal = new Proxy(\n // eslint-disable-next-line no-unused-vars\n function (valOrPath?: any | Subscription, handler?: (valueAtPathPosition: any) => any) {\n // Works as a getter\n if (typeof valOrPath === \"undefined\") {\n return signal.value;\n }\n\n // Works as a subscription\n if (typeof valOrPath === \"function\") {\n return createSubscription(signal, subscriptions, valOrPath);\n }\n\n // Works as a setter with a path\n if (typeof valOrPath === \"string\" && typeof handler !== \"undefined\") {\n const parsed = valOrPath.split(\".\");\n let result = signal.value;\n let next;\n while (parsed.length) {\n next = parsed.shift() as string;\n if (parsed.length > 0) {\n if (typeof result[next] !== \"object\") {\n result[next] = {};\n }\n result = result[next];\n } else {\n result[next] = typeof handler === \"function\" ? handler(result[next]) : handler;\n }\n }\n forceUpdate = true;\n signal.value = signal.value;\n return signal.value;\n }\n\n // Works as a setter with a value\n signal.value = valOrPath;\n return signal.value;\n } as ProxySignal,\n {\n set(state, prop, val) {\n if (prop === \"value\" || prop === \"unsubscribe\" || prop === \"cleanup\") {\n const old = state[prop];\n state[prop] = val;\n if (prop === \"value\" && (forceUpdate || val !== old)) {\n forceUpdate = false;\n for (const [handler, computed] of subscriptions) {\n computed.cleanup();\n const cleanup = handler(val);\n makeUnsubscribe(subscriptions, computed, handler, cleanup);\n }\n delayedUpdate();\n }\n return true;\n }\n return false;\n },\n get(state, prop) {\n if (prop === \"value\") {\n return typeof state.value === \"function\" ? state.value() : state.value;\n }\n\n if (prop === \"cleanup\" || prop === \"unsubscribe\" || prop === \"getter\") {\n return state[prop];\n }\n\n if (prop in getters) {\n return getters[prop](state.value);\n }\n }\n }\n );\n\n Object.defineProperties(signal, {\n value: { value, writable: true, enumerable: true },\n cleanup: {\n value() {\n // eslint-disable-next-line no-unused-vars\n for (const [handler, computed] of subscriptions) {\n computed.unsubscribe();\n }\n },\n writable: true,\n enumerable: true\n },\n getter: {\n value(name: string, handler: Getter) {\n if (name in getters) {\n throw new Error(\"Named computed already exists.\");\n }\n\n getters[name] = handler;\n },\n enumerable: true\n }\n });\n\n return signal;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -11,8 +11,8 @@ function makeUnsubscribe(subscriptions, computed, handler, cleanup) {
11
11
  }
12
12
  function createSubscription(signal, subscriptions, handler) {
13
13
  if (subscriptions.has(handler) === false) {
14
- let computed = ProxySignal(() => handler(signal.value));
15
- let cleanup = computed();
14
+ const computed = ProxySignal(() => handler(signal.value));
15
+ const cleanup = computed();
16
16
  makeUnsubscribe(subscriptions, computed, handler, cleanup);
17
17
  subscriptions.set(handler, computed);
18
18
  }
@@ -24,10 +24,10 @@ function delayedUpdate() {
24
24
  updateTimeout = setTimeout(update);
25
25
  }
26
26
  function ProxySignal(value) {
27
- let subscriptions = /* @__PURE__ */ new Map();
28
- let getters = {};
27
+ const subscriptions = /* @__PURE__ */ new Map();
28
+ const getters = {};
29
29
  let forceUpdate = false;
30
- let signal = new Proxy(
30
+ const signal = new Proxy(
31
31
  // eslint-disable-next-line no-unused-vars
32
32
  function(valOrPath, handler) {
33
33
  if (typeof valOrPath === "undefined") {
@@ -37,7 +37,7 @@ function ProxySignal(value) {
37
37
  return createSubscription(signal, subscriptions, valOrPath);
38
38
  }
39
39
  if (typeof valOrPath === "string" && typeof handler !== "undefined") {
40
- let parsed = valOrPath.split(".");
40
+ const parsed = valOrPath.split(".");
41
41
  let result = signal.value;
42
42
  let next;
43
43
  while (parsed.length) {
@@ -61,13 +61,13 @@ function ProxySignal(value) {
61
61
  {
62
62
  set(state, prop, val) {
63
63
  if (prop === "value" || prop === "unsubscribe" || prop === "cleanup") {
64
- let old = state[prop];
64
+ const old = state[prop];
65
65
  state[prop] = val;
66
66
  if (prop === "value" && (forceUpdate || val !== old)) {
67
67
  forceUpdate = false;
68
- for (let [handler, computed] of subscriptions) {
68
+ for (const [handler, computed] of subscriptions) {
69
69
  computed.cleanup();
70
- let cleanup = handler(val);
70
+ const cleanup = handler(val);
71
71
  makeUnsubscribe(subscriptions, computed, handler, cleanup);
72
72
  }
73
73
  delayedUpdate();
@@ -93,7 +93,7 @@ function ProxySignal(value) {
93
93
  value: { value, writable: true, enumerable: true },
94
94
  cleanup: {
95
95
  value() {
96
- for (let [handler, computed] of subscriptions) {
96
+ for (const [handler, computed] of subscriptions) {
97
97
  computed.unsubscribe();
98
98
  }
99
99
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../lib/proxy-signal/index.ts"],
4
- "sourcesContent": ["import { update } from \"valyrian.js\";\n\n/* eslint-disable no-use-before-define */\ninterface Cleanup {\n (): void;\n}\n\ninterface Subscription {\n // eslint-disable-next-line no-unused-vars\n (value: ProxySignal[\"value\"]): void | Cleanup;\n}\n\ninterface Subscriptions extends Map<Subscription, Cleanup> {}\n\ninterface Getter {\n // eslint-disable-next-line no-unused-vars\n (value: ProxySignal[\"value\"]): any;\n}\n\ninterface Getters {\n [key: string | symbol]: Getter;\n}\n\ninterface ProxySignal {\n // Works as a getter of the value\n (): ProxySignal[\"value\"];\n // Works as a subscription to the value\n // eslint-disable-next-line no-unused-vars\n (value: Subscription): ProxySignal;\n // Works as a setter with a path and a handler\n // eslint-disable-next-line no-unused-vars\n (path: string, handler: (valueAtPathPosition: any) => any): ProxySignal[\"value\"];\n // Works as a setter with a path and a value\n // eslint-disable-next-line no-unused-vars\n (path: string, value: any): ProxySignal[\"value\"];\n // Works as a setter with a value\n // eslint-disable-next-line no-unused-vars\n (value: any): ProxySignal[\"value\"];\n // Gets the current value of the signal.\n value: any;\n // Cleanup function to be called to remove all subscriptions.\n cleanup: () => void;\n // Creates a getter on the signal.\n // eslint-disable-next-line no-unused-vars\n getter: (name: string, handler: Getter) => any;\n // To access the getters on the signal.\n [key: string | number | symbol]: any;\n}\n\nfunction makeUnsubscribe(\n subscriptions: Subscriptions,\n computed: ProxySignal,\n handler: Subscription,\n cleanup?: Cleanup\n) {\n if (typeof cleanup === \"function\") {\n computed.cleanup = cleanup;\n }\n computed.unsubscribe = () => {\n subscriptions.delete(handler);\n computed?.cleanup();\n };\n}\n\nfunction createSubscription(signal: ProxySignal, subscriptions: Subscriptions, handler: Subscription) {\n if (subscriptions.has(handler) === false) {\n // eslint-disable-next-line no-use-before-define\n let computed = ProxySignal(() => handler(signal.value));\n let cleanup = computed(); // Execute to register itself\n makeUnsubscribe(subscriptions, computed, handler, cleanup);\n subscriptions.set(handler, computed);\n }\n\n return subscriptions.get(handler);\n}\n\nlet updateTimeout: any;\nfunction delayedUpdate() {\n clearTimeout(updateTimeout);\n updateTimeout = setTimeout(update);\n}\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nexport function ProxySignal(value: any): ProxySignal {\n let subscriptions = new Map();\n let getters: Getters = {};\n\n let forceUpdate = false;\n\n let signal: ProxySignal = new Proxy(\n // eslint-disable-next-line no-unused-vars\n function (valOrPath?: any | Subscription, handler?: (valueAtPathPosition: any) => any) {\n // Works as a getter\n if (typeof valOrPath === \"undefined\") {\n return signal.value;\n }\n\n // Works as a subscription\n if (typeof valOrPath === \"function\") {\n return createSubscription(signal, subscriptions, valOrPath);\n }\n\n // Works as a setter with a path\n if (typeof valOrPath === \"string\" && typeof handler !== \"undefined\") {\n let parsed = valOrPath.split(\".\");\n let result = signal.value;\n let next;\n while (parsed.length) {\n next = parsed.shift() as string;\n if (parsed.length > 0) {\n if (typeof result[next] !== \"object\") {\n result[next] = {};\n }\n result = result[next];\n } else {\n result[next] = typeof handler === \"function\" ? handler(result[next]) : handler;\n }\n }\n forceUpdate = true;\n signal.value = signal.value;\n return signal.value;\n }\n\n // Works as a setter with a value\n signal.value = valOrPath;\n return signal.value;\n } as ProxySignal,\n {\n set(state, prop, val) {\n if (prop === \"value\" || prop === \"unsubscribe\" || prop === \"cleanup\") {\n let old = state[prop];\n state[prop] = val;\n if (prop === \"value\" && (forceUpdate || val !== old)) {\n forceUpdate = false;\n for (let [handler, computed] of subscriptions) {\n computed.cleanup();\n let cleanup = handler(val);\n makeUnsubscribe(subscriptions, computed, handler, cleanup);\n }\n delayedUpdate();\n }\n return true;\n }\n return false;\n },\n get(state, prop) {\n if (prop === \"value\") {\n return typeof state.value === \"function\" ? state.value() : state.value;\n }\n\n if (prop === \"cleanup\" || prop === \"unsubscribe\" || prop === \"getter\") {\n return state[prop];\n }\n\n if (prop in getters) {\n return getters[prop](state.value);\n }\n }\n }\n );\n\n Object.defineProperties(signal, {\n value: { value, writable: true, enumerable: true },\n cleanup: {\n value() {\n // eslint-disable-next-line no-unused-vars\n for (let [handler, computed] of subscriptions) {\n computed.unsubscribe();\n }\n },\n writable: true,\n enumerable: true\n },\n getter: {\n value(name: string, handler: Getter) {\n if (name in getters) {\n throw new Error(\"Named computed already exists.\");\n }\n\n getters[name] = handler;\n },\n enumerable: true\n }\n });\n\n return signal;\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { update } from \"valyrian.js\";\n\n/* eslint-disable no-use-before-define */\ninterface Cleanup {\n (): void;\n}\n\ninterface Subscription {\n // eslint-disable-next-line no-unused-vars\n (value: ProxySignal[\"value\"]): void | Cleanup;\n}\n\ninterface Subscriptions extends Map<Subscription, Cleanup> {}\n\ninterface Getter {\n // eslint-disable-next-line no-unused-vars\n (value: ProxySignal[\"value\"]): any;\n}\n\ninterface Getters {\n [key: string | symbol]: Getter;\n}\n\ninterface ProxySignal {\n // Works as a getter of the value\n (): ProxySignal[\"value\"];\n // Works as a subscription to the value\n // eslint-disable-next-line no-unused-vars\n (value: Subscription): ProxySignal;\n // Works as a setter with a path and a handler\n // eslint-disable-next-line no-unused-vars\n (path: string, handler: (valueAtPathPosition: any) => any): ProxySignal[\"value\"];\n // Works as a setter with a path and a value\n // eslint-disable-next-line no-unused-vars\n (path: string, value: any): ProxySignal[\"value\"];\n // Works as a setter with a value\n // eslint-disable-next-line no-unused-vars\n (value: any): ProxySignal[\"value\"];\n // Gets the current value of the signal.\n value: any;\n // Cleanup function to be called to remove all subscriptions.\n cleanup: () => void;\n // Creates a getter on the signal.\n // eslint-disable-next-line no-unused-vars\n getter: (name: string, handler: Getter) => any;\n // To access the getters on the signal.\n [key: string | number | symbol]: any;\n}\n\nfunction makeUnsubscribe(\n subscriptions: Subscriptions,\n computed: ProxySignal,\n handler: Subscription,\n cleanup?: Cleanup\n) {\n if (typeof cleanup === \"function\") {\n computed.cleanup = cleanup;\n }\n computed.unsubscribe = () => {\n subscriptions.delete(handler);\n computed?.cleanup();\n };\n}\n\nfunction createSubscription(signal: ProxySignal, subscriptions: Subscriptions, handler: Subscription) {\n if (subscriptions.has(handler) === false) {\n // eslint-disable-next-line no-use-before-define\n const computed = ProxySignal(() => handler(signal.value));\n const cleanup = computed(); // Execute to register itself\n makeUnsubscribe(subscriptions, computed, handler, cleanup);\n subscriptions.set(handler, computed);\n }\n\n return subscriptions.get(handler);\n}\n\nlet updateTimeout: any;\nfunction delayedUpdate() {\n clearTimeout(updateTimeout);\n updateTimeout = setTimeout(update);\n}\n\n// eslint-disable-next-line sonarjs/cognitive-complexity\nexport function ProxySignal(value: any): ProxySignal {\n const subscriptions = new Map();\n const getters: Getters = {};\n\n let forceUpdate = false;\n\n const signal: ProxySignal = new Proxy(\n // eslint-disable-next-line no-unused-vars\n function (valOrPath?: any | Subscription, handler?: (valueAtPathPosition: any) => any) {\n // Works as a getter\n if (typeof valOrPath === \"undefined\") {\n return signal.value;\n }\n\n // Works as a subscription\n if (typeof valOrPath === \"function\") {\n return createSubscription(signal, subscriptions, valOrPath);\n }\n\n // Works as a setter with a path\n if (typeof valOrPath === \"string\" && typeof handler !== \"undefined\") {\n const parsed = valOrPath.split(\".\");\n let result = signal.value;\n let next;\n while (parsed.length) {\n next = parsed.shift() as string;\n if (parsed.length > 0) {\n if (typeof result[next] !== \"object\") {\n result[next] = {};\n }\n result = result[next];\n } else {\n result[next] = typeof handler === \"function\" ? handler(result[next]) : handler;\n }\n }\n forceUpdate = true;\n signal.value = signal.value;\n return signal.value;\n }\n\n // Works as a setter with a value\n signal.value = valOrPath;\n return signal.value;\n } as ProxySignal,\n {\n set(state, prop, val) {\n if (prop === \"value\" || prop === \"unsubscribe\" || prop === \"cleanup\") {\n const old = state[prop];\n state[prop] = val;\n if (prop === \"value\" && (forceUpdate || val !== old)) {\n forceUpdate = false;\n for (const [handler, computed] of subscriptions) {\n computed.cleanup();\n const cleanup = handler(val);\n makeUnsubscribe(subscriptions, computed, handler, cleanup);\n }\n delayedUpdate();\n }\n return true;\n }\n return false;\n },\n get(state, prop) {\n if (prop === \"value\") {\n return typeof state.value === \"function\" ? state.value() : state.value;\n }\n\n if (prop === \"cleanup\" || prop === \"unsubscribe\" || prop === \"getter\") {\n return state[prop];\n }\n\n if (prop in getters) {\n return getters[prop](state.value);\n }\n }\n }\n );\n\n Object.defineProperties(signal, {\n value: { value, writable: true, enumerable: true },\n cleanup: {\n value() {\n // eslint-disable-next-line no-unused-vars\n for (const [handler, computed] of subscriptions) {\n computed.unsubscribe();\n }\n },\n writable: true,\n enumerable: true\n },\n getter: {\n value(name: string, handler: Getter) {\n if (name in getters) {\n throw new Error(\"Named computed already exists.\");\n }\n\n getters[name] = handler;\n },\n enumerable: true\n }\n });\n\n return signal;\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }