From e8d9d41abc25e89ab19425483a5e0e390067e5a7 Mon Sep 17 00:00:00 2001 From: Robert Biggs Date: Sun, 4 Nov 2018 19:02:25 -0800 Subject: [PATCH] Code cleanup. 1. General clean up. 2. Replaced for loops with while loops. --- dist/composi-core.js | 2 +- dist/composi-core.js.gz | Bin 2858 -> 2868 bytes dist/composi-core.js.map | 2 +- package-lock.json | 2 +- package.json | 2 +- src/h.js | 3 ++- src/union.js | 11 +++++++---- src/vdom.js | 18 ++++++++++++------ 8 files changed, 25 insertions(+), 15 deletions(-) diff --git a/dist/composi-core.js b/dist/composi-core.js index f8fd253..328febc 100644 --- a/dist/composi-core.js +++ b/dist/composi-core.js @@ -1,2 +1,2 @@ -(function(a,b){"object"==typeof exports&&"undefined"!=typeof module?b(exports):"function"==typeof define&&define.amd?define(["exports"],b):b(a.composi={})})(this,function(a){"use strict";function b(a,b,c,d,e,f){return{type:a,props:b,children:c,element:d,key:e,flag:f}}function c(a,c){return b(a,z,A,c,null,w)}function d(a){return"string"==typeof a&&(a=document.querySelector(a)),b(a.nodeName.toLowerCase(),z,A.map.call(a.childNodes,e),a,null,v)}function e(a){return 3===a.nodeType?c(a.nodeValue,a):d(a)}function f(...a){function c(a,b=new WeakMap){if(Object(a)!==a)return a;if(b.has(a))return b.get(a);const d=a instanceof Date?new Date(a):a instanceof RegExp?new RegExp(a.source,a.flags):a.constructor?new a.constructor:Object.create(null);return b.set(a,d),Object.assign(d,...Object.keys(a).map(d=>({[d]:c(a[d],b)})))}return(Array.isArray(a[0])?a.unshift([]):a.unshift({}),Array.isArray(a[0]))?a.reduce((d,a)=>Array.prototype.concat(d,c(a))):"object"==typeof a[0]?a.reduce((d,a)=>Object.assign(d,c(a))):void 0}function g(a){return a.currentTarget.events[a.type](a)}function h(a){return null==a?null:a.key}function i(a,b,c){const d={};let e,f;for(;b<=c;b++)null!=(e=(f=a[b]).key)&&(d[e]=f);return d}function j(a,b,c,d,e){if("key"===b);else if("style"===b)for(let e in f(c,d)){const c=null==d||null==d[e]?"":d[e];"-"===e[0]?a[b].setProperty(e,c):a[b][e]=c}else if("o"===b[0]&&"n"===b[1])b=b.slice(2).toLowerCase(),a.events||(a.events={}),a.events[b]=d,null==d?a.removeEventListener(b,g):null==c&&a.addEventListener(b,g);else{let c=null==d||!1===d;b in a&&"list"!==b&&"type"!==b&&"draggable"!==b&&"spellcheck"!==b&&"translate"!==b&&!e?(a[b]=null==d?"":d,c&&a.removeAttribute(b)):"xlink-href"===b||"xlinkHref"===b?(a.setAttributeNS(x,"href",d),a.setAttribute("href",d)):c?a.removeAttribute(b):a.setAttribute(b,d)}}function k(a,b,c){let d=a.flag===w?document.createTextNode(a.type):(c=c||"svg"===a.type)?document.createElementNS(y,a.type):document.createElement(a.type);const e=a.props;e.onmount&&b.push(function(){e.onmount(d)});for(let e=0,f=a.children.length;er)for(;t<=u;)b.insertBefore(k(s[t++],e,f),(g=p[q])&&g.element);else if(t>u)for(;q<=r;)m(b,p[q++]);else{const d=i(p,q,r),k={};for(;t<=u;){if(j=h(g=p[q]),l=h(s[t]),k[j]||null!=l&&l===h(p[q+1])){null==j&&m(b,g),q++;continue}null==l||c.flag===v?(null==j&&(o(b,g&&g.element,g,s[t],e,f),t++),q++):(j===l?(o(b,g.element,g,s[t],e,f),k[l]=!0,q++):null==(a=d[l])?o(b,g&&g.element,null,s[t],e,f):(o(b,b.insertBefore(a.element,g&&g.element),a,s[t],e,f),k[l]=!0),t++)}for(;q<=r;)null==h(g=p[q++])&&m(b,g);for(let a in d)null==k[a]&&m(b,d[a])}}return b&&(d.element=b),d}function p(a,b,c){const d=[];if("string"==typeof c&&(c=document.querySelector(c)),Array.isArray(b))throw new B;if(o(c,a&&a.element,a,b,d),b!==a)for(;0a&&a.type&&a.type.startsWith(c)&&a.type.slice(d):a=>a&&a.type;const f=(a,b)=>function(c,d){const f=e(c),g=C.call(a,f)&&a[f];return g?g(c.data,d):b(d)},g={match(a,b,c){return f(b,c)(a)},matcher:f,matches(a,b){const c=e(a);return!("string"!=typeof c||h[c]!==b)}},h=Object.create(null);for(let d=0;d({type:c+b,data:a})}return{variants:h,methods:g}}const v=0,w=3,x="http://www.w3.org/1999/xlink",y="http://www.w3.org/2000/svg",z={},A=[];class B{constructor(){this.message="Cannot insert Fragment tag directly into DOM.",this.toString=function(){return this.message}}}const C=Object.prototype.hasOwnProperty;a.h=function(a,d,...e){d=d||{};let f;const g=[],h=[];let i=e.length;const j=Reflect.get(d,"key");for(;0=g.length&&g.push(d.children),delete d.children);0function d(e){return c(b(e)),a(d)}:void 0},Object.defineProperty(a,"__esModule",{value:!0})}); +(function(a,b){"object"==typeof exports&&"undefined"!=typeof module?b(exports):"function"==typeof define&&define.amd?define(["exports"],b):b(a.composi={})})(this,function(a){"use strict";function b(a,b,c,d,e,f){return{type:a,props:b,children:c,element:d,key:e,flag:f}}function c(a,c){return b(a,z,A,c,null,w)}function d(a){return"string"==typeof a&&(a=document.querySelector(a)),b(a.nodeName.toLowerCase(),z,A.map.call(a.childNodes,e),a,null,v)}function e(a){return 3===a.nodeType?c(a.nodeValue,a):d(a)}function f(...a){function c(a,b=new WeakMap){if(Object(a)!==a)return a;if(b.has(a))return b.get(a);const d=a instanceof Date?new Date(a):a instanceof RegExp?new RegExp(a.source,a.flags):a.constructor?new a.constructor:Object.create(null);return b.set(a,d),Object.assign(d,...Object.keys(a).map(d=>({[d]:c(a[d],b)})))}return(Array.isArray(a[0])?a.unshift([]):a.unshift({}),Array.isArray(a[0]))?a.reduce((d,a)=>Array.prototype.concat(d,c(a))):"object"==typeof a[0]?a.reduce((d,a)=>Object.assign(d,c(a))):void 0}function g(a){return a.currentTarget.events[a.type](a)}function h(a){return null==a?null:a.key}function i(a,b,c){const d={};let e,f;for(;b<=c;)null!=(e=(f=a[b]).key)&&(d[e]=f),b++;return d}function j(a,b,c,d,e){if("key"===b);else if("style"===b)for(let e in f(c,d)){const c=null==d||null==d[e]?"":d[e];"-"===e[0]?a[b].setProperty(e,c):a[b][e]=c}else if("o"===b[0]&&"n"===b[1])b=b.slice(2).toLowerCase(),a.events||(a.events={}),a.events[b]=d,null==d?a.removeEventListener(b,g):null==c&&a.addEventListener(b,g);else{let c=null==d||!1===d;b in a&&"list"!==b&&"type"!==b&&"draggable"!==b&&"spellcheck"!==b&&"translate"!==b&&!e?(a[b]=null==d?"":d,c&&a.removeAttribute(b)):"xlink-href"===b||"xlinkHref"===b?(a.setAttributeNS(x,"href",d),a.setAttribute("href",d)):c?a.removeAttribute(b):a.setAttribute(b,d)}}function k(a,b,c){let d=a.flag===w?document.createTextNode(a.type):(c=c||"svg"===a.type)?document.createElementNS(y,a.type):document.createElement(a.type);const e=a.props;e.onmount&&b.push(function(){e.onmount(d)});let f=0;for(const e=a.children.length;fr)for(;t<=u;)b.insertBefore(k(s[t++],e,f),(g=p[q])&&g.element);else if(t>u)for(;q<=r;)m(b,p[q++]);else{const d=i(p,q,r),k={};for(;t<=u;){if(j=h(g=p[q]),l=h(s[t]),k[j]||null!=l&&l===h(p[q+1])){null==j&&m(b,g),q++;continue}null==l||c.flag===v?(null==j&&(o(b,g&&g.element,g,s[t],e,f),t++),q++):(j===l?(o(b,g.element,g,s[t],e,f),k[l]=!0,q++):null==(a=d[l])?o(b,g&&g.element,null,s[t],e,f):(o(b,b.insertBefore(a.element,g&&g.element),a,s[t],e,f),k[l]=!0),t++)}for(;q<=r;)null==h(g=p[q++])&&m(b,g);for(let a in d)null==k[a]&&m(b,d[a])}}return b&&(d.element=b),d}function p(a,b,c){const d=[];if("string"==typeof c&&(c=document.querySelector(c)),Array.isArray(b))throw new B;if(o(c,a&&a.element,a,b,d),b!==a)for(;0a&&a.type&&a.type.startsWith(c)&&a.type.slice(d):a=>a&&a.type;const g=(a,b)=>(c,d)=>{const e=f(c),g=C.call(a,e)&&a[e];return g?g(c.data,d):b(d)},h={match(a,b,c){return g(b,c)(a)},matcher:g,matches(a,b){const c=f(a);return!("string"!=typeof c||e[c]!==b)}};for(let d=0;d({type:c+b,data:a}),d++}return{variants:e,methods:h}}const v=0,w=3,x="http://www.w3.org/1999/xlink",y="http://www.w3.org/2000/svg",z={},A=[];class B{constructor(){this.message="Cannot insert Fragment tag directly into DOM.",this.toString=function(){return this.message}}}const C=Object.prototype.hasOwnProperty;a.h=function(a,d,...e){d=d||{};let f;const g=[],h=[];let i=e.length;const j=Reflect.get(d,"key");for(;0=g.length&&g.push(d.children),delete d.children);0function d(e){return c(b(e)),a(d)}:void 0},Object.defineProperty(a,"__esModule",{value:!0})}); //# sourceMappingURL=composi-core.js.map diff --git a/dist/composi-core.js.gz b/dist/composi-core.js.gz index 42ca8adac813cf04c6d6d16abb3488ad90ab99ad..83edc9dd980a37299ffbea66622345d80d356731 100644 GIT binary patch literal 2868 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 literal 2858 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 I8w?o$0NF2?2><{9 diff --git a/dist/composi-core.js.map b/dist/composi-core.js.map index 1c48e4e..c5a4371 100644 --- a/dist/composi-core.js.map +++ b/dist/composi-core.js.map @@ -1 +1 @@ -{"version":3,"file":"composi-core.js.map","sources":["../src/vnode.js","../node_modules/@composi/merge-objects/src/index.js","../src/vdom.js","../src/union.js","../src/constants.js","../src/h.js","../src/render.js","../src/runtime.js","../src/mapEffect.js"],"sourcesContent":["import {\n EMPTY_OBJECT,\n EMPTY_ARRAY,\n TEXT_NODE,\n RECYCLED_NODE\n} from './constants'\n\n/**\n * @typedef {Object. | {}} Props\n * @property {Children} Props.children\n */\n/**\n * @typedef {VNode[]} Children\n */\n/**\n * @typedef {string | number | Function} Type\n * @typedef {number | string | null} Key\n * @typedef {Object.} VNode\n * @property {Type} VNode.type\n * @property {Props} VNode.props\n * @property {Children} VNode.children\n * @property {Element} VNode.element\n * @property {Key} [VNode.key]\n * @property {number} VNode.flag\n */\n/**\n * Create a virtual node with the provided properties.\n * @param {string | Function} type\n * @param {Props} props\n * @param {Children} children\n * @param {Element} element\n * @param {string | number | null} key\n * @param {number} flag\n * @return {VNode} VNode\n */\nexport function createVNode(type, props, children, element, key, flag) {\n return {\n type,\n props,\n children,\n element,\n key,\n flag\n }\n}\n\n/**\n * Create a virtual text node.\n * @param {string} text\n * @param {Element} [element]\n * @return {VNode} VNode\n */\nexport function createTextVNode(text, element) {\n return createVNode(text, EMPTY_OBJECT, EMPTY_ARRAY, element, null, TEXT_NODE)\n}\n\n/**\n * Create a virtual node represeting an element and its children.\n * @param {Element} element\n * @return {VNode} VNode\n */\nexport function hydrate(element) {\n if (typeof element === 'string') {\n element = document.querySelector(element)\n }\n return createVNode(\n element.nodeName.toLowerCase(),\n EMPTY_OBJECT,\n EMPTY_ARRAY.map.call(element.childNodes, vnodeFromChild),\n element,\n null,\n RECYCLED_NODE\n )\n}\n\n/**\n * Cycle through the child nodes of an element and create virtual nodes of them.\n * @param {Element} element\n * @return {VNode} VNode\n */\nfunction vnodeFromChild(element) {\n if (element.nodeType === 3) {\n return createTextVNode(element.nodeValue, element)\n } else {\n return hydrate(element)\n }\n}\n","/**\n * Combine two objects, merging the second into the first. Any properties already existing in the first will be replaced by those of the second. Any properties in the second not in the first will be added to it.\n * This does a deep clone. Sub arrays will be cloned. If arrays consist of objects, those will be cloned. Functions will also be cloned. This also support Maps and Sets.\n * Passing in just one object will return a deep clone of it.\n *\n * @param {Object.[]} objects One or more objects to use for merging.\n * @return {Object.} Object.\n */\n\nexport function mergeObjects(...objects) {\n const FIRST_ARGUMENT = 0\n // Add empty array or object to arguments to ensure unique clone:\n if (Array.isArray(objects[FIRST_ARGUMENT])) {\n objects.unshift([])\n } else {\n objects.unshift({})\n }\n\n /**\n * Create a clone of an object or array.\n * @param {*} object The object to clone.\n * @return {Object} Object\n */\n\n function createClone(object, hash = new WeakMap()) {\n // Deal with primitive types:\n if (Object(object) !== object) return object\n // Deal with cyclic references:\n if (hash.has(object)) return hash.get(object)\n const result =\n object instanceof Date\n ? new Date(object)\n : object instanceof RegExp\n ? new RegExp(object.source, object.flags)\n : object.constructor\n ? new object.constructor()\n : Object.create(null)\n hash.set(object, result)\n if (object instanceof Map) {\n Array.from(object, ([key, val]) =>\n result.set(key, createClone(val, hash))\n )\n }\n if (object instanceof Set) {\n Array.from(object, val => result.add(createClone(val, hash)))\n }\n return Object.assign(\n result,\n ...Object.keys(object).map(key => ({\n [key]: createClone(object[key], hash)\n }))\n )\n }\n // Return cloned copy of merged objects:\n if (Array.isArray(objects[FIRST_ARGUMENT])) {\n return objects.reduce((a, b) => Array.prototype.concat(a, createClone(b)))\n } else if (typeof objects[FIRST_ARGUMENT] === 'object') {\n return objects.reduce((a, b) => Object.assign(a, createClone(b)))\n }\n}\n","import { RECYCLED_NODE, TEXT_NODE, XLINK_NS, SVG_NS } from './constants'\nimport { mergeObjects } from '@composi/merge-objects'\n\n/**\n * Event proxy for inline events.\n * @param {Event} event\n * @return {any} any\n */\nfunction eventProxy(event) {\n return event.currentTarget['events'][event.type](event)\n}\n\n/**\n * Get the key value of a virtual node.\n * @typedef {import('./vnode').VNode} VNode\n * @param {VNode} vnode\n * @return {string | number | null}\n */\nfunction getKey(vnode) {\n return vnode == null ? null : vnode.key\n}\n\n/**\n * Create a map of keyed nodes.\n * @typedef {import('./vnode').Children} Children\n * @param {Children} children\n * @param {number} startCount\n * @param {number} end\n * @return {Object.} Object.\n */\nfunction createKeyMap(children, startCount, end) {\n const out = {}\n let key\n let vnode\n\n for (; startCount <= end; startCount++) {\n if ((key = (vnode = children[startCount]).key) != null) {\n out[key] = vnode\n }\n }\n\n return out\n}\n\n/**\n * Update the properties and attributes of a VNode based on new data.\n * @param {Element} element\n * @param {string} prop\n * @param {any} oldValue\n * @param {any} newValue\n * @param {boolean} isSVG\n * @return {void} undefined\n */\nfunction setProp(element, prop, oldValue, newValue, isSVG) {\n if (prop === 'key') {\n } else if (prop === 'style') {\n for (let i in mergeObjects(oldValue, newValue)) {\n const style = newValue == null || newValue[i] == null ? '' : newValue[i]\n if (i[0] === '-') {\n element[prop].setProperty(i, style)\n } else {\n element[prop][i] = style\n }\n }\n } else {\n if (prop[0] === 'o' && prop[1] === 'n') {\n prop = prop.slice(2).toLowerCase()\n\n if (!element['events']) element['events'] = {}\n\n element['events'][prop] = newValue\n\n if (newValue == null) {\n element.removeEventListener(prop, eventProxy)\n } else if (oldValue == null) {\n element.addEventListener(prop, eventProxy)\n }\n } else {\n let nullOrFalse = newValue == null || newValue === false\n\n if (\n prop in element &&\n prop !== 'list' &&\n prop !== 'type' &&\n prop !== 'draggable' &&\n prop !== 'spellcheck' &&\n prop !== 'translate' &&\n !isSVG\n ) {\n element[prop] = newValue == null ? '' : newValue\n if (nullOrFalse) {\n element.removeAttribute(prop)\n }\n } else {\n if (prop === 'xlink-href' || prop === 'xlinkHref') {\n element.setAttributeNS(XLINK_NS, 'href', newValue)\n element.setAttribute('href', newValue)\n } else {\n if (nullOrFalse) {\n element.removeAttribute(prop)\n } else {\n element.setAttribute(prop, newValue)\n }\n }\n }\n }\n }\n}\n\n/**\n * Create an element, either node or text, from a VNode.\n * @typedef {Function[]} Lifecycle\n * @param {VNode} vnode\n * @param {Lifecycle} lifecycle\n * @param {boolean} [isSVG]\n * @return {Element} Element\n */\nfunction createElement(vnode, lifecycle, isSVG) {\n let element\n if (vnode.flag === TEXT_NODE) {\n element = document.createTextNode(/** @type {string} */ (vnode.type))\n } else {\n if ((isSVG = isSVG || vnode.type === 'svg')) {\n element = document.createElementNS(\n SVG_NS,\n /** @type {string} */ (vnode.type)\n )\n } else {\n element = document.createElement(/** @type {string} */ (vnode.type))\n }\n }\n\n const props = vnode.props\n if (props['onmount']) {\n lifecycle.push(function() {\n props['onmount'](element)\n })\n }\n\n for (let i = 0, length = vnode.children.length; i < length; i++) {\n element.appendChild(createElement(vnode.children[i], lifecycle, isSVG))\n }\n\n for (let prop in props) {\n setProp(/** @type {Element} */ (element), prop, null, props[prop], isSVG)\n }\n\n return (vnode.element = /** @type {Element} */ (element))\n}\n\n/**\n * Remove children from a node.\n * @param {VNode} node\n * @return {Element}\n */\nfunction removeChildren(node) {\n for (let i = 0, length = node.children.length; i < length; i++) {\n removeChildren(node.children[i])\n }\n\n return node.element\n}\n\n/**\n * Remove an element from the DOM.\n * @param {Element} parent\n * @param {VNode} vnode\n * @return {void} undefined\n */\nfunction removeElement(parent, vnode) {\n const done = function() {\n parent.removeChild(removeChildren(vnode))\n }\n\n const cb = vnode.props && vnode.props['onunmount']\n if (cb != null) {\n cb(done, vnode.element)\n } else {\n done()\n }\n}\n\n/**\n * Update and element based on new prop values.\n * @typedef {import('./vnode').Props} Props\n * @param {Element} element\n * @param {Props} oldProps\n * @param {Props} newProps\n * @param {Lifecycle} lifecycle\n * @param {boolean} isSVG\n * @param {boolean} isRecycled\n * @return {void} undefined\n */\nfunction updateElement(\n element,\n oldProps,\n newProps,\n lifecycle,\n isSVG,\n isRecycled\n) {\n for (let prop in mergeObjects(oldProps, newProps)) {\n if (\n (prop === 'value' || prop === 'checked'\n ? element[prop]\n : oldProps[prop]) !== newProps[prop]\n ) {\n setProp(element, prop, oldProps[prop], newProps[prop], isSVG)\n }\n }\n\n const cb = isRecycled ? newProps['onmount'] : newProps['onupdate']\n if (cb != null) {\n lifecycle.push(function() {\n cb(element, oldProps, newProps)\n })\n }\n}\n\n/**\n * Patch an element based on differences between its old VNode and its new one.\n * @param {Element} parent\n * @param {Element} element\n * @param {VNode} oldVNode\n * @param {VNode} newVNode\n * @param {Lifecycle} lifecycle\n * @param {boolean} [isSVG]\n * @return {VNode}\n */\nfunction patchElement(parent, element, oldVNode, newVNode, lifecycle, isSVG) {\n if (newVNode === oldVNode) {\n } else if (\n oldVNode != null &&\n oldVNode.flag === TEXT_NODE &&\n newVNode.flag === TEXT_NODE\n ) {\n if (oldVNode.type !== newVNode.type) {\n element.nodeValue = /** @type {any} */ (newVNode.type)\n }\n } else if (oldVNode == null || oldVNode.type !== newVNode.type) {\n const newElement = parent.insertBefore(\n createElement(newVNode, lifecycle, isSVG),\n element\n )\n\n if (oldVNode != null) removeElement(parent, oldVNode)\n\n element = newElement\n } else {\n updateElement(\n element,\n oldVNode.props,\n newVNode.props,\n lifecycle,\n (isSVG = isSVG || newVNode.type === 'svg'),\n oldVNode.flag === RECYCLED_NODE\n )\n\n let savedNode\n let childNode\n\n let lastKey\n let lastChildren = oldVNode.children\n let lastChildStart = 0\n let lastChildEnd = lastChildren.length - 1\n\n let nextKey\n const nextChildren = newVNode.children\n let nextChildStart = 0\n let nextChildEnd = nextChildren.length - 1\n\n while (nextChildStart <= nextChildEnd && lastChildStart <= lastChildEnd) {\n lastKey = getKey(lastChildren[lastChildStart])\n nextKey = getKey(nextChildren[nextChildStart])\n\n if (lastKey == null || lastKey !== nextKey) break\n\n patchElement(\n element,\n lastChildren[lastChildStart].element,\n lastChildren[lastChildStart],\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n\n lastChildStart++\n nextChildStart++\n }\n\n while (nextChildStart <= nextChildEnd && lastChildStart <= lastChildEnd) {\n lastKey = getKey(lastChildren[lastChildEnd])\n nextKey = getKey(nextChildren[nextChildEnd])\n\n if (lastKey == null || lastKey !== nextKey) break\n\n patchElement(\n element,\n lastChildren[lastChildEnd].element,\n lastChildren[lastChildEnd],\n nextChildren[nextChildEnd],\n lifecycle,\n isSVG\n )\n\n lastChildEnd--\n nextChildEnd--\n }\n\n if (lastChildStart > lastChildEnd) {\n while (nextChildStart <= nextChildEnd) {\n element.insertBefore(\n createElement(nextChildren[nextChildStart++], lifecycle, isSVG),\n (childNode = lastChildren[lastChildStart]) && childNode.element\n )\n }\n } else if (nextChildStart > nextChildEnd) {\n while (lastChildStart <= lastChildEnd) {\n removeElement(element, lastChildren[lastChildStart++])\n }\n } else {\n const lastKeyed = createKeyMap(lastChildren, lastChildStart, lastChildEnd)\n const nextKeyed = {}\n\n while (nextChildStart <= nextChildEnd) {\n lastKey = getKey((childNode = lastChildren[lastChildStart]))\n nextKey = getKey(nextChildren[nextChildStart])\n\n if (\n nextKeyed[lastKey] ||\n (nextKey != null &&\n nextKey === getKey(lastChildren[lastChildStart + 1]))\n ) {\n if (lastKey == null) {\n removeElement(element, childNode)\n }\n lastChildStart++\n continue\n }\n\n if (nextKey == null || oldVNode.flag === RECYCLED_NODE) {\n if (lastKey == null) {\n patchElement(\n element,\n childNode && childNode.element,\n childNode,\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n nextChildStart++\n }\n lastChildStart++\n } else {\n if (lastKey === nextKey) {\n patchElement(\n element,\n childNode.element,\n childNode,\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n nextKeyed[nextKey] = true\n lastChildStart++\n } else {\n if ((savedNode = lastKeyed[nextKey]) != null) {\n patchElement(\n element,\n element.insertBefore(\n savedNode.element,\n childNode && childNode.element\n ),\n savedNode,\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n nextKeyed[nextKey] = true\n } else {\n patchElement(\n element,\n childNode && childNode.element,\n null,\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n }\n }\n nextChildStart++\n }\n }\n\n while (lastChildStart <= lastChildEnd) {\n if (getKey((childNode = lastChildren[lastChildStart++])) == null) {\n removeElement(element, childNode)\n }\n }\n\n for (let key in lastKeyed) {\n if (nextKeyed[key] == null) {\n removeElement(element, lastKeyed[key])\n }\n }\n }\n }\n\n if (element) {\n newVNode.element = element\n }\n return newVNode\n}\n\n/**\n * Class to throw error message when attempting to insert Fragement tag directly into DOM.\n * @return {string} message\n */\nexport class FragmentError {\n constructor() {\n this.message = 'Cannot insert Fragment tag directly into DOM.'\n this.toString = function() {\n return this.message\n }\n }\n}\n\n/**\n * Function to either mount an element the first time or patch it in place. This behavior depends on the value of the old VNode. If it is null, a new element will be created, otherwise it compares the new VNode with the old one and patches it.\n * @param {Element | string} container\n * @param {VNode} newVNode\n * @param {VNode} [oldVNode]\n * @return {VNode} VNode\n */\nexport function patch(oldVNode, newVNode, container) {\n const lifecycle = []\n if (typeof container === 'string') {\n container = document.querySelector(container)\n }\n\n if (Array.isArray(newVNode)) throw new FragmentError()\n patchElement(\n container,\n oldVNode && oldVNode.element,\n oldVNode,\n newVNode,\n lifecycle\n )\n\n if (newVNode !== oldVNode) {\n while (lifecycle.length > 0) lifecycle.pop()()\n }\n\n return newVNode\n}\n","const hasOwnProperty = Object.prototype.hasOwnProperty\n\nfunction safeUnion(types, options) {\n const prefix = (options && options.prefix) || ''\n const prefixSize = prefix.length\n let stripPrefix\n if (prefixSize) {\n stripPrefix = tag =>\n tag &&\n tag.type &&\n tag.type.startsWith(prefix) &&\n tag.type.slice(prefixSize)\n } else {\n stripPrefix = x => x && x.type\n }\n\n const matcher = (handlers, catchAll) => {\n return function _matcher(tag, context) {\n const tagType = stripPrefix(tag)\n const match = hasOwnProperty.call(handlers, tagType) && handlers[tagType]\n return match ? match(tag.data, context) : catchAll(context)\n }\n }\n\n const methods = {\n match(tag, handlers, catchAll) {\n return matcher(handlers, catchAll)(tag)\n },\n matcher,\n matches(tag, type) {\n const tagType = stripPrefix(tag)\n return !!(typeof tagType === 'string' && variants[tagType] === type)\n }\n }\n\n const variants = Object.create(null)\n for (let i = 0; i < types.length; i++) {\n const type = types[i]\n const prefixedType = prefix + type\n variants[type] = data => ({ type: prefixedType, data })\n }\n\n return { variants, methods }\n}\n\nexport function union(types, options) {\n const { variants, methods } = safeUnion(types, options)\n for (const key in methods) {\n variants[key] = methods[key]\n }\n return variants\n}\n","/**\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","import { createVNode, createTextVNode } from './vnode'\nimport { ELEMENT_NODE } from './constants'\n\n/**\n * Creates a virtual node representing a node or text node to be created.\n * @typedef {import('./vnode').VNode} VNode\n * @param {string | Function} type\n * @param {Object.} [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.length\n const key = Reflect.get(props, 'key')\n\n while (length-- > 0) tempBox.push(children[length])\n\n if (Reflect.get(props, 'children')) {\n if (tempBox.length <= 0) {\n tempBox.push(props.children)\n }\n delete props.children\n }\n\n while (tempBox.length > 0) {\n if (Array.isArray((node = tempBox.pop()))) {\n for (length = node.length; 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 if (typeof type === 'function') {\n return type(props, (props.children = childNodes))\n } else {\n return createVNode(type, props, childNodes, null, key, ELEMENT_NODE)\n }\n}\n","import { patch } from './vdom'\nimport { hydrate } from './vnode'\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 container to render in. An optional third argument is an element in the document loaded from the server. This will be hydrated with the component provided to render. This third argument can be a DOM referece for that element, or a valid string selector for it.\n * @example\n *\n * ```\n * // Render Title tag into section:\n * render(, 'section')\n * // Update the title component 5 seconds later:\n * setTimeout(() => {\n * render(<Title message='Hello Everyone!'/>, 'section')\n * }, 5000)\n * ```\n * @typedef {import('./vnode').VNode} VNode\n * @param {Element | string} container\n * @param { Element | string } [hydrateThis]\n * @return {void} undefined\n */\nexport function render(VNode, container, hydrateThis) {\n let cont\n if (typeof container === 'string') {\n cont = document.querySelector(container)\n } else {\n cont = container\n }\n if (!cont) {\n console.error(\n '@composi/core Error: You need to provide a valid container to render the component in. Check the element or selector you provided and make sure that it exists in the DOM before trying to render.'\n )\n console.error(\n `@composi/core Message: The container you provided was \"${container}\"`\n )\n return\n }\n let oldVNode\n if (hydrateThis) {\n if (typeof hydrateThis === 'string') {\n hydrateThis = document.querySelector(hydrateThis)\n }\n oldVNode = hydrate(hydrateThis)\n } else {\n oldVNode = cont && Reflect.get(cont, 'vnode')\n }\n const vnode = patch(oldVNode, VNode, cont)\n cont['vnode'] = vnode\n}\n","/**\n * The @composi/runtime.\n * @typedef {any} State\n * @typedef {Function} Effect\n * @typedef {Object<string, any>} Program\n * @prop {Function} Program.init\n * @prop {Function} Program.update\n * @prop {Function} Program.view\n * @prop {Function} [Program.done]\n * @param {Program} program\n * @return {() => void} Function to terminate runtime.\n */\nexport function run(program) {\n const update = program.update\n const view = program.view\n const done = program.done\n let state, effect\n let isRunning = true\n\n /**\n * Send a message.\n * @param {any} message A message of any type.\n * @return {void} undefined\n */\n function send(message) {\n if (isRunning) {\n updateView(update(message, state))\n }\n }\n\n /**\n * Handle changes to state and executing effects.\n * @param {any[]} update\n * @return {void} undefined\n */\n function updateView(update) {\n let init = program.init()\n if (update) {\n ;[state, effect] = update\n } else if (init && init.length) {\n ;[state, effect] = init\n } else {\n state = []\n }\n if (effect) {\n effect(send)\n }\n view(state, send)\n }\n\n updateView(state)\n\n /**\n * Function to end runtime.\n * @return {void} undefined\n */\n function endProgram() {\n if (isRunning) {\n isRunning = false\n if (done) {\n done(state)\n }\n }\n }\n return endProgram\n}\n","/**\n * Map effects to ease composition of runtime programs.\n * @param {Function} effect\n * @param {Function} callback\n * @return {Function} Function\n */\nexport function mapEffect(effect, callback) {\n if (!effect) {\n return\n }\n return send =>\n function intercept(message) {\n send(callback(message))\n return effect(intercept)\n }\n}\n"],"names":["createVNode","type","props","children","element","key","flag","createTextVNode","text","EMPTY_OBJECT","EMPTY_ARRAY","TEXT_NODE","hydrate","document","querySelector","nodeName","toLowerCase","map","call","childNodes","vnodeFromChild","RECYCLED_NODE","nodeType","nodeValue","mergeObjects","objects","createClone","object","hash","WeakMap","Object","has","get","result","Date","RegExp","source","flags","constructor","create","set","assign","keys","Array","isArray","unshift","reduce","a","b","prototype","concat","eventProxy","event","currentTarget","getKey","vnode","createKeyMap","startCount","end","out","setProp","prop","oldValue","newValue","isSVG","i","style","setProperty","slice","removeEventListener","addEventListener","nullOrFalse","removeAttribute","setAttributeNS","XLINK_NS","setAttribute","createElement","lifecycle","createTextNode","createElementNS","SVG_NS","push","length","appendChild","removeChildren","node","removeElement","parent","done","removeChild","cb","updateElement","oldProps","newProps","isRecycled","patchElement","oldVNode","newVNode","newElement","insertBefore","savedNode","childNode","lastKey","nextKey","lastChildren","lastChildStart","lastChildEnd","nextChildren","nextChildStart","nextChildEnd","lastKeyed","nextKeyed","patch","container","FragmentError","pop","safeUnion","types","options","prefix","prefixSize","stripPrefix","tag","startsWith","x","matcher","handlers","catchAll","context","tagType","match","hasOwnProperty","data","methods","matches","variants","message","toString","tempBox","Reflect","VNode","hydrateThis","cont","console","error","program","send","isRunning","updateView","update","state","init","effect","view","endProgram","callback","intercept"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"composi-core.js.map","sources":["../src/vnode.js","../node_modules/@composi/merge-objects/src/index.js","../src/vdom.js","../src/union.js","../src/constants.js","../src/h.js","../src/render.js","../src/runtime.js","../src/mapEffect.js"],"sourcesContent":["import {\n EMPTY_OBJECT,\n EMPTY_ARRAY,\n TEXT_NODE,\n RECYCLED_NODE\n} from './constants'\n\n/**\n * @typedef {Object.<string, any> | {}} Props\n * @property {Children} Props.children\n */\n/**\n * @typedef {VNode[]} Children\n */\n/**\n * @typedef {string | number | Function} Type\n * @typedef {number | string | null} Key\n * @typedef {Object.<string, any>} VNode\n * @property {Type} VNode.type\n * @property {Props} VNode.props\n * @property {Children} VNode.children\n * @property {Element} VNode.element\n * @property {Key} [VNode.key]\n * @property {number} VNode.flag\n */\n/**\n * Create a virtual node with the provided properties.\n * @param {string | Function} type\n * @param {Props} props\n * @param {Children} children\n * @param {Element} element\n * @param {string | number | null} key\n * @param {number} flag\n * @return {VNode} VNode\n */\nexport function createVNode(type, props, children, element, key, flag) {\n return {\n type,\n props,\n children,\n element,\n key,\n flag\n }\n}\n\n/**\n * Create a virtual text node.\n * @param {string} text\n * @param {Element} [element]\n * @return {VNode} VNode\n */\nexport function createTextVNode(text, element) {\n return createVNode(text, EMPTY_OBJECT, EMPTY_ARRAY, element, null, TEXT_NODE)\n}\n\n/**\n * Create a virtual node represeting an element and its children.\n * @param {Element} element\n * @return {VNode} VNode\n */\nexport function hydrate(element) {\n if (typeof element === 'string') {\n element = document.querySelector(element)\n }\n return createVNode(\n element.nodeName.toLowerCase(),\n EMPTY_OBJECT,\n EMPTY_ARRAY.map.call(element.childNodes, vnodeFromChild),\n element,\n null,\n RECYCLED_NODE\n )\n}\n\n/**\n * Cycle through the child nodes of an element and create virtual nodes of them.\n * @param {Element} element\n * @return {VNode} VNode\n */\nfunction vnodeFromChild(element) {\n if (element.nodeType === 3) {\n return createTextVNode(element.nodeValue, element)\n } else {\n return hydrate(element)\n }\n}\n","/**\n * Combine two objects, merging the second into the first. Any properties already existing in the first will be replaced by those of the second. Any properties in the second not in the first will be added to it.\n * This does a deep clone. Sub arrays will be cloned. If arrays consist of objects, those will be cloned. Functions will also be cloned. This also support Maps and Sets.\n * Passing in just one object will return a deep clone of it.\n *\n * @param {Object.<string, any>[]} objects One or more objects to use for merging.\n * @return {Object.<string, any>} Object.<string, any>\n */\n\nexport function mergeObjects(...objects) {\n const FIRST_ARGUMENT = 0\n // Add empty array or object to arguments to ensure unique clone:\n if (Array.isArray(objects[FIRST_ARGUMENT])) {\n objects.unshift([])\n } else {\n objects.unshift({})\n }\n\n /**\n * Create a clone of an object or array.\n * @param {*} object The object to clone.\n * @return {Object<string, any>} Object<string, any>\n */\n\n function createClone(object, hash = new WeakMap()) {\n // Deal with primitive types:\n if (Object(object) !== object) return object\n // Deal with cyclic references:\n if (hash.has(object)) return hash.get(object)\n const result =\n object instanceof Date\n ? new Date(object)\n : object instanceof RegExp\n ? new RegExp(object.source, object.flags)\n : object.constructor\n ? new object.constructor()\n : Object.create(null)\n hash.set(object, result)\n if (object instanceof Map) {\n Array.from(object, ([key, val]) =>\n result.set(key, createClone(val, hash))\n )\n }\n if (object instanceof Set) {\n Array.from(object, val => result.add(createClone(val, hash)))\n }\n return Object.assign(\n result,\n ...Object.keys(object).map(key => ({\n [key]: createClone(object[key], hash)\n }))\n )\n }\n // Return cloned copy of merged objects:\n if (Array.isArray(objects[FIRST_ARGUMENT])) {\n return objects.reduce((a, b) => Array.prototype.concat(a, createClone(b)))\n } else if (typeof objects[FIRST_ARGUMENT] === 'object') {\n return objects.reduce((a, b) => Object.assign(a, createClone(b)))\n }\n}\n","import { RECYCLED_NODE, TEXT_NODE, XLINK_NS, SVG_NS } from './constants'\nimport { mergeObjects } from '@composi/merge-objects'\n\n/**\n * Event proxy for inline events.\n * @param {Event} event\n * @return {any} any\n */\nfunction eventProxy(event) {\n return event.currentTarget['events'][event.type](event)\n}\n\n/**\n * Get the key value of a virtual node.\n * @typedef {import('./vnode').VNode} VNode\n * @param {VNode} vnode\n * @return {string | number | null}\n */\nfunction getKey(vnode) {\n return vnode == null ? null : vnode.key\n}\n\n/**\n * Create a map of keyed nodes.\n * @typedef {import('./vnode').Children} Children\n * @param {Children} children\n * @param {number} startCount\n * @param {number} end\n * @return {Object.<string, any>} Object.<string, any>\n */\nfunction createKeyMap(children, startCount, end) {\n const out = {}\n let key\n let vnode\n\n while (startCount <= end) {\n if ((key = (vnode = children[startCount]).key) != null) {\n out[key] = vnode\n }\n startCount++\n }\n\n return out\n}\n\n/**\n * Update the properties and attributes of a VNode based on new data.\n * @param {Element} element\n * @param {string} prop\n * @param {any} oldValue\n * @param {any} newValue\n * @param {boolean} isSVG\n * @return {void} undefined\n */\nfunction setProp(element, prop, oldValue, newValue, isSVG) {\n if (prop === 'key') {\n } else if (prop === 'style') {\n for (let i in mergeObjects(oldValue, newValue)) {\n const style = newValue == null || newValue[i] == null ? '' : newValue[i]\n if (i[0] === '-') {\n element[prop].setProperty(i, style)\n } else {\n element[prop][i] = style\n }\n }\n } else {\n if (prop[0] === 'o' && prop[1] === 'n') {\n prop = prop.slice(2).toLowerCase()\n\n if (!element['events']) element['events'] = {}\n\n element['events'][prop] = newValue\n\n if (newValue == null) {\n element.removeEventListener(prop, eventProxy)\n } else if (oldValue == null) {\n element.addEventListener(prop, eventProxy)\n }\n } else {\n let nullOrFalse = newValue == null || newValue === false\n\n if (\n prop in element &&\n prop !== 'list' &&\n prop !== 'type' &&\n prop !== 'draggable' &&\n prop !== 'spellcheck' &&\n prop !== 'translate' &&\n !isSVG\n ) {\n element[prop] = newValue == null ? '' : newValue\n if (nullOrFalse) {\n element.removeAttribute(prop)\n }\n } else {\n if (prop === 'xlink-href' || prop === 'xlinkHref') {\n element.setAttributeNS(XLINK_NS, 'href', newValue)\n element.setAttribute('href', newValue)\n } else {\n if (nullOrFalse) {\n element.removeAttribute(prop)\n } else {\n element.setAttribute(prop, newValue)\n }\n }\n }\n }\n }\n}\n\n/**\n * Create an element, either node or text, from a VNode.\n * @typedef {Function[]} Lifecycle\n * @param {VNode} vnode\n * @param {Lifecycle} lifecycle\n * @param {boolean} [isSVG]\n * @return {Element} Element\n */\nfunction createElement(vnode, lifecycle, isSVG) {\n let element\n if (vnode.flag === TEXT_NODE) {\n element = document.createTextNode(/** @type {string} */ (vnode.type))\n } else {\n if ((isSVG = isSVG || vnode.type === 'svg')) {\n element = document.createElementNS(\n SVG_NS,\n /** @type {string} */ (vnode.type)\n )\n } else {\n element = document.createElement(/** @type {string} */ (vnode.type))\n }\n }\n\n const props = vnode.props\n if (props['onmount']) {\n lifecycle.push(function() {\n props['onmount'](element)\n })\n }\n let idx = 0\n const length = vnode.children.length\n while (idx < length) {\n element.appendChild(createElement(vnode.children[idx], lifecycle, isSVG))\n idx++\n }\n\n for (let prop in props) {\n setProp(/** @type {Element} */ (element), prop, null, props[prop], isSVG)\n }\n\n return (vnode.element = /** @type {Element} */ (element))\n}\n\n/**\n * Remove children from a node.\n * @param {VNode} node\n * @return {Element}\n */\nfunction removeChildren(node) {\n let idx = 0\n const length = node.children.length\n while (idx < length) {\n removeChildren(node.children[idx])\n idx++\n }\n\n return node.element\n}\n\n/**\n * Remove an element from the DOM.\n * @param {Element} parent\n * @param {VNode} vnode\n * @return {void} undefined\n */\nfunction removeElement(parent, vnode) {\n const done = function() {\n parent.removeChild(removeChildren(vnode))\n }\n\n const cb = vnode.props && vnode.props['onunmount']\n if (cb != null) {\n cb(done, vnode.element)\n } else {\n done()\n }\n}\n\n/**\n * Update and element based on new prop values.\n * @typedef {import('./vnode').Props} Props\n * @param {Element} element\n * @param {Props} oldProps\n * @param {Props} newProps\n * @param {Lifecycle} lifecycle\n * @param {boolean} isSVG\n * @param {boolean} isRecycled\n * @return {void} undefined\n */\nfunction updateElement(\n element,\n oldProps,\n newProps,\n lifecycle,\n isSVG,\n isRecycled\n) {\n for (let prop in mergeObjects(oldProps, newProps)) {\n if (\n (prop === 'value' || prop === 'checked'\n ? element[prop]\n : oldProps[prop]) !== newProps[prop]\n ) {\n setProp(element, prop, oldProps[prop], newProps[prop], isSVG)\n }\n }\n\n const cb = isRecycled ? newProps['onmount'] : newProps['onupdate']\n if (cb != null) {\n lifecycle.push(function() {\n cb(element, oldProps, newProps)\n })\n }\n}\n\n/**\n * Patch an element based on differences between its old VNode and its new one.\n * @param {Element} parent\n * @param {Element} element\n * @param {VNode} oldVNode\n * @param {VNode} newVNode\n * @param {Lifecycle} lifecycle\n * @param {boolean} [isSVG]\n * @return {VNode}\n */\nfunction patchElement(parent, element, oldVNode, newVNode, lifecycle, isSVG) {\n if (newVNode === oldVNode) {\n } else if (\n oldVNode != null &&\n oldVNode.flag === TEXT_NODE &&\n newVNode.flag === TEXT_NODE\n ) {\n if (oldVNode.type !== newVNode.type) {\n element.nodeValue = /** @type {any} */ (newVNode.type)\n }\n } else if (oldVNode == null || oldVNode.type !== newVNode.type) {\n const newElement = parent.insertBefore(\n createElement(newVNode, lifecycle, isSVG),\n element\n )\n\n if (oldVNode != null) removeElement(parent, oldVNode)\n\n element = newElement\n } else {\n updateElement(\n element,\n oldVNode.props,\n newVNode.props,\n lifecycle,\n (isSVG = isSVG || newVNode.type === 'svg'),\n oldVNode.flag === RECYCLED_NODE\n )\n\n let savedNode\n let childNode\n\n let lastKey\n let lastChildren = oldVNode.children\n let lastChildStart = 0\n let lastChildEnd = lastChildren.length - 1\n\n let nextKey\n const nextChildren = newVNode.children\n let nextChildStart = 0\n let nextChildEnd = nextChildren.length - 1\n\n while (nextChildStart <= nextChildEnd && lastChildStart <= lastChildEnd) {\n lastKey = getKey(lastChildren[lastChildStart])\n nextKey = getKey(nextChildren[nextChildStart])\n\n if (lastKey == null || lastKey !== nextKey) break\n\n patchElement(\n element,\n lastChildren[lastChildStart].element,\n lastChildren[lastChildStart],\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n\n lastChildStart++\n nextChildStart++\n }\n\n while (nextChildStart <= nextChildEnd && lastChildStart <= lastChildEnd) {\n lastKey = getKey(lastChildren[lastChildEnd])\n nextKey = getKey(nextChildren[nextChildEnd])\n\n if (lastKey == null || lastKey !== nextKey) break\n\n patchElement(\n element,\n lastChildren[lastChildEnd].element,\n lastChildren[lastChildEnd],\n nextChildren[nextChildEnd],\n lifecycle,\n isSVG\n )\n\n lastChildEnd--\n nextChildEnd--\n }\n\n if (lastChildStart > lastChildEnd) {\n while (nextChildStart <= nextChildEnd) {\n element.insertBefore(\n createElement(nextChildren[nextChildStart++], lifecycle, isSVG),\n (childNode = lastChildren[lastChildStart]) && childNode.element\n )\n }\n } else if (nextChildStart > nextChildEnd) {\n while (lastChildStart <= lastChildEnd) {\n removeElement(element, lastChildren[lastChildStart++])\n }\n } else {\n const lastKeyed = createKeyMap(lastChildren, lastChildStart, lastChildEnd)\n const nextKeyed = {}\n\n while (nextChildStart <= nextChildEnd) {\n lastKey = getKey((childNode = lastChildren[lastChildStart]))\n nextKey = getKey(nextChildren[nextChildStart])\n\n if (\n nextKeyed[lastKey] ||\n (nextKey != null &&\n nextKey === getKey(lastChildren[lastChildStart + 1]))\n ) {\n if (lastKey == null) {\n removeElement(element, childNode)\n }\n lastChildStart++\n continue\n }\n\n if (nextKey == null || oldVNode.flag === RECYCLED_NODE) {\n if (lastKey == null) {\n patchElement(\n element,\n childNode && childNode.element,\n childNode,\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n nextChildStart++\n }\n lastChildStart++\n } else {\n if (lastKey === nextKey) {\n patchElement(\n element,\n childNode.element,\n childNode,\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n nextKeyed[nextKey] = true\n lastChildStart++\n } else {\n if ((savedNode = lastKeyed[nextKey]) != null) {\n patchElement(\n element,\n element.insertBefore(\n savedNode.element,\n childNode && childNode.element\n ),\n savedNode,\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n nextKeyed[nextKey] = true\n } else {\n patchElement(\n element,\n childNode && childNode.element,\n null,\n nextChildren[nextChildStart],\n lifecycle,\n isSVG\n )\n }\n }\n nextChildStart++\n }\n }\n\n while (lastChildStart <= lastChildEnd) {\n if (getKey((childNode = lastChildren[lastChildStart++])) == null) {\n removeElement(element, childNode)\n }\n }\n\n for (let key in lastKeyed) {\n if (nextKeyed[key] == null) {\n removeElement(element, lastKeyed[key])\n }\n }\n }\n }\n\n if (element) {\n newVNode.element = element\n }\n return newVNode\n}\n\n/**\n * Class to throw error message when attempting to insert Fragement tag directly into DOM.\n * @return {string} message\n */\nexport class FragmentError {\n constructor() {\n this.message = 'Cannot insert Fragment tag directly into DOM.'\n this.toString = function() {\n return this.message\n }\n }\n}\n\n/**\n * Function to either mount an element the first time or patch it in place. This behavior depends on the value of the old VNode. If it is null, a new element will be created, otherwise it compares the new VNode with the old one and patches it.\n * @param {Element | string} container\n * @param {VNode} newVNode\n * @param {VNode} [oldVNode]\n * @return {VNode} VNode\n */\nexport function patch(oldVNode, newVNode, container) {\n const lifecycle = []\n if (typeof container === 'string') {\n container = document.querySelector(container)\n }\n\n if (Array.isArray(newVNode)) throw new FragmentError()\n patchElement(\n container,\n oldVNode && oldVNode.element,\n oldVNode,\n newVNode,\n lifecycle\n )\n\n if (newVNode !== oldVNode) {\n while (lifecycle.length > 0) lifecycle.pop()()\n }\n\n return newVNode\n}\n","const hasOwnProperty = Object.prototype.hasOwnProperty\n\nfunction safeUnion(types, options) {\n const prefix = (options && options.prefix) || ''\n const prefixSize = prefix.length\n const variants = Object.create(null)\n let stripPrefix\n\n if (prefixSize) {\n stripPrefix = tag =>\n tag &&\n tag.type &&\n tag.type.startsWith(prefix) &&\n tag.type.slice(prefixSize)\n } else {\n stripPrefix = x => x && x.type\n }\n\n const matcher = (handlers, catchAll) => {\n return (tag, context) => {\n const tagType = stripPrefix(tag)\n const match = hasOwnProperty.call(handlers, tagType) && handlers[tagType]\n return match ? match(tag.data, context) : catchAll(context)\n }\n }\n\n const methods = {\n match(tag, handlers, catchAll) {\n return matcher(handlers, catchAll)(tag)\n },\n matcher,\n matches(tag, type) {\n const tagType = stripPrefix(tag)\n return !!(typeof tagType === 'string' && variants[tagType] === type)\n }\n }\n\n let idx = 0\n while (idx < types.length) {\n const type = types[idx]\n const prefixedType = prefix + type\n variants[type] = data => ({ type: prefixedType, data })\n idx++\n }\n\n return { variants, methods }\n}\n\nexport function union(types, options) {\n const { variants, methods } = safeUnion(types, options)\n for (const key in methods) {\n variants[key] = methods[key]\n }\n return variants\n}\n","/**\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","import { createVNode, createTextVNode } from './vnode'\nimport { ELEMENT_NODE } from './constants'\n\n/**\n * Creates a virtual node representing a node or text node to be created.\n * @typedef {import('./vnode').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.length\n const key = Reflect.get(props, 'key')\n\n while (length-- > 0) tempBox.push(children[length])\n\n if (Reflect.get(props, 'children')) {\n if (tempBox.length <= 0) {\n tempBox.push(props.children)\n }\n delete props.children\n }\n\n while (tempBox.length > 0) {\n if (Array.isArray((node = tempBox.pop()))) {\n let length = node.length\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 if (typeof type === 'function') {\n return type(props, (props.children = childNodes))\n } else {\n return createVNode(type, props, childNodes, null, key, ELEMENT_NODE)\n }\n}\n","import { patch } from './vdom'\nimport { hydrate } from './vnode'\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 container to render in. An optional third argument is an element in the document loaded from the server. This will be hydrated with the component provided to render. This third argument can be a DOM referece for that element, or a valid string selector for it.\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('./vnode').VNode} VNode\n * @param {Element | string} container\n * @param { Element | string } [hydrateThis]\n * @return {void} undefined\n */\nexport function render(VNode, container, hydrateThis) {\n let cont\n if (typeof container === 'string') {\n cont = document.querySelector(container)\n } else {\n cont = container\n }\n if (!cont) {\n console.error(\n '@composi/core Error: You need to provide a valid container to render the component in. Check the element or selector you provided and make sure that it exists in the DOM before trying to render.'\n )\n console.error(\n `@composi/core Message: The container you provided was \"${container}\"`\n )\n return\n }\n let oldVNode\n if (hydrateThis) {\n if (typeof hydrateThis === 'string') {\n hydrateThis = document.querySelector(hydrateThis)\n }\n oldVNode = hydrate(hydrateThis)\n } else {\n oldVNode = cont && Reflect.get(cont, 'vnode')\n }\n const vnode = patch(oldVNode, VNode, cont)\n cont['vnode'] = vnode\n}\n","/**\n * The @composi/runtime.\n * @typedef {any} State\n * @typedef {Function} Effect\n * @typedef {Object<string, any>} Program\n * @prop {Function} Program.init\n * @prop {Function} Program.update\n * @prop {Function} Program.view\n * @prop {Function} [Program.done]\n * @param {Program} program\n * @return {() => void} Function to terminate runtime.\n */\nexport function run(program) {\n const update = program.update\n const view = program.view\n const done = program.done\n let state, effect\n let isRunning = true\n\n /**\n * Send a message.\n * @param {any} message A message of any type.\n * @return {void} undefined\n */\n function send(message) {\n if (isRunning) {\n updateView(update(message, state))\n }\n }\n\n /**\n * Handle changes to state and executing effects.\n * @param {any[]} update\n * @return {void} undefined\n */\n function updateView(update) {\n let init = program.init()\n if (update) {\n ;[state, effect] = update\n } else if (init && init.length) {\n ;[state, effect] = init\n } else {\n state = []\n }\n if (effect) {\n effect(send)\n }\n view(state, send)\n }\n\n updateView(state)\n\n /**\n * Function to end runtime.\n * @return {void} undefined\n */\n function endProgram() {\n if (isRunning) {\n isRunning = false\n if (done) {\n done(state)\n }\n }\n }\n return endProgram\n}\n","/**\n * Map effects to ease composition of runtime programs.\n * @param {Function} effect\n * @param {Function} callback\n * @return {Function} Function\n */\nexport function mapEffect(effect, callback) {\n if (!effect) {\n return\n }\n return send =>\n function intercept(message) {\n send(callback(message))\n return effect(intercept)\n }\n}\n"],"names":["createVNode","type","props","children","element","key","flag","createTextVNode","text","EMPTY_OBJECT","EMPTY_ARRAY","TEXT_NODE","hydrate","document","querySelector","nodeName","toLowerCase","map","call","childNodes","vnodeFromChild","RECYCLED_NODE","nodeType","nodeValue","mergeObjects","objects","createClone","object","hash","WeakMap","Object","has","get","result","Date","RegExp","source","flags","constructor","create","set","assign","keys","Array","isArray","unshift","reduce","a","b","prototype","concat","eventProxy","event","currentTarget","getKey","vnode","createKeyMap","startCount","end","out","setProp","prop","oldValue","newValue","isSVG","i","style","setProperty","slice","removeEventListener","addEventListener","nullOrFalse","removeAttribute","setAttributeNS","XLINK_NS","setAttribute","createElement","lifecycle","createTextNode","createElementNS","SVG_NS","push","idx","length","appendChild","removeChildren","node","removeElement","parent","done","removeChild","cb","updateElement","oldProps","newProps","isRecycled","patchElement","oldVNode","newVNode","newElement","insertBefore","savedNode","childNode","lastKey","nextKey","lastChildren","lastChildStart","lastChildEnd","nextChildren","nextChildStart","nextChildEnd","lastKeyed","nextKeyed","patch","container","FragmentError","pop","safeUnion","types","options","prefix","prefixSize","variants","stripPrefix","tag","startsWith","x","matcher","handlers","catchAll","context","tagType","match","hasOwnProperty","data","methods","matches","message","toString","tempBox","Reflect","VNode","hydrateThis","cont","console","error","program","send","isRunning","updateView","update","state","init","effect","view","endProgram","callback","intercept"],"mappings":"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"} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index d6541c0..714f019 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@composi/core", - "version": "0.9.3", + "version": "0.9.4", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 16ec607..2c0d783 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@composi/core", - "version": "0.9.3", + "version": "0.9.4", "description": "A JavaScript library for creating websites, PWAs and hybrid apps.", "main": "src/index.js", "scripts": { diff --git a/src/h.js b/src/h.js index 21ab9a7..17f0bd7 100755 --- a/src/h.js +++ b/src/h.js @@ -27,7 +27,8 @@ export function h(type, props, ...children) { while (tempBox.length > 0) { if (Array.isArray((node = tempBox.pop()))) { - for (length = node.length; length-- > 0; ) { + let length = node.length + while (length-- > 0) { tempBox.push(node[length]) } } else if (node === false || node === true || node == null) { diff --git a/src/union.js b/src/union.js index f50e9e2..e3fb418 100644 --- a/src/union.js +++ b/src/union.js @@ -3,7 +3,9 @@ const hasOwnProperty = Object.prototype.hasOwnProperty function safeUnion(types, options) { const prefix = (options && options.prefix) || '' const prefixSize = prefix.length + const variants = Object.create(null) let stripPrefix + if (prefixSize) { stripPrefix = tag => tag && @@ -15,7 +17,7 @@ function safeUnion(types, options) { } const matcher = (handlers, catchAll) => { - return function _matcher(tag, context) { + return (tag, context) => { const tagType = stripPrefix(tag) const match = hasOwnProperty.call(handlers, tagType) && handlers[tagType] return match ? match(tag.data, context) : catchAll(context) @@ -33,11 +35,12 @@ function safeUnion(types, options) { } } - const variants = Object.create(null) - for (let i = 0; i < types.length; i++) { - const type = types[i] + let idx = 0 + while (idx < types.length) { + const type = types[idx] const prefixedType = prefix + type variants[type] = data => ({ type: prefixedType, data }) + idx++ } return { variants, methods } diff --git a/src/vdom.js b/src/vdom.js index b28e52f..d22433a 100755 --- a/src/vdom.js +++ b/src/vdom.js @@ -33,10 +33,11 @@ function createKeyMap(children, startCount, end) { let key let vnode - for (; startCount <= end; startCount++) { + while (startCount <= end) { if ((key = (vnode = children[startCount]).key) != null) { out[key] = vnode } + startCount++ } return out @@ -136,9 +137,11 @@ function createElement(vnode, lifecycle, isSVG) { props['onmount'](element) }) } - - for (let i = 0, length = vnode.children.length; i < length; i++) { - element.appendChild(createElement(vnode.children[i], lifecycle, isSVG)) + let idx = 0 + const length = vnode.children.length + while (idx < length) { + element.appendChild(createElement(vnode.children[idx], lifecycle, isSVG)) + idx++ } for (let prop in props) { @@ -154,8 +157,11 @@ function createElement(vnode, lifecycle, isSVG) { * @return {Element} */ function removeChildren(node) { - for (let i = 0, length = node.children.length; i < length; i++) { - removeChildren(node.children[i]) + let idx = 0 + const length = node.children.length + while (idx < length) { + removeChildren(node.children[idx]) + idx++ } return node.element