-
Notifications
You must be signed in to change notification settings - Fork 2
/
lite.min.js
1 lines (1 loc) · 11.8 KB
/
lite.min.js
1
(function(){"use strict";var n=this,t=function(t){var e=n.JSON.stringify(t,function(n,t){return"function"==typeof t?t.toString():t},2);return"\n>>> "+n.String(e).replace(/\n/g,"\n ")},e=function(n){return void 0!==n},r=function(n){return null===n},i=function(t){return n.Array.isArray(t)},o=function(n){return"function"==typeof n},a=function(n){return"string"==typeof n},u=function(n){return"number"==typeof n},c=function(t){return!!t&&t.constructor===n.Object},l=function(n){return!!(n&&n.tagName&&n.nodeName&&n.ownerDocument&&n.removeAttribute)},d=function(t){if(void 0!==t)return n.JSON.parse(n.JSON.stringify(t))},f=function(e,r){for(var i=arguments.length,o=n.Array(i>2?i-2:0),a=2;a<i;a++)o[a-2]=arguments[a];if(!e)throw new n.Error("@okwolo."+r+o.map(t).join(""))},s=function(t,e){if(n.Array.isArray(t))return t;if(n.Symbol.iterator in n.Object(t))return function(t,e){var r=[],i=!0,o=!1,a=void 0;try{for(var u,c=t[n.Symbol.iterator]();!(i=(u=c.next()).done)&&(r.push(u.value),!e||r.length!==e);i=!0);}catch(n){o=!0,a=n}finally{try{!i&&c.return&&c.return()}finally{if(o)throw a}}return r}(t,e);throw new n.TypeError("Invalid attempt to destructure non-iterable instance")},b=function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],e=null;return{addKey:function(n){return b([{key:n}].concat(t))},addTag:function(n){if(0===t.length)return b([{tag:n}]);var e=t.slice();return e[0].tag=n,b(e)},f:function(){if(!r(e))return e;e="root";for(var n=t.length-1;n>=0;--n){e+=" -> ";var i=t[n],o=i.tag,u=i.key;a(o)?e+=o.replace(/\|\s*[^]*$/g,"| ..."):e+="{{"+u+"}}"}return e},keyList:function(){var e=[];if(t.length<2)return[];for(var r=t.length-2;r>=0;--r)e.push(n.String(t[r].key));return e}}},v=function(){for(var t=arguments.length,e=n.Array(t),r=0;r<t;r++)e[r]=arguments[r];return e.map(function(t){return a(t)?t:i(t)?v.apply(void 0,function(t){if(n.Array.isArray(t)){for(var e=0,r=n.Array(t.length);e<t.length;e++)r[e]=t[e];return r}return n.Array.from(t)}(t)):c(t)?v(n.Object.keys(t).map(function(n){return t[n]&&n})):void 0}).filter(n.Boolean).join(" ")},h=function(t,r){p.browser&&(e(r)||(f(void 0!==n.window,"app : must be run in a browser environment"),r=n.window));var u,l,d,s=function(){},b=function(){return s.apply(void 0,arguments)};return n.Object.assign(b,(u={},l={},{on:function(n,t){f(a(n),"on : handler type is not a string",n),f(o(t),"on : handler is not a function",t),e(u[n])||(u[n]=[]),u[n].push(t)},send:d=function(t){for(var e=arguments.length,r=n.Array(e>1?e-1:0),o=1;o<e;o++)r[o-1]=arguments[o];f(a(t),"send : event type is not a string",t);var c=u[t];if(i(c))for(var l=0;l<c.length;++l)c[l].apply(c,r)},use:function(t){for(var r=arguments.length,i=n.Array(r>1?r-1:0),o=1;o<r;o++)i[o-1]=arguments[o];if(a(t))d.apply(void 0,["blob."+t].concat(i));else{f(c(t),"use : blob is not an object",t);var u=t.name;if(e(u)){if(f(a(u),"utils.bus : blob name is not a string",u),e(l[u]))return;l[u]=!0}for(var s=n.Object.keys(t),b=0;b<s.length;++b){var v=s[b];d("blob."+v,t[v])}}}})),b.on("blob.api",function(t,e){f(c(t),"on.blob.api : additional api is not an object",t),n.Object.keys(t).forEach(function(n){e||f(!b[n],'on.blob.api : cannot add key "'+n+'" because it is already defined'),b[n]=t[n]})}),b.on("blob.primary",function(n){f(o(n),"on.blob.primary : primary is not a function",n),s=n}),y.forEach(function(n){n({on:b.on,send:b.send},r)}),e(t)&&b.use("target",t),b},p={kit:"lite",browser:!0},g=/:\w+/g,y=[function(n){var t=n.on,e=n.send,r={},i=r,a=void 0;t("state",function(n){i=n}),t("blob.handler",function(n){f(o(n),"on.blob.handler : handler generator is not a function",n);var t=n(function(){return i});f(o(t),"on.blob.handler : handler from generator is not a function",t),a=t}),e("blob.handler",function(){return function(n){e("state",n)}});e("blob.api",{setState:function(n){var t=o(n)?n(d(i)):n;a(t)},getState:function(){return f(i!==r,"state.getState : cannot get state before it has been set"),d(i)}})},function(t){var r=t.on,i=t.send,a=void 0,u=void 0,c=void 0,l=void 0,d=void 0,s=void 0,b=void 0;r("blob.target",function(n){a=n,i("update",!0)}),r("blob.builder",function(n){f(o(n),"on.blob.builder : builder is not a function",n),u=n,i("update",!1)}),r("blob.draw",function(n){f(o(n),"on.blob.draw : new draw is not a function",n),l=n,i("update",!0)}),r("blob.update",function(n){f(o(n),"on.blob.update : new target updater is not a function",n),d=n,i("update",!1)}),r("blob.build",function(n){f(o(n),"on.blob.build : new build is not a function",n),c=n,i("update",!1)}),r("state",function(n){f(e(n),"on.blob.state : new state is not defined",n),b=n,i("update",!1)});var v=!1,h=!1,p=null;r("update",function(t){if(!h){if(!(e(a)&&e(u)&&e(b)))return void(p||(p=n.setTimeout(function(){var t={builder:u,state:b,target:a};n.Object.keys(t).forEach(function(n){t[n]=t[n]?"ok":"waiting"}),f(h,"view : still waiting to draw after "+n.Math.round(3)+"s",t)},3e3)));h=!0}if(t||!v)return s=l(a,c(u(b))),void(v=!0);s=d(a,c(u(b)),[],s)}),r("sync",function(n,t){f(v,"view.sync : cannot sync component before app has drawn"),s=d(a,t,n,s)}),i("blob.api",{update:function(){return i("update",!1)}}),i("blob.primary",function(n){i("blob.builder",n())})},function(t){var l=t.send;l("blob.build",function t(d){var h=arguments.length>1&&void 0!==arguments[1]?arguments[1]:b();if("boolean"==typeof d&&(d=null),r(d))return{text:""};if(u(d)&&(d=n.String(d)),a(d))return{text:d};if(f(i(d),"view.build : vdom object is not a recognized type",h.f(),d),o(d[0])){var p=s(d,3),g=p[0],y=p[1],m=void 0===y?{}:y,w=p[2],O=void 0===w?[]:w;f(c(m),"view.build : component's props is not an object",h.f(),d,m),f(i(O),"view.build : component's children is not an array",h.f(),d,O);var k=void 0;return k=g(n.Object.assign({},m,{children:O}),function(){l("sync",h.keyList(),t(k.apply(void 0,arguments),h))}),t(k(),h)}var M=s(d,3),j=M[0],D=M[1],x=void 0===D?{}:D,A=M[2],S=void 0===A?[]:A;f(a(j),"view.build : tag property is not a string",h.f(),d,j),f(c(x),"view.build : attributes is not an object",h.f(),d,x),f(i(S),"view.build : children of vdom object is not an array",h.f(),d,S);var N=/^ *(\w+) *(?:#([-\w\d]+))? *((?:\.[-\w\d]+)*)? *(?:\|\s*([^\s]{1}[^]*?))? *$/.exec(j);f(i(N),"view.build : tag property cannot be parsed",h.f(),j);var E=s(N,5),C=E[1],T=E[2],$=E[3],J=E[4];e(T)&&!e(x.id)&&(x.id=T.trim()),(e(x.className)||e($))&&(x.className=v(x.className,$).replace(/\./g," ").replace(/ +/g," ").trim()),e(J)&&(e(x.style)?(J=(J+";").replace(/;;$/g,";"),x.style=J+x.style):x.style=J),h=h.addTag(j);for(var L={},q=[],B=0;B<S.length;++B){var F=S[B],I=B,K=t(F,h.addKey(I));K.attributes&&"key"in K.attributes&&(I=K.attributes.key,f(u(I)||a(I),"view.build : invalid element key type",h.f(),I),f(n.String(I).match(/^[\w\d-_]+$/g),"view.build : invalid character in element key",h.f(),I)),I=n.String(I),f(!L[I],"view.build : duplicate child key",h.f(),I),q.push(I),L[I]=K}return{tagName:C,attributes:x,children:L,childOrder:q}})},function(t,r){var i=t.send,a=function t(i){if(e(i.text))return i.DOM=r.document.createTextNode(i.text),i;var o=r.document.createElement(i.tagName);n.Object.assign(o,i.attributes);for(var a=0;a<i.childOrder.length;++a){var u=i.childOrder[a],c=t(i.children[u]).DOM;o.appendChild(c)}return i.DOM=o,i},u=function t(r,i,u,c){if(!e(r))return u.children[c]=a(i),void u.DOM.appendChild(u.children[c].DOM);if(!e(i))return u.DOM.removeChild(r.DOM),void delete u.children[c];if(r.tagName!==i.tagName){var l=r.DOM,d=a(i);return u.DOM.replaceChild(d.DOM,l),void n.Object.assign(r,{DOM:void 0,text:void 0,tagName:void 0,attributes:void 0,children:void 0,childOrder:void 0},d)}if(3!==r.DOM.nodeType){for(var f=function(t,e){for(var r=n.Object.keys(n.Object.assign({},t,e)),i=[],a=0;a<r.length;++a){var u=r[a],c=t[u],l=e[u];(o(c)||o(l))&&i.push(u),c!==l&&i.push(u)}return i}(r.attributes,i.attributes),s=0;s<f.length;++s){var b=f[s];r.attributes[b]=i.attributes[b],r.DOM[b]=i.attributes[b]}var v=r.childOrder.slice();r.childOrder=i.childOrder;for(var h=n.Object.keys(n.Object.assign({},r.children,i.children)),p=0;p<h.length;++p){var g=h[p];r.children[g]?i.children[g]||v.splice(v.indexOf(g),1):v.push(g),t(r.children[g],i.children[g],r,g)}if(v.length){for(var y=function(t,e){for(var r=e.length,i=r/2,o=0,a=0,u=0;u<r;++u){for(var c=t.indexOf(e[u]),l=n.Math.min(r-c,r-u),d=1,f=1;f<l&&e[u+f]===t[c+f];++f)d+=1;if(d>o&&(o=d,a=u),o>=i)break}return{start:a,end:a+o-1}}(v,i.childOrder),m=y.start,w=y.end,O=i.childOrder.slice(0,m),k=O.length-1;k>=0;--k){var M=O[k];r.DOM.insertBefore(r.children[M].DOM,r.DOM.firstChild)}for(var j=i.childOrder.slice(w+1,n.Infinity),D=0;D<j.length;++D){var x=j[D];r.DOM.appendChild(r.children[x].DOM)}}}else r.text!==i.text&&(r.DOM.nodeValue=i.text,r.text=i.text)};i("blob.draw",function(n,t){return f(l(n),"view.dom.draw : target is not a DOM node",n),a(t),r.requestAnimationFrame(function(){n.innerHTML="",n.appendChild(t.DOM)}),t}),i("blob.update",function(t,e){var i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[],o=arguments[3];f(l(t),"view.dom.update : target is not a DOM node",t);for(var a={DOM:t,children:{root:o},childOrder:["root"]},c="root",d=o,s=0;s<i.length;++s)c=i[s],a=d,d=d.children[c];return r.requestAnimationFrame(function(){try{u(d,e,a,c)}catch(t){n.console.error("view.dom.update : "+t)}}),o})},function(t,e){var r,i,u=t.on,l=t.send,d=null!==e.document.origin&&"null"!==e.document.origin,s="",b=void 0,v=void 0,h=void 0,p=!1,g=(r=[],i=function(){var n=r[0];n&&n()},{add:function(n){r.push(n),1===r.length&&i()},done:function(){r.shift(),i()}}),y=function(){for(var t=arguments.length,e=n.Array(t),r=0;r<t;r++)e[r]=arguments[r];f(o(h),"router : fetch is not a function",h),h.apply(void 0,[b].concat(e))},m=function(t){var e=s.replace(/([^\w])/g,"\\$1");return t.replace(new n.RegExp("^"+e),"")||""},w=e.location.pathname;d||(w=""),e.onpopstate=function(){w=m(e.location.pathname),y(w)},u("blob.route",function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=n.path,e=n.handler;f(a(t),"on.blob.route : path is not a string",t),f(o(e),"on.blob.route : handler is not a function",t,e),f(o(v),"on.blob.route : register is not a function",v),b=v(b,t,e),p||(p=!!y(w))}),u("blob.base",function(n){f(a(n),"on.blob.base : base url is not a string",n),s=n,w=m(w),y(w)}),u("blob.register",function(n){f(o(n),"on.blob.register : register is not a function",v),v=n}),u("blob.fetch",function(n){f(o(n),"on.blob.fetch : fetch is not a function",h),h=n}),u("redirect",function(t){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};f(a(t),"on.redirect : path is not a string",t),f(c(r),"on.redirect : params is not an object",r),g.add(function(){w=t,d?e.history.pushState({},"",(s+w).replace(/^\/C\:/,"")):n.console.log("@okwolo : path changed to\n>>> "+w),y(w,r),g.done()})}),u("show",function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};f(a(n),"on.show : path is not a string",n),f(c(t),"on.show : params is not an object",t),g.add(function(){y(n,t),g.done()})}),l("blob.api",{redirect:function(n,t){return l("redirect",n,t)},show:function(n,t){return l("show",n,t)}})},function(n){(0,n.send)("blob.fetch",function(){var n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments[1],e=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=!1;return n.find(function(n){var i=n.pattern.exec(t);if(null!==i)return r=!0,i.shift(),n.keys.forEach(function(n,t){e[n.name]=i[t]}),n.handler(e),r}),r})},function(t){(0,t.send)("blob.register",function(){var t,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],r=arguments[1],i=arguments[2],o=(r.match(g)||[]).map(function(n){return{name:n.replace(/^:/g,"")}}),a=void 0;return"**"===r?a=/.*/g:(t=r.replace(/([^\w:])/g,"\\$1").replace(g,"([^/]*)"),a=new n.RegExp("^"+t+"(:?\\?.*)?$")),e.push({keys:o,pattern:a,handler:i}),e})},function(n){n.on;var t=n.send;t("blob.primary",function(n,e){o(n)?t("blob.builder",n()):t("blob.route",{path:n,handler:function(n){t("blob.builder",e(n))}})})}];h.kit="lite",h.version="3.0.0",h.lite=h,n.okwolo=h}).call(this);