This repository was archived by the owner on Sep 3, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathcomposi-core.mjs.map
1 lines (1 loc) · 33.6 KB
/
composi-core.mjs.map
1
{"version":3,"file":"composi-core.mjs.map","sources":["../src/constants.js","../src/vnode.js","../src/h.js","../src/vdom.js","../src/render.js","../src/runtime.js","../src/union.js","../src/effects.js","../src/fragment.js"],"sourcesContent":["/**\n * Used to determine if a vnode should be recycled.\n * @type {number}\n */\nexport const RECYCLED_NODE = 0\n\n/**\n * Used in a vnode to indicate that it is a DOM node.\n * @type {number}\n */\nexport const ELEMENT_NODE = 1\n\n/**\n * Used in a vnode to indicate that it is a text node.\n * @type {number}\n */\nexport const TEXT_NODE = 3\n\n/**\n * Namespace for SVG elements with `xlink:href` attributes.\n * @type {string}\n */\nexport const XLINK_NS = 'http://www.w3.org/1999/xlink'\n\n/**\n * Namespace for SVG elements.\n * @type {string}\n */\nexport const SVG_NS = 'http://www.w3.org/2000/svg'\n\n/**\n * An empty object. Used as placeholder for `props` in VNode.\n * @type {{}} EMPTY_OBJECT\n */\nexport const EMPTY_OBJECT = {}\n\n/**\n * An empty array. Used for access to array methods.\n * @type {any[]} EMPTY_ARRAY\n */\nexport const EMPTY_ARRAY = []\n\n/**\n * An array to store lifecycle hooks.\n * @type {any[]} LIFECYCLE\n */\nexport const LIFECYCLE = []\n","import {EMPTY_OBJECT, EMPTY_ARRAY, TEXT_NODE} from './constants'\nimport * as Composi from './types' // eslint-disable-line no-unused-vars\n\n/**\n * Create a virtual node with the provided properties.\n * @param {string | Function} type\n * @param {Composi.Props} props\n * @param {Composi.Children} children\n * @param {Element} node\n * @param {string | number | null} key\n * @param {number | null} [flag]\n * @return {Composi.VNode} VNode\n */\nexport function createVNode(\n type,\n props,\n children,\n node,\n key = null,\n flag = null\n) {\n return {\n type,\n props,\n children,\n node,\n flag,\n key\n }\n}\n\n/**\n * Create a virtual text node.\n * @param {string} value\n * @param {Element} [node]\n * @return {Composi.VNode} VNode\n */\nexport function createTextVNode(value, node) {\n return createVNode(value, EMPTY_OBJECT, EMPTY_ARRAY, node, null, TEXT_NODE)\n}\n","import { createVNode, createTextVNode } from './vnode'\n\n/**\n * Creates a virtual node representing an element node or text node to be created. This function must be imported into any file that contains JSX. Babel uses this function to convert JSX into JavaScript.\n * @typedef {import('./types').VNode} VNode\n * @param {string | Function} type\n * @param {Object.<string, any>} [props]\n * @return {VNode}\n */\nexport function h(type, props, ...children) {\n props = props || {}\n let node\n const tempBox = []\n const childNodes = []\n let {length} = children\n const {key} = props\n\n while (length-- > 0) tempBox.push(children[length])\n\n props.children\n ? (tempBox.length <= 0)\n : tempBox.push(props.children)\n props.children && delete props.children\n\n while (tempBox.length > 0) {\n if (Array.isArray((node = tempBox.pop()))) {\n let {length} = node\n while (length-- > 0) {\n tempBox.push(node[length])\n }\n } else if (node === false || node === true || node == null) {\n } else {\n childNodes.push(typeof node === 'object' ? node : createTextVNode(node))\n }\n }\n\n return (typeof type === 'function')\n ? type(props, childNodes)\n : createVNode(type, props, childNodes, null, key)\n}\n","import { RECYCLED_NODE, TEXT_NODE, EMPTY_OBJECT, LIFECYCLE } from './constants'\nimport { createTextVNode, createVNode } from './vnode'\n\n/**\n * Determin whether the old and new props are identical.\n * @typedef {import('./types').Props} Props\n * @param {Props} oldVProps\n * @param {Props} newVProps\n */\nconst areNotEqual = (oldVProps, newVProps) => (JSON.stringify(oldVProps) !== JSON.stringify(newVProps))\n\n/**\n * @typedef {import('./types').VNode} VNode\n */\n/**\n * Return the combination of two objects of props.\n * @param {Object<string, any>} a\n * @param {Object<string, any>} b\n */\nexport const mergeObjects = (a, b) => Object.assign({}, a, b)\n\n/**\n * Handle inline events.\n * @param {Event} event\n */\nfunction listener(event) {\n this.handlers[event.type](event)\n}\n/**\n * Update the properties and attributes of a VNode based on new data.\n * @param {Element} node\n * @param {string} prop\n * @param {any} oldValue\n * @param {any} newValue\n * @param {boolean} isSVG\n * @return {void} undefined\n */\nfunction patchProperty(node, prop, oldValue, newValue, isSVG) {\n if (prop === 'key') {\n } else if (prop === 'style' && typeof newValue === 'object') {\n for (const i in mergeObjects(oldValue, newValue)) {\n const style = newValue == null || newValue[i] == null ? '' : newValue[i]\n i[0] === '-'\n ? node[prop].setProperty(i, style)\n : node[prop][i] = style\n }\n } else if (prop[0] === 'o' && prop[1] === 'n') {\n !((node['handlers'] || (node['handlers'] = {}))[(prop = prop.slice(2))] = newValue)\n ? node.removeEventListener(prop, listener)\n : null;\n (!oldValue)\n ? node.addEventListener(prop, listener)\n : null\n } else if (\n prop !== 'list' &&\n prop !== 'form' &&\n prop !== 'type' &&\n prop !== 'draggable' &&\n prop !== 'spellcheck' &&\n prop in node &&\n !isSVG\n ) {\n node[prop] = newValue == null ? '' : newValue\n } else if (newValue == null || newValue === false) {\n node.removeAttribute(prop)\n } else {\n node.setAttribute(prop, newValue)\n }\n}\n\n/**\n * Create node from vnode.\n * @param {VNode} vnode\n * @param {Function[]} LIFECYCLE\n * @param {boolean} isSVG\n */\nfunction createNode(vnode, LIFECYCLE, isSVG) {\n const type = String(vnode.type)\n const node =\n vnode.flag === TEXT_NODE\n ? document.createTextNode(type)\n : (isSVG = isSVG || type === 'svg') // eslint-disable-line no-cond-assign\n ? document.createElementNS('http://www.w3.org/2000/svg', type)\n : document.createElement(type)\n const {props} = vnode\n if (props['onmount']) {\n LIFECYCLE.push(() => props['onmount'](node))\n }\n\n for (const k in props) {\n patchProperty(/** @type {Element} */ (node), k, null, props[k], isSVG)\n }\n\n for (let i = 0, len = vnode.children.length; i < len; i++) {\n node.appendChild(createNode(vnode.children[i], LIFECYCLE, isSVG))\n }\n\n return (vnode.node = /** @type{Element} */ (node))\n}\n\n/**\n * Get key of vnode element.\n * @param {VNode} vnode\n * @returns {null | string | number} null | string | number\n */\nconst getKey = vnode => vnode == null ? null : vnode.key\n\n/**\n * Remove child node.\n * @param {VNode} vnode\n * @returns {Node} node\n */\nfunction removeChildren(vnode) {\n for (let i = 0, {length} = vnode.children; i < length; i++) {\n removeChildren(vnode.children[i])\n }\n\n const cb = vnode.props['ondestroy']\n cb != null && cb(vnode.node)\n\n return vnode.node\n}\n\n/**\n * Remove element from DOM.\n * @param {Node} parent\n * @param {VNode} vnode\n * @returns {void} undefined\n */\nfunction removeElement(parent, vnode) {\n const remove = function() {\n parent.removeChild(removeChildren(vnode))\n }\n\n const cb = vnode.props && vnode.props['onunmount']\n cb != null\n ? cb(vnode.node, remove)\n : remove()\n}\n\n/**\n * Patch element in DOM according to new props.\n * @param {Node} parent\n * @param {Node} node\n * @param {any} oldVNode\n * @param {any} newVNode\n * @param {boolean} [isSVG]\n */\nfunction patchNode(parent, node, oldVNode, newVNode, isSVG) {\n if (oldVNode === newVNode) {\n } else if (\n oldVNode != null\n && oldVNode.flag === TEXT_NODE\n && newVNode.flag === TEXT_NODE\n ) {\n if (oldVNode.type !== newVNode.type) {\n node.nodeValue = newVNode.type\n }\n } else if (oldVNode == null || oldVNode.type !== newVNode.type) {\n node = parent.insertBefore(createNode(newVNode, LIFECYCLE, isSVG), node)\n if (oldVNode != null) {\n removeElement(parent, oldVNode)\n }\n } else {\n let tmpVKid\n let oldVKid\n\n let oldKey\n let newKey\n\n const oldVProps = oldVNode.props\n const newVProps = newVNode.props\n\n const oldVKids = oldVNode.children\n const newVKids = newVNode.children\n\n let oldHead = 0\n let newHead = 0\n let oldTail = oldVKids.length - 1\n let newTail = newVKids.length - 1\n\n isSVG = isSVG || newVNode.type === 'svg'\n\n for (const i in mergeObjects(oldVProps, newVProps)) {\n (\n (i === 'value' || i === 'selected' || i === 'checked'\n ? node[i]\n : oldVProps[i]) !== newVProps[i]\n )\n && (() => {\n patchProperty(\n /** @type{Element} */(node),\n i,\n oldVProps[i],\n newVProps[i],\n isSVG\n )\n const cb = newVProps.onupdate\n cb != null\n && (areNotEqual(oldVProps, newVProps))\n && LIFECYCLE.push( () => cb(node, oldVProps, newVProps))\n })()\n }\n\n while (newHead <= newTail && oldHead <= oldTail) {\n if (\n (oldKey = getKey(oldVKids[oldHead])) == null ||\n oldKey !== getKey(newVKids[newHead])\n ) {\n break\n }\n\n patchNode(\n node,\n oldVKids[oldHead].node,\n oldVKids[oldHead++],\n newVKids[newHead++],\n isSVG\n )\n }\n\n while (newHead <= newTail && oldHead <= oldTail) {\n if (\n (oldKey = getKey(oldVKids[oldTail])) == null ||\n oldKey !== getKey(newVKids[newTail])\n ) {\n break\n }\n\n patchNode(\n node,\n oldVKids[oldTail].node,\n oldVKids[oldTail--],\n newVKids[newTail--],\n isSVG\n )\n }\n\n if (oldHead > oldTail) {\n while (newHead <= newTail) {\n node.insertBefore(\n createNode(newVKids[newHead++], LIFECYCLE, isSVG),\n (oldVKid = oldVKids[oldHead]) && oldVKid.node\n )\n }\n } else if (newHead > newTail) {\n while (oldHead <= oldTail) {\n removeElement(node, oldVKids[oldHead++])\n }\n } else {\n let i\n let keyed\n let newKeyed\n for (i = oldHead, keyed = {}, newKeyed = {}; i <= oldTail; i++) {\n if ((oldKey = oldVKids[i].key) != null) {\n keyed[oldKey] = oldVKids[i]\n }\n }\n\n while (newHead <= newTail) {\n oldKey = getKey((oldVKid = oldVKids[oldHead]))\n newKey = getKey(newVKids[newHead])\n\n if (\n newKeyed[oldKey] ||\n (newKey != null && newKey === getKey(oldVKids[oldHead + 1]))\n ) {\n if (oldKey == null) {\n removeElement(node, oldVKid)\n }\n oldHead++\n continue\n }\n\n if (newKey == null || oldVNode.flag === RECYCLED_NODE) {\n if (oldKey == null) {\n patchNode(\n node,\n oldVKid && oldVKid.node,\n oldVKid,\n newVKids[newHead],\n isSVG\n )\n newHead++\n }\n oldHead++\n } else {\n if (oldKey === newKey) {\n patchNode(node, oldVKid.node, oldVKid, newVKids[newHead], isSVG)\n newKeyed[newKey] = true\n oldHead++\n } else {\n if ((tmpVKid = keyed[newKey]) != null) {\n patchNode(\n node,\n node.insertBefore(tmpVKid.node, oldVKid && oldVKid.node),\n tmpVKid,\n newVKids[newHead],\n isSVG\n )\n newKeyed[newKey] = true\n } else {\n patchNode(\n node,\n oldVKid && oldVKid.node,\n null,\n newVKids[newHead],\n isSVG\n )\n }\n }\n newHead++\n }\n }\n\n while (oldHead <= oldTail) {\n (getKey((oldVKid = oldVKids[oldHead++])) == null)\n && removeElement(node, oldVKid)\n }\n\n for (const i in keyed) {\n (newKeyed[i] == null)\n && removeElement(node, keyed[i])\n }\n }\n }\n\n return (newVNode.node = node)\n}\n\nfunction recycleNode(node) {\n return node.nodeType === TEXT_NODE\n ? createTextVNode(node.nodeValue, node)\n : createVNode(\n node.nodeName.toLowerCase(),\n EMPTY_OBJECT,\n Array.prototype.map.call(node.childNodes, recycleNode),\n node,\n null,\n RECYCLED_NODE\n )\n}\n\n/**\n * Patch DOM with virtual node from functional component.\n * @param {Node} node\n * @param {VNode} vdom\n */\nexport function patch(node, vdom) {\n if (!node['vdom']) {\n if (vdom.props['onmount']) {\n LIFECYCLE.push(() => vdom.props['onmount'](node))\n }\n }\n const vnode = (patchNode(\n node.parentNode,\n node,\n node['vdom'] || recycleNode(node),\n vdom\n )['vdom'] = vdom)\n while (LIFECYCLE.length > 0) LIFECYCLE.pop()()\n return vnode\n}\n","import { patch } from './vdom'\n\n/**\n * Render a functional component. The first argument is the component to render. This can be either a JSX tag or an `h` function. The second argument is the element to hydrate or update. During the first render, the target element is hydrated with the component provided. Further updates patch the existing element based on the virtual DOM.\n * @example\n *\n * ```\n * // Render Title tag into section:\n * render(<Title message='Hello World!'/>, 'section')\n * // Update the title component 5 seconds later:\n * setTimeout(() => {\n * render(<Title message='Hello Everyone!'/>, 'section')\n * }, 5000)\n * ```\n * @typedef {import('./types').VNode} VNode\n * @param {VNode} vnode\n * @param {Element | string} target\n * @return {void} undefined\n */\nexport function render(vnode, target) {\n if (Array.isArray(vnode)) {\n throw 'Cannot insert Fragment tag directly into DOM.'\n }\n let oldTarget = ''\n if (typeof target === 'string') {\n oldTarget = target\n target = document.querySelector(target)\n }\n if (!target) {\n let msg = ''\n if (oldTarget) msg = ` The selector you provided was: \"${oldTarget}\"`\n console.error(\n `@composi/core Error: The second parameter for render function was invalid. Check the selector you provided and make sure that it exists in the DOM before trying to render. ${msg}`\n )\n }\n patch(target, vnode)\n}\n","\n/**\n * The @composi/runtime.\n * @example\n *\n * ```\n * // Create a runtime program\n * const program = {\n * // Define state:\n * init() {\n * return [{count: 0}]\n * },\n * // Define view to render.\n * // Notice event to send message 'incr'.\n * view(state, send) {\n * return render(<div onclick={send('incr')}>The count is: {state.count}</div>, document.body)\n * },\n * // Define action to update state:\n * update(state, msg) {\n * if (msg === 'incr') {\n * return [state.count++]\n * }\n * }\n * }\n * // Run the program:\n * run(program)\n * ```\n * @param {import('./types').Program} program A program to run with five methods: `init`, `view`, `update`, `subscriptions` and `done`.\n * @return {() => void} Function to terminate runtime.\n */\nexport function run(program) {\n const {init, view, update, subs, done} = program\n const subscriptions = subs || program.subscriptions\n let state\n let isRunning = true\n let isFirstRun = true\n const getState = () => state\n\n /**\n * Send a message.\n * @param {import('./types').Message} message\n *\n */\n function send(message, data) {\n let msg = message\n /**\n * message is a function from a tagged union that\n * can be called to return a message object.\n */\n isRunning\n && (typeof message === 'function') \n && (msg = /** @type {Function} */ (message)(data))\n \n return isRunning &&\n updateView(update(state, msg, send))\n }\n\n /**\n * Expose send as static function on program object.\n * This is to let you send messages to the program\n * from other contexts, such as in a @composi/router action.\n */\n program['send'] = send\n\n /**\n * Handle changes to state and executing effects.\n * @param {any} update\n * @return {void} undefined\n */\n const updateView = update => {\n update \n && (state = update) \n || init \n && (state = init())\n || (state = undefined)\n\n isFirstRun\n && subscriptions\n && typeof subscriptions === 'function'\n && subscriptions(send, getState)\n\n isFirstRun = false\n \n view(state, send)\n }\n updateView(state)\n\n /**\n * Function to end runtime.\n * @return {void} undefined\n */\n return () => {\n isRunning\n && done\n && done(state)\n \n isRunning = false\n }\n}\n","/**\n * Helper function for testing whether message type exists on actions object.\n */\nconst {hasOwnProperty} = Object\n\n\n/**\n * @param {import('./types').Tag} tag\n * @param {Object<string, Function>} handlers\n * @param {() => void} [catchAll]\n */\nfunction match(tag, handlers, catchAll) {\n const {type, data} = tag\n return type\n ? (type => {\n const match = hasOwnProperty.call(handlers, type) && handlers[type]\n return match\n ? match(data)\n : catchAll\n ? catchAll()\n : console.error(\n `The message you sent has no matching action method. Check the spelling for the message or the action method. The message type was \"${type}\".`\n )\n })(type)\n : (() => {\n console.error(\n \"The message you provided was not valid. Messages have the format: {type: 'whatever', data?: 'something'}\"\n )\n console.error('The tag you provided was:')\n console.dir(tag)\n })()\n}\n\n/**\n * Create a union of string tags.\n * @param {string[]} types\n * @returns {Object<string, any>} Object\n */\nfunction createUnion(types) {\n const variants = Object.create(null)\n\n let idx = 0\n while (idx < types.length) {\n const type = types[idx]\n type === 'match'\n && console.error(\n `The message type you provided was \"match\". This cannot be used since it would override the message union's own match method. Please change it to something else, such as \"matchName\", etc.`\n )\n\n variants[type] = data => ({ type, data })\n idx++\n }\n\n return { variants, match }\n}\n\n/**\n * @typedef {Object} MessageUnion\n */\n\n/**\n * Create a union of types for matching up with functions. This is used to define actions for the `update` method of a runtime program.\n * @param {...string} types\n * @returns {MessageUnion} MessageUnion\n */\nexport function union(...types) {\n const { variants, match } = createUnion(types)\n variants.match = match\n return variants\n}\n","/**\n * @typedef {import('./types').Send} Send\n * @typedef {import('./types').Message} Message\n * @typedef {import('./types').State} State\n * @typedef {() => State} GetState\n * @typedef {(send?: Send, getState?: GetState) => any} Effect\n */\n/**\n * Function to batch effects together.\n * @param {...Effect} effects\n * @return {(send?: Send, getState?: GetState) => void} Function\n */\nexport const batchEffects = (...effects) => (getState, send) =>\n effects.map(effect => effect && effect(getState, send))\n\nexport const batch = batchEffects\n","/**\n * Returns a group of sibling elements for inclusion in another JSX tag.\n * @typedef {import('./types').VNode} VNode\n * @typedef {import('./types').Props} Props\n * @typedef {import('./types').Children} Children\n * @param {Props} props\n * @return {Children} children\n */\n/**\n * A tag to enable returning sibling elements. This is useful for returning list items to render in a list or table cells to render in a table row.\n * @example\n *\n * ```\n * <Fragment>\n * <li>A</li>\n * <li>B</li>\n * <li>C</li>\n * </Fragment>\n ```\n * Or functionally:\n * ```\n * Fragment(null, [\n * h('li', {}, 'A'),\n * h('li', {}, 'B'),\n * h('li', {}, 'C')\n * ])\n ```\n * @param {Object} [props] When using Fragment as a function, props is the first argument. Provide either null or {} as the value for props.\n * @param {Children} [children] The siblings to return with the Fragment. This will be an array of sibling elements.\n * @return {VNode[]} An array of virtual nodes.\n */\nexport const Fragment = (props, children) =>\n Array.isArray(props) && !children ? props : children\n"],"names":["RECYCLED_NODE","TEXT_NODE","EMPTY_OBJECT","EMPTY_ARRAY","LIFECYCLE","createVNode","type","props","children","node","key","flag","createTextVNode","value","h","tempBox","childNodes","length","push","Array","isArray","pop","areNotEqual","oldVProps","newVProps","JSON","stringify","mergeObjects","a","b","Object","assign","listener","event","handlers","patchProperty","prop","oldValue","newValue","isSVG","i","style","setProperty","slice","removeEventListener","addEventListener","removeAttribute","setAttribute","createNode","vnode","document","createTextNode","createElementNS","createElement","k","len","appendChild","getKey","removeChildren","cb","removeElement","parent","remove","removeChild","patchNode","oldVNode","newVNode","nodeValue","insertBefore","tmpVKid","oldVKid","oldKey","newKey","oldVKids","newVKids","oldHead","newHead","oldTail","newTail","onupdate","keyed","newKeyed","recycleNode","nodeType","nodeName","toLowerCase","prototype","map","call","patch","vdom","parentNode","render","target","oldTarget","querySelector","msg","console","error","run","program","send","message","data","isRunning","updateView","update","state","init","view","subs","done","subscriptions","isFirstRun","getState","hasOwnProperty","match","tag","catchAll","dir","createUnion","types","variants","create","idx","union","batchEffects","effects","effect","batch","Fragment"],"mappings":"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"}