UNPKG

yox

Version:

A lightweight mvvm framework

3 lines (2 loc) 16.6 kB
const t="undefined"!=typeof window?window:undefined,e=function(){},n=Object.freeze({}),r=Object.freeze([]),s=/yox/.test(e.toString())?2:3,i={leftDelimiter:"{",rightDelimiter:"}",uglifyCompiled:false,minifyCompiled:false,logLevel:s};function o(t){return"function"==typeof t}function c(t){return Array.isArray(t)}function u(t){return null!==t&&"object"==typeof t}function f(t){return"string"==typeof t}function a(t){return"number"==typeof t&&!isNaN(t)}function l(t){return true===t||false===t}function h(t){return!isNaN(t-parseFloat(t))}var p=Object.freeze({__proto__:null,func:o,array:c,object:u,string:f,number:a,boolean:l,numeric:h});function d(t,e,n){return c(n)?t.apply(e,n):undefined!==e?t.call(e,n):undefined!==n?t(n):t()}class g{constructor(t,e){this.type=t,this.phase=g.PHASE_CURRENT,e&&(this.originalEvent=e)}static is(t){return t instanceof g}preventDefault(){const t=this;if(!t.isPrevented){const{originalEvent:e}=t;e&&e.preventDefault(),t.isPrevented=true}return t}stopPropagation(){const t=this;if(!t.isStoped){const{originalEvent:e}=t;e&&e.stopPropagation(),t.isStoped=true}return t}prevent(){return this.preventDefault()}stop(){return this.stopPropagation()}}function y(t,e,n){const{length:r}=t;if(r)if(n)for(let n=r-1;n>=0&&false!==e(t[n],n);n--);else for(let n=0;n<r&&false!==e(t[n],n);n++);}function m(t,e){t[t.length]=e}function v(t,e){t.unshift(e)}function w(t,e,n){c(e)?y(e,(function(e){n(t,e)})):n(t,e)}function b(t,e){w(t,e,m)}function x(t,e){w(t,e,v)}function $(t,e,n){let r=-1;return y(t,(function(t,s){if(false===n?t==e:t===e)return r=s,false})),r}function E(t,e,n){let r=0;return y(t,(function(s,i){(false===n?s==e:s===e)&&(t.splice(i,1),r++)}),true),r}function k(t,e,n){return $(t,e,n)>=0}function O(t,e,n){let r={};return y(t,(function(t){r[e?t[e]:t]=n||t})),r}function A(t,e){return t.join(e)}function D(t){return!c(t)||!t.length}g.PHASE_CURRENT=0,g.PHASE_UPWARD=1,g.PHASE_DOWNWARD=-1;var _=Object.freeze({__proto__:null,each:y,push:b,unshift:x,indexOf:$,last:function(t){const{length:e}=t;if(e>0)return t[e-1]},pop:function(t){const{length:e}=t;if(e>0)return t.pop()},remove:E,has:k,toArray:function(t){return c(t)?t:d(r.slice,t)},toObject:O,join:A,falsy:D});function C(t){return o(t)&&function(t,e){return null!=t&&t.toString?t.toString():void 0!==e?e:""}(t).indexOf("[native code]")>=0}let j=function(){const t=Object.create(null);return{get:e=>t[e],set(e,n){t[e]=n},has:e=>e in t,keys:()=>Object.keys(t)}};function T(t){const e=j();return function(n){const r=e.get(n);if(undefined!==r)return r;const s=t(n);return e.set(n,s),s}}function P(t){const e=j();return function(n,r){let s=e.get(n);if(s){const t=s.get(r);if(t)return t}else s=j(),e.set(n,s);const i=t(n,r);return s.set(r,i),i}}const S=/-([a-z])/gi,z=/\B([A-Z])/g,R=/^[a-z]/,N=T((function(t){return t.replace(S,(function(t,e){return K(e)}))})),W=T((function(t){return t.replace(z,(function(t,e){return"-"+L(e)}))})),F=T((function(t){return t.replace(R,K)}));function U(t,e,n){return a(n)?e===n?"":t.slice(e,n):t.slice(e)}function H(t,e,n){return t.indexOf(e,undefined!==n?n:0)}function I(t,e,n){return t.lastIndexOf(e,undefined!==n?n:t.length)}function M(t,e){return 0===H(t,e)}function Y(t,e){return t.charCodeAt(e||0)}function K(t){return t.toUpperCase()}function L(t){return t.toLowerCase()}function V(t,e){return H(t,e)>=0}function B(t,e){const n=Object.create(null);return y(t.split(e||","),(function(t){n[t]=true})),n}function G(t){return!f(t)||!t.length}var Z=Object.freeze({__proto__:null,camelize:N,hyphenate:W,capitalize:F,repeat:function(t,e){return A(new Array(e+1),t)},trim:function(t){return G(t)?"":t.trim()},slice:U,indexOf:H,lastIndexOf:I,startsWith:M,endsWith:function(t,e){const n=t.length-e.length;return n>=0&&I(t,e)===n},charAt:function(t,e){return t.charAt(e||0)},codeAt:Y,upper:K,lower:L,has:V,toMap:B,falsy:G});const q=/\./g,J=/\*/g,Q=/\*\*/g,X=P((function(t,e){return t===e||M(t,e+=".")?e.length:-1})),tt=T((function(t){return H(t,".")<0?[t]:t.split(".")}));function et(t,e){const n=f(t)?tt(t):t;for(let t=0,r=n.length-1;t<=r&&false!==e(n[t],t,r);t++);}const nt=P((function(t,e){return t&&e?t+"."+e:t||e})),rt=T((function(t){return V(t,"*")})),st=T((function(t){return new RegExp(`^${t.replace(q,"\\.").replace(J,"(\\w+)").replace(Q,"([.\\w]+?)")}$`)})),it=P((function(t,e){const n=t.match(st(e));return n?n[1]:undefined})),ot={value:undefined};function ct(t){return Object.keys(t)}function ut(t,e){for(let n in t)if(false===e(t[n],n))break}function ft(t,e){return ut(e,(function(e,n){t[n]=e})),t}function at(t,e){let n=t;return c(t)?e?(n=[],y(t,(function(t,r){n[r]=at(t,e)}))):n=t.slice():u(t)&&(n={},ut(t,(function(t,r){n[r]=e?at(t,e):t}))),n}function lt(t){return o(t.get)?t.get():t}function ht(t,e,n){let r=t;return et(e,(function(t,e,s){if(null==r)return r=undefined,false;{let i=r[t],o=undefined!==i;i&&(i=(n||lt)(i)),e===s?o?(ot.value=i,r=ot):r=undefined:r=i}})),r}var pt=Object.freeze({__proto__:null,keys:ct,each:ut,extend:ft,merge:function(t,e){return t&&e?ft(ft({},t),e):t||e},copy:at,get:ht,set:function(t,e,n,r){let s=t;et(e,(function(t,e,i){if(e===i)s[t]=n;else if(s[t])s=s[t];else{if(!r)return false;s=s[t]={}}}))},has:function(t,e){return undefined!==t[e]},falsy:function(t){return!u(t)||c(t)||!ct(t).length}});const dt="undefined"!=typeof console?console:null,gt=t&&/edge|msie|trident/i.test(t.navigator.userAgent)?"":"%c",yt=dt?gt?function(t,e,n){dt.log(gt+t,n,e)}:function(t,e){dt.log(t,e)}:e;function mt(){const{logLevel:t}=i;return t>=1&&t<=5?t:s}function vt(t){return`background-color:${t};border-radius:12px;color:#fff;font-size:10px;padding:3px 6px;`}var wt=Object.freeze({__proto__:null,DEBUG:1,INFO:2,WARN:3,ERROR:4,FATAL:5,debug:function(t,e){mt()<=1&&yt(e||"Yox debug",t,vt("#999"))},info:function(t,e){mt()<=2&&yt(e||"Yox info",t,vt("#2db7f5"))},warn:function(t,e){mt()<=3&&yt(e||"Yox warn",t,vt("#f90"))},error:function(t,e){mt()<=4&&yt(e||"Yox error",t,vt("#ed4014"))},fatal:function(t,e){if(mt()<=5)throw new Error(`[${e||"Yox fatal"}]: ${t}`)}});class bt{constructor(t){this.ns=t||false,this.listeners={}}fire(t,e,n){let r=this,s=f(t)?r.toEvent(t):t,i=r.listeners[s.type],o=true;if(i){i=i.slice();const t=e&&g.is(e[0])?e[0]:undefined;for(let c=0,u=i.length;c<u;c++){let u=i[c];if(!$t(s.ns,u)||!k(i,u)||n&&!n(s,e,u))continue;let f=d(u.listener,u.ctx,e);if(u.num=u.num?u.num+1:1,u.num===u.max&&r.off(s.type,{ns:s.ns,listener:u.listener}),t&&(false===f?t.prevent().stop():t.isStoped&&(f=false)),false===f){o=false;break}}}return o}on(t,e){const n=this,r=n.listeners,s=o(e)?{listener:e}:e;if(u(s)&&o(s.listener)){if(!f(s.ns)){const e=n.toEvent(t);s.ns=e.ns,t=e.type}b(r[t]||(r[t]=[]),s)}}off(t,e){const n=this,r=n.listeners;if(t){const s=n.toFilter(t,e),i=function(t,e){y(t,(function(e,n){xt(s.listener,e)&&$t(s.ns,e)&&t.splice(n,1)}),true),t.length||delete r[e]};s.type?r[s.type]&&i(r[s.type],s.type):s.ns&&ut(r,i)}else n.listeners={}}has(t,e){let n=this.listeners,r=this.toFilter(t,e),s=true,i=function(t){return y(t,(function(t){if(xt(r.listener,t)&&$t(r.ns,t))return s=false})),s};return r.type?n[r.type]&&i(n[r.type]):r.ns&&ut(n,i),!s}toEvent(t){const e={type:t,ns:""};if(this.ns){const n=H(t,".");n>=0&&(e.type=U(t,0,n),e.ns=U(t,n+1))}return e}toFilter(t,e){let n;if(n=e?o(e)?{listener:e}:e:{},f(n.ns))n.type=t;else{const e=this.toEvent(t);n.type=e.type,n.ns=e.ns}return n}}function xt(t,e){return!t||t===e.listener}function $t(t,e){const{ns:n}=e;return!n||!t||n===t}let Et;"function"==typeof setImmediate&&C(setImmediate)&&(Et=setImmediate),Et="function"==typeof MessageChannel&&C(MessageChannel)?function(t){const e=new MessageChannel;e.port1.onmessage=t,e.port2.postMessage(1)}:setTimeout;var kt=Et;let Ot;class At{constructor(t){this.tasks=[],this.hooks=t||n}static shared(){return Ot||(Ot=new At)}append(t,e){const n=this,{tasks:r}=n;b(r,{fn:t,ctx:e}),1===r.length&&kt((function(){n.run()}))}prepend(t,e){const n=this,{tasks:r}=n;x(r,{fn:t,ctx:e}),1===r.length&&kt((function(){n.run()}))}clear(){this.tasks.length=0}run(){const t=this,{tasks:e,hooks:n}=t,{length:r}=e;if(r){t.tasks=[],n.beforeTask&&n.beforeTask();for(let t=0;t<r;t++)d(e[t].fn,e[t].ctx);n.afterTask&&n.afterTask()}}}B("abstract,goto,native,static,enum,implements,package,super,byte,export,import,private,protected,public,synchronized,char,extends,int,throws,class,final,interface,transient,yield,let,const,float,double,boolean,long,short,volatile,default");function Dt(t){const{input:e,getter:n}=t;t.value=e?n.apply(undefined,e):n()}class _t{constructor(){this.map={},this.list=[]}add(t,e){const n=this.map[t.id]||(this.map[t.id]={});n[e]||(n[e]=t,this.list.push([t,e]))}watch(t){const{list:e}=this;if(e)for(let n=0,r=e.length;n<r;n++)e[n][0].watch(e[n][1],t)}unwatch(t){const{list:e}=this;if(e)for(let n=0,r=e.length;n<r;n++)e[n][0].unwatch(e[n][1],t)}}class Ct{constructor(t,e,n,r,s,i,o,c){const u=this;u.status=1,u.keypath=t,u.cache=e,u.input=r,u.output=s,u.setter=o,u.getter=i,u.onChange=c,u.watcherOptions={sync:n,watcher(){u.refresh()}}}get(){const t=this,{status:e,watcherOptions:n}=t;if(t.cache){if(2!==e)if(t.staticDeps)Dt(t);else{let{dynamicDeps:e}=t;e&&e.unwatch(n.watcher),t.dynamicDeps=undefined;const r=Ct.current;Ct.current=t,Dt(t),Ct.current=r,e=t.dynamicDeps,e&&e.watch(n)}}else Dt(t);return 2!==e&&(t.status=2),function(t){const{value:e,output:n}=t;return n?n(e):e}(t)}set(t){const{setter:e}=this;e?e(t):o(t)&&(this.getter=t,this.refresh())}refresh(){const t=this.value;this.status=3;const e=this.get();e!==t&&this.onChange(this.keypath,e,t)}addStaticDeps(t,e){const n=this.staticDeps||(this.staticDeps=new _t);for(let r=0,s=e.length;r<s;r++)n.add(t,e[r]);n.watch(this.watcherOptions)}addDynamicDep(t,e){(this.dynamicDeps||(this.dynamicDeps=new _t)).add(t,e)}}function jt(t,e){return h(t)?+t:undefined!==e?e:0}function Tt(t,e){if(null==t||""===e)return t;const n=ht(t,e);return n?n.value:void 0}function Pt(t,e,r,s,i,o){const a=function(e,n,r){if(n!==r){const c=nt(t,e);for(let t=0;t<i;t++){const e=s[t];undefined!==it(c,e)&&o(e,c,n,r)}Pt(c,n,r,s,i,o)}};(function(t,e,n){const r=f(t),s=f(e);if(r||s)return n("length",r?t.length:void 0,s?e.length:void 0),!0})(e,r,a)||function(t,e,n){const r=c(t),s=c(e);if(r||s){const i=r?t.length:void 0,o=s?e.length:void 0;n("length",i,o);for(let c=0,u=Math.max(i||0,o||0);c<u;c++)n(""+c,r?t[c]:void 0,s?e[c]:void 0);return!0}}(e,r,a)||function(t,e,r){const s=u(t),i=u(e);if(s||i){const o=j(),c=s?t:n,u=i?e:n;if(s)for(let t in c){const e=c[t];e!==u[t]&&(o.set(t,!0),r(t,e,u[t]))}if(i)for(let t in u){const e=u[t];void 0===o.get(t)&&e!==c[t]&&r(t,c[t],e)}}}(e,r,a)}function St(t,e,n,r,s,i){let o;for(const c in r)if(rt(c))undefined!==it(t,c)?i(c,t,e,n):s&&(o?o.push(c):o=[c]);else{const r=X(c,t);if(r>=0){const t=U(c,r),s=Tt(e,t),o=Tt(n,t);s!==o&&i(c,c,s,o)}}o&&Pt(t,e,n,o,o.length,i)}const zt={watcher:e};function Rt(t,e){return o(t)?(zt.watcher=t,zt.immediate=true===e,zt):t}let Nt=0;class Wt{constructor(t,e,n){const r=this;r.id=Nt++,r.data=t||{},r.context=e||r,r.nextTask=n||new At,r.syncEmitter=new bt,r.asyncEmitter=new bt,r.asyncOldValues={},r.asyncKeypaths={},r.onComputedChange=function(t,e,n){r.diff(t,e,n)}}get(t,e,n){const r=this,{data:s}=r,i=Ct.current;if(""===t)return s;i&&!n&&i.addDynamicDep(r,t);const o=ht(s,t);return o?o.value:e}set(t,e){const n=this,{data:r}=n,s=function(t,e){const s=n.get(t);if(e===s)return;let i;et(t,(function(t,n,s){if(0!==n)i&&(n===s?i[t]=e:i=i[t]||(i[t]={}));else{const n=r[t];n&&n instanceof Ct?0===s?n.set(e):i=n.get():0===s?r[t]=e:i=r[t]||(r[t]={})}})),n.diff(t,e,s)};if(f(t))s(t,e);else if(u(t))for(let e in t)s(e,t[e])}diff(t,e,n){let r=this,{syncEmitter:s,asyncEmitter:i,asyncOldValues:o,asyncKeypaths:c}=r,u=36!==Y(t);St(t,e,n,s.listeners,u,(function(t,e,n,r){s.fire({type:t,ns:""},[n,r,e])})),St(t,e,n,i.listeners,u,(function(t,e,n,s){const u=i.listeners[t];for(let t=0,e=u.length;t<e;t++)u[t].count++;c[e]||(o[e]=s,c[e]={}),c[e][t]=true,r.pending||(r.pending=true,r.nextTask.append((function(){r.pending&&r.diffAsync()})))}))}diffAsync(){const t=this,{asyncEmitter:e,asyncOldValues:n,asyncKeypaths:r}=t;t.pending=undefined,t.asyncOldValues={},t.asyncKeypaths={};for(let s in n){const i=[t.get(s),n[s],s],o=r[s],c=i[0]!==i[1],u=function(t,e,n){if(n.count)return n.count--,c};for(let t in o)e.fire({type:t,ns:""},i,u)}}addComputed(t,e){let n,r,s,i,f,a=this,h=a.context,p=true,d=true;if(o(e))s=e.bind(h);else if(u(e)){const t=e;l(t.cache)&&(p=t.cache),l(t.sync)&&(d=t.sync),c(t.deps)&&(n=t.deps),D(t.input)||(r=t.input),o(t.output)&&(f=t.output),o(t.get)&&(s=t.get.bind(h)),o(t.set)&&(i=t.set.bind(h))}if(s){const e=new Ct(t,p,d,r,f,s,i,a.onComputedChange);return p&&n&&e.addStaticDeps(a,n),a.data[t]=e}}removeComputed(t){delete this.data[t]}watch(t,e,n){const r=this,{context:s,syncEmitter:i,asyncEmitter:o}=r,c=function(t,e){const n=e.sync?i:o,c={ns:"",listener:e.watcher,ctx:s,count:0};e.once&&(c.max=1),n.on(t,c),e.immediate&&e.watcher.call(s,r.get(t),undefined,t)};if(f(t))c(t,Rt(e,n));else for(let e in t)c(e,Rt(t[e]))}unwatch(t,e){this.syncEmitter.off(t,e),this.asyncEmitter.off(t,e)}toggle(t){const e=!this.get(t);return this.set(t,e),e}increase(t,e,n){const r=jt(this.get(t),0)+(e||1);if(!a(n)||r<=n)return this.set(t,r),r}decrease(t,e,n){const r=jt(this.get(t),0)-(e||1);if(!a(n)||r>=n)return this.set(t,r),r}insert(t,e,n){let r=this.get(t);r=c(r)?r.slice():[];const{length:s}=r;if(true===n||n===s)r.push(e);else if(false===n||0===n)r.unshift(e);else{if(!(n>0&&n<s))return;r.splice(n,0,e)}return this.set(t,r),true}append(t,e){return this.insert(t,e,true)}prepend(t,e){return this.insert(t,e,false)}removeAt(t,e){let n=this.get(t);if(c(n)&&e>=0&&e<n.length)return n=n.slice(),n.splice(e,1),this.set(t,n),true}remove(t,e){let n=this.get(t);if(c(n)&&(n=n.slice(),E(n,e)))return this.set(t,n),true}copy(t,e){return at(t,e)}destroy(){const t=this;t.syncEmitter.off(),t.asyncEmitter.off(),t.nextTask.clear(),t.data={}}}class Ft{constructor(t){const e=this,r=t||n;e.$emitter=new bt(true),r.events&&e.on(r.events);let{data:s,props:i,vnode:c,propTypes:f,computed:a,methods:l,watchers:h,extensions:p}=r;e.$options=r,p&&ft(e,p);const d=i?at(i):{},g=e.$observer=new Wt(d,e,e.$nextTask=new At);a&&ut(a,(function(t,e){g.addComputed(e,t)}));const y=o(s)?s.call(e,t):s;u(y)&&ut(y,(function(t,e){d[e]=t})),l&&ut(l,(function(t,n){e[n]=t})),h&&g.watch(h)}static define(t){return t}static use(t){t.install(Ft)}static nextTick(t,e){At.shared().append(t,e)}static compile(t,e){return t}static directive(t,e){}static transition(t,e){}static component(t,e){}static filter(t,e){}static method(t,e){if(f(t)&&!e)return Ut[t];!function(t,e,n,r){f(e)?Ht(t,e,n,r):ut(e,(function(e,n){Ht(t,n,e,r)}))}(Ut,t,e)}get(t,e){return this.$observer.get(t,e)}set(t,e){const{$observer:n}=this;n&&n.set(t,e)}on(t,e){return Mt(this,t,e),this}once(t,e){return Mt(this,t,e,true),this}off(t,e){return this.$emitter.off(t,e),this}fire(t,e,n){const r=this,{$emitter:s,$parent:i,$children:o}=r;let c;if(g.is(t))c=t;else if(f(t))c=new g(t);else{const e=t;c=new g(e.type),c.ns=e.ns}if(undefined===c.ns){const t=s.toEvent(c.type);c.type=t.type,c.ns=t.ns}c.target||(c.target=r);let a,l=[c];return u(e)?b(l,e):true===e&&(n=true),a=!(!n||c.target!==r)||s.fire(c,l),a&&(n?o&&(c.phase=g.PHASE_DOWNWARD,y(o,(function(t){return a=t.fire(c,e,true)}))):i&&(c.phase=g.PHASE_UPWARD,a=i.fire(c,e))),a}watch(t,e,n){return this.$observer.watch(t,e,n),this}unwatch(t,e){return this.$observer.unwatch(t,e),this}loadComponent(t,e){}createComponent(t,e){return this}directive(t,e){}transition(t,e){}component(t,e){}filter(t,e){}forceUpdate(t){}render(){}update(t,e){}checkProp(t,e){}destroy(){const{$parent:t,$options:e,$emitter:n,$observer:r}=this;r.destroy(),n.off(),this.$el=undefined}nextTick(t){this.$nextTask.append(t,this)}toggle(t){return this.$observer.toggle(t)}increase(t,e,n){return this.$observer.increase(t,e,n)}decrease(t,e,n){return this.$observer.decrease(t,e,n)}insert(t,e,n){return this.$observer.insert(t,e,n)}append(t,e){return this.$observer.append(t,e)}prepend(t,e){return this.$observer.prepend(t,e)}removeAt(t,e){return this.$observer.removeAt(t,e)}remove(t,e){return this.$observer.remove(t,e)}copy(t,e){return this.$observer.copy(t,e)}}Ft.version="1.0.0-alpha.408",Ft.is=p,Ft.array=_,Ft.object=pt,Ft.string=Z,Ft.logger=wt,Ft.Event=g,Ft.Emitter=bt,Ft.config=i;const Ut=Ft.prototype;function Ht(t,e,n,r){r&&r.format&&(n=r.format(n)),t[e]=n}function It(t,e,n){t.$emitter.on(e.type,{listener:e.listener,ns:e.ns,max:n?1:-1,ctx:t})}function Mt(t,e,n,r){const{$emitter:s}=t;f(e)?It(t,s.toFilter(e,n),r):c(e)?y(e,(function(e){It(t,e,r)})):ut(e,(function(e,n){It(t,s.toFilter(n,e),r)}))}O(ct(Ut));export default Ft; //# sourceMappingURL=yox.esm.min.js.map