ie({op:t})}function ue(t){return e=>ie({op:t},"field").field(e)}function se(t){return(e,n)=>ie({op:t},"field","param").field(e).param(n)}var oe=function(t,e,n){return t.fields=e||[],t.fname=n,t},le=function(t){throw Error(t)},fe=function(t){function e(){a.push(l+t.substring(n,i)),l="",n=i+1}var n,i,r,a=[],u=null,s=0,o=t.length,l="";for(t+="",n=i=0;in&&e(),s=n=i+1):"]"===r&&(s||le("Access path missing open bracket: "+t),s>0&&e(),s=0,n=i+1):i>n?e():n=i+1}return s&&le("Access path missing closing bracket: "+t),u&&le("Access path missing closing quote: "+t),i>n&&(i++,e()),a},ce=Array.isArray,he=function(t){return t===Object(t)},de=function(t){return"string"==typeof t},me=function(t,e){var n=fe(t),i="return _["+n.map(r).join("][")+"];";return oe(Function("_",i),[t=1===n.length?n[0]:t],e||t)},pe=[],ve=me("id"),ge=oe(function(t){return t},pe,"identity"),ye=oe(function(){return 0},pe,"zero"),_e=(oe(function(){return 1},pe,"one"),oe(function(){return!0},pe,"true")),xe=(oe(function(){return!1},pe,"false"),1),De=3,be=4,we=function(t){var e=t||0;return{level:function(t){return arguments.length?(e=+t,this):e},error:function(){return e>=xe&&a("error","ERROR",arguments),this},warn:function(){return e>=2&&a("warn","WARN",arguments),this},info:function(){return e>=De&&a("log","INFO",arguments),this},debug:function(){return e>=be&&a("log","DEBUG",arguments),this}}},ke=function(t){return null==t||""===t?null:+t},Oe=function(t){return null!=t?ce(t)?t:[t]:[]},Me=function(t){return"function"==typeof t},Ee=function(t,e){var n,a,u,s,o,l,f,c,h,d=[],m=(t=Oe(t)).map(function(t,e){return null==t?null:(d.push(e),Me(t)?t:fe(t).map(r).join("]["))}),p=d.length-1,v=Oe(e),g="var u,v;return ";if(p<0)return null;for(a=0;a<=p;++a)u=m[n=d[a]],Me(u)?(s="(u=this."+(l="f"+n)+"(a))",o="(v=this."+l+"(b))",(f=f||{})[l]=u):(s="(u=a["+u+"])",o="(v=b["+u+"])"),l="((v=v instanceof Date?+v:v),(u=u instanceof Date?+u:u))","descending"!==v[n]?(h=1,c=-1):(h=-1,c=1),g+="("+s+"<"+o+"||u==null)&&v!=null?"+c+":(u>v||v==null)&&u!=null?"+h+":"+l+"!==u&&v===v?"+c+":v!==v&&u===u?"+h+(n=i){n=r=i;break}for(a=u=s;++si&&(n=i,a=s),r=i){n=r=i;break}for(a=u=s;++si&&(n=i,a=s),r0?n[o++]:e[s++];for(;s=0?(a[e]!==n||i)&&(a[e]=n,u[e+":"+t]=-1,u[t]=-1):(a!==n||i)&&(r[t]=n,u[t]=ce(n)?1+n.length:-1),r},Ge.modified=function(t,e){var n,i=this[Be];if(!arguments.length){for(n in i)if(i[n])return!0;return!1}if(ce(t)){for(n=0;n=0?e+1t?(e=n,1):0})},Ve.debounce=function(t){var e=_();return this.targets().add(_(null,null,Ne(t,function(t){var n=t.dataflow;e.receive(t),n&&n.run&&n.run()}))),e},Ve.between=function(t,e){var n=!1;return t.targets().add(_(null,null,function(){n=!0})),e.targets().add(_(null,null,function(){n=!1})),this.filter(function(){return n})};var Xe={skip:!0},Ye={},Ze=w.prototype;Ze.StopPropagation=Ye,Ze.ADD=1,Ze.REM=2,Ze.MOD=4,Ze.ADD_REM=3,Ze.ADD_MOD=5,Ze.ALL=7,Ze.REFLOW=8,Ze.SOURCE=16,Ze.NO_SOURCE=32,Ze.NO_FIELDS=64,Ze.fork=function(t){return new w(this.dataflow).init(this,t)},Ze.addAll=function(){var t=this;return this.source&&this.source.length!==this.add.length?(t=new w(this.dataflow).init(this),t.add=t.source,t):t},Ze.init=function(t,e){var n=this;return n.stamp=t.stamp,n.encode=t.encode,!t.fields||64&e||(n.fields=t.fields),1&e?(n.addF=t.addF,n.add=t.add):(n.addF=null,n.add=[]),2&e?(n.remF=t.remF,n.rem=t.rem):(n.remF=null,n.rem=[]),4&e?(n.modF=t.modF,n.mod=t.mod):(n.modF=null,n.mod=[]),32&e?(n.srcF=null,n.source=null):(n.srcF=t.srcF,n.source=t.source),n},Ze.runAfter=function(t){this.dataflow.runAfter(t)},Ze.changed=function(t){var e=t||7;return 1&e&&this.add.length||2&e&&this.rem.length||4&e&&this.mod.length},Ze.reflow=function(t){if(t)return this.fork(7).reflow();var e=this.add.length,n=this.source&&this.source.length;return n&&n!==e&&(this.mod=this.source,e&&this.filter(4,M(this,1))),this},Ze.modifies=function(t){var e=Oe(t),n=this.fields||(this.fields={});return e.forEach(function(t){n[t]=!0}),this},Ze.modified=function(t){var e=this.fields;return!(!this.mod.length||!e)&&(arguments.length?ce(t)?t.some(function(t){return e[t]}):e[t]:!!e)},Ze.filter=function(t,e){var n=this;return 1&t&&(n.addF=k(n.addF,e)),2&t&&(n.remF=k(n.remF,e)),4&t&&(n.modF=k(n.modF,e)),16&t&&(n.srcF=k(n.srcF,e)),n},Ze.materialize=function(t){var e=this;return 1&(t=t||7)&&e.addF&&(e.add=O(e.add,e.addF),e.addF=null),2&t&&e.remF&&(e.rem=O(e.rem,e.remF),e.remF=null),4&t&&e.modF&&(e.mod=O(e.mod,e.modF),e.modF=null),16&t&&e.srcF&&(e.source=e.source.filter(e.srcF),e.srcF=null),e},Ze.visit=function(t,e){var n,i,r=this,a=e;return 16&t?($e(r.source,r.srcF,a),r):(1&t&&$e(r.add,r.addF,a),2&t&&$e(r.rem,r.remF,a),4&t&&$e(r.mod,r.modF,a),8&t&&(n=r.source)&&((i=r.add.length+r.mod.length)===n.length||(i?$e(n,M(r,5),a):$e(n,r.srcF,a))),r)};var tn=Pe(E,w);tn.fork=function(t){var e=new w(this.dataflow).init(this,t&this.NO_FIELDS);return void 0!==t&&(t&e.ADD&&this.visit(e.ADD,function(t){return e.add.push(t)}),t&e.REM&&this.visit(e.REM,function(t){return e.rem.push(t)}),t&e.MOD&&this.visit(e.MOD,function(t){return e.mod.push(t)})),e},tn.changed=function(t){return this.changes&t},tn.modified=function(t){var e=this,n=e.fields;return n&&e.changes&e.MOD?ce(t)?t.some(function(t){return n[t]}):n[t]:0},tn.filter=function(){le("MultiPulse does not support filtering.")},tn.materialize=function(){le("MultiPulse does not support materialization.")},tn.visit=function(t,e){var n=this,i=n.pulses,r=i.length,a=0;if(t&n.SOURCE)for(;a=0;)r.push(e=n[i]),e===t&&le("Cycle detected in dataflow graph.")},rn.pulse=function(t,e,n){this.touch(t,n||en);var i=new w(this,this._clock+(this._pulse?0:1)),r=t.pulse&&t.pulse.source||[];return i.target=t,this._pulses[t.id]=e.pulse(i,r),this},rn.touch=function(t,e){var n=e||en;return this._pulse?this._enqueue(t):this._touched.add(t),n.skip&&t.skip(!0),this},rn.update=function(t,e,n){var i=n||en;return(t.set(e)||i.force)&&this.touch(t,i),this},rn.changeset=m,rn.ingest=function(t,n,i){return this.pulse(t,this.changeset().insert(e.read(n,i)))},rn.request=function(t,e,n){var i=this,r=i._pending||x(i);r.requests+=1,i.loader().load(e,{context:"dataflow"}).then(function(e){i.ingest(t,e,n)},function(t){i.error("Loading failed",e,t)}).catch(function(t){i.error("Data ingestion failed",e,t)}).then(r.done,r.done)},rn.events=function(t,e,n,i){for(var r,a=this,u=_(n,i),s=0,o=(r="string"==typeof t&&"undefined"!=typeof document?document.querySelectorAll(t):Oe(t)).length;s=De&&(i=Date.now(),a.debug("-- START PROPAGATION ("+a._clock+") -----")),a._touched.forEach(function(t){a._enqueue(t,!0)}),a._touched=u(ve);try{for(;a._heap.size()>0;)(e=a._heap.pop()).rank===e.qrank?(n=e.run(a._getPulse(e,t)),o>=be&&a.debug(e.id,n===Ye?"STOP":n,e),n!==Ye&&(a._pulse=n,e._targets&&e._targets.forEach(function(t){a._enqueue(t)})),++s):a._enqueue(e,!0)}catch(t){r=t}if(a._pulses={},a._pulse=null,o>=De&&(i=Date.now()-i,a.info("> Pulse "+a._clock+": "+s+" operators; "+i+"ms")),r&&(a._postrun=[],a.error(r)),a._onrun)try{a._onrun(a,s,r)}catch(t){a.error(t)}if(a._postrun.length){var l=a._postrun;a._postrun=[],l.forEach(function(t){try{t(a)}catch(t){a.error(t)}})}return s},rn.runAsync=function(){return this._pending||Promise.resolve(this.run())},rn.runAfter=function(t,e){if(this._pulse||e)this._postrun.push(t);else try{t(this)}catch(t){this.error(t)}},rn._enqueue=function(t,e){var n=!this._pulses[t.id];n&&(this._pulses[t.id]=this._pulse),(n||e)&&(t.qrank=t.rank,this._heap.push(t))},rn._getPulse=function(t,e){var n,i=t.source,r=this._clock;return i&&ce(i)?(n=i.map(function(t){return t.pulse}),new E(this,r,n,e)):(i=i&&i.pulse,n=this._pulses[t.id],i&&i!==Ye&&(i.stamp===r&&n.target!==t?n=i:n.source=i.source),n)},rn.error=R("error"),rn.warn=R("warn"),rn.info=R("info"),rn.debug=R("debug"),rn.logLevel=R("level");var an=Pe(S,v);an.run=function(t){if(t.stamp<=this.stamp)return t.StopPropagation;var e;return this.skip()?this.skip(!1):e=this.evaluate(t),(e=e||t)!==t.StopPropagation&&(this.pulse=e),this.stamp=t.stamp,e},an.evaluate=function(t){var e=this.marshall(t.stamp),n=this.transform(e,t);return e.clear(),n},an.transform=function(){};const un=(new F).logLevel(2);let sn=[];un.addDataListener=function(t,e){sn.push({op:t,fn:e})},un.removeDataListener=function(t,e){let n=null;for(let i of sn)if(i.op===t&&i.fn===e){n=i;break}n&&(sn=sn.filter(t=>t!==n))},un._onrun=function(){let t=un.stamp(),e=sn.filter(e=>e.op.stamp===t);e.length&&setTimeout(function(){e.forEach(t=>t.fn(t.op.value))},0)};var on={values:I({name:"values",init:"cell.store = true;",set:"cell.data.values()",idx:-1}),count:I({name:"count",set:"cell.num"}),missing:I({name:"missing",set:"this.missing"}),valid:I({name:"valid",set:"this.valid"}),sum:I({name:"sum",init:"this.sum = 0;",add:"this.sum += v;",rem:"this.sum -= v;",set:"this.sum"}),mean:I({name:"mean",init:"this.mean = 0;",add:"var d = v - this.mean; this.mean += d / this.valid;",rem:"var d = v - this.mean; this.mean -= this.valid ? d / this.valid : this.mean;",set:"this.mean"}),average:I({name:"average",set:"this.mean",req:["mean"],idx:1}),variance:I({name:"variance",init:"this.dev = 0;",add:"this.dev += d * (v - this.mean);",rem:"this.dev -= d * (v - this.mean);",set:"this.valid > 1 ? this.dev / (this.valid-1) : 0",req:["mean"],idx:1}),variancep:I({name:"variancep",set:"this.valid > 1 ? this.dev / this.valid : 0",req:["variance"],idx:2}),stdev:I({name:"stdev",set:"this.valid > 1 ? Math.sqrt(this.dev / (this.valid-1)) : 0",req:["variance"],idx:2}),stdevp:I({name:"stdevp",set:"this.valid > 1 ? Math.sqrt(this.dev / this.valid) : 0",req:["variance"],idx:2}),stderr:I({name:"stderr",set:"this.valid > 1 ? Math.sqrt(this.dev / (this.valid * (this.valid-1))) : 0",req:["variance"],idx:2}),distinct:I({name:"distinct",set:"cell.data.distinct(this.get)",req:["values"],idx:3}),ci0:I({name:"ci0",set:"cell.data.ci0(this.get)",req:["values"],idx:3}),ci1:I({name:"ci1",set:"cell.data.ci1(this.get)",req:["values"],idx:3}),median:I({name:"median",set:"cell.data.q2(this.get)",req:["values"],idx:3}),q1:I({name:"q1",set:"cell.data.q1(this.get)",req:["values"],idx:3}),q3:I({name:"q3",set:"cell.data.q3(this.get)",req:["values"],idx:3}),argmin:I({name:"argmin",init:"this.argmin = null;",add:"if (v < this.min) this.argmin = t;",rem:"if (v <= this.min) this.argmin = null;",set:"this.argmin || cell.data.argmin(this.get)",req:["min"],str:["values"],idx:3}),argmax:I({name:"argmax",init:"this.argmax = null;",add:"if (v > this.max) this.argmax = t;",rem:"if (v >= this.max) this.argmax = null;",set:"this.argmax || cell.data.argmax(this.get)",req:["max"],str:["values"],idx:3}),min:I({name:"min",init:"this.min = null;",add:"if (v < this.min || this.min === null) this.min = v;",rem:"if (v <= this.min) this.min = NaN;",set:"this.min = (isNaN(this.min) ? cell.data.min(this.get) : this.min)",str:["values"],idx:4}),max:I({name:"max",init:"this.max = null;",add:"if (v > this.max || this.max === null) this.max = v;",rem:"if (v >= this.max) this.max = NaN;",set:"this.max = (isNaN(this.max) ? cell.data.max(this.get) : this.max)",str:["values"],idx:4})},ln=Object.keys(on),fn=function(t){var e,n,i,r,a,u,s,o,l=t.maxbins||20,f=t.base||10,c=Math.log(f),h=t.divide||[5,2],d=t.extent[0],m=t.extent[1],p=m-d;if(t.step)e=t.step;else if(t.steps){for(a=p/l,u=0,s=t.steps.length;ul;)e*=f;for(u=0,s=h.length;u=i&&p/a<=l&&(e=a)}return a=Math.log(e),r=a>=0?0:1+~~(-a/c),o=Math.pow(f,-r-1),(t.nice||void 0===t.nice)&&(d=d<(a=Math.floor(d/e+o)*e)?a-e:a,m=Math.ceil(m/e)*e),{start:d,stop:m,step:e}},cn=function(t,e){var n,i=[],r=t.length,a=-1;if(null==e)for(;++ae?1:t>=e?0:NaN},mn=function(t){return 1===t.length&&(t=G(t)),{left:function(e,n,i,r){for(null==i&&(i=0),null==r&&(r=e.length);i>>1;t(e[a],n)<0?i=a+1:r=a}return i},right:function(e,n,i,r){for(null==i&&(i=0),null==r&&(r=e.length);i>>1;t(e[a],n)>0?r=a:i=a+1}return i}}},pn=(mn(dn),function(t){return null===t?NaN:+t}),vn=function(t,e){var n,i,r=t.length,a=0,u=-1,s=0,o=0;if(null==e)for(;++u1)return o/(a-1)},gn=function(t,e){var n,i,r,a=t.length,u=-1;if(null==e){for(;++u=n)for(i=r=n;++un&&(i=n),r=n)for(i=r=n;++un&&(i=n),r=1)return+n(t[i-1],i-1,t);var i,r=(i-1)*e,a=Math.floor(r),u=+n(t[a],a,t);return u+(+n(t[a+1],a+1,t)-u)*(r-a)}},xn=function(t,e,n,i){var r,a,u,s,o=cn(t,i),l=o.length,f=e;for(u=0,s=Array(f);u1);return e=Math.sqrt(-2*Math.log(t)/t),r=n+u*e*i,n+a*e*i},a.pdf=function(t){var e=Math.exp(Math.pow(t-n,2)/(-2*Math.pow(i,2)));return 1/(i*Math.sqrt(2*Math.PI))*e},a.cdf=function(t){var e,r=(t-n)/i,a=Math.abs(r);if(a>37)e=0;else{var u=Math.exp(-a*a/2);a<7.07106781186547?(e=u*((((((.0352624965998911*a+.700383064443688)*a+6.37396220353165)*a+33.912866078383)*a+112.079291497871)*a+221.213596169931)*a+220.206867912376),e/=((((((.0883883476483184*a+1.75566716318264)*a+16.064177579207)*a+86.7807322029461)*a+296.564248779674)*a+637.333633378831)*a+793.826512519948)*a+440.413735824752):e=u/(a+1/(a+2/(a+3/(a+4/(a+.65)))))/2.506628274631}return r>0?1-e:e},a.icdf=function(t){if(t<=0||t>=1)return NaN;var e=2*t-1,r=8*(Math.PI-3)/(3*Math.PI*(4-Math.PI)),a=2/(Math.PI*r)+Math.log(1-Math.pow(e,2))/2,u=Math.log(1-e*e)/r,s=(e>0?1:-1)*Math.sqrt(Math.sqrt(a*a-u)-a);return n+i*Math.SQRT2*s},a.mean(t).stdev(e)},wn=K.prototype;wn.reset=function(){this._add=[],this._rem=[],this._ext=null,this._get=null,this._q=null},wn.add=function(t){this._add.push(t)},wn.rem=function(t){this._rem.push(t)},wn.values=function(){if(this._get=null,0===this._rem.length)return this._add;var t,e,n,i=this._add,r=this._rem,a=this._key,u=i.length,s=r.length,o=Array(u-s),l={};for(t=0;t=0;)e=t(n[i])+"",r.hasOwnProperty(e)||(r[e]=1,++a);return a},wn.extent=function(t){if(this._get!==t||!this._ext){var e=this.values(),n=Fe(e,t);this._ext=[e[n[0]],e[n[1]]],this._get=t}return this._ext},wn.argmin=function(t){return this.extent(t)[0]||{}},wn.argmax=function(t){return this.extent(t)[1]||{}},wn.min=function(t){var e=this.extent(t)[0];return null!=e?t(e):1/0},wn.max=function(t){var e=this.extent(t)[1];return null!=e?t(e):-1/0},wn.quartile=function(t){return this._get===t&&this._q||(this._q=Dn(this.values(),t),this._get=t),this._q},wn.q1=function(t){return this.quartile(t)[0]},wn.q2=function(t){return this.quartile(t)[1]},wn.q3=function(t){return this.quartile(t)[2]},wn.ci=function(t){return this._get===t&&this._ci||(this._ci=xn(this.values(),1e3,.05,t),this._get=t),this._ci},wn.ci0=function(t){return this.ci(t)[0]},wn.ci1=function(t){return this.ci(t)[1]},Q.Definition={type:"Aggregate",metadata:{generates:!0,changes:!0},params:[{name:"groupby",type:"field",array:!0},{name:"ops",type:"enum",array:!0,values:ln},{name:"fields",type:"field",null:!0,array:!0},{name:"as",type:"string",null:!0,array:!0},{name:"drop",type:"boolean",default:!0},{name:"cross",type:"boolean",default:!1},{name:"key",type:"field"}]};var kn=Pe(Q,S);kn.transform=function(t,e){var n,i=this,r=e.fork(e.NO_SOURCE|e.NO_FIELDS);return this.stamp=r.stamp,this.value&&((n=t.modified())||e.modified(this._inputs))?(this._prev=this.value,this.value=n?this.init(t):{},e.visit(e.SOURCE,function(t){i.add(t)})):(this.value=this.value||this.init(t),e.visit(e.REM,function(t){i.rem(t)}),e.visit(e.ADD,function(t){i.add(t)})),r.modifies(this._outputs),i._drop=!1!==t.drop,t.cross&&i._dims.length>1&&(i._drop=!1,this.cross()),i.changes(r)},kn.cross=function(){function t(t){var e,n,i,s;for(e in t)for(i=t[e].tuple,n=0;n=n&&t<=i?1/r:0},a.cdf=function(t){return ti?1:(t-n)/r},a.icdf=function(t){return t>=0&&t<=1?n+t*r:NaN},a.min(t).max(e)}},Nn="distributions",An="function",Fn="field",Rn=[{key:{function:"normal"},params:[{name:"mean",type:"number",default:0},{name:"stdev",type:"number",default:1}]},{key:{function:"uniform"},params:[{name:"min",type:"number",default:0},{name:"max",type:"number",default:1}]},{key:{function:"kde"},params:[{name:"field",type:"field",required:!0},{name:"from",type:"data"},{name:"bandwidth",type:"number",default:0}]}],Sn={key:{function:"mixture"},params:[{name:"distributions",type:"param",array:!0,params:Rn},{name:"weights",type:"number",array:!0}]};rt.Definition={type:"Density",metadata:{generates:!0,source:!0},params:[{name:"extent",type:"number",array:!0,length:2},{name:"steps",type:"number",default:100},{name:"method",type:"string",default:"pdf",values:["pdf","cdf"]},{name:"distribution",type:"param",params:Rn.concat(Sn)},{name:"as",type:"string",array:!0,default:["value","density"]}]},Pe(rt,S).transform=function(t,e){var n=e.fork(e.NO_SOURCE|e.NO_FIELDS);if(!this.value||e.changed()||t.modified()){var i=it(t.distribution,at(e)),r=t.method||"pdf";"pdf"!==r&&"cdf"!==r&&le("Invalid density method: "+r),t.extent||i.data||le("Missing density extent parameter."),r=i[r];var a=t.as||["value","density"],u=t.extent||gn(i.data()),s=(u[1]-u[0])/(t.steps||100),o=yn(u[0],u[1]+s/2,s).map(function(t){var e={};return e[a[0]]=t,e[a[1]]=r(t),l(e)});this.value&&(n.rem=this.value),this.value=n.add=n.source=o}return n},ut.Definition={type:"Extent",metadata:{},params:[{name:"field",type:"field",required:!0}]},Pe(ut,S).transform=function(t,e){var n=this.value,i=t.field,r=n[0],a=n[1],u=e.ADD;(e.changed()||e.modified(i.fields)||t.modified("field"))&&(u=e.SOURCE,r=1/0,a=-1/0),e.visit(u,function(t){var e=i(t);null!=e&&(ea&&(a=e))}),this.value=[r,a]};var Pn=Pe(st,v);Pn.connect=function(t){return this.targets().add(t),t.source=this},Pn.add=function(t){this.value.add.push(t)},Pn.rem=function(t){this.value.rem.push(t)},Pn.mod=function(t){this.value.mod.push(t)},Pn.init=function(t){this.value.init(t,t.NO_SOURCE)},Pn.evaluate=function(){return this.value};var jn=Pe(ot,S);jn.activate=function(t){this._targets[this._targets.active++]=t},jn.subflow=function(t,e,n,i){var r,a,u=this.value,s=u.hasOwnProperty(t)&&u[t];return s?s.value.stampi.cleanThreshold&&i.runAfter(o.clean),e},Pe(lt,v),ct.Definition={type:"Filter",metadata:{changes:!0},params:[{name:"expr",type:"expr",required:!0}]},Pe(ct,S).transform=function(t,e){function n(e){var n=s(e),i=f(e,t),a=r.get(n);i&&a?(r.delete(n),u.push(e)):i||a?c&&i&&!a&&l.push(e):(r.set(n,1),o.push(e))}var i=e.dataflow,r=this.value,a=e.fork(),u=a.add,o=a.rem,l=a.mod,f=t.expr,c=!0;return e.visit(e.REM,function(t){var e=s(t);r.has(e)?r.delete(e):o.push(t)}),e.visit(e.ADD,function(e){f(e,t)?u.push(e):r.set(s(e),1)}),e.visit(e.MOD,n),t.modified()&&(c=!1,e.visit(e.REFLOW,n)),r.empty>i.cleanThreshold&&i.runAfter(r.clean),a},ht.Definition={type:"Fold",metadata:{generates:!0,changes:!0},params:[{name:"fields",type:"field",array:!0,required:!0},{name:"as",type:"string",array:!0,length:2,default:["key","value"]}]},Pe(ht,S).transform=function(t,e){function n(t){for(var e,n=r[s(t)]=Array(m),i=0;i0){for(n=[];--s>=0;)n.push(r=l(o(t))),a.push(r);u.add=u.add.length?u.materialize(u.ADD).add.concat(n):n}else i=a.slice(0,-s),u.rem=u.rem.length?u.materialize(u.REM).rem.concat(i):i,a=a.slice(-s);return u.source=this.value=a,u};var Cn={value:"value",median:function(t,e){var n,i=t.length,r=-1,a=[];if(null==e)for(;++r=n)for(i=n;++an&&(i=n)}else for(;++a=n)for(i=n;++an&&(i=n);return i},max:function(t,e){var n,i,r=t.length,a=-1;if(null==e){for(;++a=n)for(i=n;++ai&&(i=n)}else for(;++a=n)for(i=n;++ai&&(i=n);return i}},Un=[];vt.Definition={type:"Impute",metadata:{changes:!0},params:[{name:"field",type:"field",required:!0},{name:"key",type:"field",required:!0},{name:"keyvals",array:!0},{name:"groupby",type:"field",array:!0},{name:"method",type:"enum",default:"value",values:["value","mean","median","max","min"]},{name:"value",default:0}]},Pe(vt,S).transform=function(t,e){var i,r,a,u,s,o,f,c,h,d,m=e.fork(e.ALL),p=gt(t),v=yt(t),g=n(t.field),y=n(t.key),_=(t.groupby||[]).map(n),x=_t(e.source,t.groupby,t.key,t.keyvals),D=[],b=this.value,w=x.domain.length;for(s=0,c=x.length;s1&&!u&&le('Multi-field lookup requires explicit "as" parameter.'),u&&u.length!==d*r&&le('The "as" parameter has too few output field names.'),u=u||l.map(n),i=function(t){for(var e,n,i=0,a=0;i=l&&(e=u[n],f[s(e)]&&i.rem.push(e),u[n]=t),++o}var i=e.fork(),r=t.modified("size"),a=t.size,u=this.value,o=this.count,l=0,f=u.reduce(function(t,e){return t[s(e)]=1,t},{});if(e.rem.length&&(e.visit(e.REM,function(t){var e=s(t);f[e]&&(f[e]=-1,i.rem.push(t)),--o}),u=u.filter(function(t){return-1!==f[s(t)]})),(e.rem.length||r)&&u.lengtha){for(var c=0,h=u.length-a;ci.cleanThreshold&&i.runAfter(a.clean),e.fork()},Pe(zt,S).transform=function(t,e){(!this.value||t.modified("field")||t.modified("sort")||e.changed()||t.sort&&e.modified(t.sort.fields))&&(this.value=(t.sort?e.source.slice().sort(t.sort):e.source).map(t.field))};var zn={row_number:function(){return{next:function(t){return t.index+1}}},rank:function(){var t;return{init:function(){t=1},next:function(e){var n=e.index,i=e.data;return n&&e.compare(i[n-1],i[n])?t=n+1:t}}},dense_rank:function(){var t;return{init:function(){t=1},next:function(e){var n=e.index,i=e.data;return n&&e.compare(i[n-1],i[n])?++t:t}}},percent_rank:function(){var t=zn.rank(),e=t.next;return{init:t.init,next:function(t){return(e(t)-1)/(t.data.length-1)}}},cume_dist:function(){var t;return{init:function(){t=0},next:function(e){var n=e.index,i=e.data,r=e.compare;if(t0||le("ntile num must be greater than zero.");var n=zn.cume_dist(),i=n.next;return{init:n.init,next:function(t){return Math.ceil(e*i(t))}}},lag:function(t,e){return e=+e||1,{next:function(n){var i=n.index-e;return i>=0?t(n.data[i]):null}}},lead:function(t,e){return e=+e||1,{next:function(n){var i=n.index+e,r=n.data;return i0||le("nth_value nth must be greater than zero."),{next:function(n){var i=n.i0+(e-1);return i{const e=t.length,n=t.name,i=Qn[t.type];return r=>(ce(r)||le(`Expected array parameter: ${n}.`),null!=e&&r.length!==e&&le(`Expected array of length ${e}: ${n}.`),r.map(i(t)))},compare:t=>e=>{let n=e;return n&&Me(n.toObject)&&(n=n.toObject()),de(n)&&(n=Oe(n)),ce(n)&&(n=Ht(n)),he(n)&&!Me(n)?Me(n.accessor)?oe(n.accessor,n.fields):Ee(n.fields,n.orders):le(`Unrecognized comparator value for parameter: ${t.name}.`)},enum:t=>{const e=Ie(t.values);return n=>e[n]?n:le(`Invalid parameter value '${n+""}' for ${t.name}. Must be one of [${t.values}].`)},expr:t=>e=>Vt(e)||le(`Invalid parameter value '${e+""}' for ${t.name}.`),field:t=>e=>Xt(e)||le(`Invalid parameter value '${e+""}' for ${t.name}.`),measure:()=>t=>Yt(t,Jn),window:()=>t=>Yt(t,Kn),boolean:()=>Le,number:()=>ke,regexp:()=>Qt,string:()=>ze};var Hn=function(t,e){let n=(e=Oe(e)).length,i=t.type.toLowerCase(),r=t.params,a=t.metadata;return function(){let t,u=Zt(i,r,a),s=0;for(;sie({op:t},"param").param(e)}("ntile");t.dataflow=function(t,e){return arguments.length<2?ne(null,t):ne(t,e)},t.aggregate=ti,t.bin=ni,t.countpattern=ri,t.filter=ai,t.fold=ui,t.formula=si,t.joinaggregate=li,t.project=ci,t.sample=hi,t.sort=mi,t.window=vi,t.field=(t=>ie({field:t})),t.expr=(t=>ie({accessor:t},"fields")),t.count=gi,t.row_number=yi,t.rank=_i,t.dense_rank=xi,t.percent_rank=Di,t.cume_dist=bi,t.valid=wi,t.missing=ki,t.distinct=Oi,t.min=Mi,t.max=Ei,t.argmin=qi,t.argmax=Ni,t.sum=Ai,t.mean=Fi,t.average=Ri,t.variance=Si,t.variancep=Pi,t.stdev=ji,t.stdevp=Ci,t.stderr=Ui,t.median=Li,t.q1=zi,t.q3=Ii,t.ci0=$i,t.ci1=Ti,t.first_value=Wi,t.last_value=Bi,t.lag=Gi,t.lead=Ji,t.nth_value=Ki,t.ntile=Qi,Object.defineProperty(t,"__esModule",{value:!0})});
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | export {default as dataflow} from './src/dataflow';
2 |
3 | export {default as aggregate} from './src/transforms/aggregate';
4 | export {default as bin} from './src/transforms/bin';
5 | export {default as countpattern} from './src/transforms/countpattern';
6 | export {default as filter} from './src/transforms/filter';
7 | export {default as fold} from './src/transforms/fold';
8 | export {default as formula} from './src/transforms/formula';
9 | export {default as joinaggregate} from './src/transforms/joinaggregate';
10 | export {default as project} from './src/transforms/project';
11 | export {default as sample} from './src/transforms/sample';
12 | export {default as sort} from './src/transforms/sort';
13 | export {default as window} from './src/transforms/window';
14 |
15 | export * from './src/ops';
16 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "dataflow-api",
3 | "version": "0.1.0",
4 | "description": "JavaScript API for dataflow processing",
5 | "keywords": [
6 | "vega",
7 | "dataflow",
8 | "aggregate",
9 | "filter",
10 | "sort"
11 | ],
12 | "license": "BSD-3-Clause",
13 | "author": {
14 | "name": "Jeffrey Heer",
15 | "url": "http://idl.cs.washington.edu"
16 | },
17 | "main": "build/dataflow-api.js",
18 | "module": "index",
19 | "unpkg": "build/dataflow-api.min.js",
20 | "jsdelivr": "build/dataflow-api.min.js",
21 | "repository": {
22 | "type": "git",
23 | "url": "https://github.com/vega/dataflow-api.git"
24 | },
25 | "scripts": {
26 | "build": "yarn test",
27 | "postbuild": "terser build/dataflow-api.js -c -m -o build/dataflow-api.min.js",
28 | "pretest": "rm -rf build && mkdir build && rollup -c",
29 | "test": "tape 'test/**/*-test.js' && eslint index.js src test",
30 | "prepublish": "yarn build",
31 | "postpublish": "git push && git push --tags && zip -j build/dataflow-api.zip -- LICENSE README.md build/dataflow-api.js"
32 | },
33 | "dependencies": {
34 | "vega-dataflow": "^4.1.0",
35 | "vega-transforms": "^2.3.1",
36 | "vega-util": "^1.8.0"
37 | },
38 | "devDependencies": {
39 | "eslint": "5",
40 | "rollup": "1.2.2",
41 | "rollup-plugin-node-resolve": "4",
42 | "tape": "4",
43 | "terser": "3"
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/rollup.config.js:
--------------------------------------------------------------------------------
1 | import node from "rollup-plugin-node-resolve";
2 |
3 | export default {
4 | input: "index",
5 | plugins: [node()],
6 | output: {
7 | file: "build/dataflow-api.js",
8 | format: "umd",
9 | name: "df"
10 | }
11 | };
--------------------------------------------------------------------------------
/src/dataflow.js:
--------------------------------------------------------------------------------
1 | import {default as df} from './runtime';
2 | import collect from './transforms/collect';
3 | import {relay, sieve} from 'vega-transforms';
4 | import {array} from 'vega-util';
5 |
6 | const Output = Symbol('dataflow-output');
7 |
8 | export default function(datasource, transforms) {
9 | return arguments.length < 2
10 | ? create(null, datasource)
11 | : create(datasource, transforms);
12 | }
13 |
14 | function create(datasource, transforms) {
15 | let input = null,
16 | output = null,
17 | values = null;
18 |
19 | function get() {
20 | return values.value;
21 | }
22 |
23 | const object = {
24 | [Output]: () => output,
25 | values: get,
26 | on: f => (df.addDataListener(values, f), object),
27 | off: f => (df.removeDataListener(values, f), object)
28 | };
29 |
30 | if (!datasource) {
31 | object.insert = function(_) {
32 | df.pulse(input, df.changeset().insert(_)).run();
33 | return object;
34 | };
35 |
36 | object.remove = function(_) {
37 | df.pulse(input, df.changeset().remove(_)).run();
38 | return object;
39 | };
40 | }
41 |
42 | function initialize(tranforms) {
43 | let source = true,
44 | pipeline = [collect()],
45 | i, n, tx, md, gen, mod, pulse, prev;
46 |
47 | // analyze pipeline, inject collectors as needed
48 | for (i=0, n=tranforms.length; i s[Output]());
71 | if (pulse.length === 1) pulse = pulse[0];
72 | prev = df.add(relay, {derive: mod, pulse: pulse});
73 | }
74 | for (i=0, n=pipeline.length; i obj};
4 |
5 | getset(api, obj, 'as');
6 | for (let i=1, n=arguments.length; i apiObject({field: f}));
20 |
21 | export const expr = (f => apiObject({accessor: f}, 'fields'));
22 |
23 | function op0(type) { return () => apiObject({op: type}); }
24 | export const count = op0('count');
25 | export const row_number = op0('row_number');
26 | export const rank = op0('rank');
27 | export const dense_rank = op0('dense_rank');
28 | export const percent_rank = op0('percent_rank');
29 | export const cume_dist = op0('cume_dist');
30 |
31 | function opField(type) {
32 | return (field) => apiObject({op: type}, 'field').field(field);
33 | }
34 | export const valid = opField('valid');
35 | export const missing = opField('missing');
36 | export const distinct = opField('distinct');
37 | export const min = opField('min');
38 | export const max = opField('max');
39 | export const argmin = opField('argmin');
40 | export const argmax = opField('argmax');
41 | export const sum = opField('sum');
42 | export const mean = opField('mean');
43 | export const average = opField('average');
44 | export const variance = opField('variance');
45 | export const variancep = opField('variancep');
46 | export const stdev = opField('stdev');
47 | export const stdevp = opField('stdevp');
48 | export const stderr = opField('stderr');
49 | export const median = opField('median');
50 | export const q1 = opField('q1');
51 | export const q3 = opField('q3');
52 | export const ci0 = opField('ci0');
53 | export const ci1 = opField('ci1');
54 | export const first_value = opField('first_value');
55 | export const last_value = opField('last_value');
56 |
57 | function opFieldParam(type) {
58 | return (field, param) => apiObject({op: type}, 'field', 'param').field(field).param(param);
59 | }
60 | export const lag = opFieldParam('lag');
61 | export const lead = opFieldParam('lead');
62 | export const nth_value = opFieldParam('nth_value');
63 |
64 | function opParam(type) {
65 | return (param) => apiObject({op: type}, 'param').param(param);
66 | }
67 | export const ntile = opParam('ntile');
68 |
--------------------------------------------------------------------------------
/src/parameters.js:
--------------------------------------------------------------------------------
1 | import {aggregate, window} from 'vega-transforms';
2 | import {
3 | accessor, array, compare, error, field,
4 | isArray, isObject, isFunction, isRegExp, isString,
5 | toBoolean, toNumber, toSet, toString
6 | } from 'vega-util';
7 |
8 | const Ascending = 'ascending',
9 | Descending = 'descending',
10 | AggregateOps = toSet(aggregate.Definition.params[1].values),
11 | WindowOps = toSet(window.Definition.params[2].values);
12 |
13 | export function parser(p) {
14 | const type = p.array ? 'array' : p.type;
15 | return TypeParsers[type](p);
16 | }
17 |
18 | export const TypeParsers = {
19 | array: p => {
20 | const len = p.length,
21 | name = p.name,
22 | type = TypeParsers[p.type];
23 |
24 | return value => {
25 | if (!isArray(value)) {
26 | error(`Expected array parameter: ${name}.`);
27 | }
28 | if (len != null && value.length !== len) {
29 | error(`Expected array of length ${len}: ${name}.`);
30 | }
31 | return value.map(type(p));
32 | };
33 | },
34 |
35 | compare: p => (value => {
36 | let cmp = value;
37 | if (cmp && isFunction(cmp.toObject)) {
38 | cmp = cmp.toObject();
39 | }
40 | if (isString(cmp)) cmp = array(cmp);
41 | if (isArray(cmp)) cmp = toCompareObject(cmp);
42 | return isObject(cmp) && !isFunction(cmp)
43 | ? isFunction(cmp.accessor)
44 | ? accessor(cmp.accessor, cmp.fields)
45 | : compare(cmp.fields, cmp.orders)
46 | : error(`Unrecognized comparator value for parameter: ${p.name}.`);
47 | }),
48 |
49 | enum: p => {
50 | const set = toSet(p.values);
51 | return value => set[value] ? value
52 | : error(`Invalid parameter value '${value+''}' for ${p.name}. Must be one of [${p.values}].`);
53 | },
54 |
55 | expr: p => (value => toExpr(value) || error(`Invalid parameter value '${value+''}' for ${p.name}.`)),
56 |
57 | field: p => (value => toField(value) || error(`Invalid parameter value '${value+''}' for ${p.name}.`)),
58 |
59 | measure: () => (list => toMeasure(list, AggregateOps)),
60 |
61 | window: () => (list => toMeasure(list, WindowOps)),
62 |
63 | boolean: () => toBoolean,
64 |
65 | number: () => toNumber,
66 |
67 | regexp: () => toRegExpString,
68 |
69 | string: () => toString
70 | };
71 |
72 | function toRegExpString(value) {
73 | if (isRegExp(value)) {
74 | let str = value + '',
75 | i1 = str.lastIndexOf('/');
76 | return str.slice(1, i1);
77 | } else {
78 | return toString(value);
79 | }
80 | }
81 |
82 | function toCompareObject(array) {
83 | const fields = [],
84 | orders = [];
85 |
86 | array.forEach(function(f) {
87 | if (!f || !isString(f)) error(`Invalid comparator field: '${f+''}'.`);
88 | let o = Ascending;
89 | if (f[0] === '-') {
90 | o = Descending;
91 | f = f.slice(1);
92 | } else if (f[0] === '+') {
93 | f = f.slice(1);
94 | }
95 | fields.push(f);
96 | orders.push(o);
97 | });
98 |
99 | return {fields: fields, orders: orders};
100 | }
101 |
102 | function toExpr(value) {
103 | if (value && isFunction(value.toObject)) {
104 | value = value.toObject();
105 | }
106 | // TODO: isString -> parse expression
107 | return isObject(value) && !isFunction(value)
108 | ? accessor(value.accessor, value.fields, value.as)
109 | : null;
110 | }
111 |
112 | function toField(value) {
113 | if (value && isFunction(value.toObject)) {
114 | value = value.toObject();
115 | }
116 | return isString(value) ? field(value)
117 | : isObject(value) && !isFunction(value)
118 | ? isFunction(value.accessor)
119 | ? accessor(value.accessor, value.fields, value.as)
120 | : field(value.field, value.as)
121 | : null;
122 | }
123 |
124 | function toMeasure(list, validOps) {
125 | let ops = [], fields = [], as = [], params = [];
126 |
127 | for (let measure of list) {
128 | if (isFunction(measure.toObject)) {
129 | measure = measure.toObject();
130 | }
131 |
132 | let op = toString(measure.op);
133 | if (!validOps.hasOwnProperty(op)) {
134 | error(`Invalid operation: ${op}.`);
135 | }
136 | ops.push(op);
137 |
138 | params.push(toNumber(measure.param));
139 |
140 | fields.push(toField(measure.field));
141 |
142 | as.push(measure.as ? toString(measure.as) : null);
143 | }
144 |
145 | return params.every(v => v == null)
146 | ? {ops: ops, fields: fields, as: as}
147 | : {ops: ops, fields: fields, as: as, params: params};
148 | }
149 |
--------------------------------------------------------------------------------
/src/runtime.js:
--------------------------------------------------------------------------------
1 | import {Dataflow} from 'vega-dataflow';
2 | import {Warn} from 'vega-util';
3 |
4 | const runtime = new Dataflow().logLevel(Warn);
5 |
6 | let listeners = [];
7 |
8 | runtime.addDataListener = function(op, callback) {
9 | listeners.push({op: op, fn: callback});
10 | };
11 |
12 | runtime.removeDataListener = function(op, callback) {
13 | let v = null;
14 | for (let l of listeners) {
15 | if (l.op === op && l.fn === callback) {
16 | v = l; break;
17 | }
18 | }
19 | if (v) {
20 | listeners = listeners.filter(l => l !== v);
21 | }
22 | };
23 |
24 | runtime._onrun = function() {
25 | let s = runtime.stamp(),
26 | a = listeners.filter(l => l.op.stamp === s);
27 | if (a.length) {
28 | setTimeout(function() {
29 | a.forEach(l => l.fn(l.op.value));
30 | }, 0);
31 | }
32 | };
33 |
34 | export default runtime;
35 |
--------------------------------------------------------------------------------
/src/transform.js:
--------------------------------------------------------------------------------
1 | import {parser} from './parameters';
2 | import * as transforms from 'vega-transforms';
3 | import {array, extend} from 'vega-util';
4 |
5 | export default function(def, arg) {
6 | arg = array(arg);
7 | let narg = arg.length,
8 | type = def.type.toLowerCase(),
9 | params = def.params,
10 | md = def.metadata;
11 |
12 | return function() {
13 | let t = instantiate(type, params, md),
14 | i = 0,
15 | v;
16 | for (; i create(dataflow, pulse, type, params, values),
29 | metadata: () => metadata
30 | };
31 |
32 | initialize(op, params, values);
33 |
34 | return op;
35 | }
36 |
37 | function create(dataflow, pulse, type, params, values) {
38 | let q = extend({}, pulse);
39 |
40 | for (let p of params) {
41 | let name = p.name,
42 | alias = p.alias || p.name,
43 | value = values[alias],
44 | defined = value !== undefined;
45 |
46 | if (p.init && !defined) {
47 | let subparams = extend({}, pulse);
48 | for (let subp in p.init.params) {
49 | subparams[subp] = values[p.init.params[subp]];
50 | }
51 | q[name] = dataflow.add(transforms[p.init.type], subparams);
52 | } else if (defined) {
53 | if (p.proxy) {
54 | for (let k in value) q[k] = value[k];
55 | } else {
56 | q[name] = value;
57 | }
58 | }
59 | }
60 |
61 | return dataflow.add(transforms[type], q);
62 | }
63 |
64 | function initialize(op, params, values) {
65 | // initialize parameters
66 | for (let p of params) {
67 | const alias = p.alias || p.name,
68 | parse = parser(p);
69 |
70 | // generate getter / setter method
71 | op[alias] = function(_) {
72 | if (!arguments.length) return values[alias];
73 | // TODO: map multiple args to single array?
74 | values[alias] = parse(_);
75 | return op;
76 | };
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/src/transforms/aggregate.js:
--------------------------------------------------------------------------------
1 | import {removeParams} from './util';
2 | import transform from '../transform';
3 | import {aggregate} from 'vega-transforms';
4 | import {extend} from 'vega-util';
5 |
6 | const def = extend({}, aggregate.Definition);
7 |
8 | def.params = removeParams(def.params, ['ops', 'fields', 'as']);
9 | def.params.push({name: 'measure', type: 'measure', proxy: true});
10 |
11 | export default transform(def, ['groupby', 'measure']);
12 |
--------------------------------------------------------------------------------
/src/transforms/bin.js:
--------------------------------------------------------------------------------
1 | import {extendParams} from './util';
2 | import transform from '../transform';
3 | import {bin} from 'vega-transforms';
4 | import {extend} from 'vega-util';
5 |
6 | const def = extend({}, bin.Definition);
7 |
8 | def.params = extendParams(def.params, {
9 | extent: {
10 | init: { type: 'extent', params: {field: 'field'} }
11 | }
12 | });
13 |
14 | export default transform(def, 'field');
15 |
--------------------------------------------------------------------------------
/src/transforms/collect.js:
--------------------------------------------------------------------------------
1 | import {removeParams} from './util';
2 | import transform from '../transform';
3 | import {collect} from 'vega-transforms';
4 | import {extend} from 'vega-util';
5 |
6 | const def = extend({}, collect.Definition);
7 |
8 | def.params = removeParams(def.params, ['sort']);
9 |
10 | export default transform(def);
11 |
12 |
--------------------------------------------------------------------------------
/src/transforms/countpattern.js:
--------------------------------------------------------------------------------
1 | import {extendParams} from './util';
2 | import transform from '../transform';
3 | import {countpattern} from 'vega-transforms';
4 | import {extend} from 'vega-util';
5 |
6 | const def = extend({}, countpattern.Definition);
7 |
8 | def.params = extendParams(def.params, {
9 | pattern: { type: 'regexp' },
10 | stopwords: { type: 'regexp' }
11 | });
12 |
13 | export default transform(def, ['field', 'pattern', 'case']);
14 |
--------------------------------------------------------------------------------
/src/transforms/filter.js:
--------------------------------------------------------------------------------
1 | import transform from '../transform';
2 | import {filter} from 'vega-transforms';
3 |
4 | export default transform(filter.Definition, 'expr');
5 |
--------------------------------------------------------------------------------
/src/transforms/fold.js:
--------------------------------------------------------------------------------
1 | import transform from '../transform';
2 | import {fold} from 'vega-transforms';
3 |
4 | export default transform(fold.Definition, 'fields');
5 |
6 |
--------------------------------------------------------------------------------
/src/transforms/formula.js:
--------------------------------------------------------------------------------
1 | import transform from '../transform';
2 | import {formula} from 'vega-transforms';
3 |
4 | export default transform(formula.Definition, ['as', 'expr']);
5 |
--------------------------------------------------------------------------------
/src/transforms/joinaggregate.js:
--------------------------------------------------------------------------------
1 | import {removeParams} from './util';
2 | import transform from '../transform';
3 | import {joinaggregate} from 'vega-transforms';
4 | import {extend} from 'vega-util';
5 |
6 | const def = extend({}, joinaggregate.Definition);
7 |
8 | def.params = removeParams(def.params, ['ops', 'fields', 'as']);
9 | def.params.push({name: 'measure', type: 'measure', proxy: true});
10 |
11 | export default transform(def, ['groupby', 'measure']);
12 |
--------------------------------------------------------------------------------
/src/transforms/project.js:
--------------------------------------------------------------------------------
1 | import {removeParams} from './util';
2 | import transform from '../transform';
3 | import {project} from 'vega-transforms';
4 | import {extend} from 'vega-util';
5 |
6 | const def = extend({}, project.Definition);
7 |
8 | def.params = removeParams(def.params, ['as']);
9 |
10 | export default transform(def, ['fields']);
11 |
--------------------------------------------------------------------------------
/src/transforms/sample.js:
--------------------------------------------------------------------------------
1 | import transform from '../transform';
2 | import {sample} from 'vega-transforms';
3 |
4 | export default transform(sample.Definition, 'size');
5 |
--------------------------------------------------------------------------------
/src/transforms/sort.js:
--------------------------------------------------------------------------------
1 | import {extendParams} from './util';
2 | import transform from '../transform';
3 | import {collect} from 'vega-transforms';
4 | import {extend} from 'vega-util';
5 |
6 | const def = extend({}, collect.Definition);
7 |
8 | def.params = extendParams(def.params, {
9 | sort: { alias: 'compare' }
10 | });
11 |
12 | export default transform(def, 'compare');
13 |
--------------------------------------------------------------------------------
/src/transforms/util.js:
--------------------------------------------------------------------------------
1 | import {array, extend, toSet} from 'vega-util';
2 |
3 | export function removeParams(params, names) {
4 | names = toSet(array(names));
5 | return params.filter(p => !names[p.name]);
6 | }
7 |
8 | export function extendParams(params, map) {
9 | return params.map(p => {
10 | let name = p.name;
11 | return map[name] ? extend({}, p, map[name]) : p;
12 | });
13 | }
14 |
--------------------------------------------------------------------------------
/src/transforms/window.js:
--------------------------------------------------------------------------------
1 | import {extendParams, removeParams} from './util';
2 | import transform from '../transform';
3 | import {window} from 'vega-transforms';
4 | import {extend} from 'vega-util';
5 |
6 | const def = extend({}, window.Definition);
7 |
8 | def.params = removeParams(def.params, ['ops', 'fields', 'as', 'params']);
9 | def.params = extendParams(def.params, {
10 | sort: { alias: 'compare' }
11 | });
12 | def.params.push({name: 'measure', type: 'window', proxy: true});
13 |
14 | export default transform(def, ['compare', 'frame', 'measure']);
15 |
--------------------------------------------------------------------------------
/test/aggregate-test.js:
--------------------------------------------------------------------------------
1 | var tape = require('tape'),
2 | df = require('../');
3 |
4 | tape('Aggregate transform aggregates data', function(test) {
5 | const input = [
6 | {foo: 0, bar: 'a'},
7 | {foo: 1, bar: 'a'},
8 | {foo: 2, bar: 'b'},
9 | {foo: 3, bar: 'b'}
10 | ];
11 |
12 | const flow = df.dataflow([
13 | df.aggregate()
14 | .groupby(['bar'])
15 | .measure([df.count().as('cnt'), df.sum('foo')])
16 | ]);
17 |
18 | const output = flow.insert(input).values();
19 | test.equal(output.length, 2);
20 | test.deepEqual(output[0], {bar:'a', cnt:2, sum_foo:1});
21 | test.deepEqual(output[1], {bar:'b', cnt:2, sum_foo:5});
22 |
23 | test.end();
24 | });
25 |
26 | tape('Aggregate transform rejects unknown op', function(test) {
27 | test.throws(function() {
28 | df.aggregate()
29 | .groupby(['bar'])
30 | .measure([{op: 'rank', field: 'foo'}])
31 | });
32 | test.end();
33 | });
--------------------------------------------------------------------------------
/test/bin-test.js:
--------------------------------------------------------------------------------
1 | var tape = require('tape'),
2 | df = require('../');
3 |
4 | tape('Bin transform bins data fields', function(test) {
5 | const input = [
6 | {foo: 0, bar: 'a'},
7 | {foo: 1, bar: 'a'},
8 | {foo: 2, bar: 'b'},
9 | {foo: 3, bar: 'b'}
10 | ];
11 |
12 | const flow = df.dataflow([
13 | df.bin('foo').maxbins(2).as(['foo0', 'foo1']),
14 | ]);
15 |
16 | const output = flow.insert(input).values();
17 | test.equal(output.length, 4);
18 | test.equal(output[0].foo0, 0);
19 | test.equal(output[1].foo0, 0);
20 | test.equal(output[2].foo0, 2);
21 | test.equal(output[3].foo0, 2);
22 | test.equal(output[0].foo1, 2);
23 | test.equal(output[1].foo1, 2);
24 | test.equal(output[2].foo1, 4);
25 | test.equal(output[3].foo1, 4);
26 |
27 | test.end();
28 | });
--------------------------------------------------------------------------------
/test/countpattern-test.js:
--------------------------------------------------------------------------------
1 | var tape = require('tape'),
2 | df = require('../');
3 |
4 | tape('CountPattern transform counts patterns', function(test) {
5 | const input = [
6 | {foo: 0, bar: 'a'},
7 | {foo: 1, bar: 'a'},
8 | {foo: 2, bar: 'b'},
9 | {foo: 3, bar: 'b'}
10 | ];
11 |
12 | const flow = df.dataflow([
13 | df.countpattern('bar', /[a-z]+/)
14 | ]);
15 |
16 | const output = flow.insert(input).values();
17 | test.equal(output.length, 2);
18 | test.deepEqual(output[0], {text:'a', count:2});
19 | test.deepEqual(output[1], {text:'b', count:2});
20 |
21 | test.end();
22 | });
--------------------------------------------------------------------------------
/test/dataflow-test.js:
--------------------------------------------------------------------------------
1 | var tape = require('tape'),
2 | df = require('../'),
3 | expr = df.expr(d => 1 + d.foo * d.foo, ['foo']);
4 |
5 | tape('Dataflow supports listener', function(test) {
6 | const input = [
7 | {foo: 0, bar: 'a'},
8 | {foo: 1, bar: 'a'},
9 | {foo: 2, bar: 'b'},
10 | {foo: 3, bar: 'b'}
11 | ];
12 |
13 | let count = 0;
14 |
15 | const f = function(values) {
16 | test.equal(values.length, 4);
17 | test.equal(count, 0);
18 | ++count;
19 | if (count === 1) {
20 | flow.off(f).on(g).insert({foo: 4, bar: 'c'});
21 | }
22 | };
23 |
24 | const g = function(values) {
25 | test.equal(values.length, 5);
26 | test.equal(count, 1);
27 | test.end();
28 | };
29 |
30 | const flow = df.dataflow([
31 | df.formula('baz', expr)
32 | ]);
33 |
34 | flow.on(f).insert(input);
35 | });
36 |
37 | tape('Dataflow supports derived flows', function(test) {
38 | const input = [
39 | {foo: 0, bar: 'a'},
40 | {foo: 1, bar: 'a'},
41 | {foo: 2, bar: 'b'},
42 | {foo: 3, bar: 'b'}
43 | ];
44 |
45 | const copy = JSON.parse(JSON.stringify(input));
46 |
47 | // create source flow, ensure appropriate methods defined
48 | const flow1 = df.dataflow([]);
49 | test.ok(flow1.insert);
50 | test.ok(flow1.remove);
51 |
52 | // run source flow, check output
53 | const output1 = flow1.insert(input).values();
54 | test.deepEqual(input, output1);
55 |
56 | // create derived flow, ensure appropriate methods defined
57 | const flow2 = df.dataflow(flow1, [
58 | df.formula('baz', expr)
59 | ]);
60 | test.ok(!flow2.insert);
61 | test.ok(!flow2.remove);
62 |
63 | // run derived flow, check output
64 | let output2 = flow2.values();
65 | test.equal(output2.length, 4);
66 | test.equal(output2[0].baz, 1);
67 | test.equal(output2[1].baz, 2);
68 | test.equal(output2[2].baz, 5);
69 | test.equal(output2[3].baz, 10);
70 |
71 | // ensure derived flow does not pollute source flow
72 | test.deepEqual(input, copy);
73 | test.deepEqual(output1, copy);
74 | test.notDeepEqual(output2, copy);
75 |
76 | // insert values into source flow
77 | // check output of derived flow
78 | flow1.insert({foo: 4, bar: 'c'}).values();
79 | output2 = flow2.values();
80 | test.equal(output2.length, 5);
81 | test.equal(output2[0].baz, 1);
82 | test.equal(output2[1].baz, 2);
83 | test.equal(output2[2].baz, 5);
84 | test.equal(output2[3].baz, 10);
85 | test.equal(output2[4].baz, 17);
86 |
87 | test.end();
88 | });
89 |
90 | tape('Dataflow supports unioned flows', function(test) {
91 | const input1 = [
92 | {foo: 0, bar: 'a'},
93 | {foo: 1, bar: 'a'}
94 | ];
95 |
96 | const input2 = [
97 | {foo: 2, bar: 'b'},
98 | {foo: 3, bar: 'b'}
99 | ];
100 |
101 | // create source flow, ensure appropriate methods defined
102 | const flow1 = df.dataflow();
103 | const flow2 = df.dataflow();
104 | const flow3 = df.dataflow([flow1, flow2], []);
105 |
106 | flow1.insert(input1);
107 | flow2.insert(input2);
108 |
109 | const output = flow3.values();
110 | test.equal(output.length, 4);
111 | test.deepEqual(output, input1.concat(input2));
112 |
113 | test.end();
114 | });
115 |
--------------------------------------------------------------------------------
/test/filter-test.js:
--------------------------------------------------------------------------------
1 | var tape = require('tape'),
2 | df = require('../');
3 |
4 | tape('Filter transform filters data', function(test) {
5 | const input = [
6 | {foo: 0, bar: 'a'},
7 | {foo: 1, bar: 'a'},
8 | {foo: 2, bar: 'b'},
9 | {foo: 3, bar: 'b'}
10 | ];
11 |
12 | const flow = df.dataflow([
13 | df.filter(df.expr(d => d.foo > 1).fields(['foo']))
14 | ]);
15 |
16 | const output = flow.insert(input).values();
17 | test.equal(output.length, 2);
18 | test.deepEqual(output, input.slice(2));
19 |
20 | test.end();
21 | });
--------------------------------------------------------------------------------
/test/fold-test.js:
--------------------------------------------------------------------------------
1 | var tape = require('tape'),
2 | df = require('../');
3 |
4 | tape('Fold transform folds data', function(test) {
5 | const input = [
6 | {foo: 0, bar: 'a', baz: 'c'},
7 | {foo: 1, bar: 'a', baz: 'd'},
8 | {foo: 2, bar: 'b', baz: 'c'},
9 | {foo: 3, bar: 'b', baz: 'd'}
10 | ];
11 |
12 | const flow = df.dataflow([
13 | df.fold(['bar', 'baz'])
14 | ]);
15 |
16 | const output = flow.insert(input).values();
17 | test.equal(output.length, 8);
18 | test.deepEqual(output[0], {foo:0, bar:'a', baz:'c', key:'bar', value:'a'});
19 | test.deepEqual(output[1], {foo:0, bar:'a', baz:'c', key:'baz', value:'c'});
20 | test.deepEqual(output[2], {foo:1, bar:'a', baz:'d', key:'bar', value:'a'});
21 | test.deepEqual(output[3], {foo:1, bar:'a', baz:'d', key:'baz', value:'d'});
22 | test.deepEqual(output[4], {foo:2, bar:'b', baz:'c', key:'bar', value:'b'});
23 | test.deepEqual(output[5], {foo:2, bar:'b', baz:'c', key:'baz', value:'c'});
24 | test.deepEqual(output[6], {foo:3, bar:'b', baz:'d', key:'bar', value:'b'});
25 | test.deepEqual(output[7], {foo:3, bar:'b', baz:'d', key:'baz', value:'d'});
26 |
27 | test.end();
28 | });
--------------------------------------------------------------------------------
/test/formula-test.js:
--------------------------------------------------------------------------------
1 | var tape = require('tape'),
2 | df = require('../');
3 |
4 | tape('Formula transform adds derived field to data', function(test) {
5 | const input = [
6 | {foo: 0, bar: 'a'},
7 | {foo: 1, bar: 'a'},
8 | {foo: 2, bar: 'b'},
9 | {foo: 3, bar: 'b'}
10 | ];
11 |
12 | const flow = df.dataflow([
13 | df.formula('baz', df.expr(d => 1 + d.foo * d.foo).fields(['foo']))
14 | ]);
15 |
16 | const output = flow.insert(input).values();
17 | test.equal(output.length, 4);
18 | test.equal(output[0].baz, 1);
19 | test.equal(output[1].baz, 2);
20 | test.equal(output[2].baz, 5);
21 | test.equal(output[3].baz, 10);
22 |
23 | test.end();
24 | });
--------------------------------------------------------------------------------
/test/joinaggregate-test.js:
--------------------------------------------------------------------------------
1 | var tape = require('tape'),
2 | df = require('../');
3 |
4 | tape('JoinAggregate transform aggregates and joins data', function(test) {
5 | const input = [
6 | {foo: 0, bar: 'a'},
7 | {foo: 1, bar: 'a'},
8 | {foo: 2, bar: 'b'},
9 | {foo: 3, bar: 'b'}
10 | ];
11 |
12 | const flow = df.dataflow([
13 | df.joinaggregate()
14 | .groupby(['bar'])
15 | .measure([df.count().as('cnt'), df.sum('foo')])
16 | ]);
17 |
18 | const output = flow.insert(input).values();
19 | test.equal(output.length, 4);
20 | test.deepEqual(output[0], {foo: 0, bar:'a', cnt:2, sum_foo:1});
21 | test.deepEqual(output[1], {foo: 1, bar:'a', cnt:2, sum_foo:1});
22 | test.deepEqual(output[2], {foo: 2, bar:'b', cnt:2, sum_foo:5});
23 | test.deepEqual(output[3], {foo: 3, bar:'b', cnt:2, sum_foo:5});
24 |
25 | test.end();
26 | });
--------------------------------------------------------------------------------
/test/ops-test.js:
--------------------------------------------------------------------------------
1 | var tape = require('tape'),
2 | df = require('../');
3 |
4 | tape('Operations support api', function(test) {
5 | let f1 = df.field('foo'),
6 | f2 = df.field('foo').as('bar'),
7 | sum1 = df.sum('foo'),
8 | sum2 = df.sum('bar').as('baz');
9 |
10 | test.deepEqual(f1.toObject(), {field:'foo'});
11 | test.deepEqual(f2.toObject(), {field:'foo', as:'bar'});
12 | test.deepEqual(sum1.toObject(), {op:'sum', field:'foo'});
13 | test.deepEqual(sum2.toObject(), {op:'sum', field:'bar', as:'baz'});
14 | test.end();
15 | });
16 |
--------------------------------------------------------------------------------
/test/project-test.js:
--------------------------------------------------------------------------------
1 | var tape = require('tape'),
2 | df = require('../');
3 |
4 | tape('Project transform projects data', function(test) {
5 | const input = [
6 | {foo: 0, bar: 'a'},
7 | {foo: 1, bar: 'a'}
8 | ];
9 |
10 | // test with field string
11 | const flow1 = df.dataflow([
12 | df.project(['foo'])
13 | ]);
14 | const output1 = flow1.insert(input).values();
15 | test.equal(output1.length, 2);
16 | test.deepEqual(output1[0], {foo:0});
17 | test.deepEqual(output1[1], {foo:1});
18 |
19 | // test with field api
20 | const flow2 = df.dataflow([
21 | df.project([df.field('foo').as('baz')])
22 | ]);
23 | const output2 = flow2.insert(input).values();
24 | test.equal(output2.length, 2);
25 | test.deepEqual(output2[0], {baz:0});
26 | test.deepEqual(output2[1], {baz:1});
27 |
28 | // test with field object
29 | const flow3 = df.dataflow([
30 | df.project([{field:'foo', as:'baz'}])
31 | ]);
32 | const output3 = flow3.insert(input).values();
33 | test.equal(output3.length, 2);
34 | test.deepEqual(output3[0], {baz:0});
35 | test.deepEqual(output3[1], {baz:1});
36 |
37 | // test with field expression
38 | const flow4 = df.dataflow([
39 | df.project([
40 | df.expr(_ => _.foo+2).fields(['foo']).as('fop')
41 | ])
42 | ]);
43 | const output4 = flow4.insert(input).values();
44 | test.equal(output4.length, 2);
45 | test.deepEqual(output4[0], {fop:2});
46 | test.deepEqual(output4[1], {fop:3});
47 |
48 | test.end();
49 | });
50 |
--------------------------------------------------------------------------------
/test/sample-test.js:
--------------------------------------------------------------------------------
1 | var tape = require('tape'),
2 | df = require('../');
3 |
4 | tape('Sample transform samples data', function(test) {
5 | const input = [
6 | {foo: 0, bar: 'a'},
7 | {foo: 1, bar: 'a'},
8 | {foo: 2, bar: 'b'},
9 | {foo: 3, bar: 'b'}
10 | ];
11 |
12 | const flow = df.dataflow([
13 | df.sample(3)
14 | ]);
15 |
16 | const output = flow.insert(input).values();
17 | test.equal(output.length, 3);
18 | test.ok(input.indexOf(output[0]) >= 0);
19 | test.ok(input.indexOf(output[1]) >= 0);
20 | test.ok(input.indexOf(output[2]) >= 0);
21 |
22 | test.end();
23 | });
--------------------------------------------------------------------------------
/test/sort-test.js:
--------------------------------------------------------------------------------
1 | var tape = require('tape'),
2 | df = require('../');
3 |
4 | tape('Sort transform sorts data', function(test) {
5 | const input = [
6 | {foo: 3, bar: 'a'},
7 | {foo: 1, bar: 'a'},
8 | {foo: 0, bar: 'b'},
9 | {foo: 2, bar: 'b'}
10 | ];
11 |
12 | const flow1 = df.dataflow([
13 | df.sort('foo')
14 | ]);
15 |
16 | const output1 = flow1.insert(input).values();
17 | test.equal(output1.length, 4);
18 | test.deepEqual(output1[0], input[2]);
19 | test.deepEqual(output1[1], input[1]);
20 | test.deepEqual(output1[2], input[3]);
21 | test.deepEqual(output1[3], input[0]);
22 |
23 | const flow2 = df.dataflow([
24 | df.sort(df.expr((a,b) => b.foo - a.foo).fields(['foo']))
25 | ]);
26 |
27 | const output2 = flow2.insert(input).values();
28 | test.equal(output2.length, 4);
29 | test.deepEqual(output2[0], input[0]);
30 | test.deepEqual(output2[1], input[3]);
31 | test.deepEqual(output2[2], input[1]);
32 | test.deepEqual(output2[3], input[2]);
33 |
34 | test.end();
35 | });
--------------------------------------------------------------------------------
/test/window-test.js:
--------------------------------------------------------------------------------
1 | var tape = require('tape'),
2 | df = require('../');
3 |
4 | tape('Window transform windows data', function(test) {
5 | const input = [
6 | {foo: 0, bar: 'a'},
7 | {foo: 1, bar: 'a'},
8 | {foo: 2, bar: 'b'},
9 | {foo: 3, bar: 'b'}
10 | ];
11 |
12 | const flow = df.dataflow([
13 | df.window('foo', [null, null])
14 | .groupby(['bar'])
15 | .measure([df.rank(), df.sum('foo')])
16 | ]);
17 |
18 | const output = flow.insert(input).values();
19 | test.equal(output.length, 4);
20 | test.deepEqual(output[0], {foo:0, bar:'a', rank:1, sum_foo:1});
21 | test.deepEqual(output[1], {foo:1, bar:'a', rank:2, sum_foo:1});
22 | test.deepEqual(output[2], {foo:2, bar:'b', rank:1, sum_foo:5});
23 | test.deepEqual(output[3], {foo:3, bar:'b', rank:2, sum_foo:5});
24 |
25 | test.end();
26 | });
27 |
28 | tape('Window transform handles parameters', function(test) {
29 | const input = [
30 | {foo: 0, bar: 'a'},
31 | {foo: 1, bar: 'a'},
32 | {foo: 2, bar: 'b'},
33 | {foo: 3, bar: 'b'}
34 | ];
35 |
36 | const flow = df.dataflow([
37 | df.window('-foo')
38 | .measure([
39 | df.lag('bar', 2).as('lag'),
40 | df.lead('bar', 2).as('lead')
41 | ])
42 | ]);
43 |
44 | const output = flow.insert(input).values();
45 | test.equal(output.length, 4);
46 | test.deepEqual(output[3], {foo:3, bar:'b', lag:null, lead:'a'});
47 | test.deepEqual(output[2], {foo:2, bar:'b', lag:null, lead:'a'});
48 | test.deepEqual(output[1], {foo:1, bar:'a', lag:'b', lead:null});
49 | test.deepEqual(output[0], {foo:0, bar:'a', lag:'b', lead:null});
50 | test.end();
51 | });
52 |
53 | tape('Window transform rejects unknown op', function(test) {
54 | test.throws(function() {
55 | df.window('foo')
56 | .measure([{op: 'baz', field: 'foo'}])
57 | });
58 | test.end();
59 | });
60 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/code-frame@^7.0.0":
6 | version "7.0.0"
7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8"
8 | integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==
9 | dependencies:
10 | "@babel/highlight" "^7.0.0"
11 |
12 | "@babel/highlight@^7.0.0":
13 | version "7.0.0"
14 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4"
15 | integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==
16 | dependencies:
17 | chalk "^2.0.0"
18 | esutils "^2.0.2"
19 | js-tokens "^4.0.0"
20 |
21 | "@types/estree@0.0.39":
22 | version "0.0.39"
23 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f"
24 | integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==
25 |
26 | "@types/node@*":
27 | version "11.9.4"
28 | resolved "https://registry.yarnpkg.com/@types/node/-/node-11.9.4.tgz#ceb0048a546db453f6248f2d1d95e937a6f00a14"
29 | integrity sha512-Zl8dGvAcEmadgs1tmSPcvwzO1YRsz38bVJQvH1RvRqSR9/5n61Q1ktcDL0ht3FXWR+ZpVmXVwN1LuH4Ax23NsA==
30 |
31 | acorn-jsx@^5.0.0:
32 | version "5.0.1"
33 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e"
34 | integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==
35 |
36 | acorn@^6.0.7, acorn@^6.1.0:
37 | version "6.1.0"
38 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.0.tgz#b0a3be31752c97a0f7013c5f4903b71a05db6818"
39 | integrity sha512-MW/FjM+IvU9CgBzjO3UIPCE2pyEwUsoFl+VGdczOPEdxfGFjuKny/gN54mOuX7Qxmb9Rg9MCn2oKiSUeW+pjrw==
40 |
41 | ajv@^6.9.1:
42 | version "6.9.1"
43 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.9.1.tgz#a4d3683d74abc5670e75f0b16520f70a20ea8dc1"
44 | integrity sha512-XDN92U311aINL77ieWHmqCcNlwjoP5cHXDxIxbf2MaPYuCXOHS7gHH8jktxeK5omgd52XbSTX6a4Piwd1pQmzA==
45 | dependencies:
46 | fast-deep-equal "^2.0.1"
47 | fast-json-stable-stringify "^2.0.0"
48 | json-schema-traverse "^0.4.1"
49 | uri-js "^4.2.2"
50 |
51 | ansi-escapes@^3.2.0:
52 | version "3.2.0"
53 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b"
54 | integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==
55 |
56 | ansi-regex@^3.0.0:
57 | version "3.0.0"
58 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998"
59 |
60 | ansi-regex@^4.0.0:
61 | version "4.0.0"
62 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9"
63 | integrity sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==
64 |
65 | ansi-styles@^3.1.0:
66 | version "3.2.0"
67 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88"
68 | dependencies:
69 | color-convert "^1.9.0"
70 |
71 | ansi-styles@^3.2.0, ansi-styles@^3.2.1:
72 | version "3.2.1"
73 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
74 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
75 | dependencies:
76 | color-convert "^1.9.0"
77 |
78 | argparse@^1.0.7:
79 | version "1.0.9"
80 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
81 | dependencies:
82 | sprintf-js "~1.0.2"
83 |
84 | astral-regex@^1.0.0:
85 | version "1.0.0"
86 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9"
87 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==
88 |
89 | balanced-match@^1.0.0:
90 | version "1.0.0"
91 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
92 |
93 | brace-expansion@^1.1.7:
94 | version "1.1.8"
95 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292"
96 | dependencies:
97 | balanced-match "^1.0.0"
98 | concat-map "0.0.1"
99 |
100 | buffer-from@^1.0.0:
101 | version "1.1.1"
102 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef"
103 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
104 |
105 | builtin-modules@^3.0.0:
106 | version "3.0.0"
107 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.0.0.tgz#1e587d44b006620d90286cc7a9238bbc6129cab1"
108 | integrity sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg==
109 |
110 | callsites@^3.0.0:
111 | version "3.0.0"
112 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3"
113 | integrity sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==
114 |
115 | chalk@^2.0.0, chalk@^2.1.0:
116 | version "2.1.0"
117 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e"
118 | dependencies:
119 | ansi-styles "^3.1.0"
120 | escape-string-regexp "^1.0.5"
121 | supports-color "^4.0.0"
122 |
123 | chalk@^2.4.2:
124 | version "2.4.2"
125 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
126 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
127 | dependencies:
128 | ansi-styles "^3.2.1"
129 | escape-string-regexp "^1.0.5"
130 | supports-color "^5.3.0"
131 |
132 | chardet@^0.7.0:
133 | version "0.7.0"
134 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
135 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
136 |
137 | cli-cursor@^2.1.0:
138 | version "2.1.0"
139 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5"
140 | dependencies:
141 | restore-cursor "^2.0.0"
142 |
143 | cli-width@^2.0.0:
144 | version "2.2.0"
145 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
146 |
147 | color-convert@^1.9.0:
148 | version "1.9.0"
149 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a"
150 | dependencies:
151 | color-name "^1.1.1"
152 |
153 | color-name@^1.1.1:
154 | version "1.1.3"
155 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
156 |
157 | commander@2:
158 | version "2.11.0"
159 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
160 |
161 | commander@~2.17.1:
162 | version "2.17.1"
163 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
164 | integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
165 |
166 | concat-map@0.0.1:
167 | version "0.0.1"
168 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
169 |
170 | cross-spawn@^6.0.5:
171 | version "6.0.5"
172 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
173 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==
174 | dependencies:
175 | nice-try "^1.0.4"
176 | path-key "^2.0.1"
177 | semver "^5.5.0"
178 | shebang-command "^1.2.0"
179 | which "^1.2.9"
180 |
181 | d3-array@^2.0.2, d3-array@^2.0.3:
182 | version "2.0.3"
183 | resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.0.3.tgz#9c0531eda701e416f28a030e3d4e6179ba74f19f"
184 | integrity sha512-C7g4aCOoJa+/K5hPVqZLG8wjYHsTUROTk7Z1Ep9F4P5l+WVrvV0+6nAZ1wKTRLMhFWpGbozxUpyjIPZYAaLi+g==
185 |
186 | d3-dsv@^1.0.10:
187 | version "1.1.1"
188 | resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.1.1.tgz#aaa830ecb76c4b5015572c647cc6441e3c7bb701"
189 | integrity sha512-1EH1oRGSkeDUlDRbhsFytAXU6cAmXFzc52YUe6MRlPClmWb85MP1J5x+YJRzya4ynZWnbELdSAvATFW/MbxaXw==
190 | dependencies:
191 | commander "2"
192 | iconv-lite "0.4"
193 | rw "1"
194 |
195 | d3-time-format@^2.1.3:
196 | version "2.1.3"
197 | resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.1.3.tgz#ae06f8e0126a9d60d6364eac5b1533ae1bac826b"
198 | integrity sha512-6k0a2rZryzGm5Ihx+aFMuO1GgelgIz+7HhB4PH4OEndD5q2zGn1mDfRdNrulspOfR6JXkb2sThhDK41CSK85QA==
199 | dependencies:
200 | d3-time "1"
201 |
202 | d3-time@1:
203 | version "1.0.7"
204 | resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.7.tgz#94caf6edbb7879bb809d0d1f7572bc48482f7270"
205 |
206 | debug@^4.0.1:
207 | version "4.1.1"
208 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791"
209 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==
210 | dependencies:
211 | ms "^2.1.1"
212 |
213 | deep-equal@~1.0.1:
214 | version "1.0.1"
215 | resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
216 |
217 | deep-is@~0.1.3:
218 | version "0.1.3"
219 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
220 |
221 | define-properties@^1.1.2:
222 | version "1.1.2"
223 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
224 | dependencies:
225 | foreach "^2.0.5"
226 | object-keys "^1.0.8"
227 |
228 | defined@~1.0.0:
229 | version "1.0.0"
230 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
231 |
232 | doctrine@^3.0.0:
233 | version "3.0.0"
234 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
235 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
236 | dependencies:
237 | esutils "^2.0.2"
238 |
239 | emoji-regex@^7.0.1:
240 | version "7.0.3"
241 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
242 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
243 |
244 | es-abstract@^1.5.0:
245 | version "1.9.0"
246 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.9.0.tgz#690829a07cae36b222e7fd9b75c0d0573eb25227"
247 | dependencies:
248 | es-to-primitive "^1.1.1"
249 | function-bind "^1.1.1"
250 | has "^1.0.1"
251 | is-callable "^1.1.3"
252 | is-regex "^1.0.4"
253 |
254 | es-to-primitive@^1.1.1:
255 | version "1.1.1"
256 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
257 | dependencies:
258 | is-callable "^1.1.1"
259 | is-date-object "^1.0.1"
260 | is-symbol "^1.0.1"
261 |
262 | escape-string-regexp@^1.0.5:
263 | version "1.0.5"
264 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
265 |
266 | eslint-scope@^4.0.0:
267 | version "4.0.0"
268 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172"
269 | integrity sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==
270 | dependencies:
271 | esrecurse "^4.1.0"
272 | estraverse "^4.1.1"
273 |
274 | eslint-utils@^1.3.1:
275 | version "1.3.1"
276 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512"
277 | integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==
278 |
279 | eslint-visitor-keys@^1.0.0:
280 | version "1.0.0"
281 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d"
282 | integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==
283 |
284 | eslint@5:
285 | version "5.14.1"
286 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.14.1.tgz#490a28906be313685c55ccd43a39e8d22efc04ba"
287 | integrity sha512-CyUMbmsjxedx8B0mr79mNOqetvkbij/zrXnFeK2zc3pGRn3/tibjiNAv/3UxFEyfMDjh+ZqTrJrEGBFiGfD5Og==
288 | dependencies:
289 | "@babel/code-frame" "^7.0.0"
290 | ajv "^6.9.1"
291 | chalk "^2.1.0"
292 | cross-spawn "^6.0.5"
293 | debug "^4.0.1"
294 | doctrine "^3.0.0"
295 | eslint-scope "^4.0.0"
296 | eslint-utils "^1.3.1"
297 | eslint-visitor-keys "^1.0.0"
298 | espree "^5.0.1"
299 | esquery "^1.0.1"
300 | esutils "^2.0.2"
301 | file-entry-cache "^5.0.1"
302 | functional-red-black-tree "^1.0.1"
303 | glob "^7.1.2"
304 | globals "^11.7.0"
305 | ignore "^4.0.6"
306 | import-fresh "^3.0.0"
307 | imurmurhash "^0.1.4"
308 | inquirer "^6.2.2"
309 | js-yaml "^3.12.0"
310 | json-stable-stringify-without-jsonify "^1.0.1"
311 | levn "^0.3.0"
312 | lodash "^4.17.11"
313 | minimatch "^3.0.4"
314 | mkdirp "^0.5.1"
315 | natural-compare "^1.4.0"
316 | optionator "^0.8.2"
317 | path-is-inside "^1.0.2"
318 | progress "^2.0.0"
319 | regexpp "^2.0.1"
320 | semver "^5.5.1"
321 | strip-ansi "^4.0.0"
322 | strip-json-comments "^2.0.1"
323 | table "^5.2.3"
324 | text-table "^0.2.0"
325 |
326 | espree@^5.0.1:
327 | version "5.0.1"
328 | resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a"
329 | integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==
330 | dependencies:
331 | acorn "^6.0.7"
332 | acorn-jsx "^5.0.0"
333 | eslint-visitor-keys "^1.0.0"
334 |
335 | esprima@^4.0.0:
336 | version "4.0.0"
337 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804"
338 |
339 | esquery@^1.0.1:
340 | version "1.0.1"
341 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
342 | integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
343 | dependencies:
344 | estraverse "^4.0.0"
345 |
346 | esrecurse@^4.1.0:
347 | version "4.2.0"
348 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163"
349 | dependencies:
350 | estraverse "^4.1.0"
351 | object-assign "^4.0.1"
352 |
353 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1:
354 | version "4.2.0"
355 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
356 |
357 | esutils@^2.0.2:
358 | version "2.0.2"
359 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
360 |
361 | external-editor@^3.0.3:
362 | version "3.0.3"
363 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27"
364 | integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==
365 | dependencies:
366 | chardet "^0.7.0"
367 | iconv-lite "^0.4.24"
368 | tmp "^0.0.33"
369 |
370 | fast-deep-equal@^2.0.1:
371 | version "2.0.1"
372 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49"
373 | integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=
374 |
375 | fast-json-stable-stringify@^2.0.0:
376 | version "2.0.0"
377 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
378 | integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I=
379 |
380 | fast-levenshtein@~2.0.4:
381 | version "2.0.6"
382 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
383 |
384 | figures@^2.0.0:
385 | version "2.0.0"
386 | resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962"
387 | dependencies:
388 | escape-string-regexp "^1.0.5"
389 |
390 | file-entry-cache@^5.0.1:
391 | version "5.0.1"
392 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
393 | integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==
394 | dependencies:
395 | flat-cache "^2.0.1"
396 |
397 | flat-cache@^2.0.1:
398 | version "2.0.1"
399 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
400 | integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==
401 | dependencies:
402 | flatted "^2.0.0"
403 | rimraf "2.6.3"
404 | write "1.0.3"
405 |
406 | flatted@^2.0.0:
407 | version "2.0.0"
408 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916"
409 | integrity sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==
410 |
411 | for-each@~0.3.2:
412 | version "0.3.2"
413 | resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4"
414 | dependencies:
415 | is-function "~1.0.0"
416 |
417 | foreach@^2.0.5:
418 | version "2.0.5"
419 | resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
420 |
421 | fs.realpath@^1.0.0:
422 | version "1.0.0"
423 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
424 |
425 | function-bind@^1.0.2, function-bind@^1.1.1, function-bind@~1.1.0:
426 | version "1.1.1"
427 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
428 |
429 | functional-red-black-tree@^1.0.1:
430 | version "1.0.1"
431 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
432 |
433 | glob@^7.1.2, glob@~7.1.2:
434 | version "7.1.2"
435 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
436 | dependencies:
437 | fs.realpath "^1.0.0"
438 | inflight "^1.0.4"
439 | inherits "2"
440 | minimatch "^3.0.4"
441 | once "^1.3.0"
442 | path-is-absolute "^1.0.0"
443 |
444 | glob@^7.1.3:
445 | version "7.1.3"
446 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
447 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==
448 | dependencies:
449 | fs.realpath "^1.0.0"
450 | inflight "^1.0.4"
451 | inherits "2"
452 | minimatch "^3.0.4"
453 | once "^1.3.0"
454 | path-is-absolute "^1.0.0"
455 |
456 | globals@^11.7.0:
457 | version "11.11.0"
458 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e"
459 | integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==
460 |
461 | has-flag@^2.0.0:
462 | version "2.0.0"
463 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51"
464 |
465 | has-flag@^3.0.0:
466 | version "3.0.0"
467 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
468 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
469 |
470 | has@^1.0.1, has@~1.0.1:
471 | version "1.0.1"
472 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
473 | dependencies:
474 | function-bind "^1.0.2"
475 |
476 | iconv-lite@0.4:
477 | version "0.4.19"
478 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b"
479 |
480 | iconv-lite@^0.4.24:
481 | version "0.4.24"
482 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
483 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
484 | dependencies:
485 | safer-buffer ">= 2.1.2 < 3"
486 |
487 | ignore@^4.0.6:
488 | version "4.0.6"
489 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
490 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
491 |
492 | import-fresh@^3.0.0:
493 | version "3.0.0"
494 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390"
495 | integrity sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==
496 | dependencies:
497 | parent-module "^1.0.0"
498 | resolve-from "^4.0.0"
499 |
500 | imurmurhash@^0.1.4:
501 | version "0.1.4"
502 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
503 |
504 | inflight@^1.0.4:
505 | version "1.0.6"
506 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
507 | dependencies:
508 | once "^1.3.0"
509 | wrappy "1"
510 |
511 | inherits@2, inherits@~2.0.3:
512 | version "2.0.3"
513 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
514 |
515 | inquirer@^6.2.2:
516 | version "6.2.2"
517 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.2.tgz#46941176f65c9eb20804627149b743a218f25406"
518 | integrity sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==
519 | dependencies:
520 | ansi-escapes "^3.2.0"
521 | chalk "^2.4.2"
522 | cli-cursor "^2.1.0"
523 | cli-width "^2.0.0"
524 | external-editor "^3.0.3"
525 | figures "^2.0.0"
526 | lodash "^4.17.11"
527 | mute-stream "0.0.7"
528 | run-async "^2.2.0"
529 | rxjs "^6.4.0"
530 | string-width "^2.1.0"
531 | strip-ansi "^5.0.0"
532 | through "^2.3.6"
533 |
534 | is-callable@^1.1.1, is-callable@^1.1.3:
535 | version "1.1.3"
536 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
537 |
538 | is-date-object@^1.0.1:
539 | version "1.0.1"
540 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
541 |
542 | is-fullwidth-code-point@^2.0.0:
543 | version "2.0.0"
544 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
545 |
546 | is-function@~1.0.0:
547 | version "1.0.1"
548 | resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5"
549 |
550 | is-module@^1.0.0:
551 | version "1.0.0"
552 | resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591"
553 |
554 | is-promise@^2.1.0:
555 | version "2.1.0"
556 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
557 |
558 | is-regex@^1.0.4:
559 | version "1.0.4"
560 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
561 | dependencies:
562 | has "^1.0.1"
563 |
564 | is-symbol@^1.0.1:
565 | version "1.0.1"
566 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
567 |
568 | isexe@^2.0.0:
569 | version "2.0.0"
570 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
571 |
572 | js-tokens@^4.0.0:
573 | version "4.0.0"
574 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
575 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
576 |
577 | js-yaml@^3.12.0:
578 | version "3.12.1"
579 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600"
580 | integrity sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==
581 | dependencies:
582 | argparse "^1.0.7"
583 | esprima "^4.0.0"
584 |
585 | json-schema-traverse@^0.4.1:
586 | version "0.4.1"
587 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
588 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
589 |
590 | json-stable-stringify-without-jsonify@^1.0.1:
591 | version "1.0.1"
592 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
593 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
594 |
595 | levn@^0.3.0, levn@~0.3.0:
596 | version "0.3.0"
597 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
598 | dependencies:
599 | prelude-ls "~1.1.2"
600 | type-check "~0.3.2"
601 |
602 | lodash@^4.17.11:
603 | version "4.17.11"
604 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
605 | integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==
606 |
607 | mimic-fn@^1.0.0:
608 | version "1.1.0"
609 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18"
610 |
611 | minimatch@^3.0.4:
612 | version "3.0.4"
613 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
614 | dependencies:
615 | brace-expansion "^1.1.7"
616 |
617 | minimist@0.0.8:
618 | version "0.0.8"
619 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
620 |
621 | minimist@~1.2.0:
622 | version "1.2.0"
623 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
624 |
625 | mkdirp@^0.5.1:
626 | version "0.5.1"
627 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
628 | dependencies:
629 | minimist "0.0.8"
630 |
631 | ms@^2.1.1:
632 | version "2.1.1"
633 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a"
634 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==
635 |
636 | mute-stream@0.0.7:
637 | version "0.0.7"
638 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
639 |
640 | natural-compare@^1.4.0:
641 | version "1.4.0"
642 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
643 |
644 | nice-try@^1.0.4:
645 | version "1.0.5"
646 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366"
647 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==
648 |
649 | node-fetch@^2.3.0:
650 | version "2.3.0"
651 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5"
652 | integrity sha512-MOd8pV3fxENbryESLgVIeaGKrdl+uaYhCSSVkjeOb/31/njTpcis5aWfdqgNlHIrKOLRbMnfPINPOML2CIFeXA==
653 |
654 | object-assign@^4.0.1:
655 | version "4.1.1"
656 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
657 |
658 | object-inspect@~1.3.0:
659 | version "1.3.0"
660 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.3.0.tgz#5b1eb8e6742e2ee83342a637034d844928ba2f6d"
661 |
662 | object-keys@^1.0.8:
663 | version "1.0.11"
664 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
665 |
666 | once@^1.3.0:
667 | version "1.4.0"
668 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
669 | dependencies:
670 | wrappy "1"
671 |
672 | onetime@^2.0.0:
673 | version "2.0.1"
674 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4"
675 | dependencies:
676 | mimic-fn "^1.0.0"
677 |
678 | optionator@^0.8.2:
679 | version "0.8.2"
680 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
681 | dependencies:
682 | deep-is "~0.1.3"
683 | fast-levenshtein "~2.0.4"
684 | levn "~0.3.0"
685 | prelude-ls "~1.1.2"
686 | type-check "~0.3.2"
687 | wordwrap "~1.0.0"
688 |
689 | os-tmpdir@~1.0.2:
690 | version "1.0.2"
691 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
692 |
693 | parent-module@^1.0.0:
694 | version "1.0.0"
695 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.0.tgz#df250bdc5391f4a085fb589dad761f5ad6b865b5"
696 | integrity sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==
697 | dependencies:
698 | callsites "^3.0.0"
699 |
700 | path-is-absolute@^1.0.0:
701 | version "1.0.1"
702 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
703 |
704 | path-is-inside@^1.0.2:
705 | version "1.0.2"
706 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
707 |
708 | path-key@^2.0.1:
709 | version "2.0.1"
710 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
711 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=
712 |
713 | path-parse@^1.0.5:
714 | version "1.0.5"
715 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
716 |
717 | path-parse@^1.0.6:
718 | version "1.0.6"
719 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
720 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
721 |
722 | prelude-ls@~1.1.2:
723 | version "1.1.2"
724 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
725 |
726 | progress@^2.0.0:
727 | version "2.0.0"
728 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f"
729 |
730 | punycode@^2.1.0:
731 | version "2.1.1"
732 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
733 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
734 |
735 | regexpp@^2.0.1:
736 | version "2.0.1"
737 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
738 | integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
739 |
740 | resolve-from@^4.0.0:
741 | version "4.0.0"
742 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
743 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
744 |
745 | resolve@^1.8.1:
746 | version "1.10.0"
747 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba"
748 | integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==
749 | dependencies:
750 | path-parse "^1.0.6"
751 |
752 | resolve@~1.4.0:
753 | version "1.4.0"
754 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86"
755 | dependencies:
756 | path-parse "^1.0.5"
757 |
758 | restore-cursor@^2.0.0:
759 | version "2.0.0"
760 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
761 | dependencies:
762 | onetime "^2.0.0"
763 | signal-exit "^3.0.2"
764 |
765 | resumer@~0.0.0:
766 | version "0.0.0"
767 | resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759"
768 | dependencies:
769 | through "~2.3.4"
770 |
771 | rimraf@2.6.3:
772 | version "2.6.3"
773 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
774 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
775 | dependencies:
776 | glob "^7.1.3"
777 |
778 | rollup-plugin-node-resolve@4:
779 | version "4.0.0"
780 | resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.0.tgz#9bc6b8205e9936cc0e26bba2415f1ecf1e64d9b2"
781 | integrity sha512-7Ni+/M5RPSUBfUaP9alwYQiIKnKeXCOHiqBpKUl9kwp3jX5ZJtgXAait1cne6pGEVUUztPD6skIKH9Kq9sNtfw==
782 | dependencies:
783 | builtin-modules "^3.0.0"
784 | is-module "^1.0.0"
785 | resolve "^1.8.1"
786 |
787 | rollup@1.2.2:
788 | version "1.2.2"
789 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.2.2.tgz#960416d098d3dba44bbe64c8db94510d6e568104"
790 | integrity sha512-fsn5KJcfSuejjrv8GV7kZNciElqxyzZdUq8rA3e528JsR3ccxrWwoptyUY8GGLlgMFAQMB3dZW8nWF2I1/xrZA==
791 | dependencies:
792 | "@types/estree" "0.0.39"
793 | "@types/node" "*"
794 | acorn "^6.1.0"
795 |
796 | run-async@^2.2.0:
797 | version "2.3.0"
798 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
799 | dependencies:
800 | is-promise "^2.1.0"
801 |
802 | rw@1:
803 | version "1.3.3"
804 | resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
805 |
806 | rxjs@^6.4.0:
807 | version "6.4.0"
808 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504"
809 | integrity sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==
810 | dependencies:
811 | tslib "^1.9.0"
812 |
813 | "safer-buffer@>= 2.1.2 < 3":
814 | version "2.1.2"
815 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
816 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
817 |
818 | semver@^5.5.0, semver@^5.5.1:
819 | version "5.6.0"
820 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
821 | integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==
822 |
823 | shebang-command@^1.2.0:
824 | version "1.2.0"
825 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
826 | dependencies:
827 | shebang-regex "^1.0.0"
828 |
829 | shebang-regex@^1.0.0:
830 | version "1.0.0"
831 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
832 |
833 | signal-exit@^3.0.2:
834 | version "3.0.2"
835 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
836 |
837 | slice-ansi@^2.1.0:
838 | version "2.1.0"
839 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636"
840 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==
841 | dependencies:
842 | ansi-styles "^3.2.0"
843 | astral-regex "^1.0.0"
844 | is-fullwidth-code-point "^2.0.0"
845 |
846 | source-map-support@~0.5.9:
847 | version "0.5.10"
848 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c"
849 | integrity sha512-YfQ3tQFTK/yzlGJuX8pTwa4tifQj4QS2Mj7UegOu8jAz59MqIiMGPXxQhVQiIMNzayuUSF/jEuVnfFF5JqybmQ==
850 | dependencies:
851 | buffer-from "^1.0.0"
852 | source-map "^0.6.0"
853 |
854 | source-map@^0.6.0, source-map@~0.6.1:
855 | version "0.6.1"
856 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
857 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
858 |
859 | sprintf-js@~1.0.2:
860 | version "1.0.3"
861 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
862 |
863 | string-width@^2.1.0:
864 | version "2.1.1"
865 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e"
866 | dependencies:
867 | is-fullwidth-code-point "^2.0.0"
868 | strip-ansi "^4.0.0"
869 |
870 | string-width@^3.0.0:
871 | version "3.0.0"
872 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.0.0.tgz#5a1690a57cc78211fffd9bf24bbe24d090604eb1"
873 | integrity sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==
874 | dependencies:
875 | emoji-regex "^7.0.1"
876 | is-fullwidth-code-point "^2.0.0"
877 | strip-ansi "^5.0.0"
878 |
879 | string.prototype.trim@~1.1.2:
880 | version "1.1.2"
881 | resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea"
882 | dependencies:
883 | define-properties "^1.1.2"
884 | es-abstract "^1.5.0"
885 | function-bind "^1.0.2"
886 |
887 | strip-ansi@^4.0.0:
888 | version "4.0.0"
889 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f"
890 | dependencies:
891 | ansi-regex "^3.0.0"
892 |
893 | strip-ansi@^5.0.0:
894 | version "5.0.0"
895 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f"
896 | integrity sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==
897 | dependencies:
898 | ansi-regex "^4.0.0"
899 |
900 | strip-json-comments@^2.0.1:
901 | version "2.0.1"
902 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
903 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
904 |
905 | supports-color@^4.0.0:
906 | version "4.4.0"
907 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e"
908 | dependencies:
909 | has-flag "^2.0.0"
910 |
911 | supports-color@^5.3.0:
912 | version "5.5.0"
913 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
914 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
915 | dependencies:
916 | has-flag "^3.0.0"
917 |
918 | table@^5.2.3:
919 | version "5.2.3"
920 | resolved "https://registry.yarnpkg.com/table/-/table-5.2.3.tgz#cde0cc6eb06751c009efab27e8c820ca5b67b7f2"
921 | integrity sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==
922 | dependencies:
923 | ajv "^6.9.1"
924 | lodash "^4.17.11"
925 | slice-ansi "^2.1.0"
926 | string-width "^3.0.0"
927 |
928 | tape@4:
929 | version "4.8.0"
930 | resolved "https://registry.yarnpkg.com/tape/-/tape-4.8.0.tgz#f6a9fec41cc50a1de50fa33603ab580991f6068e"
931 | dependencies:
932 | deep-equal "~1.0.1"
933 | defined "~1.0.0"
934 | for-each "~0.3.2"
935 | function-bind "~1.1.0"
936 | glob "~7.1.2"
937 | has "~1.0.1"
938 | inherits "~2.0.3"
939 | minimist "~1.2.0"
940 | object-inspect "~1.3.0"
941 | resolve "~1.4.0"
942 | resumer "~0.0.0"
943 | string.prototype.trim "~1.1.2"
944 | through "~2.3.8"
945 |
946 | terser@3:
947 | version "3.16.1"
948 | resolved "https://registry.yarnpkg.com/terser/-/terser-3.16.1.tgz#5b0dd4fa1ffd0b0b43c2493b2c364fd179160493"
949 | integrity sha512-JDJjgleBROeek2iBcSNzOHLKsB/MdDf+E/BOAJ0Tk9r7p9/fVobfv7LMJ/g/k3v9SXdmjZnIlFd5nfn/Rt0Xow==
950 | dependencies:
951 | commander "~2.17.1"
952 | source-map "~0.6.1"
953 | source-map-support "~0.5.9"
954 |
955 | text-table@^0.2.0:
956 | version "0.2.0"
957 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
958 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
959 |
960 | through@^2.3.6, through@~2.3.4, through@~2.3.8:
961 | version "2.3.8"
962 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
963 |
964 | tmp@^0.0.33:
965 | version "0.0.33"
966 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
967 | dependencies:
968 | os-tmpdir "~1.0.2"
969 |
970 | topojson-client@^3.0.0:
971 | version "3.0.0"
972 | resolved "https://registry.yarnpkg.com/topojson-client/-/topojson-client-3.0.0.tgz#1f99293a77ef42a448d032a81aa982b73f360d2f"
973 | integrity sha1-H5kpOnfvQqRI0DKoGqmCtz82DS8=
974 | dependencies:
975 | commander "2"
976 |
977 | tslib@^1.9.0:
978 | version "1.9.3"
979 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286"
980 | integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==
981 |
982 | type-check@~0.3.2:
983 | version "0.3.2"
984 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
985 | dependencies:
986 | prelude-ls "~1.1.2"
987 |
988 | uri-js@^4.2.2:
989 | version "4.2.2"
990 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
991 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
992 | dependencies:
993 | punycode "^2.1.0"
994 |
995 | vega-dataflow@^4.1.0:
996 | version "4.1.0"
997 | resolved "https://registry.yarnpkg.com/vega-dataflow/-/vega-dataflow-4.1.0.tgz#c63abee8502eedf42a972ad5d3a2ce7475aab7d8"
998 | integrity sha512-LuXoN3LkYWNYTPeMiOgSlw2TZAWjmN46Q9HmHM8ClhXYAj+pYme3IPdtYn1OmcvWe4rKeiYgNYrtJCgTOvCepg==
999 | dependencies:
1000 | vega-loader "^3.1.0"
1001 | vega-util "^1.7.0"
1002 |
1003 | vega-loader@^3.1.0:
1004 | version "3.1.0"
1005 | resolved "https://registry.yarnpkg.com/vega-loader/-/vega-loader-3.1.0.tgz#21caa0e78e158a676eafd0e7cb5bae4c18996c5a"
1006 | integrity sha512-FD9KJdPxBOa+fTnjC2dfY5+kB05hXyVOfjIkssmgyyhELJPp2FwclcF4mVy7Ay1E8fUHY3GgbwSE5jL8k4pYUg==
1007 | dependencies:
1008 | d3-dsv "^1.0.10"
1009 | d3-time-format "^2.1.3"
1010 | node-fetch "^2.3.0"
1011 | topojson-client "^3.0.0"
1012 | vega-util "^1.7.0"
1013 |
1014 | vega-statistics@^1.2.3:
1015 | version "1.2.4"
1016 | resolved "https://registry.yarnpkg.com/vega-statistics/-/vega-statistics-1.2.4.tgz#b5fffa438aa501f665eec1ae46f1257a36570396"
1017 | integrity sha512-i+NF/oc5pl6DQNPhEO8X9LZcuwfUNXINbYDDB1rlL8kDhLWf4FA9AEAzk03hZhOo/IvbhY0reBDc/d8fHOXSWQ==
1018 | dependencies:
1019 | d3-array "^2.0.3"
1020 |
1021 | vega-transforms@^2.3.1:
1022 | version "2.3.1"
1023 | resolved "https://registry.yarnpkg.com/vega-transforms/-/vega-transforms-2.3.1.tgz#a31a1ff8086c6909384ddfcc973bd58d53d801ae"
1024 | integrity sha512-jvDz33ohZiP6cN74quEvesHr0sbSMMQ69ZZqgL6cRDHBqfiuHPhZofBKWDXE1nEWDmJqTEyvg0gsnA8vpHzpjQ==
1025 | dependencies:
1026 | d3-array "^2.0.2"
1027 | vega-dataflow "^4.1.0"
1028 | vega-statistics "^1.2.3"
1029 | vega-util "^1.7.0"
1030 |
1031 | vega-util@^1.7.0, vega-util@^1.8.0:
1032 | version "1.8.0"
1033 | resolved "https://registry.yarnpkg.com/vega-util/-/vega-util-1.8.0.tgz#a51768e4eb1e70e54ba32b0483d9bda2ddb9dc7d"
1034 | integrity sha512-SPKAwa4IJW2WGGQhxpzA4JK9tXIU1lTChxgczaeKzf1zf1PKQ+w5deLX3GnnlHXHBEw1nMTp0NZnGal6v9uf4Q==
1035 |
1036 | which@^1.2.9:
1037 | version "1.3.0"
1038 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a"
1039 | dependencies:
1040 | isexe "^2.0.0"
1041 |
1042 | wordwrap@~1.0.0:
1043 | version "1.0.0"
1044 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
1045 |
1046 | wrappy@1:
1047 | version "1.0.2"
1048 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
1049 |
1050 | write@1.0.3:
1051 | version "1.0.3"
1052 | resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3"
1053 | integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==
1054 | dependencies:
1055 | mkdirp "^0.5.1"
1056 |
--------------------------------------------------------------------------------