subay 0.0.6 → 0.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +301 -27
- package/README.zh.md +377 -0
- package/lib/h.d.ts.map +1 -1
- package/lib/h.js +32 -25
- package/lib/h.js.map +1 -1
- package/lib/index.js +2 -3
- package/lib/index.js.map +1 -1
- package/lib/s.d.ts.map +1 -1
- package/lib/s.js +2 -66
- package/lib/s.js.map +1 -1
- package/package.json +8 -3
- package/src/h.ts +569 -0
- package/src/index.ts +4 -0
- package/src/s.ts +193 -0
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/s.ts","../src/h.ts"],"sourcesContent":["interface IUpdater {\r\n (): void;\r\n _whoIOwn: Array<IUpdater>;\r\n _whoINeed: Array<ITrigger>;\r\n _dirty: boolean;\r\n _onCleanupCallback: Array<() => void>;\r\n}\r\n\r\ninterface ITrigger {\r\n _whoNeedMe: Array<IUpdater>;\r\n _data: IO<any>;\r\n _pendingValue: any;\r\n}\r\n\r\ninterface IS<T> {\r\n (): T;\r\n}\r\n\r\ninterface IO<T> {\r\n (): T;\r\n (nextValue: T): T;\r\n}\r\n\r\nlet currentUpdate: IUpdater | undefined = undefined;\r\nconst NoValue: unique symbol = Symbol();\r\nlet triggerQueue: Array<ITrigger> | undefined = undefined;\r\nconst fun2s = new WeakMap<(...args: any[]) => any, IUpdater>();\r\nclass Reactive {}\r\nclass Observable extends Reactive {}\r\nclass Computation extends Reactive {}\r\nconst cProto = new Computation();\r\nconst oProto = new Observable();\r\n\r\nexport const root = <T>(fn: (destroy: () => void) => T): T => {\r\n const backup = currentUpdate;\r\n const rootUpdate: IUpdater = (() => {}) as any;\r\n resetUpdate(rootUpdate);\r\n rootUpdate._dirty = false;\r\n currentUpdate = rootUpdate;\r\n const result = fn(() => {\r\n recycleUpdate(rootUpdate);\r\n currentUpdate = undefined;\r\n });\r\n currentUpdate = backup;\r\n return result;\r\n};\r\nexport const S = <T>(fn: (pv: T | undefined) => T, value?: T): IS<T> => {\r\n const data = () => {\r\n if (update._dirty) {\r\n update();\r\n } else if (currentUpdate) {\r\n update._whoINeed.forEach((t) => t._data());\r\n }\r\n return value as T;\r\n };\r\n Object.setPrototypeOf(data, cProto);\r\n const update: IUpdater = (() => {\r\n const backup = currentUpdate;\r\n recycleUpdate(update);\r\n update._dirty = false;\r\n currentUpdate = update;\r\n value = fn(value);\r\n currentUpdate = backup;\r\n }) as any;\r\n if (currentUpdate) {\r\n currentUpdate._whoIOwn.push(update);\r\n }\r\n resetUpdate(update);\r\n update();\r\n fun2s.set(fn, update);\r\n return data;\r\n};\r\nexport const o = <T>(value: T): IO<T> => {\r\n function data(): T;\r\n function data(nextValue: T): T;\r\n function data(nextValue?: T) {\r\n if (arguments.length === 0) {\r\n if (currentUpdate) {\r\n if (!currentUpdate._whoINeed.includes(trigger)) {\r\n currentUpdate._whoINeed.push(trigger);\r\n }\r\n if (!trigger._whoNeedMe.includes(currentUpdate)) {\r\n trigger._whoNeedMe.push(currentUpdate);\r\n }\r\n }\r\n return value;\r\n }\r\n\r\n if (triggerQueue) {\r\n if (trigger._pendingValue === NoValue) {\r\n triggerQueue.push(trigger);\r\n }\r\n trigger._pendingValue = nextValue;\r\n return nextValue;\r\n }\r\n\r\n value = nextValue!;\r\n\r\n const backup = currentUpdate;\r\n currentUpdate = undefined;\r\n\r\n const whoNeedMeLasttime = trigger._whoNeedMe.filter((it) => {\r\n return it._whoINeed.includes(trigger);\r\n });\r\n whoNeedMeLasttime.forEach((u) => {\r\n u._dirty = true;\r\n });\r\n trigger._whoNeedMe = [];\r\n whoNeedMeLasttime.forEach((u) => {\r\n if (u._dirty) {\r\n u();\r\n }\r\n });\r\n\r\n currentUpdate = backup;\r\n\r\n return value;\r\n }\r\n\r\n Object.setPrototypeOf(data, oProto);\r\n\r\n const trigger: ITrigger = {\r\n _whoNeedMe: [],\r\n _data: data,\r\n _pendingValue: NoValue,\r\n };\r\n\r\n return data;\r\n};\r\nconst recycleUpdate = (update: IUpdater) => {\r\n update._whoIOwn.forEach(recycleUpdate);\r\n update._dirty = false;\r\n update._onCleanupCallback.forEach((f) => f());\r\n resetUpdate(update);\r\n};\r\n\r\nconst resetUpdate = (update: IUpdater) => {\r\n update._whoINeed = [];\r\n update._whoIOwn = [];\r\n update._onCleanupCallback = [];\r\n};\r\n\r\nexport const cleanup = <T extends () => void>(f: T): T => {\r\n if (currentUpdate) {\r\n currentUpdate._onCleanupCallback.push(f);\r\n }\r\n return f;\r\n};\r\n\r\nexport const transaction = <T>(f: () => T): T => {\r\n const fallback = triggerQueue;\r\n triggerQueue = [] as ITrigger[];\r\n const result = f();\r\n const workedQueue = triggerQueue;\r\n triggerQueue = fallback;\r\n\r\n workedQueue.forEach((t) => {\r\n if (t._pendingValue !== NoValue) {\r\n const pv = t._pendingValue;\r\n t._pendingValue = NoValue;\r\n t._data(pv);\r\n }\r\n });\r\n\r\n return result;\r\n};\r\n\r\nexport { o as observable };\r\n\r\nexport const sample = <T>(f: () => T): T => {\r\n const fallback = currentUpdate;\r\n currentUpdate = undefined;\r\n const value = f();\r\n currentUpdate = fallback;\r\n return value;\r\n};\r\n\r\nexport const isListening = () => !!currentUpdate;\r\n\r\nexport const subscribe = (f: () => void) => {\r\n S(f);\r\n return () => unsubscribe(f);\r\n};\r\nexport const unsubscribe = (f: () => void) => {\r\n const update = fun2s.get(f);\r\n if (update) {\r\n recycleUpdate(update);\r\n }\r\n};\r\n\r\nexport const isObservable = (o: any): o is IO<any> => o instanceof Observable;\r\nexport const isComputed = (o: any): o is IS<any> => o instanceof Computation;\r\nexport const isReactive = (o: any): o is IO<any> | IS<any> => o instanceof Reactive;\r\n","/** @format */\r\n\r\nimport { cleanup, isReactive, root, S, sample } from './s.js';\r\n\r\nconst enum InterNodeType {\r\n Text = 1,\r\n Element = 2,\r\n Attribute = 3,\r\n}\r\n\r\ntype InterTreeNode = InterTextNode | InterElementNode;\r\n\r\ntype InterTextNode = {\r\n _type: InterNodeType.Text;\r\n _data: Array<string | number>;\r\n};\r\ntype InterElementNode = {\r\n _ns: string | null;\r\n _tag: Array<string | number>;\r\n _type: InterNodeType.Element;\r\n _attrs: InterAttributeNode[];\r\n _content: Array<InterTreeNode>;\r\n _sourceNode: Element | null;\r\n _sourceIndex: number;\r\n};\r\n\r\ntype InterAttributeNode = {\r\n _type: InterNodeType.Attribute;\r\n _name: Array<string | number>;\r\n _value: Array<string | number>;\r\n};\r\n\r\nconst cache = new Map<TemplateStringsArray, InterTreeNode[]>();\r\nfunction random6LetterString() {\r\n const BASE = 36;\r\n const power5 = BASE ** 5;\r\n const min = 10 * power5;\r\n const length = 26 * power5;\r\n return Math.floor(Math.random() * length + min).toString(BASE);\r\n}\r\nconst MarkStart = random6LetterString();\r\nconst MarkEnd = random6LetterString();\r\nconst MarkReg = new RegExp(`([\\\\s\\\\S]*?)${MarkStart}(\\\\d+)${MarkEnd}([\\\\s\\\\S]*?)(?=${MarkStart}\\\\d+${MarkEnd}|$)`, 'g');\r\nconst BlankText = /\\s*\\n\\s*/g;\r\nconst domParser = new DOMParser();\r\n\r\nconst parseText = (data: string) => {\r\n const result: Array<string | number> = [];\r\n data = data.replace(BlankText, '');\r\n if (data.includes(MarkStart) && data.includes(MarkEnd)) {\r\n for (const res of data.matchAll(MarkReg)) {\r\n const [, prefix, index, suffix] = res;\r\n if (prefix) {\r\n result.push(prefix);\r\n }\r\n if (index) {\r\n result.push(Number(index));\r\n }\r\n if (suffix) {\r\n result.push(suffix);\r\n }\r\n }\r\n } else if (data) {\r\n result.push(data);\r\n }\r\n return result;\r\n};\r\n\r\nconst unparseText = (data: Array<string | number>, values: any[]) => {\r\n if (data.length === 1) {\r\n if (typeof data[0] === 'number') {\r\n return values[data[0]!];\r\n }\r\n return data[0];\r\n }\r\n return S(() => {\r\n return data\r\n .map((it) => {\r\n if (typeof it === 'number') {\r\n const value = values[it];\r\n if (typeof value === 'function') {\r\n return value();\r\n }\r\n return value;\r\n }\r\n return it;\r\n })\r\n .join('');\r\n });\r\n};\r\n\r\nconst parse = (\r\n docType: DOMParserSupportedType,\r\n wrapSource: (source: string) => string,\r\n unwrapNode: (node: Document) => NodeList,\r\n segments: TemplateStringsArray,\r\n indexMap: number[],\r\n): InterTreeNode[] => {\r\n if (cache.has(segments)) {\r\n return cache.get(segments)!;\r\n }\r\n\r\n const htmlStr = segments\r\n .flatMap((segment, index, { length }) => {\r\n if (index === length - 1) {\r\n return [segment];\r\n }\r\n return [segment, MarkStart, indexMap[index], MarkEnd];\r\n })\r\n .join('');\r\n\r\n const wrappedHtmlStr = wrapSource(htmlStr);\r\n\r\n const document = domParser.parseFromString(wrappedHtmlStr, docType);\r\n\r\n const dom2treenode = (domNodeList: NodeList) => {\r\n const nodeList: InterTreeNode[] = [];\r\n for (\r\n let item: Node | undefined | null = domNodeList.item(0), nextSibling = item?.nextSibling, index = 0;\r\n item != null;\r\n item = nextSibling, nextSibling = nextSibling?.nextSibling, index++\r\n ) {\r\n do\r\n remove_and_dec_index: {\r\n if (item.nodeType === Node.ELEMENT_NODE) {\r\n const el = item as Element;\r\n const tag = parseText(el.tagName.toLowerCase());\r\n const isVariableElem = tag.length > 1 || typeof tag[0] === 'number';\r\n\r\n nodeList.push({\r\n _ns: el.namespaceURI,\r\n _type: InterNodeType.Element,\r\n _tag: tag,\r\n _attrs: Array.from(el.attributes).flatMap((attr) => {\r\n const name = parseText(attr.nodeName);\r\n const value = parseText(attr.value);\r\n const isVariableAttr =\r\n name.length > 1 ||\r\n typeof name[0] === 'number' ||\r\n value.length > 1 ||\r\n typeof value[0] === 'number';\r\n\r\n if (!isVariableElem && !isVariableAttr) {\r\n return [];\r\n } else {\r\n el.removeAttribute(attr.nodeName);\r\n }\r\n return [\r\n {\r\n _type: InterNodeType.Attribute,\r\n _name: name,\r\n _value: value,\r\n } satisfies InterAttributeNode,\r\n ];\r\n }),\r\n _content: el.childNodes.length > 0 ? dom2treenode(el.childNodes) : [],\r\n _sourceNode: isVariableElem ? null : el,\r\n _sourceIndex: index,\r\n });\r\n\r\n if (!isVariableElem) {\r\n break remove_and_dec_index;\r\n }\r\n } else if (item.nodeType === Node.TEXT_NODE) {\r\n const data = (item as Text).data;\r\n const result = parseText(data);\r\n if (result.length > 0) {\r\n nodeList.push({\r\n _type: InterNodeType.Text,\r\n _data: result,\r\n });\r\n }\r\n }\r\n (item as Comment | Text | Element).remove();\r\n index--;\r\n }\r\n while (false);\r\n }\r\n return nodeList;\r\n };\r\n\r\n const rootList = unwrapNode(document);\r\n\r\n const treeNode = dom2treenode(rootList);\r\n\r\n cache.set(segments, treeNode);\r\n\r\n return treeNode;\r\n};\r\n\r\nconst element = (\r\n ns: string | null,\r\n sourceNode: Element | null,\r\n tagName: string | (() => string),\r\n child: (node: Element) => Node[],\r\n): Node[] => {\r\n if (typeof tagName === 'function') {\r\n return fragment(() => {\r\n const realTagName = tagName();\r\n if (typeof realTagName === 'string') {\r\n return element(ns, null, realTagName, child);\r\n }\r\n return [];\r\n });\r\n }\r\n if (typeof tagName !== 'string') {\r\n return [];\r\n }\r\n const el = sourceNode || (ns ? document.createElementNS(ns, tagName) : document.createElement(tagName));\r\n S(() => {\r\n const subnodes = child(el);\r\n if (subnodes.length === 0) {\r\n return;\r\n }\r\n if (!el.firstChild) {\r\n // @domact\r\n el.append(...subnodes);\r\n } else {\r\n for (let left: Element | null = el.firstElementChild, rightIndex = 0; rightIndex < subnodes.length; rightIndex++) {\r\n const right = subnodes[rightIndex]!;\r\n if (left === right) {\r\n left = left.nextElementSibling;\r\n } else {\r\n // @domact\r\n el.insertBefore(right, left);\r\n }\r\n }\r\n }\r\n });\r\n cleanup(() => el.remove());\r\n return [el];\r\n};\r\n\r\nconst fragment = (child: (head: Node) => Node[]): Node[] => {\r\n const firstNode = document.createComment('start-frag');\r\n cleanup(() => firstNode.remove());\r\n const tempArray: Node[] = [firstNode];\r\n S(() => {\r\n const c = child(firstNode);\r\n const carr = Array.isArray(c) ? c : [c];\r\n\r\n const nodified = carr.map((c) => {\r\n if (c instanceof Node) {\r\n return c;\r\n }\r\n const node = document.createTextNode(c);\r\n cleanup(() => node.remove());\r\n return node;\r\n });\r\n\r\n if (firstNode.isConnected) {\r\n firstNode.after(...nodified);\r\n } else {\r\n tempArray.push(...nodified);\r\n }\r\n });\r\n\r\n return tempArray;\r\n};\r\nfunction arrTrans<T>(a: readonly T[], b: readonly T[], a2b: (a: T) => void, dela: (a: T) => void, keep: (a: T) => void): void {\r\n const aLen = a.length;\r\n const bLen = b.length;\r\n\r\n if (a === b || (aLen === 0 && bLen === 0)) {\r\n return;\r\n }\r\n\r\n let start = 0;\r\n const minLen = Math.min(aLen, bLen);\r\n while (start < minLen && a[start] === b[start]) {\r\n start++;\r\n }\r\n\r\n let end = 0;\r\n while (end < minLen - start && a[aLen - 1 - end] === b[bLen - 1 - end]) {\r\n end++;\r\n }\r\n\r\n const aMidLen = aLen - start - end;\r\n const bMidLen = bLen - start - end;\r\n\r\n if (aMidLen === 0 && bMidLen === 0) {\r\n for (let i = 0; i < start; i++) {\r\n keep(a[i]!);\r\n }\r\n for (let i = 0; i < end; i++) {\r\n keep(a[aLen - end + i]!);\r\n }\r\n return;\r\n }\r\n\r\n const bIndexMap = new Map<T, number>();\r\n for (let i = 0; i < bMidLen; i++) {\r\n bIndexMap.set(b[start + i]!, i);\r\n }\r\n\r\n const indices: number[] = [];\r\n for (let i = 0; i < aMidLen; i++) {\r\n const val = a[start + i]!;\r\n const bIdx = bIndexMap.get(val);\r\n if (bIdx !== undefined) {\r\n indices.push(bIdx);\r\n }\r\n }\r\n\r\n const tails: number[] = [];\r\n const parents: number[] = new Array(indices.length).fill(-1);\r\n const tailIndices: number[] = [];\r\n\r\n for (let i = 0; i < indices.length; i++) {\r\n const idx = indices[i]!;\r\n\r\n let left = 0;\r\n let right = tails.length;\r\n while (left < right) {\r\n const mid = (left + right) >> 1;\r\n if (tails[mid]! < idx) {\r\n left = mid + 1;\r\n } else {\r\n right = mid;\r\n }\r\n }\r\n\r\n const pos = left;\r\n if (pos === tails.length) {\r\n tails.push(idx);\r\n tailIndices.push(i);\r\n } else {\r\n tails[pos] = idx;\r\n tailIndices[pos] = i;\r\n }\r\n\r\n if (pos > 0) {\r\n parents[i] = tailIndices[pos - 1]!;\r\n }\r\n }\r\n\r\n const keepSet = new Set<T>();\r\n let curr = tailIndices.length > 0 ? tailIndices[tailIndices.length - 1]! : -1;\r\n while (curr !== -1) {\r\n const bIdx = indices[curr]!;\r\n keepSet.add(b[start + bIdx]!);\r\n curr = parents[curr]!;\r\n }\r\n\r\n for (let i = 0; i < start; i++) {\r\n keep(a[i]!);\r\n }\r\n\r\n for (let i = 0; i < aMidLen; i++) {\r\n const val = a[start + i]!;\r\n if (!keepSet.has(val)) {\r\n dela(val);\r\n }\r\n }\r\n\r\n for (let i = 0; i < bMidLen; i++) {\r\n const val = b[start + i]!;\r\n if (keepSet.has(val)) {\r\n keep(val);\r\n } else {\r\n a2b(val);\r\n }\r\n }\r\n\r\n for (let i = 0; i < end; i++) {\r\n keep(a[aLen - end + i]!);\r\n }\r\n}\r\ninterface MapState<T> {\r\n _itemDestroyer: Array<() => void>;\r\n _domNodesOfItem: Node[][];\r\n _arrayValue: T[];\r\n}\r\nexport const map = <T>(array: () => T[], f: (item: T) => Node[]): Node[] => {\r\n return fragment((headNode) => {\r\n cleanup(() => {\r\n mapState()._itemDestroyer.forEach((f) => f());\r\n });\r\n const createItem = (item: T) => {\r\n return root((destroyItem) => {\r\n const domNodes = f(item);\r\n return [destroyItem, domNodes] as [() => void, Node[]];\r\n });\r\n };\r\n const mapState = S<MapState<T>>(\r\n (\r\n preState = {\r\n _arrayValue: [] as T[],\r\n _domNodesOfItem: [],\r\n _itemDestroyer: [],\r\n },\r\n ) => {\r\n const currentArrayValue = array();\r\n const preArrayValue = preState._arrayValue;\r\n const newState: MapState<T> = {\r\n _arrayValue: currentArrayValue,\r\n _domNodesOfItem: [],\r\n _itemDestroyer: [],\r\n };\r\n arrTrans(\r\n preArrayValue,\r\n currentArrayValue,\r\n (newItem) => {\r\n const [destroyer, domNodes] = createItem(newItem);\r\n const preNode = newState._domNodesOfItem.at(-1)?.at(-1) ?? headNode;\r\n (preNode as Element | Comment).after(...domNodes);\r\n newState._domNodesOfItem.push(domNodes);\r\n newState._itemDestroyer.push(destroyer);\r\n },\r\n (oldItem) => {\r\n const i = preArrayValue.indexOf(oldItem);\r\n preState._itemDestroyer[i]!();\r\n },\r\n (oldItem) => {\r\n const i = preArrayValue.indexOf(oldItem);\r\n newState._domNodesOfItem.push(preState._domNodesOfItem[i]!);\r\n newState._itemDestroyer.push(preState._itemDestroyer[i]!);\r\n },\r\n );\r\n return newState;\r\n },\r\n );\r\n return sample(() => mapState()._domNodesOfItem.flat());\r\n });\r\n};\r\n\r\nconst isPropertyOf = (domEl: HTMLElement | SVGElement, traitName: string) => {\r\n let descriptor;\r\n do {\r\n descriptor = Object.getOwnPropertyDescriptor(domEl, traitName);\r\n domEl = Object.getPrototypeOf(domEl);\r\n } while (domEl && !descriptor);\r\n if (!descriptor) {\r\n return false;\r\n }\r\n if (false === descriptor.writable) {\r\n return false;\r\n }\r\n if (descriptor.get && !descriptor.set) {\r\n return false;\r\n }\r\n return true;\r\n};\r\nconst attribute = (node: Element, key: string | (() => string), val: string | (() => any)) => {\r\n if (typeof key !== 'function' && !isReactive(val)) {\r\n if (!node) {\r\n return;\r\n }\r\n if (!(node instanceof Element)) {\r\n return;\r\n }\r\n const isProp = isPropertyOf(node as any, key);\r\n if (isProp) {\r\n const preValue = (node as any)[key];\r\n (node as any)[key] = val;\r\n cleanup(() => {\r\n (node as any)[key] = preValue;\r\n });\r\n } else {\r\n node.setAttribute(key, val);\r\n cleanup(() => {\r\n node.removeAttribute(key);\r\n });\r\n }\r\n } else {\r\n S(() => {\r\n attribute(node, typeof key === 'function' ? key() : key, isReactive(val) ? val() : val);\r\n });\r\n }\r\n};\r\n\r\nconst spreadAttrs = (node: Element, value: () => any) => {\r\n S(() => {\r\n const attrs = value();\r\n for (const key in attrs) {\r\n attribute(node, key, attrs[key]);\r\n }\r\n });\r\n};\r\n\r\nconst tree2dom = (ns: string | null, node: InterTreeNode, values: any[]): Node[] => {\r\n if (node._type === InterNodeType.Text) {\r\n return node._data.flatMap((part) => {\r\n if (typeof part === 'string') {\r\n const textNode = document.createTextNode(part);\r\n cleanup(() => textNode.remove());\r\n return textNode;\r\n } else if (typeof part === 'number') {\r\n const value = values[part];\r\n if (typeof value === 'function') {\r\n return fragment(value);\r\n } else {\r\n const textNode = document.createTextNode(String(value));\r\n cleanup(() => textNode.remove());\r\n return textNode;\r\n }\r\n }\r\n return [];\r\n });\r\n } else {\r\n const { _attrs: attrs, _content: content, _tag: tag, _sourceNode: sourceNode } = node;\r\n const tagValue = unparseText(tag, values);\r\n const currentNs = node._ns ?? ns;\r\n return element(currentNs, sourceNode, tagValue, (node) => {\r\n for (const { _name: name, _value: value } of attrs) {\r\n if (name[0] === '...' && typeof name[1] === 'number') {\r\n spreadAttrs(node, unparseText(name.slice(1), values));\r\n } else {\r\n attribute(node, unparseText(name, values), unparseText(value, values));\r\n }\r\n }\r\n return content.flatMap((t) => tree2dom(currentNs, t, values));\r\n });\r\n }\r\n};\r\n\r\nconst cloneTreeNode = (treeNode: InterTreeNode, parentNode: Element | null): InterTreeNode => {\r\n if (treeNode._type === InterNodeType.Text) {\r\n return treeNode;\r\n } else {\r\n if (!treeNode._sourceNode) {\r\n return treeNode;\r\n }\r\n const currentNode =\r\n parentNode ?\r\n (parentNode.childNodes.item(treeNode._sourceIndex) as Element)\r\n : (treeNode._sourceNode.cloneNode(true) as Element);\r\n return {\r\n ...treeNode,\r\n _sourceNode: currentNode,\r\n _content: treeNode._content.map((node) => cloneTreeNode(node, currentNode)),\r\n } satisfies InterElementNode;\r\n }\r\n};\r\n\r\nconst tag =\r\n (\r\n ns: string | null,\r\n docType: DOMParserSupportedType,\r\n wrapSource: (source: string) => string,\r\n unwrapNode: (node: Document) => NodeList,\r\n ) =>\r\n (segments: TemplateStringsArray, ...values: any[]): Node[] => {\r\n const tree = parse(\r\n docType,\r\n wrapSource,\r\n unwrapNode,\r\n segments,\r\n values.map((it) => values.indexOf(it)),\r\n );\r\n const clonedTree = tree.map((tree) => cloneTreeNode(tree, null));\r\n return fragment(() => {\r\n return clonedTree.flatMap((item) => tree2dom(ns, item, values));\r\n });\r\n };\r\nconst svgns = 'http://www.w3.org/2000/svg';\r\nexport const svg = tag(\r\n svgns,\r\n 'text/xml',\r\n (svg) => `<svg xmlns=\"${svgns}\">${svg}</svg>`,\r\n (doc) => doc.firstChild!.childNodes,\r\n);\r\nexport const html = tag(\r\n null,\r\n 'text/html',\r\n (html) => html,\r\n (doc) => doc.body.childNodes,\r\n);\r\n"],"names":["currentUpdate","NoValue","Symbol","triggerQueue","fun2s","WeakMap","Reactive","Observable","Computation","cProto","oProto","root","fn","backup","rootUpdate","resetUpdate","_dirty","result","recycleUpdate","undefined","S","value","data","update","_whoINeed","forEach","t","_data","Object","setPrototypeOf","_whoIOwn","push","set","o","nextValue","arguments","length","includes","trigger","_whoNeedMe","_pendingValue","whoNeedMeLasttime","filter","it","u","_onCleanupCallback","f","cleanup","transaction","fallback","workedQueue","pv","sample","isListening","subscribe","unsubscribe","get","isObservable","isComputed","isReactive","cache","Map","random6LetterString","Math","floor","random","toString","MarkStart","MarkEnd","MarkReg","RegExp","BlankText","domParser","DOMParser","parseText","replace","res","matchAll","prefix","index","suffix","Number","unparseText","values","map","join","element","ns","sourceNode","tagName","child","fragment","realTagName","el","document","createElementNS","createElement","subnodes","firstChild","left","firstElementChild","rightIndex","right","nextElementSibling","insertBefore","append","remove","firstNode","createComment","tempArray","c","nodified","Array","isArray","Node","node","createTextNode","isConnected","after","array","headNode","mapState","_itemDestroyer","preState","_arrayValue","_domNodesOfItem","currentArrayValue","preArrayValue","newState","a","b","a2b","dela","keep","aLen","bLen","start","minLen","min","end","aMidLen","bMidLen","i","bIndexMap","indices","bIdx","tails","parents","fill","tailIndices","idx","mid","pos","keepSet","Set","curr","add","val","has","arrTrans","newItem","_newState$_domNodesOf","_newState$_domNodesOf2","destroyer","domNodes","item","destroyItem","at","oldItem","indexOf","flat","attribute","key","Element","isPropertyOf","domEl","traitName","descriptor","getOwnPropertyDescriptor","getPrototypeOf","writable","preValue","setAttribute","removeAttribute","spreadAttrs","attrs","tree2dom","_type","flatMap","part","textNode","String","_node$_ns","_attrs","_content","content","_tag","tag","_sourceNode","tagValue","currentNs","_ns","_name","name","_value","slice","cloneTreeNode","treeNode","parentNode","currentNode","childNodes","_sourceIndex","cloneNode","_extends","docType","wrapSource","unwrapNode","segments","tree","parse","indexMap","wrappedHtmlStr","segment","parseFromString","dom2treenode","domNodeList","nodeList","nextSibling","_item","_nextSibling","remove_and_dec_index","nodeType","ELEMENT_NODE","toLowerCase","isVariableElem","namespaceURI","from","attributes","attr","nodeName","TEXT_NODE","rootList","clonedTree","svgns","svg","doc","html","body"],"mappings":"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"}
|
package/lib/s.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s.d.ts","sourceRoot":"","sources":["../src/s.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"s.d.ts","sourceRoot":"","sources":["../src/s.ts"],"names":[],"mappings":"AAcA,UAAU,EAAE,CAAC,CAAC;IACV,IAAI,CAAC,CAAC;CACT;AAED,UAAU,EAAE,CAAC,CAAC;IACV,IAAI,CAAC,CAAC;IACN,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC;CACrB;AAYD,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,KAAG,CAYxD,CAAC;AACF,eAAO,MAAM,CAAC,GAAI,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,SAAS,KAAK,CAAC,EAAE,QAAQ,CAAC,KAAG,EAAE,CAAC,CAAC,CAyBlE,CAAC;AACF,eAAO,MAAM,CAAC,GAAI,CAAC,EAAE,OAAO,CAAC,KAAG,EAAE,CAAC,CAAC,CAwDnC,CAAC;AAcF,eAAO,MAAM,OAAO,GAAI,CAAC,SAAS,MAAM,IAAI,EAAE,GAAG,CAAC,KAAG,CAKpD,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,GAAG,MAAM,CAAC,KAAG,CAgB3C,CAAC;AAEF,OAAO,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC;AAE3B,eAAO,MAAM,MAAM,GAAI,CAAC,EAAE,GAAG,MAAM,CAAC,KAAG,CAMtC,CAAC;AAEF,eAAO,MAAM,WAAW,eAAwB,CAAC;AAEjD,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,IAAI,eAGtC,CAAC;AACF,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,IAAI,SAKxC,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,GAAG,GAAG,KAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAA4B,CAAC;AAC9E,eAAO,MAAM,UAAU,GAAI,GAAG,GAAG,KAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAA6B,CAAC;AAC7E,eAAO,MAAM,UAAU,GAAI,GAAG,GAAG,KAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAA0B,CAAC"}
|
package/lib/s.js
CHANGED
|
@@ -48,9 +48,7 @@ export const S = (fn, value) => {
|
|
|
48
48
|
resetUpdate(update);
|
|
49
49
|
update();
|
|
50
50
|
fun2s.set(fn, update);
|
|
51
|
-
|
|
52
|
-
update._displayName = namedData.name;
|
|
53
|
-
return namedData;
|
|
51
|
+
return data;
|
|
54
52
|
};
|
|
55
53
|
export const o = (value) => {
|
|
56
54
|
function data(nextValue) {
|
|
@@ -91,14 +89,12 @@ export const o = (value) => {
|
|
|
91
89
|
return value;
|
|
92
90
|
}
|
|
93
91
|
Object.setPrototypeOf(data, oProto);
|
|
94
|
-
const namedData = namedFunc(data);
|
|
95
92
|
const trigger = {
|
|
96
93
|
_whoNeedMe: [],
|
|
97
94
|
_data: data,
|
|
98
95
|
_pendingValue: NoValue,
|
|
99
|
-
_displayName: namedData.name,
|
|
100
96
|
};
|
|
101
|
-
return
|
|
97
|
+
return data;
|
|
102
98
|
};
|
|
103
99
|
const recycleUpdate = (update) => {
|
|
104
100
|
update._whoIOwn.forEach(recycleUpdate);
|
|
@@ -154,64 +150,4 @@ export const unsubscribe = (f) => {
|
|
|
154
150
|
export const isObservable = (o) => o instanceof Observable;
|
|
155
151
|
export const isComputed = (o) => o instanceof Computation;
|
|
156
152
|
export const isReactive = (o) => o instanceof Reactive;
|
|
157
|
-
const url2src = new Map();
|
|
158
|
-
const getLeftName = function getLeftName() {
|
|
159
|
-
const stack = new Error().stack;
|
|
160
|
-
if (!stack) {
|
|
161
|
-
return null;
|
|
162
|
-
}
|
|
163
|
-
const urlRegex = /((?:\w+:\/\/)[-a-zA-Z0-9:@;?&=\/%\+\.\*!'\(\),\$_\{\}\^~\[\]`#|]+):(\d+):(\d+)/;
|
|
164
|
-
const lines = stack.split('\n');
|
|
165
|
-
const currentLineIndex = lines.findIndex((line) => {
|
|
166
|
-
return line.includes(import.meta.url) && line.includes(getLeftName.name);
|
|
167
|
-
});
|
|
168
|
-
if (currentLineIndex > -1) {
|
|
169
|
-
const offset = 3;
|
|
170
|
-
const line = lines[currentLineIndex + offset];
|
|
171
|
-
if (!line) {
|
|
172
|
-
return null;
|
|
173
|
-
}
|
|
174
|
-
const location = line.match(urlRegex);
|
|
175
|
-
if (!location) {
|
|
176
|
-
return null;
|
|
177
|
-
}
|
|
178
|
-
const url = location[1];
|
|
179
|
-
const lineNo = location[2];
|
|
180
|
-
const colNo = location[3];
|
|
181
|
-
if (!url || !lineNo || !colNo) {
|
|
182
|
-
return null;
|
|
183
|
-
}
|
|
184
|
-
let src;
|
|
185
|
-
if (url2src.has(url)) {
|
|
186
|
-
src = url2src.get(url);
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
const xhr = new XMLHttpRequest();
|
|
190
|
-
xhr.open('GET', url, false);
|
|
191
|
-
xhr.send();
|
|
192
|
-
src = xhr.responseText;
|
|
193
|
-
url2src.set(url, src);
|
|
194
|
-
}
|
|
195
|
-
const reg = new RegExp(`(?:.*\n){${Number(lineNo) - 1}}.{${Number(colNo) - 1}}`);
|
|
196
|
-
const segment = src.match(reg);
|
|
197
|
-
if (!segment) {
|
|
198
|
-
return null;
|
|
199
|
-
}
|
|
200
|
-
return segment[0].match(/(\w+)\s*=\s*$/)?.[1];
|
|
201
|
-
}
|
|
202
|
-
return null;
|
|
203
|
-
};
|
|
204
|
-
const namedFunc = (f, fallback) => {
|
|
205
|
-
if (typeof __SUBAY_DEV__ === 'undefined') {
|
|
206
|
-
return f;
|
|
207
|
-
}
|
|
208
|
-
const leftName = getLeftName() ?? fallback;
|
|
209
|
-
if (!leftName) {
|
|
210
|
-
return f;
|
|
211
|
-
}
|
|
212
|
-
const g = new Function(`return function ${leftName} (...args) {return ${leftName}._(...args)}`)();
|
|
213
|
-
g._ = f;
|
|
214
|
-
Object.setPrototypeOf(g, Object.getPrototypeOf(f));
|
|
215
|
-
return g;
|
|
216
|
-
};
|
|
217
153
|
//# sourceMappingURL=s.js.map
|
package/lib/s.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s.js","sourceRoot":"","sources":["../src/s.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"s.js","sourceRoot":"","sources":["../src/s.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "subay",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.7",
|
|
4
4
|
"description": "A lightweight reactive UI library with state management and template rendering",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"reactive",
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
"license": "MIT",
|
|
18
18
|
"author": "j-sen",
|
|
19
19
|
"type": "module",
|
|
20
|
+
"module": "./lib/index.js",
|
|
20
21
|
"exports": {
|
|
21
22
|
"default": "./lib/index.js",
|
|
22
23
|
"unpkg": "./lib/index.js",
|
|
@@ -29,7 +30,11 @@
|
|
|
29
30
|
"typescript": "^5.9.3"
|
|
30
31
|
},
|
|
31
32
|
"scripts": {
|
|
32
|
-
"test": "
|
|
33
|
-
"
|
|
33
|
+
"test": "npx http-server -c-1 -o /test/test.html",
|
|
34
|
+
"dev": "tsc --build --watch ./tsconfig.json",
|
|
35
|
+
"build": "npx microbundle -i src/index.ts -o lib/index.js --no-pkg-main -f modern"
|
|
36
|
+
},
|
|
37
|
+
"mangle": {
|
|
38
|
+
"regex": "^_"
|
|
34
39
|
}
|
|
35
40
|
}
|