From 208edbbcae2cfd30a59f006f5f75c67762cbda13 Mon Sep 17 00:00:00 2001 From: sjones6 Date: Thu, 31 Aug 2017 17:53:55 -0400 Subject: [PATCH 1/7] Update examples --- lib/promise.js | 12 ++++++------ promise-test.js | 36 ++++++++++++++++++++++++++++++------ 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/lib/promise.js b/lib/promise.js index f0560962..6fc2f7c1 100644 --- a/lib/promise.js +++ b/lib/promise.js @@ -1,10 +1,10 @@ var Gun = Gun || require('../gun'); -Gun.chain.promise = function(field) { - var gun = this; - return new Promise(function(resolve, reject) { - gun.get(field).val(function(node, key) { - resolve(node, key); +Gun.chain.promise = function(cb) { + var gun = this, cb = cb || function(ctx) { return ctx }; + return (new Promise(function(res, rej) { + gun.val(function(node, key) { + res({val: node, key: key, gun: gun}); }); - }); + })).then(cb); }; diff --git a/promise-test.js b/promise-test.js index d7d441b5..6c98e949 100644 --- a/promise-test.js +++ b/promise-test.js @@ -3,18 +3,42 @@ require('./lib/promise'); var gun = new Gun(); -gun.get('mark').put({ +/* prep */ +var mark = gun.get('mark').put({ name: 'mark' }) +var cat = gun.get('cat').put({ + name: 'sylvester' +}); +mark.get('boss').put(cat); +cat.get('slave').put(mark); +/* async/await syntax */ async function getField(field) { - var node = await gun.promise(field); - console.log(node); + var node = await gun.get(field).promise(); + console.log({1: node.val}); return node; }; setTimeout(async () => { var mark = await getField('mark'); - console.log(mark); - process.exit(); -}, 100); \ No newline at end of file + console.log({2: mark.val}); +}, 100); + +/* chained thens */ +setTimeout(() => { + gun.get('mark') + .promise(ctx => { + console.log({a: ctx.val}); + return mark.get('boss').promise(); + }) + .then(cat => { + console.log({b: cat.val}); + return cat.gun.get('slave').promise(); + }) + .then(mark => { + console.log({c: mark.val}); + process.exit(); + }); +}, 200); + From a02273521d3a45567d889f169df0d0e0e0ff5439 Mon Sep 17 00:00:00 2001 From: Mark Nadal Date: Mon, 18 Sep 2017 13:49:36 -0700 Subject: [PATCH 2/7] .promise() and .then() thanks to @sjones6 ! --- lib/promise.js | 10 ---------- lib/then.js | 16 ++++++++++++++++ package.json | 2 +- promise-test.js | 44 -------------------------------------------- 4 files changed, 17 insertions(+), 55 deletions(-) delete mode 100644 lib/promise.js create mode 100644 lib/then.js delete mode 100644 promise-test.js diff --git a/lib/promise.js b/lib/promise.js deleted file mode 100644 index 6fc2f7c1..00000000 --- a/lib/promise.js +++ /dev/null @@ -1,10 +0,0 @@ -var Gun = Gun || require('../gun'); - -Gun.chain.promise = function(cb) { - var gun = this, cb = cb || function(ctx) { return ctx }; - return (new Promise(function(res, rej) { - gun.val(function(node, key) { - res({val: node, key: key, gun: gun}); - }); - })).then(cb); -}; diff --git a/lib/then.js b/lib/then.js new file mode 100644 index 00000000..94e7c80e --- /dev/null +++ b/lib/then.js @@ -0,0 +1,16 @@ +var Gun = Gun || require('../gun'); + +Gun.chain.promise = function(cb) { + var gun = this, cb = cb || function(ctx) { return ctx }; + return (new Promise(function(res, rej) { + gun.val(function(data, key){ + res({put: data, get: key, gun: this}); + }); + })).then(cb); +}; + +Gun.chain.then = function(cb) { + return this.promise(function(res){ + return cb? cb(res.put) : res.put; + }); +}; \ No newline at end of file diff --git a/package.json b/package.json index 1346a042..9c22d235 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gun", - "version": "0.8.5", + "version": "0.8.6", "description": "Graph engine", "main": "index.js", "browser": "gun.min.js", diff --git a/promise-test.js b/promise-test.js deleted file mode 100644 index 6c98e949..00000000 --- a/promise-test.js +++ /dev/null @@ -1,44 +0,0 @@ -var Gun = require('./gun'); -require('./lib/promise'); - -var gun = new Gun(); - -/* prep */ -var mark = gun.get('mark').put({ - name: 'mark' -}) -var cat = gun.get('cat').put({ - name: 'sylvester' -}); -mark.get('boss').put(cat); -cat.get('slave').put(mark); - -/* async/await syntax */ -async function getField(field) { - var node = await gun.get(field).promise(); - console.log({1: node.val}); - return node; -}; - -setTimeout(async () => { - var mark = await getField('mark'); - console.log({2: mark.val}); -}, 100); - -/* chained thens */ -setTimeout(() => { - gun.get('mark') - .promise(ctx => { - console.log({a: ctx.val}); - return mark.get('boss').promise(); - }) - .then(cat => { - console.log({b: cat.val}); - return cat.gun.get('slave').promise(); - }) - .then(mark => { - console.log({c: mark.val}); - process.exit(); - }); -}, 200); - From 29472bccbd690eed236f23e6d9ae4f1ff797efeb Mon Sep 17 00:00:00 2001 From: Mark Nadal Date: Mon, 18 Sep 2017 14:02:08 -0700 Subject: [PATCH 3/7] `.promise()`, `.then()`, and better React Native support thanks to @sjones6 ! --- gun.js | 17 +++++++++++------ gun.min.js | 2 +- src/adapters/websocket.js | 17 +++++++++++------ 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/gun.js b/gun.js index fcdc85c6..8b3a2b3b 100644 --- a/gun.js +++ b/gun.js @@ -1705,17 +1705,22 @@ ;require(function(module){ var Gun = require('./index'); - var WebSocket; - if(typeof window !== 'undefined'){ - WebSocket = window.WebSocket || window.webkitWebSocket || window.mozWebSocket; + var websocket; + if(typeof WebSocket !== 'undefined'){ + websocket = WebSocket; } else { - return; + if(typeof webkitWebSocket !== 'undefined'){ + websocket = webkitWebSocket; + } + if(typeof mozWebSocket !== 'undefined'){ + websocket = mozWebSocket; + } } Gun.on('opt', function(ctx){ this.to.next(ctx); var opt = ctx.opt; if(ctx.once){ return } - if(false === opt.WebSocket){ return } + if(false === opt.WebSocket || !websocket){ return } var ws = opt.ws || (opt.ws = {}); ws.who = 0; Gun.obj.map(opt.peers, function(){ ++ws.who }); if(ctx.once){ return } @@ -1767,7 +1772,7 @@ function open(peer, as){ if(!peer || !peer.url){ return } var url = peer.url.replace('http', 'ws'); - var wire = peer.wire = new WebSocket(url); + var wire = peer.wire = new websocket(url); wire.onclose = function(){ ctx.on('bye', peer); reconnect(peer, as); diff --git a/gun.min.js b/gun.min.js index 2b81670e..13eace78 100644 --- a/gun.min.js +++ b/gun.min.js @@ -1 +1 @@ -!function(){function t(n){function o(t){return t.split("/").slice(-1).toString().replace(".js","")}return n.slice?t[o(n)]:function(e,i){n(e={exports:{}}),t[o(i)]=e.exports}}var n;"undefined"!=typeof window&&(n=window),"undefined"!=typeof global&&(n=global),n=n||{};var o=n.console||{log:function(){}};if("undefined"!=typeof module)var e=module;t(function(t){var n={};n.fns=n.fn={is:function(t){return!!t&&"function"==typeof t}},n.bi={is:function(t){return t instanceof Boolean||"boolean"==typeof t}},n.num={is:function(t){return!e(t)&&(t-parseFloat(t)+1>=0||1/0===t||-(1/0)===t)}},n.text={is:function(t){return"string"==typeof t}},n.text.ify=function(t){return n.text.is(t)?t:"undefined"!=typeof JSON?JSON.stringify(t):t&&t.toString?t.toString():t},n.text.random=function(t,n){var o="";for(t=t||24,n=n||"0123456789ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz";t>0;)o+=n.charAt(Math.floor(Math.random()*n.length)),t--;return o},n.text.match=function(t,o){function e(t,n){for(var o,e=-1,i=0;o=n[i++];)if(!~(e=t.indexOf(o,e+1)))return!1;return!0}var i=!1;if(t=t||"",o=n.text.is(o)?{"=":o}:o||{},n.obj.has(o,"~")&&(t=t.toLowerCase(),o["="]=(o["="]||o["~"]).toLowerCase()),n.obj.has(o,"="))return t===o["="];if(n.obj.has(o,"*")){if(t.slice(0,o["*"].length)!==o["*"])return!1;i=!0,t=t.slice(o["*"].length)}if(n.obj.has(o,"!")){if(t.slice(-o["!"].length)!==o["!"])return!1;i=!0}if(n.obj.has(o,"+")&&n.list.map(n.list.is(o["+"])?o["+"]:[o["+"]],function(n){return t.indexOf(n)>=0?void(i=!0):!0}))return!1;if(n.obj.has(o,"-")&&n.list.map(n.list.is(o["-"])?o["-"]:[o["-"]],function(n){return t.indexOf(n)<0?void(i=!0):!0}))return!1;if(n.obj.has(o,">")){if(!(t>o[">"]))return!1;i=!0}if(n.obj.has(o,"<")){if(!(tn?-1:n>o?1:0):0}},n.list.map=function(t,n,o){return a(t,n,o)},n.list.index=1,n.obj={is:function(t){return t?t instanceof Object&&t.constructor===Object||"Object"===Object.prototype.toString.call(t).match(/^\[object (\w+)\]$/)[1]:!1}},n.obj.put=function(t,n,o){return(t||{})[n]=o,t},n.obj.has=function(t,n){return t&&Object.prototype.hasOwnProperty.call(t,n)},n.obj.del=function(t,n){return t?(t[n]=null,delete t[n],t):void 0},n.obj.as=function(t,n,o,e){return t[n]=t[n]||(e===o?{}:o)},n.obj.ify=function(t){if(r(t))return t;try{t=JSON.parse(t)}catch(n){t={}}return t},function(){function t(t,n){u(this,n)&&o!==this[n]||(this[n]=t)}var o;n.obj.to=function(n,o){return o=o||{},a(n,t,o),o}}(),n.obj.copy=function(t){return t?JSON.parse(JSON.stringify(t)):t},function(){function t(t,n){var o=this.n;if(!o||!(n===o||r(o)&&u(o,n)))return n?!0:void 0}n.obj.empty=function(n,o){return n&&a(n,t,{n:o})?!1:!0}}(),function(){function t(n,o){return 2===arguments.length?(t.r=t.r||{},void(t.r[n]=o)):(t.r=t.r||[],void t.r.push(n))}var i=Object.keys;n.obj.map=function(a,s,f){var c,l,p,g,d,h=0,v=o(s);if(t.r=null,i&&r(a)&&(g=i(a),d=!0),e(a)||g)for(l=(g||a).length;l>h;h++){var _=h+n.list.index;if(v){if(p=d?s.call(f||this,a[g[h]],g[h],t):s.call(f||this,a[h],_,t),p!==c)return p}else if(s===a[d?g[h]:h])return g?g[h]:_}else for(h in a)if(v){if(u(a,h)&&(p=f?s.call(f,a[h],h,t):s(a[h],h,t),p!==c))return p}else if(s===a[h])return h;return v?t.r:n.list.index?0:-1}}(),n.time={},n.time.is=function(t){return t?t instanceof Date:+(new Date).getTime()};var o=n.fn.is,e=n.list.is,i=n.obj,r=i.is,u=i.has,a=i.map;t.exports=n})(t,"./type"),t(function(t){t.exports=function n(t,o,e){if(!t)return{to:n};var t=(this.tag||(this.tag={}))[t]||(this.tag[t]={tag:t,to:n._={next:function(){}}});if(o instanceof Function){var i={off:n.off||(n.off=function(){return this.next===n._.next?!0:(this===this.the.last&&(this.the.last=this.back),this.to.back=this.back,this.next=n._.next,this.back.to=this.to,void(this.the.last===this.the&&delete this.on.tag[this.the.tag]))}),to:n._,next:o,the:t,on:this,as:e};return(i.back=t.last||t).to=i,t.last=i}return(t=t.to).next(o),t}})(t,"./onto"),t(function(t){function n(t,n,e,i,r){if(n>t)return{defer:!0};if(e>n)return{historical:!0};if(n>e)return{converge:!0,incoming:!0};if(n===e){if(i=o(i)||"",r=o(r)||"",i===r)return{state:!0};if(r>i)return{converge:!0,current:!0};if(i>r)return{converge:!0,incoming:!0}}return{err:"Invalid CRDT Data: "+i+" to "+r+" at "+n+" to "+e+"!"}}if("undefined"==typeof JSON)throw new Error("JSON is not included in this browser. Please load it first: ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js");var o=JSON.stringify;t.exports=n})(t,"./HAM"),t(function(n){var o=t("./type"),e={};e.is=function(t){return t===i?!1:null===t?!0:t===1/0?!1:s(t)||u(t)||a(t)?!0:e.rel.is(t)||!1},e.rel={_:"#"},function(){function t(t,n){var o=this;return o.id?o.id=!1:n==r&&s(t)?void(o.id=t):o.id=!1}e.rel.is=function(n){if(n&&n[r]&&!n._&&c(n)){var o={};if(p(n,t,o),o.id)return o.id}return!1}}(),e.rel.ify=function(t){return l({},r,t)};var i,r=e.rel._,u=o.bi.is,a=o.num.is,s=o.text.is,f=o.obj,c=f.is,l=f.put,p=f.map;n.exports=e})(t,"./val"),t(function(n){var o=t("./type"),e=t("./val"),i={_:"_"};i.soul=function(t,n){return t&&t._&&t._[n||p]},i.soul.ify=function(t,n){return n="string"==typeof n?{soul:n}:n||{},t=t||{},t._=t._||{},t._[p]=n.soul||t._[p]||l(),t},i.soul._=e.rel._,function(){function t(t,n){return n!==i._?e.is(t)?void(this.cb&&this.cb.call(this.as,t,n,this.n,this.s)):!0:void 0}i.is=function(n,o,e){var r;return a(n)&&(r=i.soul(n))?!f(n,t,{as:e,cb:o,s:r,n:n}):!1}}(),function(){function t(t,n){var o,i,r=this.o;return r.map?(o=r.map.call(this.as,t,""+n,r.node),void(i===o?s(r.node,n):r.node&&(r.node[n]=o))):void(e.is(t)&&(r.node[n]=t))}i.ify=function(n,o,e){return o?"string"==typeof o?o={soul:o}:o instanceof Function&&(o={map:o}):o={},o.map&&(o.node=o.map.call(e,n,r,o.node||{})),(o.node=i.soul.ify(o.node||{},o))&&f(n,t,{o:o,as:e}),o.node}}();var r,u=o.obj,a=u.is,s=u.del,f=u.map,c=o.text,l=c.random,p=i.soul._;n.exports=i})(t,"./node"),t(function(n){function o(){var t;return t=f?c+f.now():r(),t>u?(a=0,u=t+o.drift):u=t+(a+=1)/s+o.drift}var e=t("./type"),i=t("./node"),r=e.time.is,u=-(1/0),a=0,s=1e3,f="undefined"!=typeof performance?performance.timing&&performance:!1,c=f&&f.timing&&f.timing.navigationStart||(f=!1);o._=">",o.drift=0,o.is=function(t,n,e){var i=n&&t&&t[j]&&t[j][o._]||e;if(i)return m(i=i[n])?i:-(1/0)},o.ify=function(t,n,e,r,u){if(!t||!t[j]){if(!u)return;t=i.soul.ify(t,u)}var a=g(t[j],o._);return l!==n&&n!==j&&(m(e)&&(a[n]=e),l!==r&&(t[n]=r)),t},o.to=function(t,n,e){var r=t[n];return h(r)&&(r=_(r)),o.ify(e,n,o.is(t,n),r,i.soul(t))},function(){function t(t,n){j!==n&&o.ify(this.o,n,this.s)}o.map=function(n,e,i){var r,u=h(u=n||e)?u:null;return n=y(n=n||e)?n:null,u&&!n?(e=m(e)?e:o(),u[j]=u[j]||{},v(u,t,{o:u,s:e}),u):(i=i||h(e)?e:r,e=m(e)?e:o(),function(o,u,a,s){return n?(n.call(i||this||{},o,u,a,s),void(d(a,u)&&r===a[u]||t.call({o:a,s:e},o,u))):(t.call({o:a,s:e},o,u),o)})}}();var l,p=e.obj,g=p.as,d=p.has,h=p.is,v=p.map,_=p.copy,b=e.num,m=b.is,k=e.fn,y=k.is,j=i._;n.exports=o})(t,"./state"),t(function(n){var o=t("./type"),e=t("./val"),i=t("./node"),r={};!function(){function t(t,o){return t&&o===i.soul(t)&&i.is(t,this.fn,this.as)?void(this.cb&&(n.n=t,n.as=this.as,this.cb.call(n.as,t,o,n))):!0}function n(t){t&&i.is(n.n,t,n.as)}r.is=function(n,o,e,i){return n&&s(n)&&!l(n)?!g(n,t,{cb:o,fn:e,as:i}):!1}}(),function(){function t(t,r){var u;return(u=l(t,r))?u:(r.env=t,r.soul=o,i.ify(r.obj,n,r)&&(t.graph[e.rel.is(r.rel)]=r.node),r)}function n(n,o,r){var s,l,p=this,g=p.env;if(i._===o&&c(n,e.rel._))return r._;if(s=a(n,o,r,p,g)){if(o||(p.node=p.node||r||{},c(n,i._)&&(p.node._=d(n._)),p.node=i.soul.ify(p.node,e.rel.is(p.rel)),p.rel=p.rel||e.rel.ify(i.soul(p.node))),(l=g.map)&&(l.call(g.as||{},n,o,r,p),c(r,o))){if(n=r[o],u===n)return void f(r,o);if(!(s=a(n,o,r,p,g)))return}if(!o)return p.node;if(!0===s)return n;if(l=t(g,{obj:n,path:p.path.concat(o)}),l.node)return l.rel}}function o(t){var n=this,o=e.rel.is(n.rel),r=n.env.graph;n.rel=n.rel||e.rel.ify(t),n.rel[e.rel._]=t,n.node&&n.node[i._]&&(n.node[i._][e.rel._]=t),c(r,o)&&(r[t]=r[o],f(r,o))}function a(t,n,o,i,r){var u;return e.is(t)?!0:s(t)?1:(u=r.invalid)?(t=u.call(r.as||{},t,n,o),a(t,n,o,i,r)):void(r.err="Invalid value at '"+i.path.concat(n).join(".")+"'!")}function l(t,n){for(var o,e=t.seen,i=e.length;i--;)if(o=e[i],n.obj===o.obj)return o;e.push(n)}r.ify=function(n,o,i){var r={path:[],obj:n};return o?"string"==typeof o?o={soul:o}:o instanceof Function&&(o.map=o):o={},o.soul&&(r.rel=e.rel.ify(o.soul)),o.graph=o.graph||{},o.seen=o.seen||[],o.as=o.as||i,t(o,r),o.root=r.node,o.graph}}(),r.node=function(t){var n=i.soul(t);if(n)return p({},n,t)},function(){function t(t,n){var o,u;if(i._===n){if(l(t,e.rel._))return;return void(this.obj[n]=d(t))}return(o=e.rel.is(t))?(u=this.opt.seen[o])?void(this.obj[n]=u):void(this.obj[n]=this.opt.seen[o]=r.to(this.graph,o,this.opt)):void(this.obj[n]=t)}r.to=function(n,o,e){if(n){var i={};return e=e||{seen:{}},g(n[o],t,{obj:i,graph:n,opt:e}),i}}}();var u,a=(o.fn.is,o.obj),s=a.is,f=a.del,c=a.has,l=a.empty,p=a.put,g=a.map,d=a.copy;n.exports=r})(t,"./graph"),t(function(n){function o(t){var n={s:{}};return t=t||{max:1e3,age:9e3},n.check=function(t){return n.s[t]?n.track(t):!1},n.track=function(o){return n.s[o]=i(),n.to||(n.to=setTimeout(function(){e.obj.map(n.s,function(o,r){t.age>i()-o||e.obj.del(n.s,r)}),n.to=null},t.age)),o},n}var e=t("./type"),i=e.time.is;n.exports=o})(t,"./dup"),t(function(n){function i(t){return t instanceof i?(this._={gun:this}).gun:this instanceof i?i.create(this._={gun:this,opt:t}):new i(t)}i.is=function(t){return t instanceof i},i.version=.8,i.chain=i.prototype,i.chain.toJSON=function(){};var r=t("./type");r.obj.to(r,i),i.HAM=t("./HAM"),i.val=t("./val"),i.node=t("./node"),i.state=t("./state"),i.graph=t("./graph"),i.dup=t("./dup"),i.on=t("./onto"),i._={node:i.node._,soul:i.val.rel._,state:i.state._,field:".",value:"="},function(){function t(t){var n,o,e=this,r=e.as;t.gun||(t.gun=r.gun),(o=t["#"])||(o=t["#"]=c(9)),r.dup.check(o)||(r.dup.track(o),n=d(t,{gun:r.gun}),r.ack(t["@"],t)||(t.get&&i.on.get(n),t.put&&i.on.put(n)),r.on("out",n))}i.create=function(n){n.on=n.on||i.on,n.root=n.root||n.gun,n.graph=n.graph||{},n.dup=n.dup||i.dup(),n.ask=i.on.ask,n.ack=i.on.ack;var o=n.gun.opt(n.opt);return n.once||(n.on("in",t,n),n.on("out",t,n)),n.once=1,o}}(),function(){function t(t,n,o,e){var r=this,u=i.state.is(o,n);if(!u)return r.err="Error: No state on '"+n+"' in node '"+e+"'!";var a=r.graph[e]||m,s=i.state.is(a,n,!0),f=a[n],c=i.HAM(r.machine,u,s,t,f);return c.incoming?(r.put[e]=i.state.to(o,n,r.put[e]),void((r.diff||(r.diff={}))[e]=i.state.to(o,n,r.diff[e]))):void(c.defer&&(r.defer=u<(r.defer||1/0)?u:r.defer))}function n(t,n){var e=this.gun._,i=(e.next||m)[n];if(i){var r=this.map[n]={put:this.node=t,get:this.soul=n,gun:this.ref=i};h(t,o,this),e.on("node",r)}}function o(t,n){var o=this.graph,e=this.soul,r=this.ref._;o[e]=i.state.to(this.node,n,o[e]),(r.put||(r.put={}))[n]=t}function e(t){t.gun&&t.gun._.on("in",t)}i.on.put=function(o){var r=o.gun._,a={gun:o.gun,graph:o.gun._.graph,put:{},map:{},machine:i.state()};return i.graph.is(o.put,null,t,a)||(a.err="Error: Invalid graph!"),a.err?r.on("in",{"@":o["#"],err:i.log(a.err)}):(h(a.put,n,a),h(a.map,e,a),u!==a.defer&&setTimeout(function(){i.on.put(o)},a.defer-r.machine),void(a.diff&&r.on("put",d(o,{put:a.diff}))))},i.on.get=function(t){var n,o=t.gun._,e=t.get[_],r=o.graph[e],u=t.get[b],a=o.next||(o.next={}),s=(a[e]||m)._;if(!r||!s)return o.on("get",t);if(u){if(!g(r,u))return o.on("get",t);r=i.state.to(r,u)}else r=i.obj.copy(r);r=i.graph.node(r),n=s.ack,o.on("in",{"@":t["#"],how:"mem",put:r,gun:s.gun}),n>0||o.on("get",t)}}(),function(){i.on.ask=function(t,n){if(this.on){var o=c(9);if(t){var e=this.on(o,t,n),i=this.gun._.opt.lack||9e3;e.err=setTimeout(function(){e.next({err:"Error: No ACK received yet."}),e.off()},1e3>i?1e3:i)}return o}},i.on.ack=function(t,n){if(t&&n&&this.on){var o=t["#"]||t,e=(this.tag||m)[o];if(e)return this.on(o,n),clearTimeout(e.err),!0}}}(),function(){i.chain.opt=function(t){t=t||{};var n=this,o=n._,e=t.peers||t;return p(t)||(t={}),p(o.opt)||(o.opt=t),f(e)&&(e=[e]),a(e)&&(e=h(e,function(t,n,o){o(t,{url:t})}),p(o.opt.peers)||(o.opt.peers={}),o.opt.peers=d(e,o.opt.peers)),o.opt.uuid=o.opt.uuid||function(){return v().toString(36).replace(".","")+c(12)},o.opt.peers=o.opt.peers||{},d(t,o.opt),i.on("opt",o),n}}();var u,a=i.list.is,s=i.text,f=s.is,c=s.random,l=i.obj,p=l.is,g=l.has,d=l.to,h=l.map,v=(l.copy,i.state),_=i._.soul,b=i._.field,m=(i.val.rel.is,{});o.debug=function(t,n){return o.debug.i&&t===o.debug.i&&o.debug.i++&&(o.log.apply(o,arguments)||n)},i.log=function(){return!i.log.off&&o.log.apply(o,arguments),[].slice.call(arguments).join(" ")},i.log.once=function(t,n,o){return(o=i.log.once)[t]=o[t]||0,o[t]++||i.log(n)},i.log.once("welcome","Hello wonderful person! :) Thanks for using GUN, feel free to ask for help on https://gitter.im/amark/gun and ask StackOverflow questions tagged with 'gun'!"),"undefined"!=typeof window&&(window.Gun=i),"undefined"!=typeof e&&(e.exports=i),n.exports=i,i.log.once("0.8","0.8 WARNING! Breaking changes, test that your app works before upgrading! The adapter interface has been upgraded (non-default storage and transport layers probably won't work). Also, `.path()` and `.not()` are outside core and now in 'lib/'.")})(t,"./root"),t(function(){var n=t("./root");n.chain.back=function(t,n){var i;if(-1===t||1/0===t)return this._.root;if(1===t)return this._.back||this;var r=this,u=r._;if("string"==typeof t&&(t=t.split(".")),t instanceof Array){var a=0,s=t.length,i=u;for(a;s>a;a++)i=(i||e)[t[a]];if(o!==i)return n?r:i;if(i=u.back)return i.back(t,n)}else if(t instanceof Function){for(var f,i={back:r};(i=i.back)&&(i=i._)&&!(f=t(i,n)););return f}};var o,e={}})(t,"./back"),t(function(){function n(t){var n,o,e,i=this.as,r=i.gun,u=r.back(-1);if(t.gun||(t.gun=r),this.to.next(t),o=t.get)if(e=o[m])e=u.get(e)._,d(o,k)?d(n=e.put,o=o[k])&&e.on("in",{get:e.get,put:c.state.to(n,o),gun:e.gun}):d(e,"put")&&e.on("in",e);else if(d(o,k)){o=o[k];var a=o?r.get(o)._:i;if(l!==a.put)return void a.on("in",a);if(d(i,"put")){var s,p=i.put;if((s=c.node.soul(p))&&(p=c.val.rel.ify(s)),s=c.val.rel.is(p)){if(!t.gun._)return;return void t.gun._.on("out",{get:e={"#":s,".":o,gun:t.gun},"#":u._.ask(f,e),gun:t.gun})}if(l===p||c.val.is(p)){if(!t.gun._)return;return void t.gun._.on("in",{get:o,gun:t.gun})}}else i.map&&b(i.map,function(t){t.at.on("in",t.at)});if(i.soul){if(!t.gun._)return;return void t.gun._.on("out",{get:e={"#":i.soul,".":o,gun:t.gun},"#":u._.ask(f,e),gun:t.gun})}if(i.get){if(!i.back._)return;return void i.back._.on("out",{get:h({},k,i.get),gun:r})}t=_(t,{get:{}})}else{if(d(i,"put")?i.on("in",i):i.map&&b(i.map,function(t){t.at.on("in",t.at)}),i.ack>=0&&!d(i,"put"))return;if(i.ack=-1,i.soul)return void i.on("out",{get:e={"#":i.soul,gun:i.gun},"#":u._.ask(f,e),gun:i.gun});if(i.get){if(!i.back._)return;return void i.back._.on("out",{get:h({},k,i.get),gun:i.gun})}}i.back._.on("out",t)}function o(t){t=t._||t;{var n,o=this,r=this.as,s=t.gun,f=s._,g=t.put;r.back._||p}if(0>r.ack&&!t.ack&&!c.val.rel.is(g)&&(r.ack=1),r.get&&t.get!==r.get&&(t=_(t,{get:r.get})),r.field&&f!==r&&(t=_(t,{gun:r.gun}),f.ack&&(r.ack=r.ack||f.ack)),l===g){if(o.to.next(t),r.soul)return;return i(r,t,o),r.field&&a(r,t),v(f.echo,r.id),void v(r.map,f.id)}return r.soul?(r.root._.now&&(t=_(t,{put:g=f.put})),o.to.next(t),i(r,t,o),void b(g,u,{at:t,cat:r})):(n=c.val.rel.is(g))?(e(r,t,f,n),o.to.next(t),void i(r,t,o)):c.val.is(g)?(r.field||r.soul?a(r,t):(f.field||f.soul)&&((f.echo||(f.echo={}))[r.id]=r,(r.map||(r.map={}))[f.id]=r.map[f.id]||{at:f}),o.to.next(t),void i(r,t,o)):(r.field&&f!==r&&d(f,"put")&&(r.put=f.put),(n=c.node.soul(g))&&f.field&&(f.put=r.root.get(n)._.put),o.to.next(t),i(r,t,o),e(r,t,f,n),void b(g,u,{at:t,cat:r}))}function e(t,n,o,i){if(i&&y!==t.get){var r=t.root.get(i)._;t.field?o=r:o.field&&e(o,n,o,i),o!==t&&((o.echo||(o.echo={}))[t.id]=t,t.field&&!(t.map||p)[o.id]&&a(t,n),r=(t.map||(t.map={}))[o.id]=t.map[o.id]||{at:o},i!==r.rel&&s(t,r.rel=i))}}function i(t,n,o){t.echo&&(t.field&&(n=_(n,{event:o})),b(t.echo,r,n))}function r(t){t.on("in",this)}function u(t,n){var o,e,i,r=this.cat,u=r.next||p,a=this.at;(y!==n||u[n])&&(o=u[n])&&(i=o._,i.field?(t&&t[m]&&c.val.rel.is(t)===c.node.soul(i.put)||(i.put=t),e=o):e=a.gun.get(n),i.on("in",{put:t,get:n,gun:e,via:a}))}function a(t){if(t.field||t.soul){var n=t.map;t.map=null,null!==n&&(l!==n||t.put===l)&&(b(n,function(n){(n=n.at)&&v(n.echo,t.id)}),b(t.next,function(t,n){var o=t._;o.put=l,o.ack&&(o.ack=-1),o.on("in",{get:n,gun:t,put:l})}))}}function s(t,n){var o=t.root.get(n)._;return t.ack?(o.ack=o.ack||-1,void o.on("out",{get:o={"#":n,gun:o.gun},"#":t.root._.ask(f,o)})):void b(t.next,function(o,e){o._.on("out",{get:o={"#":n,".":e,gun:o},"#":t.root._.ask(f,o)})})}function f(t){var n=this.as,o=n.gun._;if(!t.put||n["."]&&!d(t.put[n["#"]],o.get)){if(o.put!==l)return;return void o.on("in",{get:o.get,put:o.put=l,gun:o.gun})}t.gun=o.root,c.on.put(t)}var c=t("./root");c.chain.chain=function(){var t,e=this._,i=new this.constructor(this),r=i._;return r.root=t=e.root,r.id=++t._.once,r.back=this,r.on=c.on,r.on("in",o,r),r.on("out",n,r),i},c.chain.chain.input=o;var l,p={},g=c.obj,d=g.has,h=g.put,v=g.del,_=g.to,b=g.map,m=c._.soul,k=c._.field,y=c.node._})(t,"./chain"),t(function(){function n(t,n){var o=n._,e=o.next,i=n.chain(),r=i._;return e||(e=o.next={}),e[r.get=t]=i,o.root===n?r.soul=t:(o.soul||o.field)&&(r.field=t),i}function o(t){var n,o=this,e=o.as,r=t.gun,a=r._,f=t.put;i===f&&(f=a.put),(n=f)&&n[s._]&&(n=s.is(n))&&(n=a.root.get(n)._,i!==n.put&&(t=u(t,{put:n.put}))),e.use(t,t.event||o),o.to.next(t)}var e=t("./root");e.chain.get=function(t,i,r){if("string"!=typeof t){if(t instanceof Function){var u=this,s=u._;return r=i||{},r.use=t,r.out=r.out||{cap:1},r.out.get=r.out.get||{},"_"!=s.get&&(s.root._.now=!0),s.on("in",o,r),s.on("out",r.out),s.root._.now=!1,u}return a(t)?this.get(""+t,i,r):((r=this.chain())._.err={err:e.log("Invalid get request!",t)},i&&i.call(r,r._.err),r)}var u,c,l=this,p=l._,g=p.next||f;return(u=g[t])||(u=n(t,l)),(c=p.stun)&&(u._.stun=u._.stun||c),i&&i instanceof Function&&u.get(i,r),u};var i,r=e.obj,u=(r.has,e.obj.to),a=e.num.is,s=e.val.rel,f=(e.node._,{})})(t,"./get"),t(function(){function n(t){t.batch=i;var n=t.opt||{},o=t.env=f.state.map(u,n.state);return o.soul=t.soul,t.graph=f.graph.ify(t.data,o,t),o.err?((t.ack||v).call(t,t.out={err:f.log(o.err)}),void(t.res&&t.res())):void t.batch()}function e(t){return void(t&&t())}function i(){var t=this;t.graph&&!d(t.stun,r)&&((t.res||_)(function(){var n=t.gun.back(-1)._,o=n.ask(function(n){this.off(),t.ack&&t.ack(n,this)},t.opt);t.ref._.on("out",{gun:t.ref,put:t.out=t.env.graph,opt:t.opt,"#":o})},t),t.res&&t.res())}function r(t){return t?!0:void 0}function u(t,n,o,e){var i=this;!n&&e.path.length&&(i.res||_)(function(){var t=e.path,n=i.ref,o=(i.opt,0),r=t.length;for(o;r>o;o++)n=n.get(t[o]);if(i.not||f.node.soul(e.obj)){var u=f.node.soul(e.obj)||((i.opt||{}).uuid||i.gun.back("opt.uuid")||f.text.random)();return n.back(-1).get(u),void e.soul(u)}(i.stun=i.stun||{})[t]=!0,n.get("_").get(a,{as:{at:e,as:i}})},{as:i,at:e})}function a(t,n){var o=this.as,e=o.at;if(o=o.as,t.gun&&t.gun._.back){n.off(),t=t.gun._.back._;var i=f.node.soul(e.obj)||f.node.soul(t.put)||f.val.rel.is(t.put)||((o.opt||{}).uuid||o.gun.back("opt.uuid")||f.text.random)();t.gun.back(-1).get(i),e.soul(i),o.stun[e.path]=!1,o.batch()}}function s(t,n){var e=this.as;if(t.gun&&t.gun._){if(t.err)return void o.log("Please report this as an issue! Put.any.err");var i,r=t.gun._.back._,u=r.put,a=e.opt||{};if(n.off(),e.ref!==e.gun){if(i=e.gun._.get||r.get,!i)return void o.log("Please report this as an issue! Put.no.get");e.data=g({},i,e.data),i=null}if(c===u){if(!r.get)return;r.soul||(i=r.gun.back(function(t){return t.soul?t.soul:void(e.data=g({},t.get,e.data))})),i=i||r.get,r=r.root.get(i)._,e.not=e.soul=i,u=e.data}e.not||(e.soul=f.node.soul(u))||(e.soul=e.path&&p(e.data)?(a.uuid||r.root._.opt.uuid||f.text.random)():t.soul||r.soul||(a.uuid||r.root._.opt.uuid||f.text.random)()),e.ref.put(e.data,e.soul,e)}}var f=t("./root");f.chain.put=function(t,o,i){var r,u=this,a=u._,c=a.root;return i=i||{},i.data=t,i.gun=i.gun||u,"string"==typeof o?i.soul=o:i.ack=o,a.soul&&(i.soul=a.soul),i.soul||c===u?p(i.data)?(i.gun=u=c.get(i.soul=i.soul||(i.not=f.node.soul(i.data)||(c._.opt.uuid||f.text.random)())),i.ref=i.gun,n(i),u):((i.ack||v).call(i,i.out={err:f.log("Data saved to the root level of the graph must be a node (an object), not a",typeof i.data,'of "'+i.data+'"!')}),i.res&&i.res(),u):f.is(t)?(t.get(function(t,n){n.off();var e=f.node.soul(t.put);return e?void u.put(f.val.rel.ify(e),o,i):void f.log("The reference you are saving is a",typeof t.put,'"'+i.put+'", not a node (object)!')}),u):(i.ref=i.ref||c===(r=a.back)?u:r,i.ref._.soul&&f.val.is(i.data)&&a.get?(i.data=g({},a.get,i.data),i.ref.put(i.data,i.soul,i),u):(i.ref.get("_").get(s,{as:i}),i.out||(i.res=i.res||e,i.gun._.stun=i.ref._.stun),u))};var c,l=f.obj,p=l.is,g=l.put,d=l.map,h={},v=function(){},_=function(t,n){t.call(n||h)}})(t,"./put"),t(function(n){var o=t("./root");t("./opt"),t("./chain"),t("./back"),t("./put"),t("./get"),n.exports=o})(t,"./index"),t(function(){function n(t,n){var o,r=this,u=t.gun,s=u._,f=s.put||t.put,o=r.last,c=s.id+t.get;if(i!==f){if(f&&f[a._]&&(o=a.is(f))){if(o=s.root.get(o)._,i===o.put)return;f=o.put}r.change&&(f=t.put),(o.put!==f||o.get!==c||e.node.soul(f))&&(o.put=f,o.get=c,s.last=f,r.as?r.ok.call(r.as,t,n):r.ok.call(u,f,t.get,t,n))}}function o(t,n){var e,r=this.as,u=r.cat,s=t.gun,f=s._,c=f.put||t.put;if(c&&c[a._]&&(e=a.is(c))){if(e=u.root.get(e)._,i===e.put)return;c=e.put}if(n.wait&&clearTimeout(n.wait),!r.async)return void(n.wait=setTimeout(function(){o.call({as:r},t,n,n.wait||1)},r.wait||99));if(u.field||u.soul){if(n.off())return}else{if((r.seen=r.seen||{})[f.id])return;r.seen[f.id]=!0}r.ok.call(t.gun||r.gun,c,t.get)}var e=t("./index");e.chain.on=function(t,o,e,i){var r,u,a=this,f=a._;if("string"==typeof t)return o?(r=f.on(t,o,e||f,i),e&&e.gun&&(e.subs||(e.subs=[])).push(r),u=function(){r&&r.off&&r.off(),u.off()},u.off=a.off.bind(a)||s,a.off=u,a):f.on(t);var c=o;return c=!0===c?{change:!0}:c||{},c.ok=t,c.last={},a.get(n,c),a},e.chain.val=function(t,n){var r=this,u=r._,a=u.put;if(0=(n.batch||1e3)?s():void(e||(e=setTimeout(s,n.wait||1)))}),t.on("get",function(t){this.to.next(t);var n,o,e,i=t.gun,r=t.get;if(r&&(n=r[Gun._.soul])){var a=r["."];o=u[n]||e,o&&a&&(o=Gun.state.to(o,a)),(o||Gun.obj.empty(i.back("opt.peers")))&&i.on("in",{"@":t["#"],put:Gun.graph.node(o),how:"lS"})}});var a=function(t,n,o,e){u[e]=Gun.state.to(o,n,u[e])},s=function(){var a;r=0,clearTimeout(e),e=!1;var s=i;i={};try{o.setItem(n.file,JSON.stringify(u))}catch(f){Gun.log(a=f||"localStorage failure")}(a||Gun.obj.empty(n.peers))&&Gun.obj.map(s,function(n,o){t.on("in",{"@":o,err:a,ok:0})})}}})}})(t,"./adapters/localStorage"),t(function(){var n,o=t("./index");if("undefined"!=typeof window){n=window.WebSocket||window.webkitWebSocket||window.mozWebSocket,o.on("opt",function(t){function i(t){var n=this,o=c,e=t.wire||u(t,n);return e?e.readyState===e.OPEN?void e.send(o):void(t.queue=t.queue||[]).push(o):void 0}function r(t,n,o){if(o&&t){try{t=JSON.parse(t.data||t)}catch(i){}if(t instanceof Array)for(var u,a=0;u=t[a++];)r(u,n,o);else 1==f.who&&(t.ws=e),o.on("in",t)}}function u(e,u){if(e&&e.url){var s=e.url.replace("http","ws"),f=e.wire=new n(s);return f.onclose=function(){t.on("bye",e),a(e,u)},f.onerror=function(t){a(e,u),t&&"ECONNREFUSED"===t.code},f.onopen=function(){t.on("hi",e);var n=e.queue;e.queue=[],o.obj.map(n,function(t){c=t,i.call(u,e)})},f.onmessage=function(t){r(t,e,u)},f}}function a(t,n){clearTimeout(t.defer),t.defer=setTimeout(function(){u(t,n)},2e3)}this.to.next(t);var s=t.opt;if(!t.once&&!1!==s.WebSocket){var f=s.ws||(s.ws={});if(f.who=0,o.obj.map(s.peers,function(){++f.who}),!t.once){var c;t.on("out",function(n){if(this.to.next(n),!n.ws||1!=f.who){if(c=JSON.stringify(n),f.drain)return void f.drain.push(c);f.drain=[],setTimeout(function(){if(f.drain){var n=f.drain;f.drain=null,n.length&&(c=JSON.stringify(n),o.obj.map(s.peers,i,t))}},s.wait||1),o.obj.map(s.peers,i,t)}})}}});var e=function(){}}})(t,"./adapters/websocket")}(); \ No newline at end of file +!function(){function t(n){function o(t){return t.split("/").slice(-1).toString().replace(".js","")}return n.slice?t[o(n)]:function(e,i){n(e={exports:{}}),t[o(i)]=e.exports}}var n;"undefined"!=typeof window&&(n=window),"undefined"!=typeof global&&(n=global),n=n||{};var o=n.console||{log:function(){}};if("undefined"!=typeof module)var e=module;t(function(t){var n={};n.fns=n.fn={is:function(t){return!!t&&"function"==typeof t}},n.bi={is:function(t){return t instanceof Boolean||"boolean"==typeof t}},n.num={is:function(t){return!e(t)&&(t-parseFloat(t)+1>=0||1/0===t||-(1/0)===t)}},n.text={is:function(t){return"string"==typeof t}},n.text.ify=function(t){return n.text.is(t)?t:"undefined"!=typeof JSON?JSON.stringify(t):t&&t.toString?t.toString():t},n.text.random=function(t,n){var o="";for(t=t||24,n=n||"0123456789ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz";t>0;)o+=n.charAt(Math.floor(Math.random()*n.length)),t--;return o},n.text.match=function(t,o){function e(t,n){for(var o,e=-1,i=0;o=n[i++];)if(!~(e=t.indexOf(o,e+1)))return!1;return!0}var i=!1;if(t=t||"",o=n.text.is(o)?{"=":o}:o||{},n.obj.has(o,"~")&&(t=t.toLowerCase(),o["="]=(o["="]||o["~"]).toLowerCase()),n.obj.has(o,"="))return t===o["="];if(n.obj.has(o,"*")){if(t.slice(0,o["*"].length)!==o["*"])return!1;i=!0,t=t.slice(o["*"].length)}if(n.obj.has(o,"!")){if(t.slice(-o["!"].length)!==o["!"])return!1;i=!0}if(n.obj.has(o,"+")&&n.list.map(n.list.is(o["+"])?o["+"]:[o["+"]],function(n){return t.indexOf(n)>=0?void(i=!0):!0}))return!1;if(n.obj.has(o,"-")&&n.list.map(n.list.is(o["-"])?o["-"]:[o["-"]],function(n){return t.indexOf(n)<0?void(i=!0):!0}))return!1;if(n.obj.has(o,">")){if(!(t>o[">"]))return!1;i=!0}if(n.obj.has(o,"<")){if(!(tn?-1:n>o?1:0):0}},n.list.map=function(t,n,o){return a(t,n,o)},n.list.index=1,n.obj={is:function(t){return t?t instanceof Object&&t.constructor===Object||"Object"===Object.prototype.toString.call(t).match(/^\[object (\w+)\]$/)[1]:!1}},n.obj.put=function(t,n,o){return(t||{})[n]=o,t},n.obj.has=function(t,n){return t&&Object.prototype.hasOwnProperty.call(t,n)},n.obj.del=function(t,n){return t?(t[n]=null,delete t[n],t):void 0},n.obj.as=function(t,n,o,e){return t[n]=t[n]||(e===o?{}:o)},n.obj.ify=function(t){if(r(t))return t;try{t=JSON.parse(t)}catch(n){t={}}return t},function(){function t(t,n){u(this,n)&&o!==this[n]||(this[n]=t)}var o;n.obj.to=function(n,o){return o=o||{},a(n,t,o),o}}(),n.obj.copy=function(t){return t?JSON.parse(JSON.stringify(t)):t},function(){function t(t,n){var o=this.n;if(!o||!(n===o||r(o)&&u(o,n)))return n?!0:void 0}n.obj.empty=function(n,o){return n&&a(n,t,{n:o})?!1:!0}}(),function(){function t(n,o){return 2===arguments.length?(t.r=t.r||{},void(t.r[n]=o)):(t.r=t.r||[],void t.r.push(n))}var i=Object.keys;n.obj.map=function(a,s,f){var c,l,p,g,d,h=0,v=o(s);if(t.r=null,i&&r(a)&&(g=i(a),d=!0),e(a)||g)for(l=(g||a).length;l>h;h++){var _=h+n.list.index;if(v){if(p=d?s.call(f||this,a[g[h]],g[h],t):s.call(f||this,a[h],_,t),p!==c)return p}else if(s===a[d?g[h]:h])return g?g[h]:_}else for(h in a)if(v){if(u(a,h)&&(p=f?s.call(f,a[h],h,t):s(a[h],h,t),p!==c))return p}else if(s===a[h])return h;return v?t.r:n.list.index?0:-1}}(),n.time={},n.time.is=function(t){return t?t instanceof Date:+(new Date).getTime()};var o=n.fn.is,e=n.list.is,i=n.obj,r=i.is,u=i.has,a=i.map;t.exports=n})(t,"./type"),t(function(t){t.exports=function n(t,o,e){if(!t)return{to:n};var t=(this.tag||(this.tag={}))[t]||(this.tag[t]={tag:t,to:n._={next:function(){}}});if(o instanceof Function){var i={off:n.off||(n.off=function(){return this.next===n._.next?!0:(this===this.the.last&&(this.the.last=this.back),this.to.back=this.back,this.next=n._.next,this.back.to=this.to,void(this.the.last===this.the&&delete this.on.tag[this.the.tag]))}),to:n._,next:o,the:t,on:this,as:e};return(i.back=t.last||t).to=i,t.last=i}return(t=t.to).next(o),t}})(t,"./onto"),t(function(t){function n(t,n,e,i,r){if(n>t)return{defer:!0};if(e>n)return{historical:!0};if(n>e)return{converge:!0,incoming:!0};if(n===e){if(i=o(i)||"",r=o(r)||"",i===r)return{state:!0};if(r>i)return{converge:!0,current:!0};if(i>r)return{converge:!0,incoming:!0}}return{err:"Invalid CRDT Data: "+i+" to "+r+" at "+n+" to "+e+"!"}}if("undefined"==typeof JSON)throw new Error("JSON is not included in this browser. Please load it first: ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js");var o=JSON.stringify;t.exports=n})(t,"./HAM"),t(function(n){var o=t("./type"),e={};e.is=function(t){return t===i?!1:null===t?!0:t===1/0?!1:s(t)||u(t)||a(t)?!0:e.rel.is(t)||!1},e.rel={_:"#"},function(){function t(t,n){var o=this;return o.id?o.id=!1:n==r&&s(t)?void(o.id=t):o.id=!1}e.rel.is=function(n){if(n&&n[r]&&!n._&&c(n)){var o={};if(p(n,t,o),o.id)return o.id}return!1}}(),e.rel.ify=function(t){return l({},r,t)};var i,r=e.rel._,u=o.bi.is,a=o.num.is,s=o.text.is,f=o.obj,c=f.is,l=f.put,p=f.map;n.exports=e})(t,"./val"),t(function(n){var o=t("./type"),e=t("./val"),i={_:"_"};i.soul=function(t,n){return t&&t._&&t._[n||p]},i.soul.ify=function(t,n){return n="string"==typeof n?{soul:n}:n||{},t=t||{},t._=t._||{},t._[p]=n.soul||t._[p]||l(),t},i.soul._=e.rel._,function(){function t(t,n){return n!==i._?e.is(t)?void(this.cb&&this.cb.call(this.as,t,n,this.n,this.s)):!0:void 0}i.is=function(n,o,e){var r;return a(n)&&(r=i.soul(n))?!f(n,t,{as:e,cb:o,s:r,n:n}):!1}}(),function(){function t(t,n){var o,i,r=this.o;return r.map?(o=r.map.call(this.as,t,""+n,r.node),void(i===o?s(r.node,n):r.node&&(r.node[n]=o))):void(e.is(t)&&(r.node[n]=t))}i.ify=function(n,o,e){return o?"string"==typeof o?o={soul:o}:o instanceof Function&&(o={map:o}):o={},o.map&&(o.node=o.map.call(e,n,r,o.node||{})),(o.node=i.soul.ify(o.node||{},o))&&f(n,t,{o:o,as:e}),o.node}}();var r,u=o.obj,a=u.is,s=u.del,f=u.map,c=o.text,l=c.random,p=i.soul._;n.exports=i})(t,"./node"),t(function(n){function o(){var t;return t=f?c+f.now():r(),t>u?(a=0,u=t+o.drift):u=t+(a+=1)/s+o.drift}var e=t("./type"),i=t("./node"),r=e.time.is,u=-(1/0),a=0,s=1e3,f="undefined"!=typeof performance?performance.timing&&performance:!1,c=f&&f.timing&&f.timing.navigationStart||(f=!1);o._=">",o.drift=0,o.is=function(t,n,e){var i=n&&t&&t[j]&&t[j][o._]||e;if(i)return m(i=i[n])?i:-(1/0)},o.ify=function(t,n,e,r,u){if(!t||!t[j]){if(!u)return;t=i.soul.ify(t,u)}var a=g(t[j],o._);return l!==n&&n!==j&&(m(e)&&(a[n]=e),l!==r&&(t[n]=r)),t},o.to=function(t,n,e){var r=t[n];return h(r)&&(r=_(r)),o.ify(e,n,o.is(t,n),r,i.soul(t))},function(){function t(t,n){j!==n&&o.ify(this.o,n,this.s)}o.map=function(n,e,i){var r,u=h(u=n||e)?u:null;return n=y(n=n||e)?n:null,u&&!n?(e=m(e)?e:o(),u[j]=u[j]||{},v(u,t,{o:u,s:e}),u):(i=i||h(e)?e:r,e=m(e)?e:o(),function(o,u,a,s){return n?(n.call(i||this||{},o,u,a,s),void(d(a,u)&&r===a[u]||t.call({o:a,s:e},o,u))):(t.call({o:a,s:e},o,u),o)})}}();var l,p=e.obj,g=p.as,d=p.has,h=p.is,v=p.map,_=p.copy,b=e.num,m=b.is,k=e.fn,y=k.is,j=i._;n.exports=o})(t,"./state"),t(function(n){var o=t("./type"),e=t("./val"),i=t("./node"),r={};!function(){function t(t,o){return t&&o===i.soul(t)&&i.is(t,this.fn,this.as)?void(this.cb&&(n.n=t,n.as=this.as,this.cb.call(n.as,t,o,n))):!0}function n(t){t&&i.is(n.n,t,n.as)}r.is=function(n,o,e,i){return n&&s(n)&&!l(n)?!g(n,t,{cb:o,fn:e,as:i}):!1}}(),function(){function t(t,r){var u;return(u=l(t,r))?u:(r.env=t,r.soul=o,i.ify(r.obj,n,r)&&(t.graph[e.rel.is(r.rel)]=r.node),r)}function n(n,o,r){var s,l,p=this,g=p.env;if(i._===o&&c(n,e.rel._))return r._;if(s=a(n,o,r,p,g)){if(o||(p.node=p.node||r||{},c(n,i._)&&(p.node._=d(n._)),p.node=i.soul.ify(p.node,e.rel.is(p.rel)),p.rel=p.rel||e.rel.ify(i.soul(p.node))),(l=g.map)&&(l.call(g.as||{},n,o,r,p),c(r,o))){if(n=r[o],u===n)return void f(r,o);if(!(s=a(n,o,r,p,g)))return}if(!o)return p.node;if(!0===s)return n;if(l=t(g,{obj:n,path:p.path.concat(o)}),l.node)return l.rel}}function o(t){var n=this,o=e.rel.is(n.rel),r=n.env.graph;n.rel=n.rel||e.rel.ify(t),n.rel[e.rel._]=t,n.node&&n.node[i._]&&(n.node[i._][e.rel._]=t),c(r,o)&&(r[t]=r[o],f(r,o))}function a(t,n,o,i,r){var u;return e.is(t)?!0:s(t)?1:(u=r.invalid)?(t=u.call(r.as||{},t,n,o),a(t,n,o,i,r)):void(r.err="Invalid value at '"+i.path.concat(n).join(".")+"'!")}function l(t,n){for(var o,e=t.seen,i=e.length;i--;)if(o=e[i],n.obj===o.obj)return o;e.push(n)}r.ify=function(n,o,i){var r={path:[],obj:n};return o?"string"==typeof o?o={soul:o}:o instanceof Function&&(o.map=o):o={},o.soul&&(r.rel=e.rel.ify(o.soul)),o.graph=o.graph||{},o.seen=o.seen||[],o.as=o.as||i,t(o,r),o.root=r.node,o.graph}}(),r.node=function(t){var n=i.soul(t);if(n)return p({},n,t)},function(){function t(t,n){var o,u;if(i._===n){if(l(t,e.rel._))return;return void(this.obj[n]=d(t))}return(o=e.rel.is(t))?(u=this.opt.seen[o])?void(this.obj[n]=u):void(this.obj[n]=this.opt.seen[o]=r.to(this.graph,o,this.opt)):void(this.obj[n]=t)}r.to=function(n,o,e){if(n){var i={};return e=e||{seen:{}},g(n[o],t,{obj:i,graph:n,opt:e}),i}}}();var u,a=(o.fn.is,o.obj),s=a.is,f=a.del,c=a.has,l=a.empty,p=a.put,g=a.map,d=a.copy;n.exports=r})(t,"./graph"),t(function(n){function o(t){var n={s:{}};return t=t||{max:1e3,age:9e3},n.check=function(t){return n.s[t]?n.track(t):!1},n.track=function(o){return n.s[o]=i(),n.to||(n.to=setTimeout(function(){e.obj.map(n.s,function(o,r){t.age>i()-o||e.obj.del(n.s,r)}),n.to=null},t.age)),o},n}var e=t("./type"),i=e.time.is;n.exports=o})(t,"./dup"),t(function(n){function i(t){return t instanceof i?(this._={gun:this}).gun:this instanceof i?i.create(this._={gun:this,opt:t}):new i(t)}i.is=function(t){return t instanceof i},i.version=.8,i.chain=i.prototype,i.chain.toJSON=function(){};var r=t("./type");r.obj.to(r,i),i.HAM=t("./HAM"),i.val=t("./val"),i.node=t("./node"),i.state=t("./state"),i.graph=t("./graph"),i.dup=t("./dup"),i.on=t("./onto"),i._={node:i.node._,soul:i.val.rel._,state:i.state._,field:".",value:"="},function(){function t(t){var n,o,e=this,r=e.as;t.gun||(t.gun=r.gun),(o=t["#"])||(o=t["#"]=c(9)),r.dup.check(o)||(r.dup.track(o),n=d(t,{gun:r.gun}),r.ack(t["@"],t)||(t.get&&i.on.get(n),t.put&&i.on.put(n)),r.on("out",n))}i.create=function(n){n.on=n.on||i.on,n.root=n.root||n.gun,n.graph=n.graph||{},n.dup=n.dup||i.dup(),n.ask=i.on.ask,n.ack=i.on.ack;var o=n.gun.opt(n.opt);return n.once||(n.on("in",t,n),n.on("out",t,n)),n.once=1,o}}(),function(){function t(t,n,o,e){var r=this,u=i.state.is(o,n);if(!u)return r.err="Error: No state on '"+n+"' in node '"+e+"'!";var a=r.graph[e]||m,s=i.state.is(a,n,!0),f=a[n],c=i.HAM(r.machine,u,s,t,f);return c.incoming?(r.put[e]=i.state.to(o,n,r.put[e]),void((r.diff||(r.diff={}))[e]=i.state.to(o,n,r.diff[e]))):void(c.defer&&(r.defer=u<(r.defer||1/0)?u:r.defer))}function n(t,n){var e=this.gun._,i=(e.next||m)[n];if(i){var r=this.map[n]={put:this.node=t,get:this.soul=n,gun:this.ref=i};h(t,o,this),e.on("node",r)}}function o(t,n){var o=this.graph,e=this.soul,r=this.ref._;o[e]=i.state.to(this.node,n,o[e]),(r.put||(r.put={}))[n]=t}function e(t){t.gun&&t.gun._.on("in",t)}i.on.put=function(o){var r=o.gun._,a={gun:o.gun,graph:o.gun._.graph,put:{},map:{},machine:i.state()};return i.graph.is(o.put,null,t,a)||(a.err="Error: Invalid graph!"),a.err?r.on("in",{"@":o["#"],err:i.log(a.err)}):(h(a.put,n,a),h(a.map,e,a),u!==a.defer&&setTimeout(function(){i.on.put(o)},a.defer-r.machine),void(a.diff&&r.on("put",d(o,{put:a.diff}))))},i.on.get=function(t){var n,o=t.gun._,e=t.get[_],r=o.graph[e],u=t.get[b],a=o.next||(o.next={}),s=(a[e]||m)._;if(!r||!s)return o.on("get",t);if(u){if(!g(r,u))return o.on("get",t);r=i.state.to(r,u)}else r=i.obj.copy(r);r=i.graph.node(r),n=s.ack,o.on("in",{"@":t["#"],how:"mem",put:r,gun:s.gun}),n>0||o.on("get",t)}}(),function(){i.on.ask=function(t,n){if(this.on){var o=c(9);if(t){var e=this.on(o,t,n),i=this.gun._.opt.lack||9e3;e.err=setTimeout(function(){e.next({err:"Error: No ACK received yet."}),e.off()},1e3>i?1e3:i)}return o}},i.on.ack=function(t,n){if(t&&n&&this.on){var o=t["#"]||t,e=(this.tag||m)[o];if(e)return this.on(o,n),clearTimeout(e.err),!0}}}(),function(){i.chain.opt=function(t){t=t||{};var n=this,o=n._,e=t.peers||t;return p(t)||(t={}),p(o.opt)||(o.opt=t),f(e)&&(e=[e]),a(e)&&(e=h(e,function(t,n,o){o(t,{url:t})}),p(o.opt.peers)||(o.opt.peers={}),o.opt.peers=d(e,o.opt.peers)),o.opt.uuid=o.opt.uuid||function(){return v().toString(36).replace(".","")+c(12)},o.opt.peers=o.opt.peers||{},d(t,o.opt),i.on("opt",o),n}}();var u,a=i.list.is,s=i.text,f=s.is,c=s.random,l=i.obj,p=l.is,g=l.has,d=l.to,h=l.map,v=(l.copy,i.state),_=i._.soul,b=i._.field,m=(i.val.rel.is,{});o.debug=function(t,n){return o.debug.i&&t===o.debug.i&&o.debug.i++&&(o.log.apply(o,arguments)||n)},i.log=function(){return!i.log.off&&o.log.apply(o,arguments),[].slice.call(arguments).join(" ")},i.log.once=function(t,n,o){return(o=i.log.once)[t]=o[t]||0,o[t]++||i.log(n)},i.log.once("welcome","Hello wonderful person! :) Thanks for using GUN, feel free to ask for help on https://gitter.im/amark/gun and ask StackOverflow questions tagged with 'gun'!"),"undefined"!=typeof window&&(window.Gun=i),"undefined"!=typeof e&&(e.exports=i),n.exports=i,i.log.once("0.8","0.8 WARNING! Breaking changes, test that your app works before upgrading! The adapter interface has been upgraded (non-default storage and transport layers probably won't work). Also, `.path()` and `.not()` are outside core and now in 'lib/'.")})(t,"./root"),t(function(){var n=t("./root");n.chain.back=function(t,n){var i;if(-1===t||1/0===t)return this._.root;if(1===t)return this._.back||this;var r=this,u=r._;if("string"==typeof t&&(t=t.split(".")),t instanceof Array){var a=0,s=t.length,i=u;for(a;s>a;a++)i=(i||e)[t[a]];if(o!==i)return n?r:i;if(i=u.back)return i.back(t,n)}else if(t instanceof Function){for(var f,i={back:r};(i=i.back)&&(i=i._)&&!(f=t(i,n)););return f}};var o,e={}})(t,"./back"),t(function(){function n(t){var n,o,e,i=this.as,r=i.gun,u=r.back(-1);if(t.gun||(t.gun=r),this.to.next(t),o=t.get)if(e=o[m])e=u.get(e)._,d(o,k)?d(n=e.put,o=o[k])&&e.on("in",{get:e.get,put:c.state.to(n,o),gun:e.gun}):d(e,"put")&&e.on("in",e);else if(d(o,k)){o=o[k];var a=o?r.get(o)._:i;if(l!==a.put)return void a.on("in",a);if(d(i,"put")){var s,p=i.put;if((s=c.node.soul(p))&&(p=c.val.rel.ify(s)),s=c.val.rel.is(p)){if(!t.gun._)return;return void t.gun._.on("out",{get:e={"#":s,".":o,gun:t.gun},"#":u._.ask(f,e),gun:t.gun})}if(l===p||c.val.is(p)){if(!t.gun._)return;return void t.gun._.on("in",{get:o,gun:t.gun})}}else i.map&&b(i.map,function(t){t.at.on("in",t.at)});if(i.soul){if(!t.gun._)return;return void t.gun._.on("out",{get:e={"#":i.soul,".":o,gun:t.gun},"#":u._.ask(f,e),gun:t.gun})}if(i.get){if(!i.back._)return;return void i.back._.on("out",{get:h({},k,i.get),gun:r})}t=_(t,{get:{}})}else{if(d(i,"put")?i.on("in",i):i.map&&b(i.map,function(t){t.at.on("in",t.at)}),i.ack>=0&&!d(i,"put"))return;if(i.ack=-1,i.soul)return void i.on("out",{get:e={"#":i.soul,gun:i.gun},"#":u._.ask(f,e),gun:i.gun});if(i.get){if(!i.back._)return;return void i.back._.on("out",{get:h({},k,i.get),gun:i.gun})}}i.back._.on("out",t)}function o(t){t=t._||t;{var n,o=this,r=this.as,s=t.gun,f=s._,g=t.put;r.back._||p}if(0>r.ack&&!t.ack&&!c.val.rel.is(g)&&(r.ack=1),r.get&&t.get!==r.get&&(t=_(t,{get:r.get})),r.field&&f!==r&&(t=_(t,{gun:r.gun}),f.ack&&(r.ack=r.ack||f.ack)),l===g){if(o.to.next(t),r.soul)return;return i(r,t,o),r.field&&a(r,t),v(f.echo,r.id),void v(r.map,f.id)}return r.soul?(r.root._.now&&(t=_(t,{put:g=f.put})),o.to.next(t),i(r,t,o),void b(g,u,{at:t,cat:r})):(n=c.val.rel.is(g))?(e(r,t,f,n),o.to.next(t),void i(r,t,o)):c.val.is(g)?(r.field||r.soul?a(r,t):(f.field||f.soul)&&((f.echo||(f.echo={}))[r.id]=r,(r.map||(r.map={}))[f.id]=r.map[f.id]||{at:f}),o.to.next(t),void i(r,t,o)):(r.field&&f!==r&&d(f,"put")&&(r.put=f.put),(n=c.node.soul(g))&&f.field&&(f.put=r.root.get(n)._.put),o.to.next(t),i(r,t,o),e(r,t,f,n),void b(g,u,{at:t,cat:r}))}function e(t,n,o,i){if(i&&y!==t.get){var r=t.root.get(i)._;t.field?o=r:o.field&&e(o,n,o,i),o!==t&&((o.echo||(o.echo={}))[t.id]=t,t.field&&!(t.map||p)[o.id]&&a(t,n),r=(t.map||(t.map={}))[o.id]=t.map[o.id]||{at:o},i!==r.rel&&s(t,r.rel=i))}}function i(t,n,o){t.echo&&(t.field&&(n=_(n,{event:o})),b(t.echo,r,n))}function r(t){t.on("in",this)}function u(t,n){var o,e,i,r=this.cat,u=r.next||p,a=this.at;(y!==n||u[n])&&(o=u[n])&&(i=o._,i.field?(t&&t[m]&&c.val.rel.is(t)===c.node.soul(i.put)||(i.put=t),e=o):e=a.gun.get(n),i.on("in",{put:t,get:n,gun:e,via:a}))}function a(t){if(t.field||t.soul){var n=t.map;t.map=null,null!==n&&(l!==n||t.put===l)&&(b(n,function(n){(n=n.at)&&v(n.echo,t.id)}),b(t.next,function(t,n){var o=t._;o.put=l,o.ack&&(o.ack=-1),o.on("in",{get:n,gun:t,put:l})}))}}function s(t,n){var o=t.root.get(n)._;return t.ack?(o.ack=o.ack||-1,void o.on("out",{get:o={"#":n,gun:o.gun},"#":t.root._.ask(f,o)})):void b(t.next,function(o,e){o._.on("out",{get:o={"#":n,".":e,gun:o},"#":t.root._.ask(f,o)})})}function f(t){var n=this.as,o=n.gun._;if(!t.put||n["."]&&!d(t.put[n["#"]],o.get)){if(o.put!==l)return;return void o.on("in",{get:o.get,put:o.put=l,gun:o.gun})}t.gun=o.root,c.on.put(t)}var c=t("./root");c.chain.chain=function(){var t,e=this._,i=new this.constructor(this),r=i._;return r.root=t=e.root,r.id=++t._.once,r.back=this,r.on=c.on,r.on("in",o,r),r.on("out",n,r),i},c.chain.chain.input=o;var l,p={},g=c.obj,d=g.has,h=g.put,v=g.del,_=g.to,b=g.map,m=c._.soul,k=c._.field,y=c.node._})(t,"./chain"),t(function(){function n(t,n){var o=n._,e=o.next,i=n.chain(),r=i._;return e||(e=o.next={}),e[r.get=t]=i,o.root===n?r.soul=t:(o.soul||o.field)&&(r.field=t),i}function o(t){var n,o=this,e=o.as,r=t.gun,a=r._,f=t.put;i===f&&(f=a.put),(n=f)&&n[s._]&&(n=s.is(n))&&(n=a.root.get(n)._,i!==n.put&&(t=u(t,{put:n.put}))),e.use(t,t.event||o),o.to.next(t)}var e=t("./root");e.chain.get=function(t,i,r){if("string"!=typeof t){if(t instanceof Function){var u=this,s=u._;return r=i||{},r.use=t,r.out=r.out||{cap:1},r.out.get=r.out.get||{},"_"!=s.get&&(s.root._.now=!0),s.on("in",o,r),s.on("out",r.out),s.root._.now=!1,u}return a(t)?this.get(""+t,i,r):((r=this.chain())._.err={err:e.log("Invalid get request!",t)},i&&i.call(r,r._.err),r)}var u,c,l=this,p=l._,g=p.next||f;return(u=g[t])||(u=n(t,l)),(c=p.stun)&&(u._.stun=u._.stun||c),i&&i instanceof Function&&u.get(i,r),u};var i,r=e.obj,u=(r.has,e.obj.to),a=e.num.is,s=e.val.rel,f=(e.node._,{})})(t,"./get"),t(function(){function n(t){t.batch=i;var n=t.opt||{},o=t.env=f.state.map(u,n.state);return o.soul=t.soul,t.graph=f.graph.ify(t.data,o,t),o.err?((t.ack||v).call(t,t.out={err:f.log(o.err)}),void(t.res&&t.res())):void t.batch()}function e(t){return void(t&&t())}function i(){var t=this;t.graph&&!d(t.stun,r)&&((t.res||_)(function(){var n=t.gun.back(-1)._,o=n.ask(function(n){this.off(),t.ack&&t.ack(n,this)},t.opt);t.ref._.on("out",{gun:t.ref,put:t.out=t.env.graph,opt:t.opt,"#":o})},t),t.res&&t.res())}function r(t){return t?!0:void 0}function u(t,n,o,e){var i=this;!n&&e.path.length&&(i.res||_)(function(){var t=e.path,n=i.ref,o=(i.opt,0),r=t.length;for(o;r>o;o++)n=n.get(t[o]);if(i.not||f.node.soul(e.obj)){var u=f.node.soul(e.obj)||((i.opt||{}).uuid||i.gun.back("opt.uuid")||f.text.random)();return n.back(-1).get(u),void e.soul(u)}(i.stun=i.stun||{})[t]=!0,n.get("_").get(a,{as:{at:e,as:i}})},{as:i,at:e})}function a(t,n){var o=this.as,e=o.at;if(o=o.as,t.gun&&t.gun._.back){n.off(),t=t.gun._.back._;var i=f.node.soul(e.obj)||f.node.soul(t.put)||f.val.rel.is(t.put)||((o.opt||{}).uuid||o.gun.back("opt.uuid")||f.text.random)();t.gun.back(-1).get(i),e.soul(i),o.stun[e.path]=!1,o.batch()}}function s(t,n){var e=this.as;if(t.gun&&t.gun._){if(t.err)return void o.log("Please report this as an issue! Put.any.err");var i,r=t.gun._.back._,u=r.put,a=e.opt||{};if(n.off(),e.ref!==e.gun){if(i=e.gun._.get||r.get,!i)return void o.log("Please report this as an issue! Put.no.get");e.data=g({},i,e.data),i=null}if(c===u){if(!r.get)return;r.soul||(i=r.gun.back(function(t){return t.soul?t.soul:void(e.data=g({},t.get,e.data))})),i=i||r.get,r=r.root.get(i)._,e.not=e.soul=i,u=e.data}e.not||(e.soul=f.node.soul(u))||(e.soul=e.path&&p(e.data)?(a.uuid||r.root._.opt.uuid||f.text.random)():t.soul||r.soul||(a.uuid||r.root._.opt.uuid||f.text.random)()),e.ref.put(e.data,e.soul,e)}}var f=t("./root");f.chain.put=function(t,o,i){var r,u=this,a=u._,c=a.root;return i=i||{},i.data=t,i.gun=i.gun||u,"string"==typeof o?i.soul=o:i.ack=o,a.soul&&(i.soul=a.soul),i.soul||c===u?p(i.data)?(i.gun=u=c.get(i.soul=i.soul||(i.not=f.node.soul(i.data)||(c._.opt.uuid||f.text.random)())),i.ref=i.gun,n(i),u):((i.ack||v).call(i,i.out={err:f.log("Data saved to the root level of the graph must be a node (an object), not a",typeof i.data,'of "'+i.data+'"!')}),i.res&&i.res(),u):f.is(t)?(t.get(function(t,n){n.off();var e=f.node.soul(t.put);return e?void u.put(f.val.rel.ify(e),o,i):void f.log("The reference you are saving is a",typeof t.put,'"'+i.put+'", not a node (object)!')}),u):(i.ref=i.ref||c===(r=a.back)?u:r,i.ref._.soul&&f.val.is(i.data)&&a.get?(i.data=g({},a.get,i.data),i.ref.put(i.data,i.soul,i),u):(i.ref.get("_").get(s,{as:i}),i.out||(i.res=i.res||e,i.gun._.stun=i.ref._.stun),u))};var c,l=f.obj,p=l.is,g=l.put,d=l.map,h={},v=function(){},_=function(t,n){t.call(n||h)}})(t,"./put"),t(function(n){var o=t("./root");t("./opt"),t("./chain"),t("./back"),t("./put"),t("./get"),n.exports=o})(t,"./index"),t(function(){function n(t,n){var o,r=this,u=t.gun,s=u._,f=s.put||t.put,o=r.last,c=s.id+t.get;if(i!==f){if(f&&f[a._]&&(o=a.is(f))){if(o=s.root.get(o)._,i===o.put)return;f=o.put}r.change&&(f=t.put),(o.put!==f||o.get!==c||e.node.soul(f))&&(o.put=f,o.get=c,s.last=f,r.as?r.ok.call(r.as,t,n):r.ok.call(u,f,t.get,t,n))}}function o(t,n){var e,r=this.as,u=r.cat,s=t.gun,f=s._,c=f.put||t.put;if(c&&c[a._]&&(e=a.is(c))){if(e=u.root.get(e)._,i===e.put)return;c=e.put}if(n.wait&&clearTimeout(n.wait),!r.async)return void(n.wait=setTimeout(function(){o.call({as:r},t,n,n.wait||1)},r.wait||99));if(u.field||u.soul){if(n.off())return}else{if((r.seen=r.seen||{})[f.id])return;r.seen[f.id]=!0}r.ok.call(t.gun||r.gun,c,t.get)}var e=t("./index");e.chain.on=function(t,o,e,i){var r,u,a=this,f=a._;if("string"==typeof t)return o?(r=f.on(t,o,e||f,i),e&&e.gun&&(e.subs||(e.subs=[])).push(r),u=function(){r&&r.off&&r.off(),u.off()},u.off=a.off.bind(a)||s,a.off=u,a):f.on(t);var c=o;return c=!0===c?{change:!0}:c||{},c.ok=t,c.last={},a.get(n,c),a},e.chain.val=function(t,n){var r=this,u=r._,a=u.put;if(0=(n.batch||1e3)?s():void(e||(e=setTimeout(s,n.wait||1)))}),t.on("get",function(t){this.to.next(t);var n,o,e,i=t.gun,r=t.get;if(r&&(n=r[Gun._.soul])){var a=r["."];o=u[n]||e,o&&a&&(o=Gun.state.to(o,a)),(o||Gun.obj.empty(i.back("opt.peers")))&&i.on("in",{"@":t["#"],put:Gun.graph.node(o),how:"lS"})}});var a=function(t,n,o,e){u[e]=Gun.state.to(o,n,u[e])},s=function(){var a;r=0,clearTimeout(e),e=!1;var s=i;i={};try{o.setItem(n.file,JSON.stringify(u))}catch(f){Gun.log(a=f||"localStorage failure")}(a||Gun.obj.empty(n.peers))&&Gun.obj.map(s,function(n,o){t.on("in",{"@":o,err:a,ok:0})})}}})}})(t,"./adapters/localStorage"),t(function(){var n,o=t("./index");"undefined"!=typeof WebSocket?n=WebSocket:("undefined"!=typeof webkitWebSocket&&(n=webkitWebSocket),"undefined"!=typeof mozWebSocket&&(n=mozWebSocket)),o.on("opt",function(t){function i(t){var n=this,o=c,e=t.wire||u(t,n);return e?e.readyState===e.OPEN?void e.send(o):void(t.queue=t.queue||[]).push(o):void 0}function r(t,n,o){if(o&&t){try{t=JSON.parse(t.data||t)}catch(i){}if(t instanceof Array)for(var u,a=0;u=t[a++];)r(u,n,o);else 1==f.who&&(t.ws=e),o.on("in",t)}}function u(e,u){if(e&&e.url){var s=e.url.replace("http","ws"),f=e.wire=new n(s);return f.onclose=function(){t.on("bye",e),a(e,u)},f.onerror=function(t){a(e,u),t&&"ECONNREFUSED"===t.code},f.onopen=function(){t.on("hi",e);var n=e.queue;e.queue=[],o.obj.map(n,function(t){c=t,i.call(u,e)})},f.onmessage=function(t){r(t,e,u)},f}}function a(t,n){clearTimeout(t.defer),t.defer=setTimeout(function(){u(t,n)},2e3)}this.to.next(t);var s=t.opt;if(!t.once&&!1!==s.WebSocket&&n){var f=s.ws||(s.ws={});if(f.who=0,o.obj.map(s.peers,function(){++f.who}),!t.once){var c;t.on("out",function(n){if(this.to.next(n),!n.ws||1!=f.who){if(c=JSON.stringify(n),f.drain)return void f.drain.push(c);f.drain=[],setTimeout(function(){if(f.drain){var n=f.drain;f.drain=null,n.length&&(c=JSON.stringify(n),o.obj.map(s.peers,i,t))}},s.wait||1),o.obj.map(s.peers,i,t)}})}}});var e=function(){}})(t,"./adapters/websocket")}(); \ No newline at end of file diff --git a/src/adapters/websocket.js b/src/adapters/websocket.js index ee6935a5..f64d563c 100644 --- a/src/adapters/websocket.js +++ b/src/adapters/websocket.js @@ -1,16 +1,21 @@ var Gun = require('./index'); -var WebSocket; -if(typeof window !== 'undefined'){ - WebSocket = window.WebSocket || window.webkitWebSocket || window.mozWebSocket; +var websocket; +if(typeof WebSocket !== 'undefined'){ + websocket = WebSocket; } else { - return; + if(typeof webkitWebSocket !== 'undefined'){ + websocket = webkitWebSocket; + } + if(typeof mozWebSocket !== 'undefined'){ + websocket = mozWebSocket; + } } Gun.on('opt', function(ctx){ this.to.next(ctx); var opt = ctx.opt; if(ctx.once){ return } - if(false === opt.WebSocket){ return } + if(false === opt.WebSocket || !websocket){ return } var ws = opt.ws || (opt.ws = {}); ws.who = 0; Gun.obj.map(opt.peers, function(){ ++ws.who }); if(ctx.once){ return } @@ -62,7 +67,7 @@ Gun.on('opt', function(ctx){ function open(peer, as){ if(!peer || !peer.url){ return } var url = peer.url.replace('http', 'ws'); - var wire = peer.wire = new WebSocket(url); + var wire = peer.wire = new websocket(url); wire.onclose = function(){ ctx.on('bye', peer); reconnect(peer, as); From b3ba1bde4d4efedc9ab1550df4e978ec9e7a6837 Mon Sep 17 00:00:00 2001 From: Mark Nadal Date: Mon, 18 Sep 2017 14:05:12 -0700 Subject: [PATCH 4/7] thanks to @sjones6 for .promise() & .then() & better React Native support! --- gun.js | 2 +- gun.min.js | 2 +- src/adapters/websocket.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gun.js b/gun.js index 8b3a2b3b..b1b0585c 100644 --- a/gun.js +++ b/gun.js @@ -1720,7 +1720,7 @@ this.to.next(ctx); var opt = ctx.opt; if(ctx.once){ return } - if(false === opt.WebSocket || !websocket){ return } + if(!websocket || false === opt.WebSocket){ return } var ws = opt.ws || (opt.ws = {}); ws.who = 0; Gun.obj.map(opt.peers, function(){ ++ws.who }); if(ctx.once){ return } diff --git a/gun.min.js b/gun.min.js index 13eace78..5fc0ad6c 100644 --- a/gun.min.js +++ b/gun.min.js @@ -1 +1 @@ -!function(){function t(n){function o(t){return t.split("/").slice(-1).toString().replace(".js","")}return n.slice?t[o(n)]:function(e,i){n(e={exports:{}}),t[o(i)]=e.exports}}var n;"undefined"!=typeof window&&(n=window),"undefined"!=typeof global&&(n=global),n=n||{};var o=n.console||{log:function(){}};if("undefined"!=typeof module)var e=module;t(function(t){var n={};n.fns=n.fn={is:function(t){return!!t&&"function"==typeof t}},n.bi={is:function(t){return t instanceof Boolean||"boolean"==typeof t}},n.num={is:function(t){return!e(t)&&(t-parseFloat(t)+1>=0||1/0===t||-(1/0)===t)}},n.text={is:function(t){return"string"==typeof t}},n.text.ify=function(t){return n.text.is(t)?t:"undefined"!=typeof JSON?JSON.stringify(t):t&&t.toString?t.toString():t},n.text.random=function(t,n){var o="";for(t=t||24,n=n||"0123456789ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz";t>0;)o+=n.charAt(Math.floor(Math.random()*n.length)),t--;return o},n.text.match=function(t,o){function e(t,n){for(var o,e=-1,i=0;o=n[i++];)if(!~(e=t.indexOf(o,e+1)))return!1;return!0}var i=!1;if(t=t||"",o=n.text.is(o)?{"=":o}:o||{},n.obj.has(o,"~")&&(t=t.toLowerCase(),o["="]=(o["="]||o["~"]).toLowerCase()),n.obj.has(o,"="))return t===o["="];if(n.obj.has(o,"*")){if(t.slice(0,o["*"].length)!==o["*"])return!1;i=!0,t=t.slice(o["*"].length)}if(n.obj.has(o,"!")){if(t.slice(-o["!"].length)!==o["!"])return!1;i=!0}if(n.obj.has(o,"+")&&n.list.map(n.list.is(o["+"])?o["+"]:[o["+"]],function(n){return t.indexOf(n)>=0?void(i=!0):!0}))return!1;if(n.obj.has(o,"-")&&n.list.map(n.list.is(o["-"])?o["-"]:[o["-"]],function(n){return t.indexOf(n)<0?void(i=!0):!0}))return!1;if(n.obj.has(o,">")){if(!(t>o[">"]))return!1;i=!0}if(n.obj.has(o,"<")){if(!(tn?-1:n>o?1:0):0}},n.list.map=function(t,n,o){return a(t,n,o)},n.list.index=1,n.obj={is:function(t){return t?t instanceof Object&&t.constructor===Object||"Object"===Object.prototype.toString.call(t).match(/^\[object (\w+)\]$/)[1]:!1}},n.obj.put=function(t,n,o){return(t||{})[n]=o,t},n.obj.has=function(t,n){return t&&Object.prototype.hasOwnProperty.call(t,n)},n.obj.del=function(t,n){return t?(t[n]=null,delete t[n],t):void 0},n.obj.as=function(t,n,o,e){return t[n]=t[n]||(e===o?{}:o)},n.obj.ify=function(t){if(r(t))return t;try{t=JSON.parse(t)}catch(n){t={}}return t},function(){function t(t,n){u(this,n)&&o!==this[n]||(this[n]=t)}var o;n.obj.to=function(n,o){return o=o||{},a(n,t,o),o}}(),n.obj.copy=function(t){return t?JSON.parse(JSON.stringify(t)):t},function(){function t(t,n){var o=this.n;if(!o||!(n===o||r(o)&&u(o,n)))return n?!0:void 0}n.obj.empty=function(n,o){return n&&a(n,t,{n:o})?!1:!0}}(),function(){function t(n,o){return 2===arguments.length?(t.r=t.r||{},void(t.r[n]=o)):(t.r=t.r||[],void t.r.push(n))}var i=Object.keys;n.obj.map=function(a,s,f){var c,l,p,g,d,h=0,v=o(s);if(t.r=null,i&&r(a)&&(g=i(a),d=!0),e(a)||g)for(l=(g||a).length;l>h;h++){var _=h+n.list.index;if(v){if(p=d?s.call(f||this,a[g[h]],g[h],t):s.call(f||this,a[h],_,t),p!==c)return p}else if(s===a[d?g[h]:h])return g?g[h]:_}else for(h in a)if(v){if(u(a,h)&&(p=f?s.call(f,a[h],h,t):s(a[h],h,t),p!==c))return p}else if(s===a[h])return h;return v?t.r:n.list.index?0:-1}}(),n.time={},n.time.is=function(t){return t?t instanceof Date:+(new Date).getTime()};var o=n.fn.is,e=n.list.is,i=n.obj,r=i.is,u=i.has,a=i.map;t.exports=n})(t,"./type"),t(function(t){t.exports=function n(t,o,e){if(!t)return{to:n};var t=(this.tag||(this.tag={}))[t]||(this.tag[t]={tag:t,to:n._={next:function(){}}});if(o instanceof Function){var i={off:n.off||(n.off=function(){return this.next===n._.next?!0:(this===this.the.last&&(this.the.last=this.back),this.to.back=this.back,this.next=n._.next,this.back.to=this.to,void(this.the.last===this.the&&delete this.on.tag[this.the.tag]))}),to:n._,next:o,the:t,on:this,as:e};return(i.back=t.last||t).to=i,t.last=i}return(t=t.to).next(o),t}})(t,"./onto"),t(function(t){function n(t,n,e,i,r){if(n>t)return{defer:!0};if(e>n)return{historical:!0};if(n>e)return{converge:!0,incoming:!0};if(n===e){if(i=o(i)||"",r=o(r)||"",i===r)return{state:!0};if(r>i)return{converge:!0,current:!0};if(i>r)return{converge:!0,incoming:!0}}return{err:"Invalid CRDT Data: "+i+" to "+r+" at "+n+" to "+e+"!"}}if("undefined"==typeof JSON)throw new Error("JSON is not included in this browser. Please load it first: ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js");var o=JSON.stringify;t.exports=n})(t,"./HAM"),t(function(n){var o=t("./type"),e={};e.is=function(t){return t===i?!1:null===t?!0:t===1/0?!1:s(t)||u(t)||a(t)?!0:e.rel.is(t)||!1},e.rel={_:"#"},function(){function t(t,n){var o=this;return o.id?o.id=!1:n==r&&s(t)?void(o.id=t):o.id=!1}e.rel.is=function(n){if(n&&n[r]&&!n._&&c(n)){var o={};if(p(n,t,o),o.id)return o.id}return!1}}(),e.rel.ify=function(t){return l({},r,t)};var i,r=e.rel._,u=o.bi.is,a=o.num.is,s=o.text.is,f=o.obj,c=f.is,l=f.put,p=f.map;n.exports=e})(t,"./val"),t(function(n){var o=t("./type"),e=t("./val"),i={_:"_"};i.soul=function(t,n){return t&&t._&&t._[n||p]},i.soul.ify=function(t,n){return n="string"==typeof n?{soul:n}:n||{},t=t||{},t._=t._||{},t._[p]=n.soul||t._[p]||l(),t},i.soul._=e.rel._,function(){function t(t,n){return n!==i._?e.is(t)?void(this.cb&&this.cb.call(this.as,t,n,this.n,this.s)):!0:void 0}i.is=function(n,o,e){var r;return a(n)&&(r=i.soul(n))?!f(n,t,{as:e,cb:o,s:r,n:n}):!1}}(),function(){function t(t,n){var o,i,r=this.o;return r.map?(o=r.map.call(this.as,t,""+n,r.node),void(i===o?s(r.node,n):r.node&&(r.node[n]=o))):void(e.is(t)&&(r.node[n]=t))}i.ify=function(n,o,e){return o?"string"==typeof o?o={soul:o}:o instanceof Function&&(o={map:o}):o={},o.map&&(o.node=o.map.call(e,n,r,o.node||{})),(o.node=i.soul.ify(o.node||{},o))&&f(n,t,{o:o,as:e}),o.node}}();var r,u=o.obj,a=u.is,s=u.del,f=u.map,c=o.text,l=c.random,p=i.soul._;n.exports=i})(t,"./node"),t(function(n){function o(){var t;return t=f?c+f.now():r(),t>u?(a=0,u=t+o.drift):u=t+(a+=1)/s+o.drift}var e=t("./type"),i=t("./node"),r=e.time.is,u=-(1/0),a=0,s=1e3,f="undefined"!=typeof performance?performance.timing&&performance:!1,c=f&&f.timing&&f.timing.navigationStart||(f=!1);o._=">",o.drift=0,o.is=function(t,n,e){var i=n&&t&&t[j]&&t[j][o._]||e;if(i)return m(i=i[n])?i:-(1/0)},o.ify=function(t,n,e,r,u){if(!t||!t[j]){if(!u)return;t=i.soul.ify(t,u)}var a=g(t[j],o._);return l!==n&&n!==j&&(m(e)&&(a[n]=e),l!==r&&(t[n]=r)),t},o.to=function(t,n,e){var r=t[n];return h(r)&&(r=_(r)),o.ify(e,n,o.is(t,n),r,i.soul(t))},function(){function t(t,n){j!==n&&o.ify(this.o,n,this.s)}o.map=function(n,e,i){var r,u=h(u=n||e)?u:null;return n=y(n=n||e)?n:null,u&&!n?(e=m(e)?e:o(),u[j]=u[j]||{},v(u,t,{o:u,s:e}),u):(i=i||h(e)?e:r,e=m(e)?e:o(),function(o,u,a,s){return n?(n.call(i||this||{},o,u,a,s),void(d(a,u)&&r===a[u]||t.call({o:a,s:e},o,u))):(t.call({o:a,s:e},o,u),o)})}}();var l,p=e.obj,g=p.as,d=p.has,h=p.is,v=p.map,_=p.copy,b=e.num,m=b.is,k=e.fn,y=k.is,j=i._;n.exports=o})(t,"./state"),t(function(n){var o=t("./type"),e=t("./val"),i=t("./node"),r={};!function(){function t(t,o){return t&&o===i.soul(t)&&i.is(t,this.fn,this.as)?void(this.cb&&(n.n=t,n.as=this.as,this.cb.call(n.as,t,o,n))):!0}function n(t){t&&i.is(n.n,t,n.as)}r.is=function(n,o,e,i){return n&&s(n)&&!l(n)?!g(n,t,{cb:o,fn:e,as:i}):!1}}(),function(){function t(t,r){var u;return(u=l(t,r))?u:(r.env=t,r.soul=o,i.ify(r.obj,n,r)&&(t.graph[e.rel.is(r.rel)]=r.node),r)}function n(n,o,r){var s,l,p=this,g=p.env;if(i._===o&&c(n,e.rel._))return r._;if(s=a(n,o,r,p,g)){if(o||(p.node=p.node||r||{},c(n,i._)&&(p.node._=d(n._)),p.node=i.soul.ify(p.node,e.rel.is(p.rel)),p.rel=p.rel||e.rel.ify(i.soul(p.node))),(l=g.map)&&(l.call(g.as||{},n,o,r,p),c(r,o))){if(n=r[o],u===n)return void f(r,o);if(!(s=a(n,o,r,p,g)))return}if(!o)return p.node;if(!0===s)return n;if(l=t(g,{obj:n,path:p.path.concat(o)}),l.node)return l.rel}}function o(t){var n=this,o=e.rel.is(n.rel),r=n.env.graph;n.rel=n.rel||e.rel.ify(t),n.rel[e.rel._]=t,n.node&&n.node[i._]&&(n.node[i._][e.rel._]=t),c(r,o)&&(r[t]=r[o],f(r,o))}function a(t,n,o,i,r){var u;return e.is(t)?!0:s(t)?1:(u=r.invalid)?(t=u.call(r.as||{},t,n,o),a(t,n,o,i,r)):void(r.err="Invalid value at '"+i.path.concat(n).join(".")+"'!")}function l(t,n){for(var o,e=t.seen,i=e.length;i--;)if(o=e[i],n.obj===o.obj)return o;e.push(n)}r.ify=function(n,o,i){var r={path:[],obj:n};return o?"string"==typeof o?o={soul:o}:o instanceof Function&&(o.map=o):o={},o.soul&&(r.rel=e.rel.ify(o.soul)),o.graph=o.graph||{},o.seen=o.seen||[],o.as=o.as||i,t(o,r),o.root=r.node,o.graph}}(),r.node=function(t){var n=i.soul(t);if(n)return p({},n,t)},function(){function t(t,n){var o,u;if(i._===n){if(l(t,e.rel._))return;return void(this.obj[n]=d(t))}return(o=e.rel.is(t))?(u=this.opt.seen[o])?void(this.obj[n]=u):void(this.obj[n]=this.opt.seen[o]=r.to(this.graph,o,this.opt)):void(this.obj[n]=t)}r.to=function(n,o,e){if(n){var i={};return e=e||{seen:{}},g(n[o],t,{obj:i,graph:n,opt:e}),i}}}();var u,a=(o.fn.is,o.obj),s=a.is,f=a.del,c=a.has,l=a.empty,p=a.put,g=a.map,d=a.copy;n.exports=r})(t,"./graph"),t(function(n){function o(t){var n={s:{}};return t=t||{max:1e3,age:9e3},n.check=function(t){return n.s[t]?n.track(t):!1},n.track=function(o){return n.s[o]=i(),n.to||(n.to=setTimeout(function(){e.obj.map(n.s,function(o,r){t.age>i()-o||e.obj.del(n.s,r)}),n.to=null},t.age)),o},n}var e=t("./type"),i=e.time.is;n.exports=o})(t,"./dup"),t(function(n){function i(t){return t instanceof i?(this._={gun:this}).gun:this instanceof i?i.create(this._={gun:this,opt:t}):new i(t)}i.is=function(t){return t instanceof i},i.version=.8,i.chain=i.prototype,i.chain.toJSON=function(){};var r=t("./type");r.obj.to(r,i),i.HAM=t("./HAM"),i.val=t("./val"),i.node=t("./node"),i.state=t("./state"),i.graph=t("./graph"),i.dup=t("./dup"),i.on=t("./onto"),i._={node:i.node._,soul:i.val.rel._,state:i.state._,field:".",value:"="},function(){function t(t){var n,o,e=this,r=e.as;t.gun||(t.gun=r.gun),(o=t["#"])||(o=t["#"]=c(9)),r.dup.check(o)||(r.dup.track(o),n=d(t,{gun:r.gun}),r.ack(t["@"],t)||(t.get&&i.on.get(n),t.put&&i.on.put(n)),r.on("out",n))}i.create=function(n){n.on=n.on||i.on,n.root=n.root||n.gun,n.graph=n.graph||{},n.dup=n.dup||i.dup(),n.ask=i.on.ask,n.ack=i.on.ack;var o=n.gun.opt(n.opt);return n.once||(n.on("in",t,n),n.on("out",t,n)),n.once=1,o}}(),function(){function t(t,n,o,e){var r=this,u=i.state.is(o,n);if(!u)return r.err="Error: No state on '"+n+"' in node '"+e+"'!";var a=r.graph[e]||m,s=i.state.is(a,n,!0),f=a[n],c=i.HAM(r.machine,u,s,t,f);return c.incoming?(r.put[e]=i.state.to(o,n,r.put[e]),void((r.diff||(r.diff={}))[e]=i.state.to(o,n,r.diff[e]))):void(c.defer&&(r.defer=u<(r.defer||1/0)?u:r.defer))}function n(t,n){var e=this.gun._,i=(e.next||m)[n];if(i){var r=this.map[n]={put:this.node=t,get:this.soul=n,gun:this.ref=i};h(t,o,this),e.on("node",r)}}function o(t,n){var o=this.graph,e=this.soul,r=this.ref._;o[e]=i.state.to(this.node,n,o[e]),(r.put||(r.put={}))[n]=t}function e(t){t.gun&&t.gun._.on("in",t)}i.on.put=function(o){var r=o.gun._,a={gun:o.gun,graph:o.gun._.graph,put:{},map:{},machine:i.state()};return i.graph.is(o.put,null,t,a)||(a.err="Error: Invalid graph!"),a.err?r.on("in",{"@":o["#"],err:i.log(a.err)}):(h(a.put,n,a),h(a.map,e,a),u!==a.defer&&setTimeout(function(){i.on.put(o)},a.defer-r.machine),void(a.diff&&r.on("put",d(o,{put:a.diff}))))},i.on.get=function(t){var n,o=t.gun._,e=t.get[_],r=o.graph[e],u=t.get[b],a=o.next||(o.next={}),s=(a[e]||m)._;if(!r||!s)return o.on("get",t);if(u){if(!g(r,u))return o.on("get",t);r=i.state.to(r,u)}else r=i.obj.copy(r);r=i.graph.node(r),n=s.ack,o.on("in",{"@":t["#"],how:"mem",put:r,gun:s.gun}),n>0||o.on("get",t)}}(),function(){i.on.ask=function(t,n){if(this.on){var o=c(9);if(t){var e=this.on(o,t,n),i=this.gun._.opt.lack||9e3;e.err=setTimeout(function(){e.next({err:"Error: No ACK received yet."}),e.off()},1e3>i?1e3:i)}return o}},i.on.ack=function(t,n){if(t&&n&&this.on){var o=t["#"]||t,e=(this.tag||m)[o];if(e)return this.on(o,n),clearTimeout(e.err),!0}}}(),function(){i.chain.opt=function(t){t=t||{};var n=this,o=n._,e=t.peers||t;return p(t)||(t={}),p(o.opt)||(o.opt=t),f(e)&&(e=[e]),a(e)&&(e=h(e,function(t,n,o){o(t,{url:t})}),p(o.opt.peers)||(o.opt.peers={}),o.opt.peers=d(e,o.opt.peers)),o.opt.uuid=o.opt.uuid||function(){return v().toString(36).replace(".","")+c(12)},o.opt.peers=o.opt.peers||{},d(t,o.opt),i.on("opt",o),n}}();var u,a=i.list.is,s=i.text,f=s.is,c=s.random,l=i.obj,p=l.is,g=l.has,d=l.to,h=l.map,v=(l.copy,i.state),_=i._.soul,b=i._.field,m=(i.val.rel.is,{});o.debug=function(t,n){return o.debug.i&&t===o.debug.i&&o.debug.i++&&(o.log.apply(o,arguments)||n)},i.log=function(){return!i.log.off&&o.log.apply(o,arguments),[].slice.call(arguments).join(" ")},i.log.once=function(t,n,o){return(o=i.log.once)[t]=o[t]||0,o[t]++||i.log(n)},i.log.once("welcome","Hello wonderful person! :) Thanks for using GUN, feel free to ask for help on https://gitter.im/amark/gun and ask StackOverflow questions tagged with 'gun'!"),"undefined"!=typeof window&&(window.Gun=i),"undefined"!=typeof e&&(e.exports=i),n.exports=i,i.log.once("0.8","0.8 WARNING! Breaking changes, test that your app works before upgrading! The adapter interface has been upgraded (non-default storage and transport layers probably won't work). Also, `.path()` and `.not()` are outside core and now in 'lib/'.")})(t,"./root"),t(function(){var n=t("./root");n.chain.back=function(t,n){var i;if(-1===t||1/0===t)return this._.root;if(1===t)return this._.back||this;var r=this,u=r._;if("string"==typeof t&&(t=t.split(".")),t instanceof Array){var a=0,s=t.length,i=u;for(a;s>a;a++)i=(i||e)[t[a]];if(o!==i)return n?r:i;if(i=u.back)return i.back(t,n)}else if(t instanceof Function){for(var f,i={back:r};(i=i.back)&&(i=i._)&&!(f=t(i,n)););return f}};var o,e={}})(t,"./back"),t(function(){function n(t){var n,o,e,i=this.as,r=i.gun,u=r.back(-1);if(t.gun||(t.gun=r),this.to.next(t),o=t.get)if(e=o[m])e=u.get(e)._,d(o,k)?d(n=e.put,o=o[k])&&e.on("in",{get:e.get,put:c.state.to(n,o),gun:e.gun}):d(e,"put")&&e.on("in",e);else if(d(o,k)){o=o[k];var a=o?r.get(o)._:i;if(l!==a.put)return void a.on("in",a);if(d(i,"put")){var s,p=i.put;if((s=c.node.soul(p))&&(p=c.val.rel.ify(s)),s=c.val.rel.is(p)){if(!t.gun._)return;return void t.gun._.on("out",{get:e={"#":s,".":o,gun:t.gun},"#":u._.ask(f,e),gun:t.gun})}if(l===p||c.val.is(p)){if(!t.gun._)return;return void t.gun._.on("in",{get:o,gun:t.gun})}}else i.map&&b(i.map,function(t){t.at.on("in",t.at)});if(i.soul){if(!t.gun._)return;return void t.gun._.on("out",{get:e={"#":i.soul,".":o,gun:t.gun},"#":u._.ask(f,e),gun:t.gun})}if(i.get){if(!i.back._)return;return void i.back._.on("out",{get:h({},k,i.get),gun:r})}t=_(t,{get:{}})}else{if(d(i,"put")?i.on("in",i):i.map&&b(i.map,function(t){t.at.on("in",t.at)}),i.ack>=0&&!d(i,"put"))return;if(i.ack=-1,i.soul)return void i.on("out",{get:e={"#":i.soul,gun:i.gun},"#":u._.ask(f,e),gun:i.gun});if(i.get){if(!i.back._)return;return void i.back._.on("out",{get:h({},k,i.get),gun:i.gun})}}i.back._.on("out",t)}function o(t){t=t._||t;{var n,o=this,r=this.as,s=t.gun,f=s._,g=t.put;r.back._||p}if(0>r.ack&&!t.ack&&!c.val.rel.is(g)&&(r.ack=1),r.get&&t.get!==r.get&&(t=_(t,{get:r.get})),r.field&&f!==r&&(t=_(t,{gun:r.gun}),f.ack&&(r.ack=r.ack||f.ack)),l===g){if(o.to.next(t),r.soul)return;return i(r,t,o),r.field&&a(r,t),v(f.echo,r.id),void v(r.map,f.id)}return r.soul?(r.root._.now&&(t=_(t,{put:g=f.put})),o.to.next(t),i(r,t,o),void b(g,u,{at:t,cat:r})):(n=c.val.rel.is(g))?(e(r,t,f,n),o.to.next(t),void i(r,t,o)):c.val.is(g)?(r.field||r.soul?a(r,t):(f.field||f.soul)&&((f.echo||(f.echo={}))[r.id]=r,(r.map||(r.map={}))[f.id]=r.map[f.id]||{at:f}),o.to.next(t),void i(r,t,o)):(r.field&&f!==r&&d(f,"put")&&(r.put=f.put),(n=c.node.soul(g))&&f.field&&(f.put=r.root.get(n)._.put),o.to.next(t),i(r,t,o),e(r,t,f,n),void b(g,u,{at:t,cat:r}))}function e(t,n,o,i){if(i&&y!==t.get){var r=t.root.get(i)._;t.field?o=r:o.field&&e(o,n,o,i),o!==t&&((o.echo||(o.echo={}))[t.id]=t,t.field&&!(t.map||p)[o.id]&&a(t,n),r=(t.map||(t.map={}))[o.id]=t.map[o.id]||{at:o},i!==r.rel&&s(t,r.rel=i))}}function i(t,n,o){t.echo&&(t.field&&(n=_(n,{event:o})),b(t.echo,r,n))}function r(t){t.on("in",this)}function u(t,n){var o,e,i,r=this.cat,u=r.next||p,a=this.at;(y!==n||u[n])&&(o=u[n])&&(i=o._,i.field?(t&&t[m]&&c.val.rel.is(t)===c.node.soul(i.put)||(i.put=t),e=o):e=a.gun.get(n),i.on("in",{put:t,get:n,gun:e,via:a}))}function a(t){if(t.field||t.soul){var n=t.map;t.map=null,null!==n&&(l!==n||t.put===l)&&(b(n,function(n){(n=n.at)&&v(n.echo,t.id)}),b(t.next,function(t,n){var o=t._;o.put=l,o.ack&&(o.ack=-1),o.on("in",{get:n,gun:t,put:l})}))}}function s(t,n){var o=t.root.get(n)._;return t.ack?(o.ack=o.ack||-1,void o.on("out",{get:o={"#":n,gun:o.gun},"#":t.root._.ask(f,o)})):void b(t.next,function(o,e){o._.on("out",{get:o={"#":n,".":e,gun:o},"#":t.root._.ask(f,o)})})}function f(t){var n=this.as,o=n.gun._;if(!t.put||n["."]&&!d(t.put[n["#"]],o.get)){if(o.put!==l)return;return void o.on("in",{get:o.get,put:o.put=l,gun:o.gun})}t.gun=o.root,c.on.put(t)}var c=t("./root");c.chain.chain=function(){var t,e=this._,i=new this.constructor(this),r=i._;return r.root=t=e.root,r.id=++t._.once,r.back=this,r.on=c.on,r.on("in",o,r),r.on("out",n,r),i},c.chain.chain.input=o;var l,p={},g=c.obj,d=g.has,h=g.put,v=g.del,_=g.to,b=g.map,m=c._.soul,k=c._.field,y=c.node._})(t,"./chain"),t(function(){function n(t,n){var o=n._,e=o.next,i=n.chain(),r=i._;return e||(e=o.next={}),e[r.get=t]=i,o.root===n?r.soul=t:(o.soul||o.field)&&(r.field=t),i}function o(t){var n,o=this,e=o.as,r=t.gun,a=r._,f=t.put;i===f&&(f=a.put),(n=f)&&n[s._]&&(n=s.is(n))&&(n=a.root.get(n)._,i!==n.put&&(t=u(t,{put:n.put}))),e.use(t,t.event||o),o.to.next(t)}var e=t("./root");e.chain.get=function(t,i,r){if("string"!=typeof t){if(t instanceof Function){var u=this,s=u._;return r=i||{},r.use=t,r.out=r.out||{cap:1},r.out.get=r.out.get||{},"_"!=s.get&&(s.root._.now=!0),s.on("in",o,r),s.on("out",r.out),s.root._.now=!1,u}return a(t)?this.get(""+t,i,r):((r=this.chain())._.err={err:e.log("Invalid get request!",t)},i&&i.call(r,r._.err),r)}var u,c,l=this,p=l._,g=p.next||f;return(u=g[t])||(u=n(t,l)),(c=p.stun)&&(u._.stun=u._.stun||c),i&&i instanceof Function&&u.get(i,r),u};var i,r=e.obj,u=(r.has,e.obj.to),a=e.num.is,s=e.val.rel,f=(e.node._,{})})(t,"./get"),t(function(){function n(t){t.batch=i;var n=t.opt||{},o=t.env=f.state.map(u,n.state);return o.soul=t.soul,t.graph=f.graph.ify(t.data,o,t),o.err?((t.ack||v).call(t,t.out={err:f.log(o.err)}),void(t.res&&t.res())):void t.batch()}function e(t){return void(t&&t())}function i(){var t=this;t.graph&&!d(t.stun,r)&&((t.res||_)(function(){var n=t.gun.back(-1)._,o=n.ask(function(n){this.off(),t.ack&&t.ack(n,this)},t.opt);t.ref._.on("out",{gun:t.ref,put:t.out=t.env.graph,opt:t.opt,"#":o})},t),t.res&&t.res())}function r(t){return t?!0:void 0}function u(t,n,o,e){var i=this;!n&&e.path.length&&(i.res||_)(function(){var t=e.path,n=i.ref,o=(i.opt,0),r=t.length;for(o;r>o;o++)n=n.get(t[o]);if(i.not||f.node.soul(e.obj)){var u=f.node.soul(e.obj)||((i.opt||{}).uuid||i.gun.back("opt.uuid")||f.text.random)();return n.back(-1).get(u),void e.soul(u)}(i.stun=i.stun||{})[t]=!0,n.get("_").get(a,{as:{at:e,as:i}})},{as:i,at:e})}function a(t,n){var o=this.as,e=o.at;if(o=o.as,t.gun&&t.gun._.back){n.off(),t=t.gun._.back._;var i=f.node.soul(e.obj)||f.node.soul(t.put)||f.val.rel.is(t.put)||((o.opt||{}).uuid||o.gun.back("opt.uuid")||f.text.random)();t.gun.back(-1).get(i),e.soul(i),o.stun[e.path]=!1,o.batch()}}function s(t,n){var e=this.as;if(t.gun&&t.gun._){if(t.err)return void o.log("Please report this as an issue! Put.any.err");var i,r=t.gun._.back._,u=r.put,a=e.opt||{};if(n.off(),e.ref!==e.gun){if(i=e.gun._.get||r.get,!i)return void o.log("Please report this as an issue! Put.no.get");e.data=g({},i,e.data),i=null}if(c===u){if(!r.get)return;r.soul||(i=r.gun.back(function(t){return t.soul?t.soul:void(e.data=g({},t.get,e.data))})),i=i||r.get,r=r.root.get(i)._,e.not=e.soul=i,u=e.data}e.not||(e.soul=f.node.soul(u))||(e.soul=e.path&&p(e.data)?(a.uuid||r.root._.opt.uuid||f.text.random)():t.soul||r.soul||(a.uuid||r.root._.opt.uuid||f.text.random)()),e.ref.put(e.data,e.soul,e)}}var f=t("./root");f.chain.put=function(t,o,i){var r,u=this,a=u._,c=a.root;return i=i||{},i.data=t,i.gun=i.gun||u,"string"==typeof o?i.soul=o:i.ack=o,a.soul&&(i.soul=a.soul),i.soul||c===u?p(i.data)?(i.gun=u=c.get(i.soul=i.soul||(i.not=f.node.soul(i.data)||(c._.opt.uuid||f.text.random)())),i.ref=i.gun,n(i),u):((i.ack||v).call(i,i.out={err:f.log("Data saved to the root level of the graph must be a node (an object), not a",typeof i.data,'of "'+i.data+'"!')}),i.res&&i.res(),u):f.is(t)?(t.get(function(t,n){n.off();var e=f.node.soul(t.put);return e?void u.put(f.val.rel.ify(e),o,i):void f.log("The reference you are saving is a",typeof t.put,'"'+i.put+'", not a node (object)!')}),u):(i.ref=i.ref||c===(r=a.back)?u:r,i.ref._.soul&&f.val.is(i.data)&&a.get?(i.data=g({},a.get,i.data),i.ref.put(i.data,i.soul,i),u):(i.ref.get("_").get(s,{as:i}),i.out||(i.res=i.res||e,i.gun._.stun=i.ref._.stun),u))};var c,l=f.obj,p=l.is,g=l.put,d=l.map,h={},v=function(){},_=function(t,n){t.call(n||h)}})(t,"./put"),t(function(n){var o=t("./root");t("./opt"),t("./chain"),t("./back"),t("./put"),t("./get"),n.exports=o})(t,"./index"),t(function(){function n(t,n){var o,r=this,u=t.gun,s=u._,f=s.put||t.put,o=r.last,c=s.id+t.get;if(i!==f){if(f&&f[a._]&&(o=a.is(f))){if(o=s.root.get(o)._,i===o.put)return;f=o.put}r.change&&(f=t.put),(o.put!==f||o.get!==c||e.node.soul(f))&&(o.put=f,o.get=c,s.last=f,r.as?r.ok.call(r.as,t,n):r.ok.call(u,f,t.get,t,n))}}function o(t,n){var e,r=this.as,u=r.cat,s=t.gun,f=s._,c=f.put||t.put;if(c&&c[a._]&&(e=a.is(c))){if(e=u.root.get(e)._,i===e.put)return;c=e.put}if(n.wait&&clearTimeout(n.wait),!r.async)return void(n.wait=setTimeout(function(){o.call({as:r},t,n,n.wait||1)},r.wait||99));if(u.field||u.soul){if(n.off())return}else{if((r.seen=r.seen||{})[f.id])return;r.seen[f.id]=!0}r.ok.call(t.gun||r.gun,c,t.get)}var e=t("./index");e.chain.on=function(t,o,e,i){var r,u,a=this,f=a._;if("string"==typeof t)return o?(r=f.on(t,o,e||f,i),e&&e.gun&&(e.subs||(e.subs=[])).push(r),u=function(){r&&r.off&&r.off(),u.off()},u.off=a.off.bind(a)||s,a.off=u,a):f.on(t);var c=o;return c=!0===c?{change:!0}:c||{},c.ok=t,c.last={},a.get(n,c),a},e.chain.val=function(t,n){var r=this,u=r._,a=u.put;if(0=(n.batch||1e3)?s():void(e||(e=setTimeout(s,n.wait||1)))}),t.on("get",function(t){this.to.next(t);var n,o,e,i=t.gun,r=t.get;if(r&&(n=r[Gun._.soul])){var a=r["."];o=u[n]||e,o&&a&&(o=Gun.state.to(o,a)),(o||Gun.obj.empty(i.back("opt.peers")))&&i.on("in",{"@":t["#"],put:Gun.graph.node(o),how:"lS"})}});var a=function(t,n,o,e){u[e]=Gun.state.to(o,n,u[e])},s=function(){var a;r=0,clearTimeout(e),e=!1;var s=i;i={};try{o.setItem(n.file,JSON.stringify(u))}catch(f){Gun.log(a=f||"localStorage failure")}(a||Gun.obj.empty(n.peers))&&Gun.obj.map(s,function(n,o){t.on("in",{"@":o,err:a,ok:0})})}}})}})(t,"./adapters/localStorage"),t(function(){var n,o=t("./index");"undefined"!=typeof WebSocket?n=WebSocket:("undefined"!=typeof webkitWebSocket&&(n=webkitWebSocket),"undefined"!=typeof mozWebSocket&&(n=mozWebSocket)),o.on("opt",function(t){function i(t){var n=this,o=c,e=t.wire||u(t,n);return e?e.readyState===e.OPEN?void e.send(o):void(t.queue=t.queue||[]).push(o):void 0}function r(t,n,o){if(o&&t){try{t=JSON.parse(t.data||t)}catch(i){}if(t instanceof Array)for(var u,a=0;u=t[a++];)r(u,n,o);else 1==f.who&&(t.ws=e),o.on("in",t)}}function u(e,u){if(e&&e.url){var s=e.url.replace("http","ws"),f=e.wire=new n(s);return f.onclose=function(){t.on("bye",e),a(e,u)},f.onerror=function(t){a(e,u),t&&"ECONNREFUSED"===t.code},f.onopen=function(){t.on("hi",e);var n=e.queue;e.queue=[],o.obj.map(n,function(t){c=t,i.call(u,e)})},f.onmessage=function(t){r(t,e,u)},f}}function a(t,n){clearTimeout(t.defer),t.defer=setTimeout(function(){u(t,n)},2e3)}this.to.next(t);var s=t.opt;if(!t.once&&!1!==s.WebSocket&&n){var f=s.ws||(s.ws={});if(f.who=0,o.obj.map(s.peers,function(){++f.who}),!t.once){var c;t.on("out",function(n){if(this.to.next(n),!n.ws||1!=f.who){if(c=JSON.stringify(n),f.drain)return void f.drain.push(c);f.drain=[],setTimeout(function(){if(f.drain){var n=f.drain;f.drain=null,n.length&&(c=JSON.stringify(n),o.obj.map(s.peers,i,t))}},s.wait||1),o.obj.map(s.peers,i,t)}})}}});var e=function(){}})(t,"./adapters/websocket")}(); \ No newline at end of file +!function(){function t(n){function o(t){return t.split("/").slice(-1).toString().replace(".js","")}return n.slice?t[o(n)]:function(e,i){n(e={exports:{}}),t[o(i)]=e.exports}}var n;"undefined"!=typeof window&&(n=window),"undefined"!=typeof global&&(n=global),n=n||{};var o=n.console||{log:function(){}};if("undefined"!=typeof module)var e=module;t(function(t){var n={};n.fns=n.fn={is:function(t){return!!t&&"function"==typeof t}},n.bi={is:function(t){return t instanceof Boolean||"boolean"==typeof t}},n.num={is:function(t){return!e(t)&&(t-parseFloat(t)+1>=0||1/0===t||-(1/0)===t)}},n.text={is:function(t){return"string"==typeof t}},n.text.ify=function(t){return n.text.is(t)?t:"undefined"!=typeof JSON?JSON.stringify(t):t&&t.toString?t.toString():t},n.text.random=function(t,n){var o="";for(t=t||24,n=n||"0123456789ABCDEFGHIJKLMNOPQRSTUVWXZabcdefghijklmnopqrstuvwxyz";t>0;)o+=n.charAt(Math.floor(Math.random()*n.length)),t--;return o},n.text.match=function(t,o){function e(t,n){for(var o,e=-1,i=0;o=n[i++];)if(!~(e=t.indexOf(o,e+1)))return!1;return!0}var i=!1;if(t=t||"",o=n.text.is(o)?{"=":o}:o||{},n.obj.has(o,"~")&&(t=t.toLowerCase(),o["="]=(o["="]||o["~"]).toLowerCase()),n.obj.has(o,"="))return t===o["="];if(n.obj.has(o,"*")){if(t.slice(0,o["*"].length)!==o["*"])return!1;i=!0,t=t.slice(o["*"].length)}if(n.obj.has(o,"!")){if(t.slice(-o["!"].length)!==o["!"])return!1;i=!0}if(n.obj.has(o,"+")&&n.list.map(n.list.is(o["+"])?o["+"]:[o["+"]],function(n){return t.indexOf(n)>=0?void(i=!0):!0}))return!1;if(n.obj.has(o,"-")&&n.list.map(n.list.is(o["-"])?o["-"]:[o["-"]],function(n){return t.indexOf(n)<0?void(i=!0):!0}))return!1;if(n.obj.has(o,">")){if(!(t>o[">"]))return!1;i=!0}if(n.obj.has(o,"<")){if(!(tn?-1:n>o?1:0):0}},n.list.map=function(t,n,o){return a(t,n,o)},n.list.index=1,n.obj={is:function(t){return t?t instanceof Object&&t.constructor===Object||"Object"===Object.prototype.toString.call(t).match(/^\[object (\w+)\]$/)[1]:!1}},n.obj.put=function(t,n,o){return(t||{})[n]=o,t},n.obj.has=function(t,n){return t&&Object.prototype.hasOwnProperty.call(t,n)},n.obj.del=function(t,n){return t?(t[n]=null,delete t[n],t):void 0},n.obj.as=function(t,n,o,e){return t[n]=t[n]||(e===o?{}:o)},n.obj.ify=function(t){if(r(t))return t;try{t=JSON.parse(t)}catch(n){t={}}return t},function(){function t(t,n){u(this,n)&&o!==this[n]||(this[n]=t)}var o;n.obj.to=function(n,o){return o=o||{},a(n,t,o),o}}(),n.obj.copy=function(t){return t?JSON.parse(JSON.stringify(t)):t},function(){function t(t,n){var o=this.n;if(!o||!(n===o||r(o)&&u(o,n)))return n?!0:void 0}n.obj.empty=function(n,o){return n&&a(n,t,{n:o})?!1:!0}}(),function(){function t(n,o){return 2===arguments.length?(t.r=t.r||{},void(t.r[n]=o)):(t.r=t.r||[],void t.r.push(n))}var i=Object.keys;n.obj.map=function(a,s,f){var c,l,p,g,d,h=0,v=o(s);if(t.r=null,i&&r(a)&&(g=i(a),d=!0),e(a)||g)for(l=(g||a).length;l>h;h++){var _=h+n.list.index;if(v){if(p=d?s.call(f||this,a[g[h]],g[h],t):s.call(f||this,a[h],_,t),p!==c)return p}else if(s===a[d?g[h]:h])return g?g[h]:_}else for(h in a)if(v){if(u(a,h)&&(p=f?s.call(f,a[h],h,t):s(a[h],h,t),p!==c))return p}else if(s===a[h])return h;return v?t.r:n.list.index?0:-1}}(),n.time={},n.time.is=function(t){return t?t instanceof Date:+(new Date).getTime()};var o=n.fn.is,e=n.list.is,i=n.obj,r=i.is,u=i.has,a=i.map;t.exports=n})(t,"./type"),t(function(t){t.exports=function n(t,o,e){if(!t)return{to:n};var t=(this.tag||(this.tag={}))[t]||(this.tag[t]={tag:t,to:n._={next:function(){}}});if(o instanceof Function){var i={off:n.off||(n.off=function(){return this.next===n._.next?!0:(this===this.the.last&&(this.the.last=this.back),this.to.back=this.back,this.next=n._.next,this.back.to=this.to,void(this.the.last===this.the&&delete this.on.tag[this.the.tag]))}),to:n._,next:o,the:t,on:this,as:e};return(i.back=t.last||t).to=i,t.last=i}return(t=t.to).next(o),t}})(t,"./onto"),t(function(t){function n(t,n,e,i,r){if(n>t)return{defer:!0};if(e>n)return{historical:!0};if(n>e)return{converge:!0,incoming:!0};if(n===e){if(i=o(i)||"",r=o(r)||"",i===r)return{state:!0};if(r>i)return{converge:!0,current:!0};if(i>r)return{converge:!0,incoming:!0}}return{err:"Invalid CRDT Data: "+i+" to "+r+" at "+n+" to "+e+"!"}}if("undefined"==typeof JSON)throw new Error("JSON is not included in this browser. Please load it first: ajax.cdnjs.com/ajax/libs/json2/20110223/json2.js");var o=JSON.stringify;t.exports=n})(t,"./HAM"),t(function(n){var o=t("./type"),e={};e.is=function(t){return t===i?!1:null===t?!0:t===1/0?!1:s(t)||u(t)||a(t)?!0:e.rel.is(t)||!1},e.rel={_:"#"},function(){function t(t,n){var o=this;return o.id?o.id=!1:n==r&&s(t)?void(o.id=t):o.id=!1}e.rel.is=function(n){if(n&&n[r]&&!n._&&c(n)){var o={};if(p(n,t,o),o.id)return o.id}return!1}}(),e.rel.ify=function(t){return l({},r,t)};var i,r=e.rel._,u=o.bi.is,a=o.num.is,s=o.text.is,f=o.obj,c=f.is,l=f.put,p=f.map;n.exports=e})(t,"./val"),t(function(n){var o=t("./type"),e=t("./val"),i={_:"_"};i.soul=function(t,n){return t&&t._&&t._[n||p]},i.soul.ify=function(t,n){return n="string"==typeof n?{soul:n}:n||{},t=t||{},t._=t._||{},t._[p]=n.soul||t._[p]||l(),t},i.soul._=e.rel._,function(){function t(t,n){return n!==i._?e.is(t)?void(this.cb&&this.cb.call(this.as,t,n,this.n,this.s)):!0:void 0}i.is=function(n,o,e){var r;return a(n)&&(r=i.soul(n))?!f(n,t,{as:e,cb:o,s:r,n:n}):!1}}(),function(){function t(t,n){var o,i,r=this.o;return r.map?(o=r.map.call(this.as,t,""+n,r.node),void(i===o?s(r.node,n):r.node&&(r.node[n]=o))):void(e.is(t)&&(r.node[n]=t))}i.ify=function(n,o,e){return o?"string"==typeof o?o={soul:o}:o instanceof Function&&(o={map:o}):o={},o.map&&(o.node=o.map.call(e,n,r,o.node||{})),(o.node=i.soul.ify(o.node||{},o))&&f(n,t,{o:o,as:e}),o.node}}();var r,u=o.obj,a=u.is,s=u.del,f=u.map,c=o.text,l=c.random,p=i.soul._;n.exports=i})(t,"./node"),t(function(n){function o(){var t;return t=f?c+f.now():r(),t>u?(a=0,u=t+o.drift):u=t+(a+=1)/s+o.drift}var e=t("./type"),i=t("./node"),r=e.time.is,u=-(1/0),a=0,s=1e3,f="undefined"!=typeof performance?performance.timing&&performance:!1,c=f&&f.timing&&f.timing.navigationStart||(f=!1);o._=">",o.drift=0,o.is=function(t,n,e){var i=n&&t&&t[j]&&t[j][o._]||e;if(i)return m(i=i[n])?i:-(1/0)},o.ify=function(t,n,e,r,u){if(!t||!t[j]){if(!u)return;t=i.soul.ify(t,u)}var a=g(t[j],o._);return l!==n&&n!==j&&(m(e)&&(a[n]=e),l!==r&&(t[n]=r)),t},o.to=function(t,n,e){var r=t[n];return h(r)&&(r=_(r)),o.ify(e,n,o.is(t,n),r,i.soul(t))},function(){function t(t,n){j!==n&&o.ify(this.o,n,this.s)}o.map=function(n,e,i){var r,u=h(u=n||e)?u:null;return n=y(n=n||e)?n:null,u&&!n?(e=m(e)?e:o(),u[j]=u[j]||{},v(u,t,{o:u,s:e}),u):(i=i||h(e)?e:r,e=m(e)?e:o(),function(o,u,a,s){return n?(n.call(i||this||{},o,u,a,s),void(d(a,u)&&r===a[u]||t.call({o:a,s:e},o,u))):(t.call({o:a,s:e},o,u),o)})}}();var l,p=e.obj,g=p.as,d=p.has,h=p.is,v=p.map,_=p.copy,b=e.num,m=b.is,k=e.fn,y=k.is,j=i._;n.exports=o})(t,"./state"),t(function(n){var o=t("./type"),e=t("./val"),i=t("./node"),r={};!function(){function t(t,o){return t&&o===i.soul(t)&&i.is(t,this.fn,this.as)?void(this.cb&&(n.n=t,n.as=this.as,this.cb.call(n.as,t,o,n))):!0}function n(t){t&&i.is(n.n,t,n.as)}r.is=function(n,o,e,i){return n&&s(n)&&!l(n)?!g(n,t,{cb:o,fn:e,as:i}):!1}}(),function(){function t(t,r){var u;return(u=l(t,r))?u:(r.env=t,r.soul=o,i.ify(r.obj,n,r)&&(t.graph[e.rel.is(r.rel)]=r.node),r)}function n(n,o,r){var s,l,p=this,g=p.env;if(i._===o&&c(n,e.rel._))return r._;if(s=a(n,o,r,p,g)){if(o||(p.node=p.node||r||{},c(n,i._)&&(p.node._=d(n._)),p.node=i.soul.ify(p.node,e.rel.is(p.rel)),p.rel=p.rel||e.rel.ify(i.soul(p.node))),(l=g.map)&&(l.call(g.as||{},n,o,r,p),c(r,o))){if(n=r[o],u===n)return void f(r,o);if(!(s=a(n,o,r,p,g)))return}if(!o)return p.node;if(!0===s)return n;if(l=t(g,{obj:n,path:p.path.concat(o)}),l.node)return l.rel}}function o(t){var n=this,o=e.rel.is(n.rel),r=n.env.graph;n.rel=n.rel||e.rel.ify(t),n.rel[e.rel._]=t,n.node&&n.node[i._]&&(n.node[i._][e.rel._]=t),c(r,o)&&(r[t]=r[o],f(r,o))}function a(t,n,o,i,r){var u;return e.is(t)?!0:s(t)?1:(u=r.invalid)?(t=u.call(r.as||{},t,n,o),a(t,n,o,i,r)):void(r.err="Invalid value at '"+i.path.concat(n).join(".")+"'!")}function l(t,n){for(var o,e=t.seen,i=e.length;i--;)if(o=e[i],n.obj===o.obj)return o;e.push(n)}r.ify=function(n,o,i){var r={path:[],obj:n};return o?"string"==typeof o?o={soul:o}:o instanceof Function&&(o.map=o):o={},o.soul&&(r.rel=e.rel.ify(o.soul)),o.graph=o.graph||{},o.seen=o.seen||[],o.as=o.as||i,t(o,r),o.root=r.node,o.graph}}(),r.node=function(t){var n=i.soul(t);if(n)return p({},n,t)},function(){function t(t,n){var o,u;if(i._===n){if(l(t,e.rel._))return;return void(this.obj[n]=d(t))}return(o=e.rel.is(t))?(u=this.opt.seen[o])?void(this.obj[n]=u):void(this.obj[n]=this.opt.seen[o]=r.to(this.graph,o,this.opt)):void(this.obj[n]=t)}r.to=function(n,o,e){if(n){var i={};return e=e||{seen:{}},g(n[o],t,{obj:i,graph:n,opt:e}),i}}}();var u,a=(o.fn.is,o.obj),s=a.is,f=a.del,c=a.has,l=a.empty,p=a.put,g=a.map,d=a.copy;n.exports=r})(t,"./graph"),t(function(n){function o(t){var n={s:{}};return t=t||{max:1e3,age:9e3},n.check=function(t){return n.s[t]?n.track(t):!1},n.track=function(o){return n.s[o]=i(),n.to||(n.to=setTimeout(function(){e.obj.map(n.s,function(o,r){t.age>i()-o||e.obj.del(n.s,r)}),n.to=null},t.age)),o},n}var e=t("./type"),i=e.time.is;n.exports=o})(t,"./dup"),t(function(n){function i(t){return t instanceof i?(this._={gun:this}).gun:this instanceof i?i.create(this._={gun:this,opt:t}):new i(t)}i.is=function(t){return t instanceof i},i.version=.8,i.chain=i.prototype,i.chain.toJSON=function(){};var r=t("./type");r.obj.to(r,i),i.HAM=t("./HAM"),i.val=t("./val"),i.node=t("./node"),i.state=t("./state"),i.graph=t("./graph"),i.dup=t("./dup"),i.on=t("./onto"),i._={node:i.node._,soul:i.val.rel._,state:i.state._,field:".",value:"="},function(){function t(t){var n,o,e=this,r=e.as;t.gun||(t.gun=r.gun),(o=t["#"])||(o=t["#"]=c(9)),r.dup.check(o)||(r.dup.track(o),n=d(t,{gun:r.gun}),r.ack(t["@"],t)||(t.get&&i.on.get(n),t.put&&i.on.put(n)),r.on("out",n))}i.create=function(n){n.on=n.on||i.on,n.root=n.root||n.gun,n.graph=n.graph||{},n.dup=n.dup||i.dup(),n.ask=i.on.ask,n.ack=i.on.ack;var o=n.gun.opt(n.opt);return n.once||(n.on("in",t,n),n.on("out",t,n)),n.once=1,o}}(),function(){function t(t,n,o,e){var r=this,u=i.state.is(o,n);if(!u)return r.err="Error: No state on '"+n+"' in node '"+e+"'!";var a=r.graph[e]||m,s=i.state.is(a,n,!0),f=a[n],c=i.HAM(r.machine,u,s,t,f);return c.incoming?(r.put[e]=i.state.to(o,n,r.put[e]),void((r.diff||(r.diff={}))[e]=i.state.to(o,n,r.diff[e]))):void(c.defer&&(r.defer=u<(r.defer||1/0)?u:r.defer))}function n(t,n){var e=this.gun._,i=(e.next||m)[n];if(i){var r=this.map[n]={put:this.node=t,get:this.soul=n,gun:this.ref=i};h(t,o,this),e.on("node",r)}}function o(t,n){var o=this.graph,e=this.soul,r=this.ref._;o[e]=i.state.to(this.node,n,o[e]),(r.put||(r.put={}))[n]=t}function e(t){t.gun&&t.gun._.on("in",t)}i.on.put=function(o){var r=o.gun._,a={gun:o.gun,graph:o.gun._.graph,put:{},map:{},machine:i.state()};return i.graph.is(o.put,null,t,a)||(a.err="Error: Invalid graph!"),a.err?r.on("in",{"@":o["#"],err:i.log(a.err)}):(h(a.put,n,a),h(a.map,e,a),u!==a.defer&&setTimeout(function(){i.on.put(o)},a.defer-r.machine),void(a.diff&&r.on("put",d(o,{put:a.diff}))))},i.on.get=function(t){var n,o=t.gun._,e=t.get[_],r=o.graph[e],u=t.get[b],a=o.next||(o.next={}),s=(a[e]||m)._;if(!r||!s)return o.on("get",t);if(u){if(!g(r,u))return o.on("get",t);r=i.state.to(r,u)}else r=i.obj.copy(r);r=i.graph.node(r),n=s.ack,o.on("in",{"@":t["#"],how:"mem",put:r,gun:s.gun}),n>0||o.on("get",t)}}(),function(){i.on.ask=function(t,n){if(this.on){var o=c(9);if(t){var e=this.on(o,t,n),i=this.gun._.opt.lack||9e3;e.err=setTimeout(function(){e.next({err:"Error: No ACK received yet."}),e.off()},1e3>i?1e3:i)}return o}},i.on.ack=function(t,n){if(t&&n&&this.on){var o=t["#"]||t,e=(this.tag||m)[o];if(e)return this.on(o,n),clearTimeout(e.err),!0}}}(),function(){i.chain.opt=function(t){t=t||{};var n=this,o=n._,e=t.peers||t;return p(t)||(t={}),p(o.opt)||(o.opt=t),f(e)&&(e=[e]),a(e)&&(e=h(e,function(t,n,o){o(t,{url:t})}),p(o.opt.peers)||(o.opt.peers={}),o.opt.peers=d(e,o.opt.peers)),o.opt.uuid=o.opt.uuid||function(){return v().toString(36).replace(".","")+c(12)},o.opt.peers=o.opt.peers||{},d(t,o.opt),i.on("opt",o),n}}();var u,a=i.list.is,s=i.text,f=s.is,c=s.random,l=i.obj,p=l.is,g=l.has,d=l.to,h=l.map,v=(l.copy,i.state),_=i._.soul,b=i._.field,m=(i.val.rel.is,{});o.debug=function(t,n){return o.debug.i&&t===o.debug.i&&o.debug.i++&&(o.log.apply(o,arguments)||n)},i.log=function(){return!i.log.off&&o.log.apply(o,arguments),[].slice.call(arguments).join(" ")},i.log.once=function(t,n,o){return(o=i.log.once)[t]=o[t]||0,o[t]++||i.log(n)},i.log.once("welcome","Hello wonderful person! :) Thanks for using GUN, feel free to ask for help on https://gitter.im/amark/gun and ask StackOverflow questions tagged with 'gun'!"),"undefined"!=typeof window&&(window.Gun=i),"undefined"!=typeof e&&(e.exports=i),n.exports=i,i.log.once("0.8","0.8 WARNING! Breaking changes, test that your app works before upgrading! The adapter interface has been upgraded (non-default storage and transport layers probably won't work). Also, `.path()` and `.not()` are outside core and now in 'lib/'.")})(t,"./root"),t(function(){var n=t("./root");n.chain.back=function(t,n){var i;if(-1===t||1/0===t)return this._.root;if(1===t)return this._.back||this;var r=this,u=r._;if("string"==typeof t&&(t=t.split(".")),t instanceof Array){var a=0,s=t.length,i=u;for(a;s>a;a++)i=(i||e)[t[a]];if(o!==i)return n?r:i;if(i=u.back)return i.back(t,n)}else if(t instanceof Function){for(var f,i={back:r};(i=i.back)&&(i=i._)&&!(f=t(i,n)););return f}};var o,e={}})(t,"./back"),t(function(){function n(t){var n,o,e,i=this.as,r=i.gun,u=r.back(-1);if(t.gun||(t.gun=r),this.to.next(t),o=t.get)if(e=o[m])e=u.get(e)._,d(o,k)?d(n=e.put,o=o[k])&&e.on("in",{get:e.get,put:c.state.to(n,o),gun:e.gun}):d(e,"put")&&e.on("in",e);else if(d(o,k)){o=o[k];var a=o?r.get(o)._:i;if(l!==a.put)return void a.on("in",a);if(d(i,"put")){var s,p=i.put;if((s=c.node.soul(p))&&(p=c.val.rel.ify(s)),s=c.val.rel.is(p)){if(!t.gun._)return;return void t.gun._.on("out",{get:e={"#":s,".":o,gun:t.gun},"#":u._.ask(f,e),gun:t.gun})}if(l===p||c.val.is(p)){if(!t.gun._)return;return void t.gun._.on("in",{get:o,gun:t.gun})}}else i.map&&b(i.map,function(t){t.at.on("in",t.at)});if(i.soul){if(!t.gun._)return;return void t.gun._.on("out",{get:e={"#":i.soul,".":o,gun:t.gun},"#":u._.ask(f,e),gun:t.gun})}if(i.get){if(!i.back._)return;return void i.back._.on("out",{get:h({},k,i.get),gun:r})}t=_(t,{get:{}})}else{if(d(i,"put")?i.on("in",i):i.map&&b(i.map,function(t){t.at.on("in",t.at)}),i.ack>=0&&!d(i,"put"))return;if(i.ack=-1,i.soul)return void i.on("out",{get:e={"#":i.soul,gun:i.gun},"#":u._.ask(f,e),gun:i.gun});if(i.get){if(!i.back._)return;return void i.back._.on("out",{get:h({},k,i.get),gun:i.gun})}}i.back._.on("out",t)}function o(t){t=t._||t;{var n,o=this,r=this.as,s=t.gun,f=s._,g=t.put;r.back._||p}if(0>r.ack&&!t.ack&&!c.val.rel.is(g)&&(r.ack=1),r.get&&t.get!==r.get&&(t=_(t,{get:r.get})),r.field&&f!==r&&(t=_(t,{gun:r.gun}),f.ack&&(r.ack=r.ack||f.ack)),l===g){if(o.to.next(t),r.soul)return;return i(r,t,o),r.field&&a(r,t),v(f.echo,r.id),void v(r.map,f.id)}return r.soul?(r.root._.now&&(t=_(t,{put:g=f.put})),o.to.next(t),i(r,t,o),void b(g,u,{at:t,cat:r})):(n=c.val.rel.is(g))?(e(r,t,f,n),o.to.next(t),void i(r,t,o)):c.val.is(g)?(r.field||r.soul?a(r,t):(f.field||f.soul)&&((f.echo||(f.echo={}))[r.id]=r,(r.map||(r.map={}))[f.id]=r.map[f.id]||{at:f}),o.to.next(t),void i(r,t,o)):(r.field&&f!==r&&d(f,"put")&&(r.put=f.put),(n=c.node.soul(g))&&f.field&&(f.put=r.root.get(n)._.put),o.to.next(t),i(r,t,o),e(r,t,f,n),void b(g,u,{at:t,cat:r}))}function e(t,n,o,i){if(i&&y!==t.get){var r=t.root.get(i)._;t.field?o=r:o.field&&e(o,n,o,i),o!==t&&((o.echo||(o.echo={}))[t.id]=t,t.field&&!(t.map||p)[o.id]&&a(t,n),r=(t.map||(t.map={}))[o.id]=t.map[o.id]||{at:o},i!==r.rel&&s(t,r.rel=i))}}function i(t,n,o){t.echo&&(t.field&&(n=_(n,{event:o})),b(t.echo,r,n))}function r(t){t.on("in",this)}function u(t,n){var o,e,i,r=this.cat,u=r.next||p,a=this.at;(y!==n||u[n])&&(o=u[n])&&(i=o._,i.field?(t&&t[m]&&c.val.rel.is(t)===c.node.soul(i.put)||(i.put=t),e=o):e=a.gun.get(n),i.on("in",{put:t,get:n,gun:e,via:a}))}function a(t){if(t.field||t.soul){var n=t.map;t.map=null,null!==n&&(l!==n||t.put===l)&&(b(n,function(n){(n=n.at)&&v(n.echo,t.id)}),b(t.next,function(t,n){var o=t._;o.put=l,o.ack&&(o.ack=-1),o.on("in",{get:n,gun:t,put:l})}))}}function s(t,n){var o=t.root.get(n)._;return t.ack?(o.ack=o.ack||-1,void o.on("out",{get:o={"#":n,gun:o.gun},"#":t.root._.ask(f,o)})):void b(t.next,function(o,e){o._.on("out",{get:o={"#":n,".":e,gun:o},"#":t.root._.ask(f,o)})})}function f(t){var n=this.as,o=n.gun._;if(!t.put||n["."]&&!d(t.put[n["#"]],o.get)){if(o.put!==l)return;return void o.on("in",{get:o.get,put:o.put=l,gun:o.gun})}t.gun=o.root,c.on.put(t)}var c=t("./root");c.chain.chain=function(){var t,e=this._,i=new this.constructor(this),r=i._;return r.root=t=e.root,r.id=++t._.once,r.back=this,r.on=c.on,r.on("in",o,r),r.on("out",n,r),i},c.chain.chain.input=o;var l,p={},g=c.obj,d=g.has,h=g.put,v=g.del,_=g.to,b=g.map,m=c._.soul,k=c._.field,y=c.node._})(t,"./chain"),t(function(){function n(t,n){var o=n._,e=o.next,i=n.chain(),r=i._;return e||(e=o.next={}),e[r.get=t]=i,o.root===n?r.soul=t:(o.soul||o.field)&&(r.field=t),i}function o(t){var n,o=this,e=o.as,r=t.gun,a=r._,f=t.put;i===f&&(f=a.put),(n=f)&&n[s._]&&(n=s.is(n))&&(n=a.root.get(n)._,i!==n.put&&(t=u(t,{put:n.put}))),e.use(t,t.event||o),o.to.next(t)}var e=t("./root");e.chain.get=function(t,i,r){if("string"!=typeof t){if(t instanceof Function){var u=this,s=u._;return r=i||{},r.use=t,r.out=r.out||{cap:1},r.out.get=r.out.get||{},"_"!=s.get&&(s.root._.now=!0),s.on("in",o,r),s.on("out",r.out),s.root._.now=!1,u}return a(t)?this.get(""+t,i,r):((r=this.chain())._.err={err:e.log("Invalid get request!",t)},i&&i.call(r,r._.err),r)}var u,c,l=this,p=l._,g=p.next||f;return(u=g[t])||(u=n(t,l)),(c=p.stun)&&(u._.stun=u._.stun||c),i&&i instanceof Function&&u.get(i,r),u};var i,r=e.obj,u=(r.has,e.obj.to),a=e.num.is,s=e.val.rel,f=(e.node._,{})})(t,"./get"),t(function(){function n(t){t.batch=i;var n=t.opt||{},o=t.env=f.state.map(u,n.state);return o.soul=t.soul,t.graph=f.graph.ify(t.data,o,t),o.err?((t.ack||v).call(t,t.out={err:f.log(o.err)}),void(t.res&&t.res())):void t.batch()}function e(t){return void(t&&t())}function i(){var t=this;t.graph&&!d(t.stun,r)&&((t.res||_)(function(){var n=t.gun.back(-1)._,o=n.ask(function(n){this.off(),t.ack&&t.ack(n,this)},t.opt);t.ref._.on("out",{gun:t.ref,put:t.out=t.env.graph,opt:t.opt,"#":o})},t),t.res&&t.res())}function r(t){return t?!0:void 0}function u(t,n,o,e){var i=this;!n&&e.path.length&&(i.res||_)(function(){var t=e.path,n=i.ref,o=(i.opt,0),r=t.length;for(o;r>o;o++)n=n.get(t[o]);if(i.not||f.node.soul(e.obj)){var u=f.node.soul(e.obj)||((i.opt||{}).uuid||i.gun.back("opt.uuid")||f.text.random)();return n.back(-1).get(u),void e.soul(u)}(i.stun=i.stun||{})[t]=!0,n.get("_").get(a,{as:{at:e,as:i}})},{as:i,at:e})}function a(t,n){var o=this.as,e=o.at;if(o=o.as,t.gun&&t.gun._.back){n.off(),t=t.gun._.back._;var i=f.node.soul(e.obj)||f.node.soul(t.put)||f.val.rel.is(t.put)||((o.opt||{}).uuid||o.gun.back("opt.uuid")||f.text.random)();t.gun.back(-1).get(i),e.soul(i),o.stun[e.path]=!1,o.batch()}}function s(t,n){var e=this.as;if(t.gun&&t.gun._){if(t.err)return void o.log("Please report this as an issue! Put.any.err");var i,r=t.gun._.back._,u=r.put,a=e.opt||{};if(n.off(),e.ref!==e.gun){if(i=e.gun._.get||r.get,!i)return void o.log("Please report this as an issue! Put.no.get");e.data=g({},i,e.data),i=null}if(c===u){if(!r.get)return;r.soul||(i=r.gun.back(function(t){return t.soul?t.soul:void(e.data=g({},t.get,e.data))})),i=i||r.get,r=r.root.get(i)._,e.not=e.soul=i,u=e.data}e.not||(e.soul=f.node.soul(u))||(e.soul=e.path&&p(e.data)?(a.uuid||r.root._.opt.uuid||f.text.random)():t.soul||r.soul||(a.uuid||r.root._.opt.uuid||f.text.random)()),e.ref.put(e.data,e.soul,e)}}var f=t("./root");f.chain.put=function(t,o,i){var r,u=this,a=u._,c=a.root;return i=i||{},i.data=t,i.gun=i.gun||u,"string"==typeof o?i.soul=o:i.ack=o,a.soul&&(i.soul=a.soul),i.soul||c===u?p(i.data)?(i.gun=u=c.get(i.soul=i.soul||(i.not=f.node.soul(i.data)||(c._.opt.uuid||f.text.random)())),i.ref=i.gun,n(i),u):((i.ack||v).call(i,i.out={err:f.log("Data saved to the root level of the graph must be a node (an object), not a",typeof i.data,'of "'+i.data+'"!')}),i.res&&i.res(),u):f.is(t)?(t.get(function(t,n){n.off();var e=f.node.soul(t.put);return e?void u.put(f.val.rel.ify(e),o,i):void f.log("The reference you are saving is a",typeof t.put,'"'+i.put+'", not a node (object)!')}),u):(i.ref=i.ref||c===(r=a.back)?u:r,i.ref._.soul&&f.val.is(i.data)&&a.get?(i.data=g({},a.get,i.data),i.ref.put(i.data,i.soul,i),u):(i.ref.get("_").get(s,{as:i}),i.out||(i.res=i.res||e,i.gun._.stun=i.ref._.stun),u))};var c,l=f.obj,p=l.is,g=l.put,d=l.map,h={},v=function(){},_=function(t,n){t.call(n||h)}})(t,"./put"),t(function(n){var o=t("./root");t("./opt"),t("./chain"),t("./back"),t("./put"),t("./get"),n.exports=o})(t,"./index"),t(function(){function n(t,n){var o,r=this,u=t.gun,s=u._,f=s.put||t.put,o=r.last,c=s.id+t.get;if(i!==f){if(f&&f[a._]&&(o=a.is(f))){if(o=s.root.get(o)._,i===o.put)return;f=o.put}r.change&&(f=t.put),(o.put!==f||o.get!==c||e.node.soul(f))&&(o.put=f,o.get=c,s.last=f,r.as?r.ok.call(r.as,t,n):r.ok.call(u,f,t.get,t,n))}}function o(t,n){var e,r=this.as,u=r.cat,s=t.gun,f=s._,c=f.put||t.put;if(c&&c[a._]&&(e=a.is(c))){if(e=u.root.get(e)._,i===e.put)return;c=e.put}if(n.wait&&clearTimeout(n.wait),!r.async)return void(n.wait=setTimeout(function(){o.call({as:r},t,n,n.wait||1)},r.wait||99));if(u.field||u.soul){if(n.off())return}else{if((r.seen=r.seen||{})[f.id])return;r.seen[f.id]=!0}r.ok.call(t.gun||r.gun,c,t.get)}var e=t("./index");e.chain.on=function(t,o,e,i){var r,u,a=this,f=a._;if("string"==typeof t)return o?(r=f.on(t,o,e||f,i),e&&e.gun&&(e.subs||(e.subs=[])).push(r),u=function(){r&&r.off&&r.off(),u.off()},u.off=a.off.bind(a)||s,a.off=u,a):f.on(t);var c=o;return c=!0===c?{change:!0}:c||{},c.ok=t,c.last={},a.get(n,c),a},e.chain.val=function(t,n){var r=this,u=r._,a=u.put;if(0=(n.batch||1e3)?s():void(e||(e=setTimeout(s,n.wait||1)))}),t.on("get",function(t){this.to.next(t);var n,o,e,i=t.gun,r=t.get;if(r&&(n=r[Gun._.soul])){var a=r["."];o=u[n]||e,o&&a&&(o=Gun.state.to(o,a)),(o||Gun.obj.empty(i.back("opt.peers")))&&i.on("in",{"@":t["#"],put:Gun.graph.node(o),how:"lS"})}});var a=function(t,n,o,e){u[e]=Gun.state.to(o,n,u[e])},s=function(){var a;r=0,clearTimeout(e),e=!1;var s=i;i={};try{o.setItem(n.file,JSON.stringify(u))}catch(f){Gun.log(a=f||"localStorage failure")}(a||Gun.obj.empty(n.peers))&&Gun.obj.map(s,function(n,o){t.on("in",{"@":o,err:a,ok:0})})}}})}})(t,"./adapters/localStorage"),t(function(){var n,o=t("./index");"undefined"!=typeof WebSocket?n=WebSocket:("undefined"!=typeof webkitWebSocket&&(n=webkitWebSocket),"undefined"!=typeof mozWebSocket&&(n=mozWebSocket)),o.on("opt",function(t){function i(t){var n=this,o=c,e=t.wire||u(t,n);return e?e.readyState===e.OPEN?void e.send(o):void(t.queue=t.queue||[]).push(o):void 0}function r(t,n,o){if(o&&t){try{t=JSON.parse(t.data||t)}catch(i){}if(t instanceof Array)for(var u,a=0;u=t[a++];)r(u,n,o);else 1==f.who&&(t.ws=e),o.on("in",t)}}function u(e,u){if(e&&e.url){var s=e.url.replace("http","ws"),f=e.wire=new n(s);return f.onclose=function(){t.on("bye",e),a(e,u)},f.onerror=function(t){a(e,u),t&&"ECONNREFUSED"===t.code},f.onopen=function(){t.on("hi",e);var n=e.queue;e.queue=[],o.obj.map(n,function(t){c=t,i.call(u,e)})},f.onmessage=function(t){r(t,e,u)},f}}function a(t,n){clearTimeout(t.defer),t.defer=setTimeout(function(){u(t,n)},2e3)}this.to.next(t);var s=t.opt;if(!t.once&&n&&!1!==s.WebSocket){var f=s.ws||(s.ws={});if(f.who=0,o.obj.map(s.peers,function(){++f.who}),!t.once){var c;t.on("out",function(n){if(this.to.next(n),!n.ws||1!=f.who){if(c=JSON.stringify(n),f.drain)return void f.drain.push(c);f.drain=[],setTimeout(function(){if(f.drain){var n=f.drain;f.drain=null,n.length&&(c=JSON.stringify(n),o.obj.map(s.peers,i,t))}},s.wait||1),o.obj.map(s.peers,i,t)}})}}});var e=function(){}})(t,"./adapters/websocket")}(); \ No newline at end of file diff --git a/src/adapters/websocket.js b/src/adapters/websocket.js index f64d563c..230c0358 100644 --- a/src/adapters/websocket.js +++ b/src/adapters/websocket.js @@ -15,7 +15,7 @@ Gun.on('opt', function(ctx){ this.to.next(ctx); var opt = ctx.opt; if(ctx.once){ return } - if(false === opt.WebSocket || !websocket){ return } + if(!websocket || false === opt.WebSocket){ return } var ws = opt.ws || (opt.ws = {}); ws.who = 0; Gun.obj.map(opt.peers, function(){ ++ws.who }); if(ctx.once){ return } From 1b8c75d786b28d54986809de6b8cc3eace638855 Mon Sep 17 00:00:00 2001 From: Jim B Date: Tue, 19 Sep 2017 03:59:26 -0700 Subject: [PATCH 5/7] Something like this should fix #422 Added support to take opt as a string Promote simple opt as a string to opt.peers[opt] . --- lib/ws.js | 49 +++++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/lib/ws.js b/lib/ws.js index 0742b66c..bfdab1c8 100644 --- a/lib/ws.js +++ b/lib/ws.js @@ -7,32 +7,37 @@ var url = require('url'); Gun.on('opt', function mount(ctx){ this.to.next(ctx); var opt = ctx.opt; + if( !opt.peers ) + if( typeof( opt == "string" ) ) + opt.peers = [opt]; + if(ctx.once){ return } - if(!opt.web){ return } var ws = opt.ws || (opt.ws = {}), batch; - ws.server = ws.server || opt.web; - ws.path = ws.path || '/gun'; + if(opt.web){ + ws.server = ws.server || opt.web; + ws.path = ws.path || '/gun'; - ws.web = new WebSocket.Server(ws); - - ws.web.on('connection', function(wire){ - wire.upgradeReq = wire.upgradeReq || {}; - wire.url = url.parse(wire.upgradeReq.url||'', true); - wire.id = wire.id || Gun.text.random(6); - var peer = opt.peers[wire.id] = {wire: wire}; - wire.peer = function(){ return peer }; - ctx.on('hi', peer); - wire.on('message', function(msg){ - //console.log("MESSAGE", msg); - receive(msg, wire, ctx); // diff: wire is wire. - }); - wire.on('close', function(){ - ctx.on('bye', peer); - Gun.obj.del(opt.peers, wire.id); - }); - }); + ws.web = new WebSocket.Server(ws); + ws.web.on('connection', function(wire){ + wire.upgradeReq = wire.upgradeReq || {}; + wire.url = url.parse(wire.upgradeReq.url||'', true); + wire.id = wire.id || Gun.text.random(6); + var peer = opt.peers[wire.id] = {wire: wire}; + wire.peer = function(){ return peer }; + ctx.on('hi', peer); + wire.on('message', function(msg){ + //console.log("MESSAGE", msg); + receive(msg, wire, ctx); // diff: wire is wire. + }); + wire.on('close', function(){ + ctx.on('bye', peer); + Gun.obj.del(opt.peers, wire.id); + }); + }); + } + ctx.on('out', function(at){ this.to.next(at); batch = JSON.stringify(at); @@ -110,4 +115,4 @@ Gun.on('opt', function mount(ctx){ open(peer, as); }, 2 * 1000); } -}); \ No newline at end of file +}); From ba77169d463661e06690b804d2b6467530634812 Mon Sep 17 00:00:00 2001 From: Mark Nadal Date: Fri, 22 Sep 2017 15:45:26 -0700 Subject: [PATCH 6/7] later for @lmangani ! --- lib/later.js | 11 +++++++++++ lib/load.js | 7 +++++++ lib/open.js | 21 ++++++++++++++++++--- 3 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 lib/later.js create mode 100644 lib/load.js diff --git a/lib/later.js b/lib/later.js new file mode 100644 index 00000000..0fd65062 --- /dev/null +++ b/lib/later.js @@ -0,0 +1,11 @@ +var Gun = Gun || require('../gun'); +Gun.chain.open || require('gun/lib/open'); + +Gun.chain.later = function(cb, age){ + var gun = this; + age = age * 1000; // convert to milliseconds. + setTimeout(function(){ + gun.open(cb, {off: true}); + }, age); + return gun; +} \ No newline at end of file diff --git a/lib/load.js b/lib/load.js new file mode 100644 index 00000000..3ded8c44 --- /dev/null +++ b/lib/load.js @@ -0,0 +1,7 @@ +var Gun = Gun || require('../gun'); +Gun.chain.open || require('gun/lib/open'); + +Gun.chain.load = function(cb, opt, at){ + (opt = opt || {}).off = !1; + return gun.open(cb, opt, at); +} \ No newline at end of file diff --git a/lib/open.js b/lib/open.js index 254f110b..8d94edd0 100644 --- a/lib/open.js +++ b/lib/open.js @@ -8,12 +8,27 @@ Gun.chain.open = function(cb, opt, at){ opt = opt || {}; opt.doc = opt.doc || {}; opt.ids = opt.ids || {}; - return this.on(function(data, key){ + opt.any = opt.any || cb; + opt.ev = opt.ev || {off: function(){ + Gun.obj.map(opt.ev.s, function(e){ + if(e){ e.off() } + }); + opt.ev.s = {}; + }, s:{}} + return this.on(function(data, key, ctx, ev){ delete ((data = Gun.obj.copy(data))||{})._; clearTimeout(opt.to); opt.to = setTimeout(function(){ - cb(opt.doc); + if(!opt.any){ return } + opt.any.call(opt.at.gun, opt.doc, opt.key, opt, opt.ev); + if(opt.off){ + opt.ev.off(); + opt.any = null; + } }, opt.wait || 1); + opt.at = opt.at || ctx; + opt.key = opt.key || key; + opt.ev.s[ctx.id] = ev; if(Gun.val.is(data)){ if(!at){ opt.doc = data; @@ -32,7 +47,7 @@ Gun.chain.open = function(cb, opt, at){ (at || opt.doc)[key] = opt.ids[id]; return; } - tmp.get(key).open(cb, opt, opt.ids[id] = (at || opt.doc)[key] = {}); + tmp.get(key).open(opt.any, opt, opt.ids[id] = (at || opt.doc)[key] = {}); }); }) } \ No newline at end of file From 73cd98a638189bcc63092c1ce837d87d0b52947e Mon Sep 17 00:00:00 2001 From: Mark Nadal Date: Fri, 22 Sep 2017 16:01:39 -0700 Subject: [PATCH 7/7] later for @lmangani ! --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9c22d235..a0bd16e1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gun", - "version": "0.8.6", + "version": "0.8.7", "description": "Graph engine", "main": "index.js", "browser": "gun.min.js",