Files

Return to Package Diff Home.
Brought to you by Intrinsic.

Package Diff: fre @ 1.8.0 .. 1.8.1

demo/index.html

@@ -10,7 +10,7 @@
<body>
<div id="root"></div>
- <script src="./useMemo.js"></script>
+ <script src="./useEffect.js"></script>
</body>
</html>
\ No newline at end of file

dist/fre-esm.js

@@ -72,7 +72,8 @@
return useReducer(null, initState)
}
function useReducer (reducer, initState) {
- let { wip, key } = getCurrent();
+ let wip = getHook();
+ let key = getKey();
let setter = update.bind(wip, key, reducer);
if (key in wip.state) {
return [wip.state[key], setter]
@@ -83,17 +84,19 @@
}
function useEffect (cb, deps) {
- let { wip, key } = getCurrent();
- if (isChanged(wip.deps[key], deps)) {
+ let wip = getHook();
+ let key = getKey();
+ if (isChanged(wip.Edeps, deps)) {
wip.effect[key] = useCallback(cb, deps);
- wip.deps[key] = deps;
+ wip.Edeps = deps;
}
}
function useMemo (cb, deps) {
- let { wip, key } = getCurrent();
- if (isChanged(wip.deps[key], deps)) {
- wip.deps[key] = deps;
+ let wip = getHook();
+ let key = getKey();
+ if (isChanged(wip.Mdeps, deps)) {
+ wip.Mdeps = deps;
return (wip.memo[key] = cb())
}
return wip.memo[key]
@@ -111,11 +114,10 @@
return !a || b.some((arg, index) => arg !== a[index])
}
-function getCurrent () {
- return {
- wip: currentFiber,
- key: '$' + cursor && cursor++
- }
+function getKey () {
+ let key = '$' + cursor;
+ cursor ++;
+ return key
}
function push (heap, node) {
@@ -493,5 +495,9 @@
const isFn = fn => typeof fn === 'function';
+function getHook () {
+ return currentFiber || {}
+}
+
export { h as createElement, h, options, render, scheduleWork, useCallback, useEffect, useMemo, useReducer, useRef, useState };
//# sourceMappingURL=fre-esm.js.map

dist/fre-esm.js.map

@@ -1 +1 @@
-{"version":3,"file":"fre-esm.js","sources":["../src/h.js","../src/dom.js","../src/hooks.js","../src/heapify.js","../src/scheduler.js","../src/reconciler.js"],"sourcesContent":["export function h (type, attrs) {\n let props = attrs || {}\n let key = props.key || null\n let ref = props.ref || null\n let children = []\n\n for (let i = 2; i < arguments.length; i++) {\n let vnode = arguments[i]\n if (vnode == null || vnode === true || vnode === false) {\n } else if (typeof vnode === 'number' || typeof vnode === 'string') {\n children.push({ type: 'text', props: { nodeValue: vnode } })\n } else {\n children.push(vnode)\n }\n }\n\n if (children.length) {\n props.children = children.length === 1 ? children[0] : children\n }\n\n delete props.key\n delete props.ref\n return { type, props, key, ref }\n}\n","import { SVG } from './reconciler'\n\nexport function updateElement (dom, oldProps, newProps) {\n for (let name in { ...oldProps, ...newProps }) {\n let oldValue = oldProps[name]\n let newValue = newProps[name]\n\n if (oldValue == newValue || name === 'children') {\n } else if (name === 'style') {\n for (const k in { ...oldValue, ...newValue }) {\n if (!(oldValue && newValue && oldValue[k] === newValue[k])) {\n dom[name][k] = newValue && newValue[k] || ''\n }\n }\n } else if (name[0] === 'o' && name[1] === 'n') {\n name = name.slice(2).toLowerCase()\n if (oldValue) dom.removeEventListener(name, oldValue)\n dom.addEventListener(name, newValue)\n } else if (name in dom && !(dom instanceof SVGElement)) {\n dom[name] = newValue == null ? '' : newValue\n } else if (newValue == null || newValue === false) {\n dom.removeAttribute(name)\n } else {\n dom.setAttribute(name, newValue)\n }\n }\n}\n\nexport function createElement (fiber) {\n const dom =\n fiber.type === 'text'\n ? document.createTextNode('')\n : fiber.tag === SVG\n ? document.createElementNS('http://www.w3.org/2000/svg', fiber.type)\n : document.createElement(fiber.type)\n updateElement(dom, {}, fiber.props)\n return dom\n}\n","import { scheduleWork, currentFiber } from './reconciler'\nlet cursor = 0\n\nfunction update (key, reducer, value) {\n value = reducer ? reducer(this.state[key], value) : value\n this.state[key] = value\n scheduleWork(this, true)\n}\nexport function resetCursor () {\n cursor = 0\n}\nexport function useState (initState) {\n return useReducer(null, initState)\n}\nexport function useReducer (reducer, initState) {\n let { wip, key } = getCurrent()\n let setter = update.bind(wip, key, reducer)\n if (key in wip.state) {\n return [wip.state[key], setter]\n } else {\n wip.state[key] = initState\n return [initState, setter]\n }\n}\n\nexport function useEffect (cb, deps) {\n let { wip, key } = getCurrent()\n if (isChanged(wip.deps[key], deps)) {\n wip.effect[key] = useCallback(cb, deps)\n wip.deps[key] = deps\n }\n}\n\nexport function useMemo (cb, deps) {\n let { wip, key } = getCurrent()\n if (isChanged(wip.deps[key], deps)) {\n wip.deps[key] = deps\n return (wip.memo[key] = cb())\n }\n return wip.memo[key]\n}\n\nexport function useCallback (cb, deps) {\n return useMemo(() => cb, deps)\n}\n\nexport function useRef (current) {\n return { current }\n}\n\nfunction isChanged (a, b) {\n return !a || b.some((arg, index) => arg !== a[index])\n}\n\nfunction getCurrent () {\n return {\n wip: currentFiber,\n key: '$' + cursor && cursor++\n }\n}\n","function push (heap, node) {\r\n let index = heap.length\r\n heap.push(node)\r\n\r\n while (true) {\r\n let parentIndex = Math.floor((index - 1) / 2)\r\n let parent = heap[parentIndex]\r\n\r\n if (parent && compare(parent, node) > 0) {\r\n heap[parentIndex] = node\r\n heap[index] = parent\r\n index = parentIndex\r\n } else return\r\n }\r\n}\r\n\r\nfunction pop (heap) {\r\n let first = heap[0]\r\n if (first) {\r\n let last = heap.pop()\r\n if (first !== last) {\r\n heap[0] = last\r\n let index = 0\r\n let length = heap.length\r\n\r\n while (index < length) {\r\n let leftIndex = (index + 1) * 2 - 1\r\n let left = heap[leftIndex]\r\n let rightIndex = leftIndex + 1\r\n let right = heap[rightIndex]\r\n\r\n if (left && compare(left, last) < 0) {\r\n if (right && compare(right, left) < 0) {\r\n heap[index] = right\r\n heap[rightIndex] = last\r\n index = rightIndex\r\n } else {\r\n heap[index] = left\r\n heap[leftIndex] = last\r\n index = leftIndex\r\n }\r\n } else if (right && compare(right, last) < 0) {\r\n heap[index] = right\r\n heap[rightIndex] = last\r\n index = rightIndex\r\n } else return\r\n }\r\n }\r\n return first\r\n } else return null\r\n}\r\n\r\nfunction compare (a, b) {\r\n return a.dueTime - b.dueTime\r\n}\r\n\r\nfunction peek (heap) {\r\n return heap[0] || null\r\n}\r\n\r\nexport { push, peek, pop }\r\n","import { push, pop, peek } from './heapify'\n\nlet taskQueue = []\nlet currentTask = null\nlet currentCallback = null\nlet inMC = false\nlet frameDeadline = 0\nconst frameLength = 5\n\nexport function scheduleCallback (callback) {\n const currentTime = getTime()\n let startTime = currentTime\n let timeout = 5000 // idle\n let dueTime = startTime + timeout\n\n let newTask = {\n callback,\n startTime,\n dueTime\n }\n\n push(taskQueue, newTask)\n\n currentCallback = flushWork\n\n if (!inMC) planWork() && (inMC = true)\n\n return newTask\n}\n\nfunction flushWork (iniTime) {\n try {\n return workLoop(iniTime)\n } finally {\n currentTask = null\n }\n}\n\nfunction workLoop (iniTime) {\n let currentTime = iniTime\n currentTask = peek(taskQueue)\n\n while (currentTask) {\n if (currentTask.dueTime > currentTime && shouldYeild()) break\n let callback = currentTask.callback\n if (callback) {\n currentTask.callback = null\n let next = callback()\n if (next) {\n currentTask.callback = next\n } else {\n if (currentTask === peek(taskQueue)) {\n pop(taskQueue)\n }\n }\n } else pop(taskQueue)\n currentTask = peek(taskQueue)\n }\n\n if (currentTask) {\n return true\n } else {\n return false\n }\n\n // return !!currentTask\n}\n\nfunction performWork () {\n if (currentCallback) {\n let currentTime = getTime()\n frameDeadline = currentTime + frameLength\n let moreWork = currentCallback(currentTime)\n if (!moreWork) {\n inMC = false\n currentCallback = null\n } else {\n planWork()\n }\n } else inMC = false\n}\n\nconst planWork = (() => {\n if (typeof MessageChannel !== 'undefined') {\n const channel = new MessageChannel()\n const port = channel.port2\n channel.port1.onmessage = performWork\n\n return () => port.postMessage(null)\n }\n\n return () => setTimeout(performWork, 0)\n})()\n\nexport function shouldYeild () {\n return getTime() > frameDeadline\n}\n\nconst getTime = () => performance.now()\n","import { createElement, updateElement } from './dom'\r\nimport { resetCursor } from './hooks'\r\nimport { scheduleCallback, shouldYeild } from './scheduler'\r\n\r\nconst options = {}\r\nexport const [ROOT, HOST, HOOK, SVG, PLACE, UPDATE, DELETE] = [0, 1, 2, 3, 4, 5, 6]\r\n\r\nlet pendingCommit = null\r\nexport let WIP = null\r\nexport let currentFiber = null\r\n\r\nfunction render (vnode, node, done) {\r\n let rootFiber = {\r\n tag: ROOT,\r\n node,\r\n props: { children: vnode },\r\n done\r\n }\r\n scheduleWork(rootFiber)\r\n}\r\n\r\nfunction scheduleWork (fiber, lock) {\r\n fiber.lock = lock\r\n WIP = fiber\r\n scheduleCallback(performWork)\r\n}\r\n\r\nfunction performWork () {\r\n while (WIP && !shouldYeild()) {\r\n WIP = performWIP(WIP)\r\n }\r\n\r\n if (pendingCommit) {\r\n commitWork(pendingCommit)\r\n return null\r\n }\r\n\r\n return performWork.bind(null)\r\n}\r\n\r\nfunction performWIP (WIP) {\r\n WIP.patches = []\r\n WIP.parentNode = getParentNode(WIP)\r\n WIP.tag == HOOK ? updateHOOK(WIP) : updateHost(WIP)\r\n if (WIP.child) return WIP.child\r\n while (WIP) {\r\n completeWork(WIP)\r\n if (WIP.sibling && WIP.lock == null) return WIP.sibling\r\n WIP = WIP.parent\r\n }\r\n}\r\n\r\nfunction updateHOOK (WIP) {\r\n WIP.props = WIP.props || {}\r\n WIP.state = WIP.state || {}\r\n WIP.effect = {}\r\n WIP.deps = {}\r\n WIP.memo = {}\r\n currentFiber = WIP\r\n resetCursor()\r\n reconcileChildren(WIP, WIP.type(WIP.props))\r\n}\r\n\r\nfunction updateHost (WIP) {\r\n if (!WIP.node) {\r\n if (WIP.type === 'svg') WIP.tag = SVG\r\n WIP.node = createElement(WIP)\r\n }\r\n let p = WIP.parentNode || {}\r\n WIP.insertPoint = p.last || null\r\n p.last = WIP\r\n WIP.node.last = null\r\n reconcileChildren(WIP, WIP.props.children)\r\n}\r\nfunction getParentNode (fiber) {\r\n while ((fiber = fiber.parent)) {\r\n if (fiber.tag < HOOK) return fiber.node\r\n }\r\n}\r\n\r\nfunction reconcileChildren (WIP, children) {\r\n const oldFibers = WIP.kids\r\n const newFibers = (WIP.kids = hashfy(children, WIP.kids))\r\n let reused = {}\r\n\r\n for (const k in oldFibers) {\r\n let newFiber = newFibers[k]\r\n let oldFiber = oldFibers[k]\r\n\r\n if (newFiber && newFiber.type === oldFiber.type) {\r\n reused[k] = oldFiber\r\n } else {\r\n oldFiber.patchTag = DELETE\r\n WIP.patches.push(oldFiber)\r\n }\r\n }\r\n\r\n let prevFiber = null\r\n let alternate = null\r\n\r\n for (const k in newFibers) {\r\n let newFiber = newFibers[k]\r\n let oldFiber = reused[k]\r\n\r\n if (oldFiber) {\r\n alternate = createFiber(oldFiber, UPDATE)\r\n newFiber.patchTag = UPDATE\r\n newFiber = { ...alternate, ...newFiber }\r\n newFiber.alternate = alternate\r\n if (shouldPlace(newFiber)) {\r\n newFiber.patchTag = PLACE\r\n }\r\n } else {\r\n newFiber = createFiber(newFiber, PLACE)\r\n }\r\n\r\n newFibers[k] = newFiber\r\n newFiber.parent = WIP\r\n\r\n if (prevFiber) {\r\n prevFiber.sibling = newFiber\r\n } else {\r\n if (WIP.tag === SVG) newFiber.tag = SVG\r\n WIP.child = newFiber\r\n }\r\n prevFiber = newFiber\r\n }\r\n if (prevFiber) prevFiber.sibling = null\r\n if (WIP.lock) WIP.lock = false\r\n}\r\n\r\nfunction shouldPlace (fiber) {\r\n let p = fiber.parent\r\n if (p.tag === HOOK) return p.key && !p.lock\r\n return fiber.key\r\n}\r\n\r\nfunction completeWork (fiber) {\r\n if (fiber.parent) {\r\n fiber.parent.patches.push(...fiber.patches, fiber)\r\n } else {\r\n pendingCommit = fiber\r\n }\r\n}\r\n\r\nfunction commitWork (WIP) {\r\n WIP.patches.forEach(p => commit(p))\r\n WIP.done && WIP.done()\r\n WIP = pendingCommit = null\r\n}\r\n\r\nfunction applyEffect (fiber) {\r\n fiber.pending = fiber.pending || {}\r\n for (const k in fiber.effect) {\r\n const pend = fiber.pending[k]\r\n pend && pend()\r\n const after = fiber.effect[k]()\r\n after && (fiber.pending[k] = after)\r\n }\r\n fiber.effect = null\r\n}\r\n\r\nfunction commit (fiber) {\r\n let tag = fiber.patchTag\r\n let parent = fiber.parentNode\r\n let dom = fiber.node\r\n let ref = fiber.ref\r\n\r\n if (tag === DELETE) {\r\n cleanup(fiber)\r\n while (fiber.tag === HOOK) fiber = fiber.child\r\n parent.removeChild(fiber.node)\r\n } else if (fiber.tag === HOOK) {\r\n applyEffect(fiber)\r\n } else if (tag === UPDATE) {\r\n updateElement(dom, fiber.alternate.props, fiber.props)\r\n } else {\r\n let point = fiber.insertPoint ? fiber.insertPoint.node : null\r\n let after = point ? point.nextSibling : parent.firstChild\r\n if (after === dom) return\r\n if (after === null && dom === parent.lastChild) return\r\n parent.insertBefore(dom, after)\r\n }\r\n\r\n if (ref) isFn(ref) ? ref(dom) : (ref.current = dom)\r\n fiber.patches = fiber.parent.patches = []\r\n}\r\n\r\nfunction cleanup (fiber) {\r\n let pend = fiber.pending\r\n for (const k in pend) pend[k]()\r\n fiber.pending = null\r\n}\r\n\r\nfunction createFiber (vnode, tag) {\r\n vnode.tag = isFn(vnode.type) ? HOOK : HOST\r\n vnode.patchTag = tag\r\n return vnode\r\n}\r\n\r\nconst arrayfy = arr => (!arr ? [] : arr.pop ? arr : [arr])\r\n\r\nfunction hashfy (arr) {\r\n let out = {}\r\n let i = 0\r\n let j = 0\r\n arrayfy(arr).forEach(item => {\r\n if (item.pop) {\r\n item.forEach(item => {\r\n item.key ? (out['.' + i + '.' + item.key] = item) : (out['.' + i + '.' + j] = item) && j++\r\n })\r\n i++\r\n } else {\r\n item.key ? (out['.' + item.key] = item) : (out['.' + i] = item) && i++\r\n }\r\n })\r\n return out\r\n}\r\n\r\nconst isFn = fn => typeof fn === 'function'\r\n\r\nexport { render, scheduleWork, options }\r\n"],"names":["performWork"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"fre-esm.js","sources":["../src/h.js","../src/dom.js","../src/hooks.js","../src/heapify.js","../src/scheduler.js","../src/reconciler.js"],"sourcesContent":["export function h (type, attrs) {\n let props = attrs || {}\n let key = props.key || null\n let ref = props.ref || null\n let children = []\n\n for (let i = 2; i < arguments.length; i++) {\n let vnode = arguments[i]\n if (vnode == null || vnode === true || vnode === false) {\n } else if (typeof vnode === 'number' || typeof vnode === 'string') {\n children.push({ type: 'text', props: { nodeValue: vnode } })\n } else {\n children.push(vnode)\n }\n }\n\n if (children.length) {\n props.children = children.length === 1 ? children[0] : children\n }\n\n delete props.key\n delete props.ref\n return { type, props, key, ref }\n}\n","import { SVG } from './reconciler'\n\nexport function updateElement (dom, oldProps, newProps) {\n for (let name in { ...oldProps, ...newProps }) {\n let oldValue = oldProps[name]\n let newValue = newProps[name]\n\n if (oldValue == newValue || name === 'children') {\n } else if (name === 'style') {\n for (const k in { ...oldValue, ...newValue }) {\n if (!(oldValue && newValue && oldValue[k] === newValue[k])) {\n dom[name][k] = newValue && newValue[k] || ''\n }\n }\n } else if (name[0] === 'o' && name[1] === 'n') {\n name = name.slice(2).toLowerCase()\n if (oldValue) dom.removeEventListener(name, oldValue)\n dom.addEventListener(name, newValue)\n } else if (name in dom && !(dom instanceof SVGElement)) {\n dom[name] = newValue == null ? '' : newValue\n } else if (newValue == null || newValue === false) {\n dom.removeAttribute(name)\n } else {\n dom.setAttribute(name, newValue)\n }\n }\n}\n\nexport function createElement (fiber) {\n const dom =\n fiber.type === 'text'\n ? document.createTextNode('')\n : fiber.tag === SVG\n ? document.createElementNS('http://www.w3.org/2000/svg', fiber.type)\n : document.createElement(fiber.type)\n updateElement(dom, {}, fiber.props)\n return dom\n}\n","import { scheduleWork, getHook } from './reconciler'\nlet cursor = 0\n\nfunction update (key, reducer, value) {\n value = reducer ? reducer(this.state[key], value) : value\n this.state[key] = value\n scheduleWork(this, true)\n}\nexport function resetCursor () {\n cursor = 0\n}\nexport function useState (initState) {\n return useReducer(null, initState)\n}\nexport function useReducer (reducer, initState) {\n let wip = getHook()\n let key = getKey()\n let setter = update.bind(wip, key, reducer)\n if (key in wip.state) {\n return [wip.state[key], setter]\n } else {\n wip.state[key] = initState\n return [initState, setter]\n }\n}\n\nexport function useEffect (cb, deps) {\n let wip = getHook()\n let key = getKey()\n if (isChanged(wip.Edeps, deps)) {\n wip.effect[key] = useCallback(cb, deps)\n wip.Edeps = deps\n }\n}\n\nexport function useMemo (cb, deps) {\n let wip = getHook()\n let key = getKey()\n if (isChanged(wip.Mdeps, deps)) {\n wip.Mdeps = deps\n return (wip.memo[key] = cb())\n }\n return wip.memo[key]\n}\n\nexport function useCallback (cb, deps) {\n return useMemo(() => cb, deps)\n}\n\nexport function useRef (current) {\n return { current }\n}\n\nfunction isChanged (a, b) {\n return !a || b.some((arg, index) => arg !== a[index])\n}\n\nfunction getKey () {\n let key = '$' + cursor\n cursor ++\n return key\n}\n","function push (heap, node) {\r\n let index = heap.length\r\n heap.push(node)\r\n\r\n while (true) {\r\n let parentIndex = Math.floor((index - 1) / 2)\r\n let parent = heap[parentIndex]\r\n\r\n if (parent && compare(parent, node) > 0) {\r\n heap[parentIndex] = node\r\n heap[index] = parent\r\n index = parentIndex\r\n } else return\r\n }\r\n}\r\n\r\nfunction pop (heap) {\r\n let first = heap[0]\r\n if (first) {\r\n let last = heap.pop()\r\n if (first !== last) {\r\n heap[0] = last\r\n let index = 0\r\n let length = heap.length\r\n\r\n while (index < length) {\r\n let leftIndex = (index + 1) * 2 - 1\r\n let left = heap[leftIndex]\r\n let rightIndex = leftIndex + 1\r\n let right = heap[rightIndex]\r\n\r\n if (left && compare(left, last) < 0) {\r\n if (right && compare(right, left) < 0) {\r\n heap[index] = right\r\n heap[rightIndex] = last\r\n index = rightIndex\r\n } else {\r\n heap[index] = left\r\n heap[leftIndex] = last\r\n index = leftIndex\r\n }\r\n } else if (right && compare(right, last) < 0) {\r\n heap[index] = right\r\n heap[rightIndex] = last\r\n index = rightIndex\r\n } else return\r\n }\r\n }\r\n return first\r\n } else return null\r\n}\r\n\r\nfunction compare (a, b) {\r\n return a.dueTime - b.dueTime\r\n}\r\n\r\nfunction peek (heap) {\r\n return heap[0] || null\r\n}\r\n\r\nexport { push, peek, pop }\r\n","import { push, pop, peek } from './heapify'\n\nlet taskQueue = []\nlet currentTask = null\nlet currentCallback = null\nlet inMC = false\nlet frameDeadline = 0\nconst frameLength = 5\n\nexport function scheduleCallback (callback) {\n const currentTime = getTime()\n let startTime = currentTime\n let timeout = 5000 // idle\n let dueTime = startTime + timeout\n\n let newTask = {\n callback,\n startTime,\n dueTime\n }\n\n push(taskQueue, newTask)\n\n currentCallback = flushWork\n\n if (!inMC) planWork() && (inMC = true)\n\n return newTask\n}\n\nfunction flushWork (iniTime) {\n try {\n return workLoop(iniTime)\n } finally {\n currentTask = null\n }\n}\n\nfunction workLoop (iniTime) {\n let currentTime = iniTime\n currentTask = peek(taskQueue)\n\n while (currentTask) {\n if (currentTask.dueTime > currentTime && shouldYeild()) break\n let callback = currentTask.callback\n if (callback) {\n currentTask.callback = null\n let next = callback()\n if (next) {\n currentTask.callback = next\n } else {\n if (currentTask === peek(taskQueue)) {\n pop(taskQueue)\n }\n }\n } else pop(taskQueue)\n currentTask = peek(taskQueue)\n }\n\n if (currentTask) {\n return true\n } else {\n return false\n }\n\n // return !!currentTask\n}\n\nfunction performWork () {\n if (currentCallback) {\n let currentTime = getTime()\n frameDeadline = currentTime + frameLength\n let moreWork = currentCallback(currentTime)\n if (!moreWork) {\n inMC = false\n currentCallback = null\n } else {\n planWork()\n }\n } else inMC = false\n}\n\nconst planWork = (() => {\n if (typeof MessageChannel !== 'undefined') {\n const channel = new MessageChannel()\n const port = channel.port2\n channel.port1.onmessage = performWork\n\n return () => port.postMessage(null)\n }\n\n return () => setTimeout(performWork, 0)\n})()\n\nexport function shouldYeild () {\n return getTime() > frameDeadline\n}\n\nconst getTime = () => performance.now()\n","import { createElement, updateElement } from './dom'\r\nimport { resetCursor } from './hooks'\r\nimport { scheduleCallback, shouldYeild } from './scheduler'\r\n\r\nconst options = {}\r\nexport const [ROOT, HOST, HOOK, SVG, PLACE, UPDATE, DELETE] = [0, 1, 2, 3, 4, 5, 6]\r\n\r\nlet pendingCommit = null\r\nexport let WIP = null\r\nexport let currentFiber = null\r\n\r\nfunction render (vnode, node, done) {\r\n let rootFiber = {\r\n tag: ROOT,\r\n node,\r\n props: { children: vnode },\r\n done\r\n }\r\n scheduleWork(rootFiber)\r\n}\r\n\r\nfunction scheduleWork (fiber, lock) {\r\n fiber.lock = lock\r\n WIP = fiber\r\n scheduleCallback(performWork)\r\n}\r\n\r\nfunction performWork () {\r\n while (WIP && !shouldYeild()) {\r\n WIP = performWIP(WIP)\r\n }\r\n\r\n if (pendingCommit) {\r\n commitWork(pendingCommit)\r\n return null\r\n }\r\n\r\n return performWork.bind(null)\r\n}\r\n\r\nfunction performWIP (WIP) {\r\n WIP.patches = []\r\n WIP.parentNode = getParentNode(WIP)\r\n WIP.tag == HOOK ? updateHOOK(WIP) : updateHost(WIP)\r\n if (WIP.child) return WIP.child\r\n while (WIP) {\r\n completeWork(WIP)\r\n if (WIP.sibling && WIP.lock == null) return WIP.sibling\r\n WIP = WIP.parent\r\n }\r\n}\r\n\r\nfunction updateHOOK (WIP) {\r\n WIP.props = WIP.props || {}\r\n WIP.state = WIP.state || {}\r\n WIP.effect = {}\r\n WIP.deps = {}\r\n WIP.memo = {}\r\n currentFiber = WIP\r\n resetCursor()\r\n reconcileChildren(WIP, WIP.type(WIP.props))\r\n}\r\n\r\nfunction updateHost (WIP) {\r\n if (!WIP.node) {\r\n if (WIP.type === 'svg') WIP.tag = SVG\r\n WIP.node = createElement(WIP)\r\n }\r\n let p = WIP.parentNode || {}\r\n WIP.insertPoint = p.last || null\r\n p.last = WIP\r\n WIP.node.last = null\r\n reconcileChildren(WIP, WIP.props.children)\r\n}\r\nfunction getParentNode (fiber) {\r\n while ((fiber = fiber.parent)) {\r\n if (fiber.tag < HOOK) return fiber.node\r\n }\r\n}\r\n\r\nfunction reconcileChildren (WIP, children) {\r\n const oldFibers = WIP.kids\r\n const newFibers = (WIP.kids = hashfy(children, WIP.kids))\r\n let reused = {}\r\n\r\n for (const k in oldFibers) {\r\n let newFiber = newFibers[k]\r\n let oldFiber = oldFibers[k]\r\n\r\n if (newFiber && newFiber.type === oldFiber.type) {\r\n reused[k] = oldFiber\r\n } else {\r\n oldFiber.patchTag = DELETE\r\n WIP.patches.push(oldFiber)\r\n }\r\n }\r\n\r\n let prevFiber = null\r\n let alternate = null\r\n\r\n for (const k in newFibers) {\r\n let newFiber = newFibers[k]\r\n let oldFiber = reused[k]\r\n\r\n if (oldFiber) {\r\n alternate = createFiber(oldFiber, UPDATE)\r\n newFiber.patchTag = UPDATE\r\n newFiber = { ...alternate, ...newFiber }\r\n newFiber.alternate = alternate\r\n if (shouldPlace(newFiber)) {\r\n newFiber.patchTag = PLACE\r\n }\r\n } else {\r\n newFiber = createFiber(newFiber, PLACE)\r\n }\r\n\r\n newFibers[k] = newFiber\r\n newFiber.parent = WIP\r\n\r\n if (prevFiber) {\r\n prevFiber.sibling = newFiber\r\n } else {\r\n if (WIP.tag === SVG) newFiber.tag = SVG\r\n WIP.child = newFiber\r\n }\r\n prevFiber = newFiber\r\n }\r\n if (prevFiber) prevFiber.sibling = null\r\n if (WIP.lock) WIP.lock = false\r\n}\r\n\r\nfunction shouldPlace (fiber) {\r\n let p = fiber.parent\r\n if (p.tag === HOOK) return p.key && !p.lock\r\n return fiber.key\r\n}\r\n\r\nfunction completeWork (fiber) {\r\n if (fiber.parent) {\r\n fiber.parent.patches.push(...fiber.patches, fiber)\r\n } else {\r\n pendingCommit = fiber\r\n }\r\n}\r\n\r\nfunction commitWork (WIP) {\r\n WIP.patches.forEach(p => commit(p))\r\n WIP.done && WIP.done()\r\n WIP = pendingCommit = null\r\n}\r\n\r\nfunction applyEffect (fiber) {\r\n fiber.pending = fiber.pending || {}\r\n for (const k in fiber.effect) {\r\n const pend = fiber.pending[k]\r\n pend && pend()\r\n const after = fiber.effect[k]()\r\n after && (fiber.pending[k] = after)\r\n }\r\n fiber.effect = null\r\n}\r\n\r\nfunction commit (fiber) {\r\n let tag = fiber.patchTag\r\n let parent = fiber.parentNode\r\n let dom = fiber.node\r\n let ref = fiber.ref\r\n\r\n if (tag === DELETE) {\r\n cleanup(fiber)\r\n while (fiber.tag === HOOK) fiber = fiber.child\r\n parent.removeChild(fiber.node)\r\n } else if (fiber.tag === HOOK) {\r\n applyEffect(fiber)\r\n } else if (tag === UPDATE) {\r\n updateElement(dom, fiber.alternate.props, fiber.props)\r\n } else {\r\n let point = fiber.insertPoint ? fiber.insertPoint.node : null\r\n let after = point ? point.nextSibling : parent.firstChild\r\n if (after === dom) return\r\n if (after === null && dom === parent.lastChild) return\r\n parent.insertBefore(dom, after)\r\n }\r\n\r\n if (ref) isFn(ref) ? ref(dom) : (ref.current = dom)\r\n fiber.patches = fiber.parent.patches = []\r\n}\r\n\r\nfunction cleanup (fiber) {\r\n let pend = fiber.pending\r\n for (const k in pend) pend[k]()\r\n fiber.pending = null\r\n}\r\n\r\nfunction createFiber (vnode, tag) {\r\n vnode.tag = isFn(vnode.type) ? HOOK : HOST\r\n vnode.patchTag = tag\r\n return vnode\r\n}\r\n\r\nconst arrayfy = arr => (!arr ? [] : arr.pop ? arr : [arr])\r\n\r\nfunction hashfy (arr) {\r\n let out = {}\r\n let i = 0\r\n let j = 0\r\n arrayfy(arr).forEach(item => {\r\n if (item.pop) {\r\n item.forEach(item => {\r\n item.key ? (out['.' + i + '.' + item.key] = item) : (out['.' + i + '.' + j] = item) && j++\r\n })\r\n i++\r\n } else {\r\n item.key ? (out['.' + item.key] = item) : (out['.' + i] = item) && i++\r\n }\r\n })\r\n return out\r\n}\r\n\r\nconst isFn = fn => typeof fn === 'function'\r\n\r\nfunction getHook () {\r\n return currentFiber || {}\r\n}\r\n\r\nexport { render, scheduleWork, options, getHook }\r\n"],"names":["performWork"],"mappings":"AAAO,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;EAC9B,IAAI,KAAK,GAAG,KAAK,IAAI,GAAE;EACvB,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,KAAI;EAC3B,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,KAAI;EAC3B,IAAI,QAAQ,GAAG,GAAE;;EAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;IACzC,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,EAAC;IACxB,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE,CACvD,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;MACjE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAC;KAC7D,MAAM;MACL,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAC;KACrB;GACF;;EAED,IAAI,QAAQ,CAAC,MAAM,EAAE;IACnB,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAQ;GAChE;;EAED,OAAO,KAAK,CAAC,IAAG;EAChB,OAAO,KAAK,CAAC,IAAG;EAChB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE;CACjC;;ACrBM,SAAS,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE;EACtD,KAAK,IAAI,IAAI,IAAI,EAAE,GAAG,QAAQ,EAAE,GAAG,QAAQ,EAAE,EAAE;IAC7C,IAAI,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAC;IAC7B,IAAI,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAC;;IAE7B,IAAI,QAAQ,IAAI,QAAQ,IAAI,IAAI,KAAK,UAAU,EAAE,CAChD,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE;MAC3B,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,QAAQ,EAAE,GAAG,QAAQ,EAAE,EAAE;QAC5C,IAAI,EAAE,QAAQ,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;UAC1D,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAE;SAC7C;OACF;KACF,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;MAC7C,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,GAAE;MAClC,IAAI,QAAQ,EAAE,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAC;MACrD,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAC;KACrC,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE,GAAG,YAAY,UAAU,CAAC,EAAE;MACtD,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,IAAI,GAAG,EAAE,GAAG,SAAQ;KAC7C,MAAM,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,KAAK,EAAE;MACjD,GAAG,CAAC,eAAe,CAAC,IAAI,EAAC;KAC1B,MAAM;MACL,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAC;KACjC;GACF;CACF;;AAED,AAAO,SAAS,aAAa,EAAE,KAAK,EAAE;EACpC,MAAM,GAAG;IACP,KAAK,CAAC,IAAI,KAAK,MAAM;QACjB,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,GAAG,KAAK,GAAG;UACf,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,KAAK,CAAC,IAAI,CAAC;UAClE,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAC;EAC1C,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,KAAK,EAAC;EACnC,OAAO,GAAG;CACX;;ACpCD,IAAI,MAAM,GAAG,EAAC;;AAEd,SAAS,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;EACpC,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,MAAK;EACzD,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAK;EACvB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAC;CACzB;AACD,AAAO,SAAS,WAAW,IAAI;EAC7B,MAAM,GAAG,EAAC;CACX;AACD,AAAO,SAAS,QAAQ,EAAE,SAAS,EAAE;EACnC,OAAO,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;CACnC;AACD,AAAO,SAAS,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE;EAC9C,IAAI,GAAG,GAAG,OAAO,GAAE;EACnB,IAAI,GAAG,GAAG,MAAM,GAAE;EAClB,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAC;EAC3C,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE;IACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;GAChC,MAAM;IACL,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,UAAS;IAC1B,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;GAC3B;CACF;;AAED,AAAO,SAAS,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE;EACnC,IAAI,GAAG,GAAG,OAAO,GAAE;EACnB,IAAI,GAAG,GAAG,MAAM,GAAE;EAClB,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;IAC9B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,IAAI,EAAC;IACvC,GAAG,CAAC,KAAK,GAAG,KAAI;GACjB;CACF;;AAED,AAAO,SAAS,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;EACjC,IAAI,GAAG,GAAG,OAAO,GAAE;EACnB,IAAI,GAAG,GAAG,MAAM,GAAE;EAClB,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;IAC9B,GAAG,CAAC,KAAK,GAAG,KAAI;IAChB,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;GAC9B;EACD,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;CACrB;;AAED,AAAO,SAAS,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE;EACrC,OAAO,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC;CAC/B;;AAED,AAAO,SAAS,MAAM,EAAE,OAAO,EAAE;EAC/B,OAAO,EAAE,OAAO,EAAE;CACnB;;AAED,SAAS,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE;EACxB,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;CACtD;;AAED,SAAS,MAAM,IAAI;EACjB,IAAI,GAAG,GAAG,GAAG,GAAG,OAAM;EACtB,MAAM,IAAG;EACT,OAAO,GAAG;CACX;;AC7DD,SAAS,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;EACzB,IAAI,KAAK,GAAG,IAAI,CAAC,OAAM;EACvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAC;;EAEf,OAAO,IAAI,EAAE;IACX,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,EAAC;IAC7C,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,EAAC;;IAE9B,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;MACvC,IAAI,CAAC,WAAW,CAAC,GAAG,KAAI;MACxB,IAAI,CAAC,KAAK,CAAC,GAAG,OAAM;MACpB,KAAK,GAAG,YAAW;KACpB,MAAM,MAAM;GACd;CACF;;AAED,SAAS,GAAG,EAAE,IAAI,EAAE;EAClB,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,EAAC;EACnB,IAAI,KAAK,EAAE;IACT,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,GAAE;IACrB,IAAI,KAAK,KAAK,IAAI,EAAE;MAClB,IAAI,CAAC,CAAC,CAAC,GAAG,KAAI;MACd,IAAI,KAAK,GAAG,EAAC;MACb,IAAI,MAAM,GAAG,IAAI,CAAC,OAAM;;MAExB,OAAO,KAAK,GAAG,MAAM,EAAE;QACrB,IAAI,SAAS,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,EAAC;QACnC,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAC;QAC1B,IAAI,UAAU,GAAG,SAAS,GAAG,EAAC;QAC9B,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,EAAC;;QAE5B,IAAI,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;UACnC,IAAI,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;YACrC,IAAI,CAAC,KAAK,CAAC,GAAG,MAAK;YACnB,IAAI,CAAC,UAAU,CAAC,GAAG,KAAI;YACvB,KAAK,GAAG,WAAU;WACnB,MAAM;YACL,IAAI,CAAC,KAAK,CAAC,GAAG,KAAI;YAClB,IAAI,CAAC,SAAS,CAAC,GAAG,KAAI;YACtB,KAAK,GAAG,UAAS;WAClB;SACF,MAAM,IAAI,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;UAC5C,IAAI,CAAC,KAAK,CAAC,GAAG,MAAK;UACnB,IAAI,CAAC,UAAU,CAAC,GAAG,KAAI;UACvB,KAAK,GAAG,WAAU;SACnB,MAAM,MAAM;OACd;KACF;IACD,OAAO,KAAK;GACb,MAAM,OAAO,IAAI;CACnB;;AAED,SAAS,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE;EACtB,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO;CAC7B;;AAED,SAAS,IAAI,EAAE,IAAI,EAAE;EACnB,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI;CACvB;;ACxDD,IAAI,SAAS,GAAG,GAAE;AAClB,IAAI,WAAW,GAAG,KAAI;AACtB,IAAI,eAAe,GAAG,KAAI;AAC1B,IAAI,IAAI,GAAG,MAAK;AAChB,IAAI,aAAa,GAAG,EAAC;AACrB,MAAM,WAAW,GAAG,EAAC;;AAErB,AAAO,SAAS,gBAAgB,EAAE,QAAQ,EAAE;EAC1C,MAAM,WAAW,GAAG,OAAO,GAAE;EAC7B,IAAI,SAAS,GAAG,YAAW;EAC3B,IAAI,OAAO,GAAG,KAAI;EAClB,IAAI,OAAO,GAAG,SAAS,GAAG,QAAO;;EAEjC,IAAI,OAAO,GAAG;IACZ,QAAQ;IACR,SAAS;IACT,OAAO;IACR;;EAED,IAAI,CAAC,SAAS,EAAE,OAAO,EAAC;;EAExB,eAAe,GAAG,UAAS;;EAE3B,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,IAAI,GAAG,IAAI,EAAC;;EAEtC,OAAO,OAAO;CACf;;AAED,SAAS,SAAS,EAAE,OAAO,EAAE;EAC3B,IAAI;IACF,OAAO,QAAQ,CAAC,OAAO,CAAC;GACzB,SAAS;IACR,WAAW,GAAG,KAAI;GACnB;CACF;;AAED,SAAS,QAAQ,EAAE,OAAO,EAAE;EAC1B,IAAI,WAAW,GAAG,QAAO;EACzB,WAAW,GAAG,IAAI,CAAC,SAAS,EAAC;;EAE7B,OAAO,WAAW,EAAE;IAClB,IAAI,WAAW,CAAC,OAAO,GAAG,WAAW,IAAI,WAAW,EAAE,EAAE,KAAK;IAC7D,IAAI,QAAQ,GAAG,WAAW,CAAC,SAAQ;IACnC,IAAI,QAAQ,EAAE;MACZ,WAAW,CAAC,QAAQ,GAAG,KAAI;MAC3B,IAAI,IAAI,GAAG,QAAQ,GAAE;MACrB,IAAI,IAAI,EAAE;QACR,WAAW,CAAC,QAAQ,GAAG,KAAI;OAC5B,MAAM;QACL,IAAI,WAAW,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE;UACnC,GAAG,CAAC,SAAS,EAAC;SACf;OACF;KACF,MAAM,GAAG,CAAC,SAAS,EAAC;IACrB,WAAW,GAAG,IAAI,CAAC,SAAS,EAAC;GAC9B;;EAED,IAAI,WAAW,EAAE;IACf,OAAO,IAAI;GACZ,MAAM;IACL,OAAO,KAAK;GACb;;;CAGF;;AAED,SAAS,WAAW,IAAI;EACtB,IAAI,eAAe,EAAE;IACnB,IAAI,WAAW,GAAG,OAAO,GAAE;IAC3B,aAAa,GAAG,WAAW,GAAG,YAAW;IACzC,IAAI,QAAQ,GAAG,eAAe,CAAC,WAAW,EAAC;IAC3C,IAAI,CAAC,QAAQ,EAAE;MACb,IAAI,GAAG,MAAK;MACZ,eAAe,GAAG,KAAI;KACvB,MAAM;MACL,QAAQ,GAAE;KACX;GACF,MAAM,IAAI,GAAG,MAAK;CACpB;;AAED,MAAM,QAAQ,GAAG,CAAC,MAAM;EACtB,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;IACzC,MAAM,OAAO,GAAG,IAAI,cAAc,GAAE;IACpC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAK;IAC1B,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,YAAW;;IAErC,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;GACpC;;EAED,OAAO,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;CACxC,IAAG;;AAEJ,AAAO,SAAS,WAAW,IAAI;EAC7B,OAAO,OAAO,EAAE,GAAG,aAAa;CACjC;;AAED,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE;;AC9FlC,MAAC,OAAO,GAAG,GAAE;AAClB,AAAO,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC;;AAEnF,IAAI,aAAa,GAAG,KAAI;AACxB,AAAO,IAAI,GAAG,GAAG,KAAI;AACrB,AAAO,IAAI,YAAY,GAAG,KAAI;;AAE9B,SAAS,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;EAClC,IAAI,SAAS,GAAG;IACd,GAAG,EAAE,IAAI;IACT,IAAI;IACJ,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;IAC1B,IAAI;IACL;EACD,YAAY,CAAC,SAAS,EAAC;CACxB;;AAED,SAAS,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;EAClC,KAAK,CAAC,IAAI,GAAG,KAAI;EACjB,GAAG,GAAG,MAAK;EACX,gBAAgB,CAACA,aAAW,EAAC;CAC9B;;AAED,SAASA,aAAW,IAAI;EACtB,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE;IAC5B,GAAG,GAAG,UAAU,CAAC,GAAG,EAAC;GACtB;;EAED,IAAI,aAAa,EAAE;IACjB,UAAU,CAAC,aAAa,EAAC;IACzB,OAAO,IAAI;GACZ;;EAED,OAAOA,aAAW,CAAC,IAAI,CAAC,IAAI,CAAC;CAC9B;;AAED,SAAS,UAAU,EAAE,GAAG,EAAE;EACxB,GAAG,CAAC,OAAO,GAAG,GAAE;EAChB,GAAG,CAAC,UAAU,GAAG,aAAa,CAAC,GAAG,EAAC;EACnC,GAAG,CAAC,GAAG,IAAI,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,EAAC;EACnD,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK;EAC/B,OAAO,GAAG,EAAE;IACV,YAAY,CAAC,GAAG,EAAC;IACjB,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,OAAO,GAAG,CAAC,OAAO;IACvD,GAAG,GAAG,GAAG,CAAC,OAAM;GACjB;CACF;;AAED,SAAS,UAAU,EAAE,GAAG,EAAE;EACxB,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,GAAE;EAC3B,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,GAAE;EAC3B,GAAG,CAAC,MAAM,GAAG,GAAE;EACf,GAAG,CAAC,IAAI,GAAG,GAAE;EACb,GAAG,CAAC,IAAI,GAAG,GAAE;EACb,YAAY,GAAG,IAAG;EAClB,WAAW,GAAE;EACb,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAC;CAC5C;;AAED,SAAS,UAAU,EAAE,GAAG,EAAE;EACxB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;IACb,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,IAAG;IACrC,GAAG,CAAC,IAAI,GAAG,aAAa,CAAC,GAAG,EAAC;GAC9B;EACD,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,IAAI,GAAE;EAC5B,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,IAAI,KAAI;EAChC,CAAC,CAAC,IAAI,GAAG,IAAG;EACZ,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,KAAI;EACpB,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAC;CAC3C;AACD,SAAS,aAAa,EAAE,KAAK,EAAE;EAC7B,QAAQ,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG;IAC7B,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,EAAE,OAAO,KAAK,CAAC,IAAI;GACxC;CACF;;AAED,SAAS,iBAAiB,EAAE,GAAG,EAAE,QAAQ,EAAE;EACzC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAI;EAC1B,MAAM,SAAS,IAAI,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,EAAC;EACzD,IAAI,MAAM,GAAG,GAAE;;EAEf,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE;IACzB,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,EAAC;IAC3B,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,EAAC;;IAE3B,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE;MAC/C,MAAM,CAAC,CAAC,CAAC,GAAG,SAAQ;KACrB,MAAM;MACL,QAAQ,CAAC,QAAQ,GAAG,OAAM;MAC1B,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAC;KAC3B;GACF;;EAED,IAAI,SAAS,GAAG,KAAI;EACpB,IAAI,SAAS,GAAG,KAAI;;EAEpB,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE;IACzB,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,EAAC;IAC3B,IAAI,QAAQ,GAAG,MAAM,CAAC,CAAC,EAAC;;IAExB,IAAI,QAAQ,EAAE;MACZ,SAAS,GAAG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAC;MACzC,QAAQ,CAAC,QAAQ,GAAG,OAAM;MAC1B,QAAQ,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,QAAQ,GAAE;MACxC,QAAQ,CAAC,SAAS,GAAG,UAAS;MAC9B,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE;QACzB,QAAQ,CAAC,QAAQ,GAAG,MAAK;OAC1B;KACF,MAAM;MACL,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAC;KACxC;;IAED,SAAS,CAAC,CAAC,CAAC,GAAG,SAAQ;IACvB,QAAQ,CAAC,MAAM,GAAG,IAAG;;IAErB,IAAI,SAAS,EAAE;MACb,SAAS,CAAC,OAAO,GAAG,SAAQ;KAC7B,MAAM;MACL,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,IAAG;MACvC,GAAG,CAAC,KAAK,GAAG,SAAQ;KACrB;IACD,SAAS,GAAG,SAAQ;GACrB;EACD,IAAI,SAAS,EAAE,SAAS,CAAC,OAAO,GAAG,KAAI;EACvC,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,MAAK;CAC/B;;AAED,SAAS,WAAW,EAAE,KAAK,EAAE;EAC3B,IAAI,CAAC,GAAG,KAAK,CAAC,OAAM;EACpB,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI;EAC3C,OAAO,KAAK,CAAC,GAAG;CACjB;;AAED,SAAS,YAAY,EAAE,KAAK,EAAE;EAC5B,IAAI,KAAK,CAAC,MAAM,EAAE;IAChB,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,EAAC;GACnD,MAAM;IACL,aAAa,GAAG,MAAK;GACtB;CACF;;AAED,SAAS,UAAU,EAAE,GAAG,EAAE;EACxB,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAC;EACnC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,GAAE;EACtB,GAAG,GAAG,aAAa,GAAG,KAAI;CAC3B;;AAED,SAAS,WAAW,EAAE,KAAK,EAAE;EAC3B,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,GAAE;EACnC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE;IAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,EAAC;IAC7B,IAAI,IAAI,IAAI,GAAE;IACd,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAE;IAC/B,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,EAAC;GACpC;EACD,KAAK,CAAC,MAAM,GAAG,KAAI;CACpB;;AAED,SAAS,MAAM,EAAE,KAAK,EAAE;EACtB,IAAI,GAAG,GAAG,KAAK,CAAC,SAAQ;EACxB,IAAI,MAAM,GAAG,KAAK,CAAC,WAAU;EAC7B,IAAI,GAAG,GAAG,KAAK,CAAC,KAAI;EACpB,IAAI,GAAG,GAAG,KAAK,CAAC,IAAG;;EAEnB,IAAI,GAAG,KAAK,MAAM,EAAE;IAClB,OAAO,CAAC,KAAK,EAAC;IACd,OAAO,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC,MAAK;IAC9C,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAC;GAC/B,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE;IAC7B,WAAW,CAAC,KAAK,EAAC;GACnB,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE;IACzB,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAC;GACvD,MAAM;IACL,IAAI,KAAK,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,GAAG,KAAI;IAC7D,IAAI,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,WAAU;IACzD,IAAI,KAAK,KAAK,GAAG,EAAE,MAAM;IACzB,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM;IACtD,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAC;GAChC;;EAED,IAAI,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,GAAG,GAAG,EAAC;EACnD,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,GAAE;CAC1C;;AAED,SAAS,OAAO,EAAE,KAAK,EAAE;EACvB,IAAI,IAAI,GAAG,KAAK,CAAC,QAAO;EACxB,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAE;EAC/B,KAAK,CAAC,OAAO,GAAG,KAAI;CACrB;;AAED,SAAS,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE;EAChC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAI;EAC1C,KAAK,CAAC,QAAQ,GAAG,IAAG;EACpB,OAAO,KAAK;CACb;;AAED,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,EAAC;;AAE1D,SAAS,MAAM,EAAE,GAAG,EAAE;EACpB,IAAI,GAAG,GAAG,GAAE;EACZ,IAAI,CAAC,GAAG,EAAC;EACT,IAAI,CAAC,GAAG,EAAC;EACT,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI;IAC3B,IAAI,IAAI,CAAC,GAAG,EAAE;MACZ,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI;QACnB,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,GAAE;OAC3F,EAAC;MACF,CAAC,GAAE;KACJ,MAAM;MACL,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,GAAE;KACvE;GACF,EAAC;EACF,OAAO,GAAG;CACX;;AAED,MAAM,IAAI,GAAG,EAAE,IAAI,OAAO,EAAE,KAAK,WAAU;;AAE3C,SAAS,OAAO,IAAI;EAClB,OAAO,YAAY,IAAI,EAAE;CAC1B;;;;"}
\ No newline at end of file

dist/fre.js

@@ -1,2 +1,2 @@
-"use strict";function h(e,t){let n=t||{},r=n.key||null,o=n.ref||null,l=[];for(let e=2;e<arguments.length;e++){let t=arguments[e];null==t||!0===t||!1===t||("number"==typeof t||"string"==typeof t?l.push({type:"text",props:{nodeValue:t}}):l.push(t))}return l.length&&(n.children=1===l.length?l[0]:l),delete n.key,delete n.ref,{type:e,props:n,key:r,ref:o}}function updateElement(e,t,n){for(let r in{...t,...n}){let o=t[r],l=n[r];if(o==l||"children"===r);else if("style"===r)for(const t in{...o,...l})o&&l&&o[t]===l[t]||(e[r][t]=l&&l[t]||"");else"o"===r[0]&&"n"===r[1]?(r=r.slice(2).toLowerCase(),o&&e.removeEventListener(r,o),e.addEventListener(r,l)):r in e&&!(e instanceof SVGElement)?e[r]=null==l?"":l:null==l||!1===l?e.removeAttribute(r):e.setAttribute(r,l)}}function createElement(e){const t="text"===e.type?document.createTextNode(""):e.tag===SVG?document.createElementNS("http://www.w3.org/2000/svg",e.type):document.createElement(e.type);return updateElement(t,{},e.props),t}let cursor=0;function update(e,t,n){n=t?t(this.state[e],n):n,this.state[e]=n,scheduleWork(this,!0)}function resetCursor(){cursor=0}function useState(e){return useReducer(null,e)}function useReducer(e,t){let{wip:n,key:r}=getCurrent(),o=update.bind(n,r,e);return r in n.state?[n.state[r],o]:(n.state[r]=t,[t,o])}function useEffect(e,t){let{wip:n,key:r}=getCurrent();isChanged(n.deps[r],t)&&(n.effect[r]=useCallback(e,t),n.deps[r]=t)}function useMemo(e,t){let{wip:n,key:r}=getCurrent();return isChanged(n.deps[r],t)?(n.deps[r]=t,n.memo[r]=e()):n.memo[r]}function useCallback(e,t){return useMemo(()=>e,t)}function useRef(e){return{current:e}}function isChanged(e,t){return!e||t.some((t,n)=>t!==e[n])}function getCurrent(){return{wip:currentFiber,key:"$"+cursor&&cursor++}}function push(e,t){let n=e.length;for(e.push(t);;){let r=Math.floor((n-1)/2),o=e[r];if(!(o&&compare(o,t)>0))return;e[r]=t,e[n]=o,n=r}}function pop(e){let t=e[0];if(t){let n=e.pop();if(t!==n){e[0]=n;let t=0,r=e.length;for(;t<r;){let r=2*(t+1)-1,o=e[r],l=r+1,u=e[l];if(o&&compare(o,n)<0)u&&compare(u,o)<0?(e[t]=u,e[l]=n,t=l):(e[t]=o,e[r]=n,t=r);else{if(!(u&&compare(u,n)<0))return;e[t]=u,e[l]=n,t=l}}}return t}return null}function compare(e,t){return e.dueTime-t.dueTime}function peek(e){return e[0]||null}let taskQueue=[],currentTask=null,currentCallback=null,inMC=!1,frameDeadline=0;const frameLength=5;function scheduleCallback(e){const t=getTime();let n={callback:e,startTime:t,dueTime:t+5e3};return push(taskQueue,n),currentCallback=flushWork,inMC||planWork()&&(inMC=!0),n}function flushWork(e){try{return workLoop(e)}finally{currentTask=null}}function workLoop(e){let t=e;for(currentTask=peek(taskQueue);currentTask&&!(currentTask.dueTime>t&&shouldYeild());){let e=currentTask.callback;if(e){currentTask.callback=null;let t=e();t?currentTask.callback=t:currentTask===peek(taskQueue)&&pop(taskQueue)}else pop(taskQueue);currentTask=peek(taskQueue)}return!!currentTask}function performWork(){if(currentCallback){let e=getTime();frameDeadline=e+frameLength,currentCallback(e)?planWork():(inMC=!1,currentCallback=null)}else inMC=!1}const planWork=(()=>{if("undefined"!=typeof MessageChannel){const e=new MessageChannel,t=e.port2;return e.port1.onmessage=performWork,()=>t.postMessage(null)}return()=>setTimeout(performWork,0)})();function shouldYeild(){return getTime()>frameDeadline}const getTime=()=>performance.now(),options={},[ROOT,HOST,HOOK,SVG,PLACE,UPDATE,DELETE]=[0,1,2,3,4,5,6];let pendingCommit=null,WIP=null,currentFiber=null;function render(e,t,n){scheduleWork({tag:ROOT,node:t,props:{children:e},done:n})}function scheduleWork(e,t){e.lock=t,WIP=e,scheduleCallback(performWork$1)}function performWork$1(){for(;WIP&&!shouldYeild();)WIP=performWIP(WIP);return pendingCommit?(commitWork(pendingCommit),null):performWork$1.bind(null)}function performWIP(e){if(e.patches=[],e.parentNode=getParentNode(e),e.tag==HOOK?updateHOOK(e):updateHost(e),e.child)return e.child;for(;e;){if(completeWork(e),e.sibling&&null==e.lock)return e.sibling;e=e.parent}}function updateHOOK(e){e.props=e.props||{},e.state=e.state||{},e.effect={},e.deps={},e.memo={},currentFiber=e,resetCursor(),reconcileChildren(e,e.type(e.props))}function updateHost(e){e.node||("svg"===e.type&&(e.tag=SVG),e.node=createElement(e));let t=e.parentNode||{};e.insertPoint=t.last||null,t.last=e,e.node.last=null,reconcileChildren(e,e.props.children)}function getParentNode(e){for(;e=e.parent;)if(e.tag<HOOK)return e.node}function reconcileChildren(e,t){const n=e.kids,r=e.kids=hashfy(t,e.kids);let o={};for(const t in n){let l=r[t],u=n[t];l&&l.type===u.type?o[t]=u:(u.patchTag=DELETE,e.patches.push(u))}let l=null,u=null;for(const t in r){let n=r[t],s=o[t];s?(u=createFiber(s,UPDATE),n.patchTag=UPDATE,(n={...u,...n}).alternate=u,shouldPlace(n)&&(n.patchTag=PLACE)):n=createFiber(n,PLACE),r[t]=n,n.parent=e,l?l.sibling=n:(e.tag===SVG&&(n.tag=SVG),e.child=n),l=n}l&&(l.sibling=null),e.lock&&(e.lock=!1)}function shouldPlace(e){let t=e.parent;return t.tag===HOOK?t.key&&!t.lock:e.key}function completeWork(e){e.parent?e.parent.patches.push(...e.patches,e):pendingCommit=e}function commitWork(e){e.patches.forEach(e=>commit(e)),e.done&&e.done(),e=pendingCommit=null}function applyEffect(e){e.pending=e.pending||{};for(const t in e.effect){const n=e.pending[t];n&&n();const r=e.effect[t]();r&&(e.pending[t]=r)}e.effect=null}function commit(e){let t=e.patchTag,n=e.parentNode,r=e.node,o=e.ref;if(t===DELETE){for(cleanup(e);e.tag===HOOK;)e=e.child;n.removeChild(e.node)}else if(e.tag===HOOK)applyEffect(e);else if(t===UPDATE)updateElement(r,e.alternate.props,e.props);else{let t=e.insertPoint?e.insertPoint.node:null,o=t?t.nextSibling:n.firstChild;if(o===r)return;if(null===o&&r===n.lastChild)return;n.insertBefore(r,o)}o&&(isFn(o)?o(r):o.current=r),e.patches=e.parent.patches=[]}function cleanup(e){let t=e.pending;for(const e in t)t[e]();e.pending=null}function createFiber(e,t){return e.tag=isFn(e.type)?HOOK:HOST,e.patchTag=t,e}const arrayfy=e=>e?e.pop?e:[e]:[];function hashfy(e){let t={},n=0,r=0;return arrayfy(e).forEach(e=>{e.pop?(e.forEach(e=>{e.key?t["."+n+"."+e.key]=e:(t["."+n+"."+r]=e)&&r++}),n++):e.key?t["."+e.key]=e:(t["."+n]=e)&&n++}),t}const isFn=e=>"function"==typeof e;exports.createElement=h,exports.h=h,exports.options=options,exports.render=render,exports.scheduleWork=scheduleWork,exports.useCallback=useCallback,exports.useEffect=useEffect,exports.useMemo=useMemo,exports.useReducer=useReducer,exports.useRef=useRef,exports.useState=useState;
+"use strict";function h(e,t){let n=t||{},r=n.key||null,o=n.ref||null,l=[];for(let e=2;e<arguments.length;e++){let t=arguments[e];null==t||!0===t||!1===t||("number"==typeof t||"string"==typeof t?l.push({type:"text",props:{nodeValue:t}}):l.push(t))}return l.length&&(n.children=1===l.length?l[0]:l),delete n.key,delete n.ref,{type:e,props:n,key:r,ref:o}}function updateElement(e,t,n){for(let r in{...t,...n}){let o=t[r],l=n[r];if(o==l||"children"===r);else if("style"===r)for(const t in{...o,...l})o&&l&&o[t]===l[t]||(e[r][t]=l&&l[t]||"");else"o"===r[0]&&"n"===r[1]?(r=r.slice(2).toLowerCase(),o&&e.removeEventListener(r,o),e.addEventListener(r,l)):r in e&&!(e instanceof SVGElement)?e[r]=null==l?"":l:null==l||!1===l?e.removeAttribute(r):e.setAttribute(r,l)}}function createElement(e){const t="text"===e.type?document.createTextNode(""):e.tag===SVG?document.createElementNS("http://www.w3.org/2000/svg",e.type):document.createElement(e.type);return updateElement(t,{},e.props),t}let cursor=0;function update(e,t,n){n=t?t(this.state[e],n):n,this.state[e]=n,scheduleWork(this,!0)}function resetCursor(){cursor=0}function useState(e){return useReducer(null,e)}function useReducer(e,t){let n=getHook(),r=getKey(),o=update.bind(n,r,e);return r in n.state?[n.state[r],o]:(n.state[r]=t,[t,o])}function useEffect(e,t){let n=getHook(),r=getKey();isChanged(n.Edeps,t)&&(n.effect[r]=useCallback(e,t),n.Edeps=t)}function useMemo(e,t){let n=getHook(),r=getKey();return isChanged(n.Mdeps,t)?(n.Mdeps=t,n.memo[r]=e()):n.memo[r]}function useCallback(e,t){return useMemo(()=>e,t)}function useRef(e){return{current:e}}function isChanged(e,t){return!e||t.some((t,n)=>t!==e[n])}function getKey(){let e="$"+cursor;return cursor++,e}function push(e,t){let n=e.length;for(e.push(t);;){let r=Math.floor((n-1)/2),o=e[r];if(!(o&&compare(o,t)>0))return;e[r]=t,e[n]=o,n=r}}function pop(e){let t=e[0];if(t){let n=e.pop();if(t!==n){e[0]=n;let t=0,r=e.length;for(;t<r;){let r=2*(t+1)-1,o=e[r],l=r+1,u=e[l];if(o&&compare(o,n)<0)u&&compare(u,o)<0?(e[t]=u,e[l]=n,t=l):(e[t]=o,e[r]=n,t=r);else{if(!(u&&compare(u,n)<0))return;e[t]=u,e[l]=n,t=l}}}return t}return null}function compare(e,t){return e.dueTime-t.dueTime}function peek(e){return e[0]||null}let taskQueue=[],currentTask=null,currentCallback=null,inMC=!1,frameDeadline=0;const frameLength=5;function scheduleCallback(e){const t=getTime();let n={callback:e,startTime:t,dueTime:t+5e3};return push(taskQueue,n),currentCallback=flushWork,inMC||planWork()&&(inMC=!0),n}function flushWork(e){try{return workLoop(e)}finally{currentTask=null}}function workLoop(e){let t=e;for(currentTask=peek(taskQueue);currentTask&&!(currentTask.dueTime>t&&shouldYeild());){let e=currentTask.callback;if(e){currentTask.callback=null;let t=e();t?currentTask.callback=t:currentTask===peek(taskQueue)&&pop(taskQueue)}else pop(taskQueue);currentTask=peek(taskQueue)}return!!currentTask}function performWork(){if(currentCallback){let e=getTime();frameDeadline=e+frameLength,currentCallback(e)?planWork():(inMC=!1,currentCallback=null)}else inMC=!1}const planWork=(()=>{if("undefined"!=typeof MessageChannel){const e=new MessageChannel,t=e.port2;return e.port1.onmessage=performWork,()=>t.postMessage(null)}return()=>setTimeout(performWork,0)})();function shouldYeild(){return getTime()>frameDeadline}const getTime=()=>performance.now(),options={},[ROOT,HOST,HOOK,SVG,PLACE,UPDATE,DELETE]=[0,1,2,3,4,5,6];let pendingCommit=null,WIP=null,currentFiber=null;function render(e,t,n){scheduleWork({tag:ROOT,node:t,props:{children:e},done:n})}function scheduleWork(e,t){e.lock=t,WIP=e,scheduleCallback(performWork$1)}function performWork$1(){for(;WIP&&!shouldYeild();)WIP=performWIP(WIP);return pendingCommit?(commitWork(pendingCommit),null):performWork$1.bind(null)}function performWIP(e){if(e.patches=[],e.parentNode=getParentNode(e),e.tag==HOOK?updateHOOK(e):updateHost(e),e.child)return e.child;for(;e;){if(completeWork(e),e.sibling&&null==e.lock)return e.sibling;e=e.parent}}function updateHOOK(e){e.props=e.props||{},e.state=e.state||{},e.effect={},e.deps={},e.memo={},currentFiber=e,resetCursor(),reconcileChildren(e,e.type(e.props))}function updateHost(e){e.node||("svg"===e.type&&(e.tag=SVG),e.node=createElement(e));let t=e.parentNode||{};e.insertPoint=t.last||null,t.last=e,e.node.last=null,reconcileChildren(e,e.props.children)}function getParentNode(e){for(;e=e.parent;)if(e.tag<HOOK)return e.node}function reconcileChildren(e,t){const n=e.kids,r=e.kids=hashfy(t,e.kids);let o={};for(const t in n){let l=r[t],u=n[t];l&&l.type===u.type?o[t]=u:(u.patchTag=DELETE,e.patches.push(u))}let l=null,u=null;for(const t in r){let n=r[t],s=o[t];s?(u=createFiber(s,UPDATE),n.patchTag=UPDATE,(n={...u,...n}).alternate=u,shouldPlace(n)&&(n.patchTag=PLACE)):n=createFiber(n,PLACE),r[t]=n,n.parent=e,l?l.sibling=n:(e.tag===SVG&&(n.tag=SVG),e.child=n),l=n}l&&(l.sibling=null),e.lock&&(e.lock=!1)}function shouldPlace(e){let t=e.parent;return t.tag===HOOK?t.key&&!t.lock:e.key}function completeWork(e){e.parent?e.parent.patches.push(...e.patches,e):pendingCommit=e}function commitWork(e){e.patches.forEach(e=>commit(e)),e.done&&e.done(),e=pendingCommit=null}function applyEffect(e){e.pending=e.pending||{};for(const t in e.effect){const n=e.pending[t];n&&n();const r=e.effect[t]();r&&(e.pending[t]=r)}e.effect=null}function commit(e){let t=e.patchTag,n=e.parentNode,r=e.node,o=e.ref;if(t===DELETE){for(cleanup(e);e.tag===HOOK;)e=e.child;n.removeChild(e.node)}else if(e.tag===HOOK)applyEffect(e);else if(t===UPDATE)updateElement(r,e.alternate.props,e.props);else{let t=e.insertPoint?e.insertPoint.node:null,o=t?t.nextSibling:n.firstChild;if(o===r)return;if(null===o&&r===n.lastChild)return;n.insertBefore(r,o)}o&&(isFn(o)?o(r):o.current=r),e.patches=e.parent.patches=[]}function cleanup(e){let t=e.pending;for(const e in t)t[e]();e.pending=null}function createFiber(e,t){return e.tag=isFn(e.type)?HOOK:HOST,e.patchTag=t,e}const arrayfy=e=>e?e.pop?e:[e]:[];function hashfy(e){let t={},n=0,r=0;return arrayfy(e).forEach(e=>{e.pop?(e.forEach(e=>{e.key?t["."+n+"."+e.key]=e:(t["."+n+"."+r]=e)&&r++}),n++):e.key?t["."+e.key]=e:(t["."+n]=e)&&n++}),t}const isFn=e=>"function"==typeof e;function getHook(){return currentFiber||{}}exports.createElement=h,exports.h=h,exports.options=options,exports.render=render,exports.scheduleWork=scheduleWork,exports.useCallback=useCallback,exports.useEffect=useEffect,exports.useMemo=useMemo,exports.useReducer=useReducer,exports.useRef=useRef,exports.useState=useState;
//# sourceMappingURL=fre.js.map

dist/fre.js.map

@@ -1 +1 @@
-{"version":3,"file":"fre.js","sources":["../src/h.js","../src/dom.js","../src/hooks.js","../src/heapify.js","../src/scheduler.js","../src/reconciler.js"],"sourcesContent":["export function h (type, attrs) {\n let props = attrs || {}\n let key = props.key || null\n let ref = props.ref || null\n let children = []\n\n for (let i = 2; i < arguments.length; i++) {\n let vnode = arguments[i]\n if (vnode == null || vnode === true || vnode === false) {\n } else if (typeof vnode === 'number' || typeof vnode === 'string') {\n children.push({ type: 'text', props: { nodeValue: vnode } })\n } else {\n children.push(vnode)\n }\n }\n\n if (children.length) {\n props.children = children.length === 1 ? children[0] : children\n }\n\n delete props.key\n delete props.ref\n return { type, props, key, ref }\n}\n","import { SVG } from './reconciler'\n\nexport function updateElement (dom, oldProps, newProps) {\n for (let name in { ...oldProps, ...newProps }) {\n let oldValue = oldProps[name]\n let newValue = newProps[name]\n\n if (oldValue == newValue || name === 'children') {\n } else if (name === 'style') {\n for (const k in { ...oldValue, ...newValue }) {\n if (!(oldValue && newValue && oldValue[k] === newValue[k])) {\n dom[name][k] = newValue && newValue[k] || ''\n }\n }\n } else if (name[0] === 'o' && name[1] === 'n') {\n name = name.slice(2).toLowerCase()\n if (oldValue) dom.removeEventListener(name, oldValue)\n dom.addEventListener(name, newValue)\n } else if (name in dom && !(dom instanceof SVGElement)) {\n dom[name] = newValue == null ? '' : newValue\n } else if (newValue == null || newValue === false) {\n dom.removeAttribute(name)\n } else {\n dom.setAttribute(name, newValue)\n }\n }\n}\n\nexport function createElement (fiber) {\n const dom =\n fiber.type === 'text'\n ? document.createTextNode('')\n : fiber.tag === SVG\n ? document.createElementNS('http://www.w3.org/2000/svg', fiber.type)\n : document.createElement(fiber.type)\n updateElement(dom, {}, fiber.props)\n return dom\n}\n","import { scheduleWork, currentFiber } from './reconciler'\nlet cursor = 0\n\nfunction update (key, reducer, value) {\n value = reducer ? reducer(this.state[key], value) : value\n this.state[key] = value\n scheduleWork(this, true)\n}\nexport function resetCursor () {\n cursor = 0\n}\nexport function useState (initState) {\n return useReducer(null, initState)\n}\nexport function useReducer (reducer, initState) {\n let { wip, key } = getCurrent()\n let setter = update.bind(wip, key, reducer)\n if (key in wip.state) {\n return [wip.state[key], setter]\n } else {\n wip.state[key] = initState\n return [initState, setter]\n }\n}\n\nexport function useEffect (cb, deps) {\n let { wip, key } = getCurrent()\n if (isChanged(wip.deps[key], deps)) {\n wip.effect[key] = useCallback(cb, deps)\n wip.deps[key] = deps\n }\n}\n\nexport function useMemo (cb, deps) {\n let { wip, key } = getCurrent()\n if (isChanged(wip.deps[key], deps)) {\n wip.deps[key] = deps\n return (wip.memo[key] = cb())\n }\n return wip.memo[key]\n}\n\nexport function useCallback (cb, deps) {\n return useMemo(() => cb, deps)\n}\n\nexport function useRef (current) {\n return { current }\n}\n\nfunction isChanged (a, b) {\n return !a || b.some((arg, index) => arg !== a[index])\n}\n\nfunction getCurrent () {\n return {\n wip: currentFiber,\n key: '$' + cursor && cursor++\n }\n}\n","function push (heap, node) {\r\n let index = heap.length\r\n heap.push(node)\r\n\r\n while (true) {\r\n let parentIndex = Math.floor((index - 1) / 2)\r\n let parent = heap[parentIndex]\r\n\r\n if (parent && compare(parent, node) > 0) {\r\n heap[parentIndex] = node\r\n heap[index] = parent\r\n index = parentIndex\r\n } else return\r\n }\r\n}\r\n\r\nfunction pop (heap) {\r\n let first = heap[0]\r\n if (first) {\r\n let last = heap.pop()\r\n if (first !== last) {\r\n heap[0] = last\r\n let index = 0\r\n let length = heap.length\r\n\r\n while (index < length) {\r\n let leftIndex = (index + 1) * 2 - 1\r\n let left = heap[leftIndex]\r\n let rightIndex = leftIndex + 1\r\n let right = heap[rightIndex]\r\n\r\n if (left && compare(left, last) < 0) {\r\n if (right && compare(right, left) < 0) {\r\n heap[index] = right\r\n heap[rightIndex] = last\r\n index = rightIndex\r\n } else {\r\n heap[index] = left\r\n heap[leftIndex] = last\r\n index = leftIndex\r\n }\r\n } else if (right && compare(right, last) < 0) {\r\n heap[index] = right\r\n heap[rightIndex] = last\r\n index = rightIndex\r\n } else return\r\n }\r\n }\r\n return first\r\n } else return null\r\n}\r\n\r\nfunction compare (a, b) {\r\n return a.dueTime - b.dueTime\r\n}\r\n\r\nfunction peek (heap) {\r\n return heap[0] || null\r\n}\r\n\r\nexport { push, peek, pop }\r\n","import { push, pop, peek } from './heapify'\n\nlet taskQueue = []\nlet currentTask = null\nlet currentCallback = null\nlet inMC = false\nlet frameDeadline = 0\nconst frameLength = 5\n\nexport function scheduleCallback (callback) {\n const currentTime = getTime()\n let startTime = currentTime\n let timeout = 5000 // idle\n let dueTime = startTime + timeout\n\n let newTask = {\n callback,\n startTime,\n dueTime\n }\n\n push(taskQueue, newTask)\n\n currentCallback = flushWork\n\n if (!inMC) planWork() && (inMC = true)\n\n return newTask\n}\n\nfunction flushWork (iniTime) {\n try {\n return workLoop(iniTime)\n } finally {\n currentTask = null\n }\n}\n\nfunction workLoop (iniTime) {\n let currentTime = iniTime\n currentTask = peek(taskQueue)\n\n while (currentTask) {\n if (currentTask.dueTime > currentTime && shouldYeild()) break\n let callback = currentTask.callback\n if (callback) {\n currentTask.callback = null\n let next = callback()\n if (next) {\n currentTask.callback = next\n } else {\n if (currentTask === peek(taskQueue)) {\n pop(taskQueue)\n }\n }\n } else pop(taskQueue)\n currentTask = peek(taskQueue)\n }\n\n if (currentTask) {\n return true\n } else {\n return false\n }\n\n // return !!currentTask\n}\n\nfunction performWork () {\n if (currentCallback) {\n let currentTime = getTime()\n frameDeadline = currentTime + frameLength\n let moreWork = currentCallback(currentTime)\n if (!moreWork) {\n inMC = false\n currentCallback = null\n } else {\n planWork()\n }\n } else inMC = false\n}\n\nconst planWork = (() => {\n if (typeof MessageChannel !== 'undefined') {\n const channel = new MessageChannel()\n const port = channel.port2\n channel.port1.onmessage = performWork\n\n return () => port.postMessage(null)\n }\n\n return () => setTimeout(performWork, 0)\n})()\n\nexport function shouldYeild () {\n return getTime() > frameDeadline\n}\n\nconst getTime = () => performance.now()\n","import { createElement, updateElement } from './dom'\r\nimport { resetCursor } from './hooks'\r\nimport { scheduleCallback, shouldYeild } from './scheduler'\r\n\r\nconst options = {}\r\nexport const [ROOT, HOST, HOOK, SVG, PLACE, UPDATE, DELETE] = [0, 1, 2, 3, 4, 5, 6]\r\n\r\nlet pendingCommit = null\r\nexport let WIP = null\r\nexport let currentFiber = null\r\n\r\nfunction render (vnode, node, done) {\r\n let rootFiber = {\r\n tag: ROOT,\r\n node,\r\n props: { children: vnode },\r\n done\r\n }\r\n scheduleWork(rootFiber)\r\n}\r\n\r\nfunction scheduleWork (fiber, lock) {\r\n fiber.lock = lock\r\n WIP = fiber\r\n scheduleCallback(performWork)\r\n}\r\n\r\nfunction performWork () {\r\n while (WIP && !shouldYeild()) {\r\n WIP = performWIP(WIP)\r\n }\r\n\r\n if (pendingCommit) {\r\n commitWork(pendingCommit)\r\n return null\r\n }\r\n\r\n return performWork.bind(null)\r\n}\r\n\r\nfunction performWIP (WIP) {\r\n WIP.patches = []\r\n WIP.parentNode = getParentNode(WIP)\r\n WIP.tag == HOOK ? updateHOOK(WIP) : updateHost(WIP)\r\n if (WIP.child) return WIP.child\r\n while (WIP) {\r\n completeWork(WIP)\r\n if (WIP.sibling && WIP.lock == null) return WIP.sibling\r\n WIP = WIP.parent\r\n }\r\n}\r\n\r\nfunction updateHOOK (WIP) {\r\n WIP.props = WIP.props || {}\r\n WIP.state = WIP.state || {}\r\n WIP.effect = {}\r\n WIP.deps = {}\r\n WIP.memo = {}\r\n currentFiber = WIP\r\n resetCursor()\r\n reconcileChildren(WIP, WIP.type(WIP.props))\r\n}\r\n\r\nfunction updateHost (WIP) {\r\n if (!WIP.node) {\r\n if (WIP.type === 'svg') WIP.tag = SVG\r\n WIP.node = createElement(WIP)\r\n }\r\n let p = WIP.parentNode || {}\r\n WIP.insertPoint = p.last || null\r\n p.last = WIP\r\n WIP.node.last = null\r\n reconcileChildren(WIP, WIP.props.children)\r\n}\r\nfunction getParentNode (fiber) {\r\n while ((fiber = fiber.parent)) {\r\n if (fiber.tag < HOOK) return fiber.node\r\n }\r\n}\r\n\r\nfunction reconcileChildren (WIP, children) {\r\n const oldFibers = WIP.kids\r\n const newFibers = (WIP.kids = hashfy(children, WIP.kids))\r\n let reused = {}\r\n\r\n for (const k in oldFibers) {\r\n let newFiber = newFibers[k]\r\n let oldFiber = oldFibers[k]\r\n\r\n if (newFiber && newFiber.type === oldFiber.type) {\r\n reused[k] = oldFiber\r\n } else {\r\n oldFiber.patchTag = DELETE\r\n WIP.patches.push(oldFiber)\r\n }\r\n }\r\n\r\n let prevFiber = null\r\n let alternate = null\r\n\r\n for (const k in newFibers) {\r\n let newFiber = newFibers[k]\r\n let oldFiber = reused[k]\r\n\r\n if (oldFiber) {\r\n alternate = createFiber(oldFiber, UPDATE)\r\n newFiber.patchTag = UPDATE\r\n newFiber = { ...alternate, ...newFiber }\r\n newFiber.alternate = alternate\r\n if (shouldPlace(newFiber)) {\r\n newFiber.patchTag = PLACE\r\n }\r\n } else {\r\n newFiber = createFiber(newFiber, PLACE)\r\n }\r\n\r\n newFibers[k] = newFiber\r\n newFiber.parent = WIP\r\n\r\n if (prevFiber) {\r\n prevFiber.sibling = newFiber\r\n } else {\r\n if (WIP.tag === SVG) newFiber.tag = SVG\r\n WIP.child = newFiber\r\n }\r\n prevFiber = newFiber\r\n }\r\n if (prevFiber) prevFiber.sibling = null\r\n if (WIP.lock) WIP.lock = false\r\n}\r\n\r\nfunction shouldPlace (fiber) {\r\n let p = fiber.parent\r\n if (p.tag === HOOK) return p.key && !p.lock\r\n return fiber.key\r\n}\r\n\r\nfunction completeWork (fiber) {\r\n if (fiber.parent) {\r\n fiber.parent.patches.push(...fiber.patches, fiber)\r\n } else {\r\n pendingCommit = fiber\r\n }\r\n}\r\n\r\nfunction commitWork (WIP) {\r\n WIP.patches.forEach(p => commit(p))\r\n WIP.done && WIP.done()\r\n WIP = pendingCommit = null\r\n}\r\n\r\nfunction applyEffect (fiber) {\r\n fiber.pending = fiber.pending || {}\r\n for (const k in fiber.effect) {\r\n const pend = fiber.pending[k]\r\n pend && pend()\r\n const after = fiber.effect[k]()\r\n after && (fiber.pending[k] = after)\r\n }\r\n fiber.effect = null\r\n}\r\n\r\nfunction commit (fiber) {\r\n let tag = fiber.patchTag\r\n let parent = fiber.parentNode\r\n let dom = fiber.node\r\n let ref = fiber.ref\r\n\r\n if (tag === DELETE) {\r\n cleanup(fiber)\r\n while (fiber.tag === HOOK) fiber = fiber.child\r\n parent.removeChild(fiber.node)\r\n } else if (fiber.tag === HOOK) {\r\n applyEffect(fiber)\r\n } else if (tag === UPDATE) {\r\n updateElement(dom, fiber.alternate.props, fiber.props)\r\n } else {\r\n let point = fiber.insertPoint ? fiber.insertPoint.node : null\r\n let after = point ? point.nextSibling : parent.firstChild\r\n if (after === dom) return\r\n if (after === null && dom === parent.lastChild) return\r\n parent.insertBefore(dom, after)\r\n }\r\n\r\n if (ref) isFn(ref) ? ref(dom) : (ref.current = dom)\r\n fiber.patches = fiber.parent.patches = []\r\n}\r\n\r\nfunction cleanup (fiber) {\r\n let pend = fiber.pending\r\n for (const k in pend) pend[k]()\r\n fiber.pending = null\r\n}\r\n\r\nfunction createFiber (vnode, tag) {\r\n vnode.tag = isFn(vnode.type) ? HOOK : HOST\r\n vnode.patchTag = tag\r\n return vnode\r\n}\r\n\r\nconst arrayfy = arr => (!arr ? [] : arr.pop ? arr : [arr])\r\n\r\nfunction hashfy (arr) {\r\n let out = {}\r\n let i = 0\r\n let j = 0\r\n arrayfy(arr).forEach(item => {\r\n if (item.pop) {\r\n item.forEach(item => {\r\n item.key ? (out['.' + i + '.' + item.key] = item) : (out['.' + i + '.' + j] = item) && j++\r\n })\r\n i++\r\n } else {\r\n item.key ? (out['.' + item.key] = item) : (out['.' + i] = item) && i++\r\n }\r\n })\r\n return out\r\n}\r\n\r\nconst isFn = fn => typeof fn === 'function'\r\n\r\nexport { render, scheduleWork, options }\r\n"],"names":["h","type","attrs","props","key","ref","children","i","arguments","length","vnode","push","nodeValue","updateElement","dom","oldProps","newProps","name","oldValue","newValue","k","slice","toLowerCase","removeEventListener","addEventListener","SVGElement","removeAttribute","setAttribute","createElement","fiber","document","createTextNode","tag","SVG","createElementNS","cursor","update","reducer","value","this","state","scheduleWork","resetCursor","useState","initState","useReducer","wip","getCurrent","setter","bind","useEffect","cb","deps","isChanged","effect","useCallback","useMemo","memo","useRef","current","a","b","some","arg","index","currentFiber","heap","node","parentIndex","Math","floor","parent","compare","pop","first","last","leftIndex","left","rightIndex","right","dueTime","peek","taskQueue","currentTask","currentCallback","inMC","frameDeadline","frameLength","scheduleCallback","callback","currentTime","getTime","newTask","startTime","flushWork","planWork","iniTime","workLoop","shouldYeild","next","performWork","MessageChannel","channel","port","port2","port1","onmessage","postMessage","setTimeout","performance","now","options","ROOT","HOST","HOOK","PLACE","UPDATE","DELETE","pendingCommit","WIP","render","done","lock","performWIP","commitWork","patches","parentNode","getParentNode","updateHOOK","updateHost","child","completeWork","sibling","reconcileChildren","p","insertPoint","oldFibers","kids","newFibers","hashfy","reused","newFiber","oldFiber","patchTag","prevFiber","alternate","createFiber","shouldPlace","forEach","commit","applyEffect","pending","pend","after","cleanup","removeChild","point","nextSibling","firstChild","lastChild","insertBefore","isFn","arrayfy","arr","out","j","item","fn"],"mappings":"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"}
\ No newline at end of file
+{"version":3,"file":"fre.js","sources":["../src/h.js","../src/dom.js","../src/hooks.js","../src/heapify.js","../src/scheduler.js","../src/reconciler.js"],"sourcesContent":["export function h (type, attrs) {\n let props = attrs || {}\n let key = props.key || null\n let ref = props.ref || null\n let children = []\n\n for (let i = 2; i < arguments.length; i++) {\n let vnode = arguments[i]\n if (vnode == null || vnode === true || vnode === false) {\n } else if (typeof vnode === 'number' || typeof vnode === 'string') {\n children.push({ type: 'text', props: { nodeValue: vnode } })\n } else {\n children.push(vnode)\n }\n }\n\n if (children.length) {\n props.children = children.length === 1 ? children[0] : children\n }\n\n delete props.key\n delete props.ref\n return { type, props, key, ref }\n}\n","import { SVG } from './reconciler'\n\nexport function updateElement (dom, oldProps, newProps) {\n for (let name in { ...oldProps, ...newProps }) {\n let oldValue = oldProps[name]\n let newValue = newProps[name]\n\n if (oldValue == newValue || name === 'children') {\n } else if (name === 'style') {\n for (const k in { ...oldValue, ...newValue }) {\n if (!(oldValue && newValue && oldValue[k] === newValue[k])) {\n dom[name][k] = newValue && newValue[k] || ''\n }\n }\n } else if (name[0] === 'o' && name[1] === 'n') {\n name = name.slice(2).toLowerCase()\n if (oldValue) dom.removeEventListener(name, oldValue)\n dom.addEventListener(name, newValue)\n } else if (name in dom && !(dom instanceof SVGElement)) {\n dom[name] = newValue == null ? '' : newValue\n } else if (newValue == null || newValue === false) {\n dom.removeAttribute(name)\n } else {\n dom.setAttribute(name, newValue)\n }\n }\n}\n\nexport function createElement (fiber) {\n const dom =\n fiber.type === 'text'\n ? document.createTextNode('')\n : fiber.tag === SVG\n ? document.createElementNS('http://www.w3.org/2000/svg', fiber.type)\n : document.createElement(fiber.type)\n updateElement(dom, {}, fiber.props)\n return dom\n}\n","import { scheduleWork, getHook } from './reconciler'\nlet cursor = 0\n\nfunction update (key, reducer, value) {\n value = reducer ? reducer(this.state[key], value) : value\n this.state[key] = value\n scheduleWork(this, true)\n}\nexport function resetCursor () {\n cursor = 0\n}\nexport function useState (initState) {\n return useReducer(null, initState)\n}\nexport function useReducer (reducer, initState) {\n let wip = getHook()\n let key = getKey()\n let setter = update.bind(wip, key, reducer)\n if (key in wip.state) {\n return [wip.state[key], setter]\n } else {\n wip.state[key] = initState\n return [initState, setter]\n }\n}\n\nexport function useEffect (cb, deps) {\n let wip = getHook()\n let key = getKey()\n if (isChanged(wip.Edeps, deps)) {\n wip.effect[key] = useCallback(cb, deps)\n wip.Edeps = deps\n }\n}\n\nexport function useMemo (cb, deps) {\n let wip = getHook()\n let key = getKey()\n if (isChanged(wip.Mdeps, deps)) {\n wip.Mdeps = deps\n return (wip.memo[key] = cb())\n }\n return wip.memo[key]\n}\n\nexport function useCallback (cb, deps) {\n return useMemo(() => cb, deps)\n}\n\nexport function useRef (current) {\n return { current }\n}\n\nfunction isChanged (a, b) {\n return !a || b.some((arg, index) => arg !== a[index])\n}\n\nfunction getKey () {\n let key = '$' + cursor\n cursor ++\n return key\n}\n","function push (heap, node) {\r\n let index = heap.length\r\n heap.push(node)\r\n\r\n while (true) {\r\n let parentIndex = Math.floor((index - 1) / 2)\r\n let parent = heap[parentIndex]\r\n\r\n if (parent && compare(parent, node) > 0) {\r\n heap[parentIndex] = node\r\n heap[index] = parent\r\n index = parentIndex\r\n } else return\r\n }\r\n}\r\n\r\nfunction pop (heap) {\r\n let first = heap[0]\r\n if (first) {\r\n let last = heap.pop()\r\n if (first !== last) {\r\n heap[0] = last\r\n let index = 0\r\n let length = heap.length\r\n\r\n while (index < length) {\r\n let leftIndex = (index + 1) * 2 - 1\r\n let left = heap[leftIndex]\r\n let rightIndex = leftIndex + 1\r\n let right = heap[rightIndex]\r\n\r\n if (left && compare(left, last) < 0) {\r\n if (right && compare(right, left) < 0) {\r\n heap[index] = right\r\n heap[rightIndex] = last\r\n index = rightIndex\r\n } else {\r\n heap[index] = left\r\n heap[leftIndex] = last\r\n index = leftIndex\r\n }\r\n } else if (right && compare(right, last) < 0) {\r\n heap[index] = right\r\n heap[rightIndex] = last\r\n index = rightIndex\r\n } else return\r\n }\r\n }\r\n return first\r\n } else return null\r\n}\r\n\r\nfunction compare (a, b) {\r\n return a.dueTime - b.dueTime\r\n}\r\n\r\nfunction peek (heap) {\r\n return heap[0] || null\r\n}\r\n\r\nexport { push, peek, pop }\r\n","import { push, pop, peek } from './heapify'\n\nlet taskQueue = []\nlet currentTask = null\nlet currentCallback = null\nlet inMC = false\nlet frameDeadline = 0\nconst frameLength = 5\n\nexport function scheduleCallback (callback) {\n const currentTime = getTime()\n let startTime = currentTime\n let timeout = 5000 // idle\n let dueTime = startTime + timeout\n\n let newTask = {\n callback,\n startTime,\n dueTime\n }\n\n push(taskQueue, newTask)\n\n currentCallback = flushWork\n\n if (!inMC) planWork() && (inMC = true)\n\n return newTask\n}\n\nfunction flushWork (iniTime) {\n try {\n return workLoop(iniTime)\n } finally {\n currentTask = null\n }\n}\n\nfunction workLoop (iniTime) {\n let currentTime = iniTime\n currentTask = peek(taskQueue)\n\n while (currentTask) {\n if (currentTask.dueTime > currentTime && shouldYeild()) break\n let callback = currentTask.callback\n if (callback) {\n currentTask.callback = null\n let next = callback()\n if (next) {\n currentTask.callback = next\n } else {\n if (currentTask === peek(taskQueue)) {\n pop(taskQueue)\n }\n }\n } else pop(taskQueue)\n currentTask = peek(taskQueue)\n }\n\n if (currentTask) {\n return true\n } else {\n return false\n }\n\n // return !!currentTask\n}\n\nfunction performWork () {\n if (currentCallback) {\n let currentTime = getTime()\n frameDeadline = currentTime + frameLength\n let moreWork = currentCallback(currentTime)\n if (!moreWork) {\n inMC = false\n currentCallback = null\n } else {\n planWork()\n }\n } else inMC = false\n}\n\nconst planWork = (() => {\n if (typeof MessageChannel !== 'undefined') {\n const channel = new MessageChannel()\n const port = channel.port2\n channel.port1.onmessage = performWork\n\n return () => port.postMessage(null)\n }\n\n return () => setTimeout(performWork, 0)\n})()\n\nexport function shouldYeild () {\n return getTime() > frameDeadline\n}\n\nconst getTime = () => performance.now()\n","import { createElement, updateElement } from './dom'\r\nimport { resetCursor } from './hooks'\r\nimport { scheduleCallback, shouldYeild } from './scheduler'\r\n\r\nconst options = {}\r\nexport const [ROOT, HOST, HOOK, SVG, PLACE, UPDATE, DELETE] = [0, 1, 2, 3, 4, 5, 6]\r\n\r\nlet pendingCommit = null\r\nexport let WIP = null\r\nexport let currentFiber = null\r\n\r\nfunction render (vnode, node, done) {\r\n let rootFiber = {\r\n tag: ROOT,\r\n node,\r\n props: { children: vnode },\r\n done\r\n }\r\n scheduleWork(rootFiber)\r\n}\r\n\r\nfunction scheduleWork (fiber, lock) {\r\n fiber.lock = lock\r\n WIP = fiber\r\n scheduleCallback(performWork)\r\n}\r\n\r\nfunction performWork () {\r\n while (WIP && !shouldYeild()) {\r\n WIP = performWIP(WIP)\r\n }\r\n\r\n if (pendingCommit) {\r\n commitWork(pendingCommit)\r\n return null\r\n }\r\n\r\n return performWork.bind(null)\r\n}\r\n\r\nfunction performWIP (WIP) {\r\n WIP.patches = []\r\n WIP.parentNode = getParentNode(WIP)\r\n WIP.tag == HOOK ? updateHOOK(WIP) : updateHost(WIP)\r\n if (WIP.child) return WIP.child\r\n while (WIP) {\r\n completeWork(WIP)\r\n if (WIP.sibling && WIP.lock == null) return WIP.sibling\r\n WIP = WIP.parent\r\n }\r\n}\r\n\r\nfunction updateHOOK (WIP) {\r\n WIP.props = WIP.props || {}\r\n WIP.state = WIP.state || {}\r\n WIP.effect = {}\r\n WIP.deps = {}\r\n WIP.memo = {}\r\n currentFiber = WIP\r\n resetCursor()\r\n reconcileChildren(WIP, WIP.type(WIP.props))\r\n}\r\n\r\nfunction updateHost (WIP) {\r\n if (!WIP.node) {\r\n if (WIP.type === 'svg') WIP.tag = SVG\r\n WIP.node = createElement(WIP)\r\n }\r\n let p = WIP.parentNode || {}\r\n WIP.insertPoint = p.last || null\r\n p.last = WIP\r\n WIP.node.last = null\r\n reconcileChildren(WIP, WIP.props.children)\r\n}\r\nfunction getParentNode (fiber) {\r\n while ((fiber = fiber.parent)) {\r\n if (fiber.tag < HOOK) return fiber.node\r\n }\r\n}\r\n\r\nfunction reconcileChildren (WIP, children) {\r\n const oldFibers = WIP.kids\r\n const newFibers = (WIP.kids = hashfy(children, WIP.kids))\r\n let reused = {}\r\n\r\n for (const k in oldFibers) {\r\n let newFiber = newFibers[k]\r\n let oldFiber = oldFibers[k]\r\n\r\n if (newFiber && newFiber.type === oldFiber.type) {\r\n reused[k] = oldFiber\r\n } else {\r\n oldFiber.patchTag = DELETE\r\n WIP.patches.push(oldFiber)\r\n }\r\n }\r\n\r\n let prevFiber = null\r\n let alternate = null\r\n\r\n for (const k in newFibers) {\r\n let newFiber = newFibers[k]\r\n let oldFiber = reused[k]\r\n\r\n if (oldFiber) {\r\n alternate = createFiber(oldFiber, UPDATE)\r\n newFiber.patchTag = UPDATE\r\n newFiber = { ...alternate, ...newFiber }\r\n newFiber.alternate = alternate\r\n if (shouldPlace(newFiber)) {\r\n newFiber.patchTag = PLACE\r\n }\r\n } else {\r\n newFiber = createFiber(newFiber, PLACE)\r\n }\r\n\r\n newFibers[k] = newFiber\r\n newFiber.parent = WIP\r\n\r\n if (prevFiber) {\r\n prevFiber.sibling = newFiber\r\n } else {\r\n if (WIP.tag === SVG) newFiber.tag = SVG\r\n WIP.child = newFiber\r\n }\r\n prevFiber = newFiber\r\n }\r\n if (prevFiber) prevFiber.sibling = null\r\n if (WIP.lock) WIP.lock = false\r\n}\r\n\r\nfunction shouldPlace (fiber) {\r\n let p = fiber.parent\r\n if (p.tag === HOOK) return p.key && !p.lock\r\n return fiber.key\r\n}\r\n\r\nfunction completeWork (fiber) {\r\n if (fiber.parent) {\r\n fiber.parent.patches.push(...fiber.patches, fiber)\r\n } else {\r\n pendingCommit = fiber\r\n }\r\n}\r\n\r\nfunction commitWork (WIP) {\r\n WIP.patches.forEach(p => commit(p))\r\n WIP.done && WIP.done()\r\n WIP = pendingCommit = null\r\n}\r\n\r\nfunction applyEffect (fiber) {\r\n fiber.pending = fiber.pending || {}\r\n for (const k in fiber.effect) {\r\n const pend = fiber.pending[k]\r\n pend && pend()\r\n const after = fiber.effect[k]()\r\n after && (fiber.pending[k] = after)\r\n }\r\n fiber.effect = null\r\n}\r\n\r\nfunction commit (fiber) {\r\n let tag = fiber.patchTag\r\n let parent = fiber.parentNode\r\n let dom = fiber.node\r\n let ref = fiber.ref\r\n\r\n if (tag === DELETE) {\r\n cleanup(fiber)\r\n while (fiber.tag === HOOK) fiber = fiber.child\r\n parent.removeChild(fiber.node)\r\n } else if (fiber.tag === HOOK) {\r\n applyEffect(fiber)\r\n } else if (tag === UPDATE) {\r\n updateElement(dom, fiber.alternate.props, fiber.props)\r\n } else {\r\n let point = fiber.insertPoint ? fiber.insertPoint.node : null\r\n let after = point ? point.nextSibling : parent.firstChild\r\n if (after === dom) return\r\n if (after === null && dom === parent.lastChild) return\r\n parent.insertBefore(dom, after)\r\n }\r\n\r\n if (ref) isFn(ref) ? ref(dom) : (ref.current = dom)\r\n fiber.patches = fiber.parent.patches = []\r\n}\r\n\r\nfunction cleanup (fiber) {\r\n let pend = fiber.pending\r\n for (const k in pend) pend[k]()\r\n fiber.pending = null\r\n}\r\n\r\nfunction createFiber (vnode, tag) {\r\n vnode.tag = isFn(vnode.type) ? HOOK : HOST\r\n vnode.patchTag = tag\r\n return vnode\r\n}\r\n\r\nconst arrayfy = arr => (!arr ? [] : arr.pop ? arr : [arr])\r\n\r\nfunction hashfy (arr) {\r\n let out = {}\r\n let i = 0\r\n let j = 0\r\n arrayfy(arr).forEach(item => {\r\n if (item.pop) {\r\n item.forEach(item => {\r\n item.key ? (out['.' + i + '.' + item.key] = item) : (out['.' + i + '.' + j] = item) && j++\r\n })\r\n i++\r\n } else {\r\n item.key ? (out['.' + item.key] = item) : (out['.' + i] = item) && i++\r\n }\r\n })\r\n return out\r\n}\r\n\r\nconst isFn = fn => typeof fn === 'function'\r\n\r\nfunction getHook () {\r\n return currentFiber || {}\r\n}\r\n\r\nexport { render, scheduleWork, options, getHook }\r\n"],"names":["h","type","attrs","props","key","ref","children","i","arguments","length","vnode","push","nodeValue","updateElement","dom","oldProps","newProps","name","oldValue","newValue","k","slice","toLowerCase","removeEventListener","addEventListener","SVGElement","removeAttribute","setAttribute","createElement","fiber","document","createTextNode","tag","SVG","createElementNS","cursor","update","reducer","value","this","state","scheduleWork","resetCursor","useState","initState","useReducer","wip","getHook","getKey","setter","bind","useEffect","cb","deps","isChanged","Edeps","effect","useCallback","useMemo","Mdeps","memo","useRef","current","a","b","some","arg","index","heap","node","parentIndex","Math","floor","parent","compare","pop","first","last","leftIndex","left","rightIndex","right","dueTime","peek","taskQueue","currentTask","currentCallback","inMC","frameDeadline","frameLength","scheduleCallback","callback","currentTime","getTime","newTask","startTime","flushWork","planWork","iniTime","workLoop","shouldYeild","next","performWork","MessageChannel","channel","port","port2","port1","onmessage","postMessage","setTimeout","performance","now","options","ROOT","HOST","HOOK","PLACE","UPDATE","DELETE","pendingCommit","WIP","currentFiber","render","done","lock","performWIP","commitWork","patches","parentNode","getParentNode","updateHOOK","updateHost","child","completeWork","sibling","reconcileChildren","p","insertPoint","oldFibers","kids","newFibers","hashfy","reused","newFiber","oldFiber","patchTag","prevFiber","alternate","createFiber","shouldPlace","forEach","commit","applyEffect","pending","pend","after","cleanup","removeChild","point","nextSibling","firstChild","lastChild","insertBefore","isFn","arrayfy","arr","out","j","item","fn"],"mappings":"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"}
\ No newline at end of file

dist/fre-umd.js

@@ -78,7 +78,8 @@
return useReducer(null, initState)
}
function useReducer (reducer, initState) {
- let { wip, key } = getCurrent();
+ let wip = getHook();
+ let key = getKey();
let setter = update.bind(wip, key, reducer);
if (key in wip.state) {
return [wip.state[key], setter]
@@ -89,17 +90,19 @@
}
function useEffect (cb, deps) {
- let { wip, key } = getCurrent();
- if (isChanged(wip.deps[key], deps)) {
+ let wip = getHook();
+ let key = getKey();
+ if (isChanged(wip.Edeps, deps)) {
wip.effect[key] = useCallback(cb, deps);
- wip.deps[key] = deps;
+ wip.Edeps = deps;
}
}
function useMemo (cb, deps) {
- let { wip, key } = getCurrent();
- if (isChanged(wip.deps[key], deps)) {
- wip.deps[key] = deps;
+ let wip = getHook();
+ let key = getKey();
+ if (isChanged(wip.Mdeps, deps)) {
+ wip.Mdeps = deps;
return (wip.memo[key] = cb())
}
return wip.memo[key]
@@ -117,11 +120,10 @@
return !a || b.some((arg, index) => arg !== a[index])
}
- function getCurrent () {
- return {
- wip: currentFiber,
- key: '$' + cursor && cursor++
- }
+ function getKey () {
+ let key = '$' + cursor;
+ cursor ++;
+ return key
}
function push (heap, node) {
@@ -499,6 +501,10 @@
const isFn = fn => typeof fn === 'function';
+ function getHook () {
+ return currentFiber || {}
+ }
+
exports.createElement = h;
exports.h = h;
exports.options = options;

dist/fre-umd.js.map

@@ -1 +1 @@
-{"version":3,"file":"fre-umd.js","sources":["../src/h.js","../src/dom.js","../src/hooks.js","../src/heapify.js","../src/scheduler.js","../src/reconciler.js"],"sourcesContent":["export function h (type, attrs) {\n let props = attrs || {}\n let key = props.key || null\n let ref = props.ref || null\n let children = []\n\n for (let i = 2; i < arguments.length; i++) {\n let vnode = arguments[i]\n if (vnode == null || vnode === true || vnode === false) {\n } else if (typeof vnode === 'number' || typeof vnode === 'string') {\n children.push({ type: 'text', props: { nodeValue: vnode } })\n } else {\n children.push(vnode)\n }\n }\n\n if (children.length) {\n props.children = children.length === 1 ? children[0] : children\n }\n\n delete props.key\n delete props.ref\n return { type, props, key, ref }\n}\n","import { SVG } from './reconciler'\n\nexport function updateElement (dom, oldProps, newProps) {\n for (let name in { ...oldProps, ...newProps }) {\n let oldValue = oldProps[name]\n let newValue = newProps[name]\n\n if (oldValue == newValue || name === 'children') {\n } else if (name === 'style') {\n for (const k in { ...oldValue, ...newValue }) {\n if (!(oldValue && newValue && oldValue[k] === newValue[k])) {\n dom[name][k] = newValue && newValue[k] || ''\n }\n }\n } else if (name[0] === 'o' && name[1] === 'n') {\n name = name.slice(2).toLowerCase()\n if (oldValue) dom.removeEventListener(name, oldValue)\n dom.addEventListener(name, newValue)\n } else if (name in dom && !(dom instanceof SVGElement)) {\n dom[name] = newValue == null ? '' : newValue\n } else if (newValue == null || newValue === false) {\n dom.removeAttribute(name)\n } else {\n dom.setAttribute(name, newValue)\n }\n }\n}\n\nexport function createElement (fiber) {\n const dom =\n fiber.type === 'text'\n ? document.createTextNode('')\n : fiber.tag === SVG\n ? document.createElementNS('http://www.w3.org/2000/svg', fiber.type)\n : document.createElement(fiber.type)\n updateElement(dom, {}, fiber.props)\n return dom\n}\n","import { scheduleWork, currentFiber } from './reconciler'\nlet cursor = 0\n\nfunction update (key, reducer, value) {\n value = reducer ? reducer(this.state[key], value) : value\n this.state[key] = value\n scheduleWork(this, true)\n}\nexport function resetCursor () {\n cursor = 0\n}\nexport function useState (initState) {\n return useReducer(null, initState)\n}\nexport function useReducer (reducer, initState) {\n let { wip, key } = getCurrent()\n let setter = update.bind(wip, key, reducer)\n if (key in wip.state) {\n return [wip.state[key], setter]\n } else {\n wip.state[key] = initState\n return [initState, setter]\n }\n}\n\nexport function useEffect (cb, deps) {\n let { wip, key } = getCurrent()\n if (isChanged(wip.deps[key], deps)) {\n wip.effect[key] = useCallback(cb, deps)\n wip.deps[key] = deps\n }\n}\n\nexport function useMemo (cb, deps) {\n let { wip, key } = getCurrent()\n if (isChanged(wip.deps[key], deps)) {\n wip.deps[key] = deps\n return (wip.memo[key] = cb())\n }\n return wip.memo[key]\n}\n\nexport function useCallback (cb, deps) {\n return useMemo(() => cb, deps)\n}\n\nexport function useRef (current) {\n return { current }\n}\n\nfunction isChanged (a, b) {\n return !a || b.some((arg, index) => arg !== a[index])\n}\n\nfunction getCurrent () {\n return {\n wip: currentFiber,\n key: '$' + cursor && cursor++\n }\n}\n","function push (heap, node) {\r\n let index = heap.length\r\n heap.push(node)\r\n\r\n while (true) {\r\n let parentIndex = Math.floor((index - 1) / 2)\r\n let parent = heap[parentIndex]\r\n\r\n if (parent && compare(parent, node) > 0) {\r\n heap[parentIndex] = node\r\n heap[index] = parent\r\n index = parentIndex\r\n } else return\r\n }\r\n}\r\n\r\nfunction pop (heap) {\r\n let first = heap[0]\r\n if (first) {\r\n let last = heap.pop()\r\n if (first !== last) {\r\n heap[0] = last\r\n let index = 0\r\n let length = heap.length\r\n\r\n while (index < length) {\r\n let leftIndex = (index + 1) * 2 - 1\r\n let left = heap[leftIndex]\r\n let rightIndex = leftIndex + 1\r\n let right = heap[rightIndex]\r\n\r\n if (left && compare(left, last) < 0) {\r\n if (right && compare(right, left) < 0) {\r\n heap[index] = right\r\n heap[rightIndex] = last\r\n index = rightIndex\r\n } else {\r\n heap[index] = left\r\n heap[leftIndex] = last\r\n index = leftIndex\r\n }\r\n } else if (right && compare(right, last) < 0) {\r\n heap[index] = right\r\n heap[rightIndex] = last\r\n index = rightIndex\r\n } else return\r\n }\r\n }\r\n return first\r\n } else return null\r\n}\r\n\r\nfunction compare (a, b) {\r\n return a.dueTime - b.dueTime\r\n}\r\n\r\nfunction peek (heap) {\r\n return heap[0] || null\r\n}\r\n\r\nexport { push, peek, pop }\r\n","import { push, pop, peek } from './heapify'\n\nlet taskQueue = []\nlet currentTask = null\nlet currentCallback = null\nlet inMC = false\nlet frameDeadline = 0\nconst frameLength = 5\n\nexport function scheduleCallback (callback) {\n const currentTime = getTime()\n let startTime = currentTime\n let timeout = 5000 // idle\n let dueTime = startTime + timeout\n\n let newTask = {\n callback,\n startTime,\n dueTime\n }\n\n push(taskQueue, newTask)\n\n currentCallback = flushWork\n\n if (!inMC) planWork() && (inMC = true)\n\n return newTask\n}\n\nfunction flushWork (iniTime) {\n try {\n return workLoop(iniTime)\n } finally {\n currentTask = null\n }\n}\n\nfunction workLoop (iniTime) {\n let currentTime = iniTime\n currentTask = peek(taskQueue)\n\n while (currentTask) {\n if (currentTask.dueTime > currentTime && shouldYeild()) break\n let callback = currentTask.callback\n if (callback) {\n currentTask.callback = null\n let next = callback()\n if (next) {\n currentTask.callback = next\n } else {\n if (currentTask === peek(taskQueue)) {\n pop(taskQueue)\n }\n }\n } else pop(taskQueue)\n currentTask = peek(taskQueue)\n }\n\n if (currentTask) {\n return true\n } else {\n return false\n }\n\n // return !!currentTask\n}\n\nfunction performWork () {\n if (currentCallback) {\n let currentTime = getTime()\n frameDeadline = currentTime + frameLength\n let moreWork = currentCallback(currentTime)\n if (!moreWork) {\n inMC = false\n currentCallback = null\n } else {\n planWork()\n }\n } else inMC = false\n}\n\nconst planWork = (() => {\n if (typeof MessageChannel !== 'undefined') {\n const channel = new MessageChannel()\n const port = channel.port2\n channel.port1.onmessage = performWork\n\n return () => port.postMessage(null)\n }\n\n return () => setTimeout(performWork, 0)\n})()\n\nexport function shouldYeild () {\n return getTime() > frameDeadline\n}\n\nconst getTime = () => performance.now()\n","import { createElement, updateElement } from './dom'\r\nimport { resetCursor } from './hooks'\r\nimport { scheduleCallback, shouldYeild } from './scheduler'\r\n\r\nconst options = {}\r\nexport const [ROOT, HOST, HOOK, SVG, PLACE, UPDATE, DELETE] = [0, 1, 2, 3, 4, 5, 6]\r\n\r\nlet pendingCommit = null\r\nexport let WIP = null\r\nexport let currentFiber = null\r\n\r\nfunction render (vnode, node, done) {\r\n let rootFiber = {\r\n tag: ROOT,\r\n node,\r\n props: { children: vnode },\r\n done\r\n }\r\n scheduleWork(rootFiber)\r\n}\r\n\r\nfunction scheduleWork (fiber, lock) {\r\n fiber.lock = lock\r\n WIP = fiber\r\n scheduleCallback(performWork)\r\n}\r\n\r\nfunction performWork () {\r\n while (WIP && !shouldYeild()) {\r\n WIP = performWIP(WIP)\r\n }\r\n\r\n if (pendingCommit) {\r\n commitWork(pendingCommit)\r\n return null\r\n }\r\n\r\n return performWork.bind(null)\r\n}\r\n\r\nfunction performWIP (WIP) {\r\n WIP.patches = []\r\n WIP.parentNode = getParentNode(WIP)\r\n WIP.tag == HOOK ? updateHOOK(WIP) : updateHost(WIP)\r\n if (WIP.child) return WIP.child\r\n while (WIP) {\r\n completeWork(WIP)\r\n if (WIP.sibling && WIP.lock == null) return WIP.sibling\r\n WIP = WIP.parent\r\n }\r\n}\r\n\r\nfunction updateHOOK (WIP) {\r\n WIP.props = WIP.props || {}\r\n WIP.state = WIP.state || {}\r\n WIP.effect = {}\r\n WIP.deps = {}\r\n WIP.memo = {}\r\n currentFiber = WIP\r\n resetCursor()\r\n reconcileChildren(WIP, WIP.type(WIP.props))\r\n}\r\n\r\nfunction updateHost (WIP) {\r\n if (!WIP.node) {\r\n if (WIP.type === 'svg') WIP.tag = SVG\r\n WIP.node = createElement(WIP)\r\n }\r\n let p = WIP.parentNode || {}\r\n WIP.insertPoint = p.last || null\r\n p.last = WIP\r\n WIP.node.last = null\r\n reconcileChildren(WIP, WIP.props.children)\r\n}\r\nfunction getParentNode (fiber) {\r\n while ((fiber = fiber.parent)) {\r\n if (fiber.tag < HOOK) return fiber.node\r\n }\r\n}\r\n\r\nfunction reconcileChildren (WIP, children) {\r\n const oldFibers = WIP.kids\r\n const newFibers = (WIP.kids = hashfy(children, WIP.kids))\r\n let reused = {}\r\n\r\n for (const k in oldFibers) {\r\n let newFiber = newFibers[k]\r\n let oldFiber = oldFibers[k]\r\n\r\n if (newFiber && newFiber.type === oldFiber.type) {\r\n reused[k] = oldFiber\r\n } else {\r\n oldFiber.patchTag = DELETE\r\n WIP.patches.push(oldFiber)\r\n }\r\n }\r\n\r\n let prevFiber = null\r\n let alternate = null\r\n\r\n for (const k in newFibers) {\r\n let newFiber = newFibers[k]\r\n let oldFiber = reused[k]\r\n\r\n if (oldFiber) {\r\n alternate = createFiber(oldFiber, UPDATE)\r\n newFiber.patchTag = UPDATE\r\n newFiber = { ...alternate, ...newFiber }\r\n newFiber.alternate = alternate\r\n if (shouldPlace(newFiber)) {\r\n newFiber.patchTag = PLACE\r\n }\r\n } else {\r\n newFiber = createFiber(newFiber, PLACE)\r\n }\r\n\r\n newFibers[k] = newFiber\r\n newFiber.parent = WIP\r\n\r\n if (prevFiber) {\r\n prevFiber.sibling = newFiber\r\n } else {\r\n if (WIP.tag === SVG) newFiber.tag = SVG\r\n WIP.child = newFiber\r\n }\r\n prevFiber = newFiber\r\n }\r\n if (prevFiber) prevFiber.sibling = null\r\n if (WIP.lock) WIP.lock = false\r\n}\r\n\r\nfunction shouldPlace (fiber) {\r\n let p = fiber.parent\r\n if (p.tag === HOOK) return p.key && !p.lock\r\n return fiber.key\r\n}\r\n\r\nfunction completeWork (fiber) {\r\n if (fiber.parent) {\r\n fiber.parent.patches.push(...fiber.patches, fiber)\r\n } else {\r\n pendingCommit = fiber\r\n }\r\n}\r\n\r\nfunction commitWork (WIP) {\r\n WIP.patches.forEach(p => commit(p))\r\n WIP.done && WIP.done()\r\n WIP = pendingCommit = null\r\n}\r\n\r\nfunction applyEffect (fiber) {\r\n fiber.pending = fiber.pending || {}\r\n for (const k in fiber.effect) {\r\n const pend = fiber.pending[k]\r\n pend && pend()\r\n const after = fiber.effect[k]()\r\n after && (fiber.pending[k] = after)\r\n }\r\n fiber.effect = null\r\n}\r\n\r\nfunction commit (fiber) {\r\n let tag = fiber.patchTag\r\n let parent = fiber.parentNode\r\n let dom = fiber.node\r\n let ref = fiber.ref\r\n\r\n if (tag === DELETE) {\r\n cleanup(fiber)\r\n while (fiber.tag === HOOK) fiber = fiber.child\r\n parent.removeChild(fiber.node)\r\n } else if (fiber.tag === HOOK) {\r\n applyEffect(fiber)\r\n } else if (tag === UPDATE) {\r\n updateElement(dom, fiber.alternate.props, fiber.props)\r\n } else {\r\n let point = fiber.insertPoint ? fiber.insertPoint.node : null\r\n let after = point ? point.nextSibling : parent.firstChild\r\n if (after === dom) return\r\n if (after === null && dom === parent.lastChild) return\r\n parent.insertBefore(dom, after)\r\n }\r\n\r\n if (ref) isFn(ref) ? ref(dom) : (ref.current = dom)\r\n fiber.patches = fiber.parent.patches = []\r\n}\r\n\r\nfunction cleanup (fiber) {\r\n let pend = fiber.pending\r\n for (const k in pend) pend[k]()\r\n fiber.pending = null\r\n}\r\n\r\nfunction createFiber (vnode, tag) {\r\n vnode.tag = isFn(vnode.type) ? HOOK : HOST\r\n vnode.patchTag = tag\r\n return vnode\r\n}\r\n\r\nconst arrayfy = arr => (!arr ? [] : arr.pop ? arr : [arr])\r\n\r\nfunction hashfy (arr) {\r\n let out = {}\r\n let i = 0\r\n let j = 0\r\n arrayfy(arr).forEach(item => {\r\n if (item.pop) {\r\n item.forEach(item => {\r\n item.key ? (out['.' + i + '.' + item.key] = item) : (out['.' + i + '.' + j] = item) && j++\r\n })\r\n i++\r\n } else {\r\n item.key ? (out['.' + item.key] = item) : (out['.' + i] = item) && i++\r\n }\r\n })\r\n return out\r\n}\r\n\r\nconst isFn = fn => typeof fn === 'function'\r\n\r\nexport { render, scheduleWork, options }\r\n"],"names":["performWork"],"mappings":";;;;;;EAAO,SAAS,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE;EAChC,EAAE,IAAI,KAAK,GAAG,KAAK,IAAI,GAAE;EACzB,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,KAAI;EAC7B,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,IAAI,KAAI;EAC7B,EAAE,IAAI,QAAQ,GAAG,GAAE;;EAEnB,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;EAC7C,IAAI,IAAI,KAAK,GAAG,SAAS,CAAC,CAAC,EAAC;EAC5B,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,EAAE,CACvD,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;EACvE,MAAM,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAC;EAClE,KAAK,MAAM;EACX,MAAM,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAC;EAC1B,KAAK;EACL,GAAG;;EAEH,EAAE,IAAI,QAAQ,CAAC,MAAM,EAAE;EACvB,IAAI,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,SAAQ;EACnE,GAAG;;EAEH,EAAE,OAAO,KAAK,CAAC,IAAG;EAClB,EAAE,OAAO,KAAK,CAAC,IAAG;EAClB,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE;EAClC,CAAC;;ECrBM,SAAS,aAAa,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE;EACxD,EAAE,KAAK,IAAI,IAAI,IAAI,EAAE,GAAG,QAAQ,EAAE,GAAG,QAAQ,EAAE,EAAE;EACjD,IAAI,IAAI,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAC;EACjC,IAAI,IAAI,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAC;;EAEjC,IAAI,IAAI,QAAQ,IAAI,QAAQ,IAAI,IAAI,KAAK,UAAU,EAAE,CAChD,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE;EACjC,MAAM,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,QAAQ,EAAE,GAAG,QAAQ,EAAE,EAAE;EACpD,QAAQ,IAAI,EAAE,QAAQ,IAAI,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;EACpE,UAAU,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAE;EACtD,SAAS;EACT,OAAO;EACP,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;EACnD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,GAAE;EACxC,MAAM,IAAI,QAAQ,EAAE,GAAG,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAC;EAC3D,MAAM,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAC;EAC1C,KAAK,MAAM,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE,GAAG,YAAY,UAAU,CAAC,EAAE;EAC5D,MAAM,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,IAAI,IAAI,GAAG,EAAE,GAAG,SAAQ;EAClD,KAAK,MAAM,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK,KAAK,EAAE;EACvD,MAAM,GAAG,CAAC,eAAe,CAAC,IAAI,EAAC;EAC/B,KAAK,MAAM;EACX,MAAM,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAC;EACtC,KAAK;EACL,GAAG;EACH,CAAC;;AAED,EAAO,SAAS,aAAa,EAAE,KAAK,EAAE;EACtC,EAAE,MAAM,GAAG;EACX,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;EACzB,QAAQ,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;EACnC,QAAQ,KAAK,CAAC,GAAG,KAAK,GAAG;EACzB,UAAU,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,KAAK,CAAC,IAAI,CAAC;EAC5E,UAAU,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,EAAC;EAC5C,EAAE,aAAa,CAAC,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,KAAK,EAAC;EACrC,EAAE,OAAO,GAAG;EACZ,CAAC;;ECpCD,IAAI,MAAM,GAAG,EAAC;;EAEd,SAAS,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE;EACtC,EAAE,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,MAAK;EAC3D,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAK;EACzB,EAAE,YAAY,CAAC,IAAI,EAAE,IAAI,EAAC;EAC1B,CAAC;AACD,EAAO,SAAS,WAAW,IAAI;EAC/B,EAAE,MAAM,GAAG,EAAC;EACZ,CAAC;AACD,EAAO,SAAS,QAAQ,EAAE,SAAS,EAAE;EACrC,EAAE,OAAO,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC;EACpC,CAAC;AACD,EAAO,SAAS,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE;EAChD,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,UAAU,GAAE;EACjC,EAAE,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAC;EAC7C,EAAE,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE;EACxB,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;EACnC,GAAG,MAAM;EACT,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,UAAS;EAC9B,IAAI,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC;EAC9B,GAAG;EACH,CAAC;;AAED,EAAO,SAAS,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE;EACrC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,UAAU,GAAE;EACjC,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE;EACtC,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,EAAE,EAAE,IAAI,EAAC;EAC3C,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAI;EACxB,GAAG;EACH,CAAC;;AAED,EAAO,SAAS,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;EACnC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,UAAU,GAAE;EACjC,EAAE,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,EAAE;EACtC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAI;EACxB,IAAI,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC;EACjC,GAAG;EACH,EAAE,OAAO,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;EACtB,CAAC;;AAED,EAAO,SAAS,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE;EACvC,EAAE,OAAO,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC;EAChC,CAAC;;AAED,EAAO,SAAS,MAAM,EAAE,OAAO,EAAE;EACjC,EAAE,OAAO,EAAE,OAAO,EAAE;EACpB,CAAC;;EAED,SAAS,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE;EAC1B,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC;EACvD,CAAC;;EAED,SAAS,UAAU,IAAI;EACvB,EAAE,OAAO;EACT,IAAI,GAAG,EAAE,YAAY;EACrB,IAAI,GAAG,EAAE,GAAG,GAAG,MAAM,IAAI,MAAM,EAAE;EACjC,GAAG;EACH,CAAC;;EC3DD,SAAS,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;EAC3B,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,OAAM;EACzB,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAC;;EAEjB,EAAE,OAAO,IAAI,EAAE;EACf,IAAI,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,EAAC;EACjD,IAAI,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,EAAC;;EAElC,IAAI,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;EAC7C,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,KAAI;EAC9B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,OAAM;EAC1B,MAAM,KAAK,GAAG,YAAW;EACzB,KAAK,MAAM,MAAM;EACjB,GAAG;EACH,CAAC;;EAED,SAAS,GAAG,EAAE,IAAI,EAAE;EACpB,EAAE,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,EAAC;EACrB,EAAE,IAAI,KAAK,EAAE;EACb,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,GAAE;EACzB,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE;EACxB,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,KAAI;EACpB,MAAM,IAAI,KAAK,GAAG,EAAC;EACnB,MAAM,IAAI,MAAM,GAAG,IAAI,CAAC,OAAM;;EAE9B,MAAM,OAAO,KAAK,GAAG,MAAM,EAAE;EAC7B,QAAQ,IAAI,SAAS,GAAG,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,EAAC;EAC3C,QAAQ,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,EAAC;EAClC,QAAQ,IAAI,UAAU,GAAG,SAAS,GAAG,EAAC;EACtC,QAAQ,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,EAAC;;EAEpC,QAAQ,IAAI,IAAI,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;EAC7C,UAAU,IAAI,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;EACjD,YAAY,IAAI,CAAC,KAAK,CAAC,GAAG,MAAK;EAC/B,YAAY,IAAI,CAAC,UAAU,CAAC,GAAG,KAAI;EACnC,YAAY,KAAK,GAAG,WAAU;EAC9B,WAAW,MAAM;EACjB,YAAY,IAAI,CAAC,KAAK,CAAC,GAAG,KAAI;EAC9B,YAAY,IAAI,CAAC,SAAS,CAAC,GAAG,KAAI;EAClC,YAAY,KAAK,GAAG,UAAS;EAC7B,WAAW;EACX,SAAS,MAAM,IAAI,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;EACtD,UAAU,IAAI,CAAC,KAAK,CAAC,GAAG,MAAK;EAC7B,UAAU,IAAI,CAAC,UAAU,CAAC,GAAG,KAAI;EACjC,UAAU,KAAK,GAAG,WAAU;EAC5B,SAAS,MAAM,MAAM;EACrB,OAAO;EACP,KAAK;EACL,IAAI,OAAO,KAAK;EAChB,GAAG,MAAM,OAAO,IAAI;EACpB,CAAC;;EAED,SAAS,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE;EACxB,EAAE,OAAO,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO;EAC9B,CAAC;;EAED,SAAS,IAAI,EAAE,IAAI,EAAE;EACrB,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI;EACxB,CAAC;;ECxDD,IAAI,SAAS,GAAG,GAAE;EAClB,IAAI,WAAW,GAAG,KAAI;EACtB,IAAI,eAAe,GAAG,KAAI;EAC1B,IAAI,IAAI,GAAG,MAAK;EAChB,IAAI,aAAa,GAAG,EAAC;EACrB,MAAM,WAAW,GAAG,EAAC;;AAErB,EAAO,SAAS,gBAAgB,EAAE,QAAQ,EAAE;EAC5C,EAAE,MAAM,WAAW,GAAG,OAAO,GAAE;EAC/B,EAAE,IAAI,SAAS,GAAG,YAAW;EAC7B,EAAE,IAAI,OAAO,GAAG,KAAI;EACpB,EAAE,IAAI,OAAO,GAAG,SAAS,GAAG,QAAO;;EAEnC,EAAE,IAAI,OAAO,GAAG;EAChB,IAAI,QAAQ;EACZ,IAAI,SAAS;EACb,IAAI,OAAO;EACX,IAAG;;EAEH,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAC;;EAE1B,EAAE,eAAe,GAAG,UAAS;;EAE7B,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,IAAI,GAAG,IAAI,EAAC;;EAExC,EAAE,OAAO,OAAO;EAChB,CAAC;;EAED,SAAS,SAAS,EAAE,OAAO,EAAE;EAC7B,EAAE,IAAI;EACN,IAAI,OAAO,QAAQ,CAAC,OAAO,CAAC;EAC5B,GAAG,SAAS;EACZ,IAAI,WAAW,GAAG,KAAI;EACtB,GAAG;EACH,CAAC;;EAED,SAAS,QAAQ,EAAE,OAAO,EAAE;EAC5B,EAAE,IAAI,WAAW,GAAG,QAAO;EAC3B,EAAE,WAAW,GAAG,IAAI,CAAC,SAAS,EAAC;;EAE/B,EAAE,OAAO,WAAW,EAAE;EACtB,IAAI,IAAI,WAAW,CAAC,OAAO,GAAG,WAAW,IAAI,WAAW,EAAE,EAAE,KAAK;EACjE,IAAI,IAAI,QAAQ,GAAG,WAAW,CAAC,SAAQ;EACvC,IAAI,IAAI,QAAQ,EAAE;EAClB,MAAM,WAAW,CAAC,QAAQ,GAAG,KAAI;EACjC,MAAM,IAAI,IAAI,GAAG,QAAQ,GAAE;EAC3B,MAAM,IAAI,IAAI,EAAE;EAChB,QAAQ,WAAW,CAAC,QAAQ,GAAG,KAAI;EACnC,OAAO,MAAM;EACb,QAAQ,IAAI,WAAW,KAAK,IAAI,CAAC,SAAS,CAAC,EAAE;EAC7C,UAAU,GAAG,CAAC,SAAS,EAAC;EACxB,SAAS;EACT,OAAO;EACP,KAAK,MAAM,GAAG,CAAC,SAAS,EAAC;EACzB,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,EAAC;EACjC,GAAG;;EAEH,EAAE,IAAI,WAAW,EAAE;EACnB,IAAI,OAAO,IAAI;EACf,GAAG,MAAM;EACT,IAAI,OAAO,KAAK;EAChB,GAAG;;EAEH;EACA,CAAC;;EAED,SAAS,WAAW,IAAI;EACxB,EAAE,IAAI,eAAe,EAAE;EACvB,IAAI,IAAI,WAAW,GAAG,OAAO,GAAE;EAC/B,IAAI,aAAa,GAAG,WAAW,GAAG,YAAW;EAC7C,IAAI,IAAI,QAAQ,GAAG,eAAe,CAAC,WAAW,EAAC;EAC/C,IAAI,IAAI,CAAC,QAAQ,EAAE;EACnB,MAAM,IAAI,GAAG,MAAK;EAClB,MAAM,eAAe,GAAG,KAAI;EAC5B,KAAK,MAAM;EACX,MAAM,QAAQ,GAAE;EAChB,KAAK;EACL,GAAG,MAAM,IAAI,GAAG,MAAK;EACrB,CAAC;;EAED,MAAM,QAAQ,GAAG,CAAC,MAAM;EACxB,EAAE,IAAI,OAAO,cAAc,KAAK,WAAW,EAAE;EAC7C,IAAI,MAAM,OAAO,GAAG,IAAI,cAAc,GAAE;EACxC,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,MAAK;EAC9B,IAAI,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,YAAW;;EAEzC,IAAI,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;EACvC,GAAG;;EAEH,EAAE,OAAO,MAAM,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;EACzC,CAAC,IAAG;;AAEJ,EAAO,SAAS,WAAW,IAAI;EAC/B,EAAE,OAAO,OAAO,EAAE,GAAG,aAAa;EAClC,CAAC;;EAED,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,GAAG,EAAE;;AC9FlC,QAAC,OAAO,GAAG,GAAE;AAClB,EAAO,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAC;;EAEnF,IAAI,aAAa,GAAG,KAAI;AACxB,EAAO,IAAI,GAAG,GAAG,KAAI;AACrB,EAAO,IAAI,YAAY,GAAG,KAAI;;EAE9B,SAAS,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE;EACpC,EAAE,IAAI,SAAS,GAAG;EAClB,IAAI,GAAG,EAAE,IAAI;EACb,IAAI,IAAI;EACR,IAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;EAC9B,IAAI,IAAI;EACR,IAAG;EACH,EAAE,YAAY,CAAC,SAAS,EAAC;EACzB,CAAC;;EAED,SAAS,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;EACpC,EAAE,KAAK,CAAC,IAAI,GAAG,KAAI;EACnB,EAAE,GAAG,GAAG,MAAK;EACb,EAAE,gBAAgB,CAACA,aAAW,EAAC;EAC/B,CAAC;;EAED,SAASA,aAAW,IAAI;EACxB,EAAE,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,EAAE;EAChC,IAAI,GAAG,GAAG,UAAU,CAAC,GAAG,EAAC;EACzB,GAAG;;EAEH,EAAE,IAAI,aAAa,EAAE;EACrB,IAAI,UAAU,CAAC,aAAa,EAAC;EAC7B,IAAI,OAAO,IAAI;EACf,GAAG;;EAEH,EAAE,OAAOA,aAAW,CAAC,IAAI,CAAC,IAAI,CAAC;EAC/B,CAAC;;EAED,SAAS,UAAU,EAAE,GAAG,EAAE;EAC1B,EAAE,GAAG,CAAC,OAAO,GAAG,GAAE;EAClB,EAAE,GAAG,CAAC,UAAU,GAAG,aAAa,CAAC,GAAG,EAAC;EACrC,EAAE,GAAG,CAAC,GAAG,IAAI,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,EAAC;EACrD,EAAE,IAAI,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,KAAK;EACjC,EAAE,OAAO,GAAG,EAAE;EACd,IAAI,YAAY,CAAC,GAAG,EAAC;EACrB,IAAI,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,EAAE,OAAO,GAAG,CAAC,OAAO;EAC3D,IAAI,GAAG,GAAG,GAAG,CAAC,OAAM;EACpB,GAAG;EACH,CAAC;;EAED,SAAS,UAAU,EAAE,GAAG,EAAE;EAC1B,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,GAAE;EAC7B,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,GAAE;EAC7B,EAAE,GAAG,CAAC,MAAM,GAAG,GAAE;EACjB,EAAE,GAAG,CAAC,IAAI,GAAG,GAAE;EACf,EAAE,GAAG,CAAC,IAAI,GAAG,GAAE;EACf,EAAE,YAAY,GAAG,IAAG;EACpB,EAAE,WAAW,GAAE;EACf,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAC;EAC7C,CAAC;;EAED,SAAS,UAAU,EAAE,GAAG,EAAE;EAC1B,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;EACjB,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,IAAG;EACzC,IAAI,GAAG,CAAC,IAAI,GAAG,aAAa,CAAC,GAAG,EAAC;EACjC,GAAG;EACH,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,IAAI,GAAE;EAC9B,EAAE,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,IAAI,IAAI,KAAI;EAClC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAG;EACd,EAAE,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,KAAI;EACtB,EAAE,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAC;EAC5C,CAAC;EACD,SAAS,aAAa,EAAE,KAAK,EAAE;EAC/B,EAAE,QAAQ,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG;EACjC,IAAI,IAAI,KAAK,CAAC,GAAG,GAAG,IAAI,EAAE,OAAO,KAAK,CAAC,IAAI;EAC3C,GAAG;EACH,CAAC;;EAED,SAAS,iBAAiB,EAAE,GAAG,EAAE,QAAQ,EAAE;EAC3C,EAAE,MAAM,SAAS,GAAG,GAAG,CAAC,KAAI;EAC5B,EAAE,MAAM,SAAS,IAAI,GAAG,CAAC,IAAI,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,EAAC;EAC3D,EAAE,IAAI,MAAM,GAAG,GAAE;;EAEjB,EAAE,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE;EAC7B,IAAI,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,EAAC;EAC/B,IAAI,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,EAAC;;EAE/B,IAAI,IAAI,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE;EACrD,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,SAAQ;EAC1B,KAAK,MAAM;EACX,MAAM,QAAQ,CAAC,QAAQ,GAAG,OAAM;EAChC,MAAM,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAC;EAChC,KAAK;EACL,GAAG;;EAEH,EAAE,IAAI,SAAS,GAAG,KAAI;EACtB,EAAE,IAAI,SAAS,GAAG,KAAI;;EAEtB,EAAE,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE;EAC7B,IAAI,IAAI,QAAQ,GAAG,SAAS,CAAC,CAAC,EAAC;EAC/B,IAAI,IAAI,QAAQ,GAAG,MAAM,CAAC,CAAC,EAAC;;EAE5B,IAAI,IAAI,QAAQ,EAAE;EAClB,MAAM,SAAS,GAAG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAC;EAC/C,MAAM,QAAQ,CAAC,QAAQ,GAAG,OAAM;EAChC,MAAM,QAAQ,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,QAAQ,GAAE;EAC9C,MAAM,QAAQ,CAAC,SAAS,GAAG,UAAS;EACpC,MAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,EAAE;EACjC,QAAQ,QAAQ,CAAC,QAAQ,GAAG,MAAK;EACjC,OAAO;EACP,KAAK,MAAM;EACX,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,EAAE,KAAK,EAAC;EAC7C,KAAK;;EAEL,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,SAAQ;EAC3B,IAAI,QAAQ,CAAC,MAAM,GAAG,IAAG;;EAEzB,IAAI,IAAI,SAAS,EAAE;EACnB,MAAM,SAAS,CAAC,OAAO,GAAG,SAAQ;EAClC,KAAK,MAAM;EACX,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,EAAE,QAAQ,CAAC,GAAG,GAAG,IAAG;EAC7C,MAAM,GAAG,CAAC,KAAK,GAAG,SAAQ;EAC1B,KAAK;EACL,IAAI,SAAS,GAAG,SAAQ;EACxB,GAAG;EACH,EAAE,IAAI,SAAS,EAAE,SAAS,CAAC,OAAO,GAAG,KAAI;EACzC,EAAE,IAAI,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,GAAG,MAAK;EAChC,CAAC;;EAED,SAAS,WAAW,EAAE,KAAK,EAAE;EAC7B,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,OAAM;EACtB,EAAE,IAAI,CAAC,CAAC,GAAG,KAAK,IAAI,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI;EAC7C,EAAE,OAAO,KAAK,CAAC,GAAG;EAClB,CAAC;;EAED,SAAS,YAAY,EAAE,KAAK,EAAE;EAC9B,EAAE,IAAI,KAAK,CAAC,MAAM,EAAE;EACpB,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,KAAK,EAAC;EACtD,GAAG,MAAM;EACT,IAAI,aAAa,GAAG,MAAK;EACzB,GAAG;EACH,CAAC;;EAED,SAAS,UAAU,EAAE,GAAG,EAAE;EAC1B,EAAE,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAC;EACrC,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,GAAE;EACxB,EAAE,GAAG,GAAG,aAAa,GAAG,KAAI;EAC5B,CAAC;;EAED,SAAS,WAAW,EAAE,KAAK,EAAE;EAC7B,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,GAAE;EACrC,EAAE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE;EAChC,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,EAAC;EACjC,IAAI,IAAI,IAAI,IAAI,GAAE;EAClB,IAAI,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAE;EACnC,IAAI,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,EAAC;EACvC,GAAG;EACH,EAAE,KAAK,CAAC,MAAM,GAAG,KAAI;EACrB,CAAC;;EAED,SAAS,MAAM,EAAE,KAAK,EAAE;EACxB,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,SAAQ;EAC1B,EAAE,IAAI,MAAM,GAAG,KAAK,CAAC,WAAU;EAC/B,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,KAAI;EACtB,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,IAAG;;EAErB,EAAE,IAAI,GAAG,KAAK,MAAM,EAAE;EACtB,IAAI,OAAO,CAAC,KAAK,EAAC;EAClB,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC,MAAK;EAClD,IAAI,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAC;EAClC,GAAG,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,IAAI,EAAE;EACjC,IAAI,WAAW,CAAC,KAAK,EAAC;EACtB,GAAG,MAAM,IAAI,GAAG,KAAK,MAAM,EAAE;EAC7B,IAAI,aAAa,CAAC,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAC;EAC1D,GAAG,MAAM;EACT,IAAI,IAAI,KAAK,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC,IAAI,GAAG,KAAI;EACjE,IAAI,IAAI,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,WAAU;EAC7D,IAAI,IAAI,KAAK,KAAK,GAAG,EAAE,MAAM;EAC7B,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM;EAC1D,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAC;EACnC,GAAG;;EAEH,EAAE,IAAI,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,GAAG,GAAG,EAAC;EACrD,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,GAAE;EAC3C,CAAC;;EAED,SAAS,OAAO,EAAE,KAAK,EAAE;EACzB,EAAE,IAAI,IAAI,GAAG,KAAK,CAAC,QAAO;EAC1B,EAAE,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,GAAE;EACjC,EAAE,KAAK,CAAC,OAAO,GAAG,KAAI;EACtB,CAAC;;EAED,SAAS,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE;EAClC,EAAE,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,KAAI;EAC5C,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAG;EACtB,EAAE,OAAO,KAAK;EACd,CAAC;;EAED,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,EAAC;;EAE1D,SAAS,MAAM,EAAE,GAAG,EAAE;EACtB,EAAE,IAAI,GAAG,GAAG,GAAE;EACd,EAAE,IAAI,CAAC,GAAG,EAAC;EACX,EAAE,IAAI,CAAC,GAAG,EAAC;EACX,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI;EAC/B,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE;EAClB,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI;EAC3B,QAAQ,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,GAAE;EAClG,OAAO,EAAC;EACR,MAAM,CAAC,GAAE;EACT,KAAK,MAAM;EACX,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,GAAE;EAC5E,KAAK;EACL,GAAG,EAAC;EACJ,EAAE,OAAO,GAAG;EACZ,CAAC;;EAED,MAAM,IAAI,GAAG,EAAE,IAAI,OAAO,EAAE,KAAK,UAAU;;;;;;;;;;;;;;;;;;"}
\ No newline at end of file
+{"version":3,"file":"fre-umd.js","sources":["../src/h.js","../src/dom.js","../src/hooks.js","../src/heapify.js","../src/scheduler.js","../src/reconciler.js"],"sourcesContent":["export function h (type, attrs) {\n let props = attrs || {}\n let key = props.key || null\n let ref = props.ref || null\n let children = []\n\n for (let i = 2; i < arguments.length; i++) {\n let vnode = arguments[i]\n if (vnode == null || vnode === true || vnode === false) {\n } else if (typeof vnode === 'number' || typeof vnode === 'string') {\n children.push({ type: 'text', props: { nodeValue: vnode } })\n } else {\n children.push(vnode)\n }\n }\n\n if (children.length) {\n props.children = children.length === 1 ? children[0] : children\n }\n\n delete props.key\n delete props.ref\n return { type, props, key, ref }\n}\n","import { SVG } from './reconciler'\n\nexport function updateElement (dom, oldProps, newProps) {\n for (let name in { ...oldProps, ...newProps }) {\n let oldValue = oldProps[name]\n let newValue = newProps[name]\n\n if (oldValue == newValue || name === 'children') {\n } else if (name === 'style') {\n for (const k in { ...oldValue, ...newValue }) {\n if (!(oldValue && newValue && oldValue[k] === newValue[k])) {\n dom[name][k] = newValue && newValue[k] || ''\n }\n }\n } else if (name[0] === 'o' && name[1] === 'n') {\n name = name.slice(2).toLowerCase()\n if (oldValue) dom.removeEventListener(name, oldValue)\n dom.addEventListener(name, newValue)\n } else if (name in dom && !(dom instanceof SVGElement)) {\n dom[name] = newValue == null ? '' : newValue\n } else if (newValue == null || newValue === false) {\n dom.removeAttribute(name)\n } else {\n dom.setAttribute(name, newValue)\n }\n }\n}\n\nexport function createElement (fiber) {\n const dom =\n fiber.type === 'text'\n ? document.createTextNode('')\n : fiber.tag === SVG\n ? document.createElementNS('http://www.w3.org/2000/svg', fiber.type)\n : document.createElement(fiber.type)\n updateElement(dom, {}, fiber.props)\n return dom\n}\n","import { scheduleWork, getHook } from './reconciler'\nlet cursor = 0\n\nfunction update (key, reducer, value) {\n value = reducer ? reducer(this.state[key], value) : value\n this.state[key] = value\n scheduleWork(this, true)\n}\nexport function resetCursor () {\n cursor = 0\n}\nexport function useState (initState) {\n return useReducer(null, initState)\n}\nexport function useReducer (reducer, initState) {\n let wip = getHook()\n let key = getKey()\n let setter = update.bind(wip, key, reducer)\n if (key in wip.state) {\n return [wip.state[key], setter]\n } else {\n wip.state[key] = initState\n return [initState, setter]\n }\n}\n\nexport function useEffect (cb, deps) {\n let wip = getHook()\n let key = getKey()\n if (isChanged(wip.Edeps, deps)) {\n wip.effect[key] = useCallback(cb, deps)\n wip.Edeps = deps\n }\n}\n\nexport function useMemo (cb, deps) {\n let wip = getHook()\n let key = getKey()\n if (isChanged(wip.Mdeps, deps)) {\n wip.Mdeps = deps\n return (wip.memo[key] = cb())\n }\n return wip.memo[key]\n}\n\nexport function useCallback (cb, deps) {\n return useMemo(() => cb, deps)\n}\n\nexport function useRef (current) {\n return { current }\n}\n\nfunction isChanged (a, b) {\n return !a || b.some((arg, index) => arg !== a[index])\n}\n\nfunction getKey () {\n let key = '$' + cursor\n cursor ++\n return key\n}\n","function push (heap, node) {\r\n let index = heap.length\r\n heap.push(node)\r\n\r\n while (true) {\r\n let parentIndex = Math.floor((index - 1) / 2)\r\n let parent = heap[parentIndex]\r\n\r\n if (parent && compare(parent, node) > 0) {\r\n heap[parentIndex] = node\r\n heap[index] = parent\r\n index = parentIndex\r\n } else return\r\n }\r\n}\r\n\r\nfunction pop (heap) {\r\n let first = heap[0]\r\n if (first) {\r\n let last = heap.pop()\r\n if (first !== last) {\r\n heap[0] = last\r\n let index = 0\r\n let length = heap.length\r\n\r\n while (index < length) {\r\n let leftIndex = (index + 1) * 2 - 1\r\n let left = heap[leftIndex]\r\n let rightIndex = leftIndex + 1\r\n let right = heap[rightIndex]\r\n\r\n if (left && compare(left, last) < 0) {\r\n if (right && compare(right, left) < 0) {\r\n heap[index] = right\r\n heap[rightIndex] = last\r\n index = rightIndex\r\n } else {\r\n heap[index] = left\r\n heap[leftIndex] = last\r\n index = leftIndex\r\n }\r\n } else if (right && compare(right, last) < 0) {\r\n heap[index] = right\r\n heap[rightIndex] = last\r\n index = rightIndex\r\n } else return\r\n }\r\n }\r\n return first\r\n } else return null\r\n}\r\n\r\nfunction compare (a, b) {\r\n return a.dueTime - b.dueTime\r\n}\r\n\r\nfunction peek (heap) {\r\n return heap[0] || null\r\n}\r\n\r\nexport { push, peek, pop }\r\n","import { push, pop, peek } from './heapify'\n\nlet taskQueue = []\nlet currentTask = null\nlet currentCallback = null\nlet inMC = false\nlet frameDeadline = 0\nconst frameLength = 5\n\nexport function scheduleCallback (callback) {\n const currentTime = getTime()\n let startTime = currentTime\n let timeout = 5000 // idle\n let dueTime = startTime + timeout\n\n let newTask = {\n callback,\n startTime,\n dueTime\n }\n\n push(taskQueue, newTask)\n\n currentCallback = flushWork\n\n if (!inMC) planWork() && (inMC = true)\n\n return newTask\n}\n\nfunction flushWork (iniTime) {\n try {\n return workLoop(iniTime)\n } finally {\n currentTask = null\n }\n}\n\nfunction workLoop (iniTime) {\n let currentTime = iniTime\n currentTask = peek(taskQueue)\n\n while (currentTask) {\n if (currentTask.dueTime > currentTime && shouldYeild()) break\n let callback = currentTask.callback\n if (callback) {\n currentTask.callback = null\n let next = callback()\n if (next) {\n currentTask.callback = next\n } else {\n if (currentTask === peek(taskQueue)) {\n pop(taskQueue)\n }\n }\n } else pop(taskQueue)\n currentTask = peek(taskQueue)\n }\n\n if (currentTask) {\n return true\n } else {\n return false\n }\n\n // return !!currentTask\n}\n\nfunction performWork () {\n if (currentCallback) {\n let currentTime = getTime()\n frameDeadline = currentTime + frameLength\n let moreWork = currentCallback(currentTime)\n if (!moreWork) {\n inMC = false\n currentCallback = null\n } else {\n planWork()\n }\n } else inMC = false\n}\n\nconst planWork = (() => {\n if (typeof MessageChannel !== 'undefined') {\n const channel = new MessageChannel()\n const port = channel.port2\n channel.port1.onmessage = performWork\n\n return () => port.postMessage(null)\n }\n\n return () => setTimeout(performWork, 0)\n})()\n\nexport function shouldYeild () {\n return getTime() > frameDeadline\n}\n\nconst getTime = () => performance.now()\n","import { createElement, updateElement } from './dom'\r\nimport { resetCursor } from './hooks'\r\nimport { scheduleCallback, shouldYeild } from './scheduler'\r\n\r\nconst options = {}\r\nexport const [ROOT, HOST, HOOK, SVG, PLACE, UPDATE, DELETE] = [0, 1, 2, 3, 4, 5, 6]\r\n\r\nlet pendingCommit = null\r\nexport let WIP = null\r\nexport let currentFiber = null\r\n\r\nfunction render (vnode, node, done) {\r\n let rootFiber = {\r\n tag: ROOT,\r\n node,\r\n props: { children: vnode },\r\n done\r\n }\r\n scheduleWork(rootFiber)\r\n}\r\n\r\nfunction scheduleWork (fiber, lock) {\r\n fiber.lock = lock\r\n WIP = fiber\r\n scheduleCallback(performWork)\r\n}\r\n\r\nfunction performWork () {\r\n while (WIP && !shouldYeild()) {\r\n WIP = performWIP(WIP)\r\n }\r\n\r\n if (pendingCommit) {\r\n commitWork(pendingCommit)\r\n return null\r\n }\r\n\r\n return performWork.bind(null)\r\n}\r\n\r\nfunction performWIP (WIP) {\r\n WIP.patches = []\r\n WIP.parentNode = getParentNode(WIP)\r\n WIP.tag == HOOK ? updateHOOK(WIP) : updateHost(WIP)\r\n if (WIP.child) return WIP.child\r\n while (WIP) {\r\n completeWork(WIP)\r\n if (WIP.sibling && WIP.lock == null) return WIP.sibling\r\n WIP = WIP.parent\r\n }\r\n}\r\n\r\nfunction updateHOOK (WIP) {\r\n WIP.props = WIP.props || {}\r\n WIP.state = WIP.state || {}\r\n WIP.effect = {}\r\n WIP.deps = {}\r\n WIP.memo = {}\r\n currentFiber = WIP\r\n resetCursor()\r\n reconcileChildren(WIP, WIP.type(WIP.props))\r\n}\r\n\r\nfunction updateHost (WIP) {\r\n if (!WIP.node) {\r\n if (WIP.type === 'svg') WIP.tag = SVG\r\n WIP.node = createElement(WIP)\r\n }\r\n let p = WIP.parentNode || {}\r\n WIP.insertPoint = p.last || null\r\n p.last = WIP\r\n WIP.node.last = null\r\n reconcileChildren(WIP, WIP.props.children)\r\n}\r\nfunction getParentNode (fiber) {\r\n while ((fiber = fiber.parent)) {\r\n if (fiber.tag < HOOK) return fiber.node\r\n }\r\n}\r\n\r\nfunction reconcileChildren (WIP, children) {\r\n const oldFibers = WIP.kids\r\n const newFibers = (WIP.kids = hashfy(children, WIP.kids))\r\n let reused = {}\r\n\r\n for (const k in oldFibers) {\r\n let newFiber = newFibers[k]\r\n let oldFiber = oldFibers[k]\r\n\r\n if (newFiber && newFiber.type === oldFiber.type) {\r\n reused[k] = oldFiber\r\n } else {\r\n oldFiber.patchTag = DELETE\r\n WIP.patches.push(oldFiber)\r\n }\r\n }\r\n\r\n let prevFiber = null\r\n let alternate = null\r\n\r\n for (const k in newFibers) {\r\n let newFiber = newFibers[k]\r\n let oldFiber = reused[k]\r\n\r\n if (oldFiber) {\r\n alternate = createFiber(oldFiber, UPDATE)\r\n newFiber.patchTag = UPDATE\r\n newFiber = { ...alternate, ...newFiber }\r\n newFiber.alternate = alternate\r\n if (shouldPlace(newFiber)) {\r\n newFiber.patchTag = PLACE\r\n }\r\n } else {\r\n newFiber = createFiber(newFiber, PLACE)\r\n }\r\n\r\n newFibers[k] = newFiber\r\n newFiber.parent = WIP\r\n\r\n if (prevFiber) {\r\n prevFiber.sibling = newFiber\r\n } else {\r\n if (WIP.tag === SVG) newFiber.tag = SVG\r\n WIP.child = newFiber\r\n }\r\n prevFiber = newFiber\r\n }\r\n if (prevFiber) prevFiber.sibling = null\r\n if (WIP.lock) WIP.lock = false\r\n}\r\n\r\nfunction shouldPlace (fiber) {\r\n let p = fiber.parent\r\n if (p.tag === HOOK) return p.key && !p.lock\r\n return fiber.key\r\n}\r\n\r\nfunction completeWork (fiber) {\r\n if (fiber.parent) {\r\n fiber.parent.patches.push(...fiber.patches, fiber)\r\n } else {\r\n pendingCommit = fiber\r\n }\r\n}\r\n\r\nfunction commitWork (WIP) {\r\n WIP.patches.forEach(p => commit(p))\r\n WIP.done && WIP.done()\r\n WIP = pendingCommit = null\r\n}\r\n\r\nfunction applyEffect (fiber) {\r\n fiber.pending = fiber.pending || {}\r\n for (const k in fiber.effect) {\r\n const pend = fiber.pending[k]\r\n pend && pend()\r\n const after = fiber.effect[k]()\r\n after && (fiber.pending[k] = after)\r\n }\r\n fiber.effect = null\r\n}\r\n\r\nfunction commit (fiber) {\r\n let tag = fiber.patchTag\r\n let parent = fiber.parentNode\r\n let dom = fiber.node\r\n let ref = fiber.ref\r\n\r\n if (tag === DELETE) {\r\n cleanup(fiber)\r\n while (fiber.tag === HOOK) fiber = fiber.child\r\n parent.removeChild(fiber.node)\r\n } else if (fiber.tag === HOOK) {\r\n applyEffect(fiber)\r\n } else if (tag === UPDATE) {\r\n updateElement(dom, fiber.alternate.props, fiber.props)\r\n } else {\r\n let point = fiber.insertPoint ? fiber.insertPoint.node : null\r\n let after = point ? point.nextSibling : parent.firstChild\r\n if (after === dom) return\r\n if (after === null && dom === parent.lastChild) return\r\n parent.insertBefore(dom, after)\r\n }\r\n\r\n if (ref) isFn(ref) ? ref(dom) : (ref.current = dom)\r\n fiber.patches = fiber.parent.patches = []\r\n}\r\n\r\nfunction cleanup (fiber) {\r\n let pend = fiber.pending\r\n for (const k in pend) pend[k]()\r\n fiber.pending = null\r\n}\r\n\r\nfunction createFiber (vnode, tag) {\r\n vnode.tag = isFn(vnode.type) ? HOOK : HOST\r\n vnode.patchTag = tag\r\n return vnode\r\n}\r\n\r\nconst arrayfy = arr => (!arr ? [] : arr.pop ? arr : [arr])\r\n\r\nfunction hashfy (arr) {\r\n let out = {}\r\n let i = 0\r\n let j = 0\r\n arrayfy(arr).forEach(item => {\r\n if (item.pop) {\r\n item.forEach(item => {\r\n item.key ? (out['.' + i + '.' + item.key] = item) : (out['.' + i + '.' + j] = item) && j++\r\n })\r\n i++\r\n } else {\r\n item.key ? (out['.' + item.key] = item) : (out['.' + i] = item) && i++\r\n }\r\n })\r\n return out\r\n}\r\n\r\nconst isFn = fn => typeof fn === 'function'\r\n\r\nfunction getHook () {\r\n return currentFiber || {}\r\n}\r\n\r\nexport { render, scheduleWork, options, getHook }\r\n"],"names":["performWork"],"mappings":"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"}
\ No newline at end of file

package.json

@@ -1,6 +1,6 @@
{
"name": "fre",
- "version": "1.8.0",
+ "version": "1.8.1",
"description": "",
"main": "dist/fre.js",
"unpkg": "dist/fre-umd.js",

src/hooks.js

@@ -1,4 +1,4 @@
-import { scheduleWork, currentFiber } from './reconciler'
+import { scheduleWork, getHook } from './reconciler'
let cursor = 0
function update (key, reducer, value) {
@@ -13,7 +13,8 @@
return useReducer(null, initState)
}
export function useReducer (reducer, initState) {
- let { wip, key } = getCurrent()
+ let wip = getHook()
+ let key = getKey()
let setter = update.bind(wip, key, reducer)
if (key in wip.state) {
return [wip.state[key], setter]
@@ -24,17 +25,19 @@
}
export function useEffect (cb, deps) {
- let { wip, key } = getCurrent()
- if (isChanged(wip.deps[key], deps)) {
+ let wip = getHook()
+ let key = getKey()
+ if (isChanged(wip.Edeps, deps)) {
wip.effect[key] = useCallback(cb, deps)
- wip.deps[key] = deps
+ wip.Edeps = deps
}
}
export function useMemo (cb, deps) {
- let { wip, key } = getCurrent()
- if (isChanged(wip.deps[key], deps)) {
- wip.deps[key] = deps
+ let wip = getHook()
+ let key = getKey()
+ if (isChanged(wip.Mdeps, deps)) {
+ wip.Mdeps = deps
return (wip.memo[key] = cb())
}
return wip.memo[key]
@@ -52,9 +55,8 @@
return !a || b.some((arg, index) => arg !== a[index])
}
-function getCurrent () {
- return {
- wip: currentFiber,
- key: '$' + cursor && cursor++
- }
+function getKey () {
+ let key = '$' + cursor
+ cursor ++
+ return key
}

src/reconciler.js

@@ -219,4 +219,8 @@
const isFn = fn => typeof fn === 'function'
-export { render, scheduleWork, options }
+function getHook () {
+ return currentFiber || {}
+}
+
+export { render, scheduleWork, options, getHook }