mirror of
https://github.com/amark/gun.git
synced 2025-06-13 17:46:39 +00:00
put back scan & once tweak
This commit is contained in:
parent
bac0e5b7ed
commit
2d72ebdfa2
37
gun.js
37
gun.js
@ -624,7 +624,6 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
if((msg.seen||'')[cat.id]){ return } (msg.seen || (msg.seen = function(){}))[cat.id] = cat;
|
if((msg.seen||'')[cat.id]){ return } (msg.seen || (msg.seen = function(){}))[cat.id] = cat;
|
||||||
|
|
||||||
//if(cat.ask && key){
|
//if(cat.ask && key){
|
||||||
if(key){
|
if(key){
|
||||||
if(cat.soul && cat.ask && state >= state_is(root.graph[soul], key)){ // faster than HAM
|
if(cat.soul && cat.ask && state >= state_is(root.graph[soul], key)){ // faster than HAM
|
||||||
@ -929,6 +928,18 @@
|
|||||||
|
|
||||||
function get(as){
|
function get(as){
|
||||||
var at = as.via._, tmp;
|
var at = as.via._, tmp;
|
||||||
|
as.via = as.via.back(function(at){
|
||||||
|
if(at.soul){ return at.$ }
|
||||||
|
tmp = as.data; (as.data = {})[at.get] = tmp;
|
||||||
|
});
|
||||||
|
if(!as.via || !as.via._.soul){
|
||||||
|
console.log("TODO: Error! Handle non-soul put backs");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
as.via.put(as.data, as.ack, as);
|
||||||
|
|
||||||
|
|
||||||
|
return;
|
||||||
if(at.get && at.back.soul){
|
if(at.get && at.back.soul){
|
||||||
tmp = as.data;
|
tmp = as.data;
|
||||||
as.via = at.back.$;
|
as.via = at.back.$;
|
||||||
@ -969,19 +980,24 @@
|
|||||||
opt.ok = tag;
|
opt.ok = tag;
|
||||||
//opt.last = {};
|
//opt.last = {};
|
||||||
//gun.get(ok, opt); // TODO: PERF! Event listener leak!!!?
|
//gun.get(ok, opt); // TODO: PERF! Event listener leak!!!?
|
||||||
((cat.act||(cat.act={}))[id = tmp||String.random(7)] = function one(msg, eve){
|
function one(msg, eve){
|
||||||
|
if(one.stun){ return }
|
||||||
var at = msg.$._, data = at.put, tmp;
|
var at = msg.$._, data = at.put, tmp;
|
||||||
|
if(opt.not===u && u === data){ return }
|
||||||
if(opt.stun===u && (tmp = root.stun) && (tmp = tmp[at.id] || tmp[at.back.id])){ // Remember! If you port this into `.get(cb` make sure you allow stun:0 skip option for `.put(`.
|
if(opt.stun===u && (tmp = root.stun) && (tmp = tmp[at.id] || tmp[at.back.id])){ // Remember! If you port this into `.get(cb` make sure you allow stun:0 skip option for `.put(`.
|
||||||
tmp[id] = function(){one(msg,eve)};
|
tmp[id] = function(){one(msg,eve)};
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// call:
|
// call:
|
||||||
if(opt.as){
|
if(opt.as){
|
||||||
opt.ok.call(opt.as, msg, eve);
|
opt.ok.call(opt.as, msg, eve || one);
|
||||||
} else {
|
} else {
|
||||||
opt.ok.call(at.$, data, msg.get || at.get, msg, eve);
|
opt.ok.call(at.$, data, msg.get || at.get, msg, eve || one);
|
||||||
}
|
}
|
||||||
}).at = cat;
|
};
|
||||||
|
one.at = cat;
|
||||||
|
(cat.act||(cat.act={}))[id = tmp||String.random(7)] = one;
|
||||||
|
one.off = function(){ one.stun = 1; if(!cat.act){ return } delete cat.act[id] }
|
||||||
cat.on('out', {get: {}});
|
cat.on('out', {get: {}});
|
||||||
return gun;
|
return gun;
|
||||||
}
|
}
|
||||||
@ -993,11 +1009,11 @@
|
|||||||
var gun = this, cat = gun._, root = cat.root, data = cat.put, id, one, tmp;
|
var gun = this, cat = gun._, root = cat.root, data = cat.put, id, one, tmp;
|
||||||
//(root.act[tmp = ++root.acts] = cat.act[tmp] = function(msg, eve, to){
|
//(root.act[tmp = ++root.acts] = cat.act[tmp] = function(msg, eve, to){
|
||||||
((cat.act||(cat.act={}))[id = tmp||String.random(7)] = function(msg, eve, to){
|
((cat.act||(cat.act={}))[id = tmp||String.random(7)] = function(msg, eve, to){
|
||||||
if(!(tmp = msg.put)){
|
/*if(!(tmp = msg.put)){
|
||||||
console.log('not found');
|
console.log('not found');
|
||||||
return;
|
return;
|
||||||
}
|
}*/
|
||||||
if('string' == typeof Gun.valid(tmp = tmp['=']||tmp[':'])){
|
if((tmp = msg.put) && 'string' == typeof Gun.valid(tmp = tmp['=']||tmp[':'])){
|
||||||
// probably already getting it.
|
// probably already getting it.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1009,7 +1025,7 @@
|
|||||||
one[id] = ''; if(cat.soul || cat.has){ delete cat.act[id] }
|
one[id] = ''; if(cat.soul || cat.has){ delete cat.act[id] }
|
||||||
if(u === (tmp = ((msg.$||'')._||'').put)){ tmp = ((msg.$$||'')._||'').put }
|
if(u === (tmp = ((msg.$||'')._||'').put)){ tmp = ((msg.$$||'')._||'').put }
|
||||||
cb.call(at.$, tmp, msg.get || at.get);
|
cb.call(at.$, tmp, msg.get || at.get);
|
||||||
}
|
};
|
||||||
}).at = cat;
|
}).at = cat;
|
||||||
cat.on('out', {get: {}});
|
cat.on('out', {get: {}});
|
||||||
return gun;
|
return gun;
|
||||||
@ -1082,7 +1098,6 @@
|
|||||||
if(!put){ return }
|
if(!put){ return }
|
||||||
var soul = put['#'], k = put['.'], val = put['=']||put[':'];
|
var soul = put['#'], k = put['.'], val = put['=']||put[':'];
|
||||||
// TODO: lex match!
|
// TODO: lex match!
|
||||||
//console.log("let's go!!!!!!!!!!!!!!!!!", k, gun._.id, gun._.get);
|
|
||||||
((tmp = gun.get(k)._).echo || (tmp.echo = {}))[cat.id] = tmp.echo[cat.id] || cat;
|
((tmp = gun.get(k)._).echo || (tmp.echo = {}))[cat.id] = tmp.echo[cat.id] || cat;
|
||||||
}
|
}
|
||||||
var noop = function(){}, event = {stun: noop, off: noop}, u;
|
var noop = function(){}, event = {stun: noop, off: noop}, u;
|
||||||
@ -1486,13 +1501,13 @@
|
|||||||
data = Gun.state.ify({}, tmp, Gun.state.is(data, tmp), data[tmp], soul);
|
data = Gun.state.ify({}, tmp, Gun.state.is(data, tmp), data[tmp], soul);
|
||||||
}
|
}
|
||||||
if(data){ (tmp = {})[soul] = data } // back into a graph.
|
if(data){ (tmp = {})[soul] = data } // back into a graph.
|
||||||
console.log("lS got:", tmp);
|
|
||||||
root.on('in', {'@': msg['#'], put: tmp, lS:1});// || root.$});
|
root.on('in', {'@': msg['#'], put: tmp, lS:1});// || root.$});
|
||||||
});
|
});
|
||||||
|
|
||||||
root.on('put', function(msg){
|
root.on('put', function(msg){
|
||||||
this.to.next(msg); // remember to call next middleware adapter
|
this.to.next(msg); // remember to call next middleware adapter
|
||||||
var put = msg.put, soul = put['#'], key = put['.'], tmp; // pull data off wire envelope
|
var put = msg.put, soul = put['#'], key = put['.'], tmp; // pull data off wire envelope
|
||||||
|
//console.log('lS put:', key, put[':']);
|
||||||
disk[soul] = Gun.state.ify(disk[soul], key, put['>'], put[':'], soul); // merge into disk object
|
disk[soul] = Gun.state.ify(disk[soul], key, put['>'], put[':'], soul); // merge into disk object
|
||||||
if(!msg['@']){ acks.push(msg['#']) } // then ack any non-ack write. // TODO: use batch id.
|
if(!msg['@']){ acks.push(msg['#']) } // then ack any non-ack write. // TODO: use batch id.
|
||||||
if(to){ return }
|
if(to){ return }
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
var yson = {}, u, sI = setTimeout.turn || (typeof setImmediate != ''+u && setImmediate) || setTimeout;
|
var yson = {}, u, sI = setTimeout.turn || (typeof setImmediate != ''+u && setImmediate) || setTimeout;
|
||||||
|
|
||||||
yson.parseAsync = function(text, done, revive, M){
|
yson.parseAsync = function(text, done, revive, M){
|
||||||
|
if('string' != typeof text){ try{ done(u,JSON.parse(text)) }catch(e){ done(e) } return }
|
||||||
var ctx = {i: 0, text: text, done: done, l: text.length, up: []};
|
var ctx = {i: 0, text: text, done: done, l: text.length, up: []};
|
||||||
//M = 1024 * 1024 * 100;
|
//M = 1024 * 1024 * 100;
|
||||||
//M = M || 1024 * 64;
|
//M = M || 1024 * 64;
|
||||||
|
@ -27,6 +27,7 @@ var Gun;
|
|||||||
}
|
}
|
||||||
}(this));
|
}(this));
|
||||||
|
|
||||||
|
|
||||||
;(function(){
|
;(function(){
|
||||||
Gun = root.Gun
|
Gun = root.Gun
|
||||||
var SEA = Gun.SEA
|
var SEA = Gun.SEA
|
||||||
@ -72,13 +73,12 @@ describe('SEA', function(){
|
|||||||
SEA.sign('asdf', alice, function(data){
|
SEA.sign('asdf', alice, function(data){
|
||||||
SEA.verify(data, bob.pub, function(msg){
|
SEA.verify(data, bob.pub, function(msg){
|
||||||
expect(msg).to.be(undefined);
|
expect(msg).to.be(undefined);
|
||||||
SEA.verify(data+1, alice.pub, function(msg){
|
SEA.verify(data.slice(0,20)+data.slice(21), alice.pub, function(msg){
|
||||||
expect(msg).to.be(undefined);
|
expect(msg).to.be(undefined);
|
||||||
|
|
||||||
SEA.encrypt('secret', alice, function(enc){
|
SEA.encrypt('secret', alice, function(enc){
|
||||||
SEA.decrypt(enc, bob, function(dec){
|
SEA.decrypt(enc, bob, function(dec){
|
||||||
expect(dec).to.be(undefined);
|
expect(dec).to.be(undefined);
|
||||||
SEA.decrypt(enc+1, alice, function(dec){
|
SEA.decrypt(enc.slice(0,20)+enc.slice(21), alice, function(dec){
|
||||||
expect(dec).to.be(undefined);
|
expect(dec).to.be(undefined);
|
||||||
done();
|
done();
|
||||||
});});});});});});});});
|
});});});});});});});});
|
||||||
@ -218,7 +218,7 @@ describe('SEA', function(){
|
|||||||
var old = JSON.parse(atob("eyJfIjp7IiMiOiJ+VThkS0dySFJhX01sMFZ1YlR5OUZBYTlQS1ZlYlh0eTFjS05zWWxnYjduNC5QeVd5cUVVb0ZpYVduUElOV0Nad0xBbzFobjN1MldPWTU3SzZHZnpsNjhVIiwiPiI6eyJwdWIiOjE1NDY5MDI1MDQ5NzksImFsaWFzIjoxNTQ2OTAyNTA0OTc5LCJlcHViIjoxNTQ2OTAyNTA0OTc5LCJhdXRoIjoxNTQ2OTAyNTA0OTc5fX0sInB1YiI6IlU4ZEtHckhSYV9NbDBWdWJUeTlGQWE5UEtWZWJYdHkxY0tOc1lsZ2I3bjQuUHlXeXFFVW9GaWFXblBJTldDWndMQW8xaG4zdTJXT1k1N0s2R2Z6bDY4VSIsImFsaWFzIjoiU0VBe1wibVwiOltcIn5VOGRLR3JIUmFfTWwwVnViVHk5RkFhOVBLVmViWHR5MWNLTnNZbGdiN240LlB5V3lxRVVvRmlhV25QSU5XQ1p3TEFvMWhuM3UyV09ZNTdLNkdmemw2OFVcIixcImFsaWFzXCIsXCJhbGljZVwiLDE1NDY5MDI1MDQ5NzldLFwic1wiOlwienpuaGtIZjhZdFpZM2lGd3FVd0lJUldMTjhZMmlHbmNkcnVTaStGNDNmU1BLYWpSZlI0VzhXVHM4bElSMDBndGJmTWJxS0NjQkpGN3VNSkdGRC9WV2c9PVwifSIsImVwdWIiOiJTRUF7XCJtXCI6W1wiflU4ZEtHckhSYV9NbDBWdWJUeTlGQWE5UEtWZWJYdHkxY0tOc1lsZ2I3bjQuUHlXeXFFVW9GaWFXblBJTldDWndMQW8xaG4zdTJXT1k1N0s2R2Z6bDY4VVwiLFwiZXB1YlwiLFwiRkRzM1VvNTNFZEp6eFNocEpDaVctRGZPQ3lUS0M2U3cxeS1PZVJxam5ZRS5xVGdyYTlFQk1maEpNdVlMVmNaejRZYklLRm85enNBMHpMcV82dEVPMHI0XCIsMTU0NjkwMjUwNDk3OV0sXCJzXCI6XCJPZzRVVjY4OTluSjE4dC9ybWVnV0lkdnNqN01KaEpFc29ranZYQmdteVVRUXVNVjFTdnh4cXJqOFoyV1o2Q25XSkZnTlVDbEVYYWxuMURjUFE3M1R6UT09XCJ9IiwiYXV0aCI6IlNFQXtcIm1cIjpbXCJ+VThkS0dySFJhX01sMFZ1YlR5OUZBYTlQS1ZlYlh0eTFjS05zWWxnYjduNC5QeVd5cUVVb0ZpYVduUElOV0Nad0xBbzFobjN1MldPWTU3SzZHZnpsNjhVXCIsXCJhdXRoXCIsXCJ7XFxcImVrXFxcIjpcXFwiU0VBe1xcXFxcXFwiY3RcXFxcXFxcIjpcXFxcXFxcIi94ZnNPdVNkQUtrNkJiR00zbUV6MnVlSjI3Y0tJNThYMEtUL1FsaExSZXpWcjRkNzVZb2M5QlZNRjkzejl4QXI4N080S2FDNjJUWGVoeERQN0FFa2V4N1paaEpYL2hsVm9kK1FIcVFaaUZMK2lVQzFvL2hpUEJGWElBZmtINGRrcklGOFdqcEVaU3NIVmRSOVRhY2ZzbTB3aHN5NGJXN1ZLSEUySGc9PVxcXFxcXFwiLFxcXFxcXFwiaXZcXFxcXFxcIjpcXFxcXFxcIjhWekduTStEc1lTUktIU3Z4cSszTGc9PVxcXFxcXFwiLFxcXFxcXFwic1xcXFxcXFwiOlxcXFxcXFwibVVSSlJ4TzUvdXM9XFxcXFxcXCJ9XFxcIixcXFwic1xcXCI6XFxcImE1SlA3VFpuVE9jYjEwMGJOejlscEU4dnpqcUE3TWl0NHcwN3pjQTdIOFV0bml1WnVHSmdpZnNNQlFNSGdRdE5cXFwifVwiLDE1NDY5MDI1MDQ5NzldLFwic1wiOlwiSGFzMytJaHFEZTYyN016cElXZVE1cVFrZ2NOMlk3WHRpNGw0TFU3T2JyaktxSlBnSllrVWE2bk9YdlRmQkFzV1BPVzVnemh4Q2RPVGNFQm5icWlpWXc9PVwifSJ9"));
|
var old = JSON.parse(atob("eyJfIjp7IiMiOiJ+VThkS0dySFJhX01sMFZ1YlR5OUZBYTlQS1ZlYlh0eTFjS05zWWxnYjduNC5QeVd5cUVVb0ZpYVduUElOV0Nad0xBbzFobjN1MldPWTU3SzZHZnpsNjhVIiwiPiI6eyJwdWIiOjE1NDY5MDI1MDQ5NzksImFsaWFzIjoxNTQ2OTAyNTA0OTc5LCJlcHViIjoxNTQ2OTAyNTA0OTc5LCJhdXRoIjoxNTQ2OTAyNTA0OTc5fX0sInB1YiI6IlU4ZEtHckhSYV9NbDBWdWJUeTlGQWE5UEtWZWJYdHkxY0tOc1lsZ2I3bjQuUHlXeXFFVW9GaWFXblBJTldDWndMQW8xaG4zdTJXT1k1N0s2R2Z6bDY4VSIsImFsaWFzIjoiU0VBe1wibVwiOltcIn5VOGRLR3JIUmFfTWwwVnViVHk5RkFhOVBLVmViWHR5MWNLTnNZbGdiN240LlB5V3lxRVVvRmlhV25QSU5XQ1p3TEFvMWhuM3UyV09ZNTdLNkdmemw2OFVcIixcImFsaWFzXCIsXCJhbGljZVwiLDE1NDY5MDI1MDQ5NzldLFwic1wiOlwienpuaGtIZjhZdFpZM2lGd3FVd0lJUldMTjhZMmlHbmNkcnVTaStGNDNmU1BLYWpSZlI0VzhXVHM4bElSMDBndGJmTWJxS0NjQkpGN3VNSkdGRC9WV2c9PVwifSIsImVwdWIiOiJTRUF7XCJtXCI6W1wiflU4ZEtHckhSYV9NbDBWdWJUeTlGQWE5UEtWZWJYdHkxY0tOc1lsZ2I3bjQuUHlXeXFFVW9GaWFXblBJTldDWndMQW8xaG4zdTJXT1k1N0s2R2Z6bDY4VVwiLFwiZXB1YlwiLFwiRkRzM1VvNTNFZEp6eFNocEpDaVctRGZPQ3lUS0M2U3cxeS1PZVJxam5ZRS5xVGdyYTlFQk1maEpNdVlMVmNaejRZYklLRm85enNBMHpMcV82dEVPMHI0XCIsMTU0NjkwMjUwNDk3OV0sXCJzXCI6XCJPZzRVVjY4OTluSjE4dC9ybWVnV0lkdnNqN01KaEpFc29ranZYQmdteVVRUXVNVjFTdnh4cXJqOFoyV1o2Q25XSkZnTlVDbEVYYWxuMURjUFE3M1R6UT09XCJ9IiwiYXV0aCI6IlNFQXtcIm1cIjpbXCJ+VThkS0dySFJhX01sMFZ1YlR5OUZBYTlQS1ZlYlh0eTFjS05zWWxnYjduNC5QeVd5cUVVb0ZpYVduUElOV0Nad0xBbzFobjN1MldPWTU3SzZHZnpsNjhVXCIsXCJhdXRoXCIsXCJ7XFxcImVrXFxcIjpcXFwiU0VBe1xcXFxcXFwiY3RcXFxcXFxcIjpcXFxcXFxcIi94ZnNPdVNkQUtrNkJiR00zbUV6MnVlSjI3Y0tJNThYMEtUL1FsaExSZXpWcjRkNzVZb2M5QlZNRjkzejl4QXI4N080S2FDNjJUWGVoeERQN0FFa2V4N1paaEpYL2hsVm9kK1FIcVFaaUZMK2lVQzFvL2hpUEJGWElBZmtINGRrcklGOFdqcEVaU3NIVmRSOVRhY2ZzbTB3aHN5NGJXN1ZLSEUySGc9PVxcXFxcXFwiLFxcXFxcXFwiaXZcXFxcXFxcIjpcXFxcXFxcIjhWekduTStEc1lTUktIU3Z4cSszTGc9PVxcXFxcXFwiLFxcXFxcXFwic1xcXFxcXFwiOlxcXFxcXFwibVVSSlJ4TzUvdXM9XFxcXFxcXCJ9XFxcIixcXFwic1xcXCI6XFxcImE1SlA3VFpuVE9jYjEwMGJOejlscEU4dnpqcUE3TWl0NHcwN3pjQTdIOFV0bml1WnVHSmdpZnNNQlFNSGdRdE5cXFwifVwiLDE1NDY5MDI1MDQ5NzldLFwic1wiOlwiSGFzMytJaHFEZTYyN016cElXZVE1cVFrZ2NOMlk3WHRpNGw0TFU3T2JyaktxSlBnSllrVWE2bk9YdlRmQkFzV1BPVzVnemh4Q2RPVGNFQm5icWlpWXc9PVwifSJ9"));
|
||||||
var okey = {"pub":"U8dKGrHRa_Ml0VubTy9FAa9PKVebXty1cKNsYlgb7n4.PyWyqEUoFiaWnPINWCZwLAo1hn3u2WOY57K6Gfzl68U","epub":"FDs3Uo53EdJzxShpJCiW-DfOCyTKC6Sw1y-OeRqjnYE.qTgra9EBMfhJMuYLVcZz4YbIKFo9zsA0zLq_6tEO0r4","priv":"jMy7WfcldJ4esZEijAj4LTb99smtY_H0yKJLemJl2HI","epriv":"1DszMh-85pGTPLYtRunG-Q-xB78AE4k07PPkbedYYwk"}
|
var okey = {"pub":"U8dKGrHRa_Ml0VubTy9FAa9PKVebXty1cKNsYlgb7n4.PyWyqEUoFiaWnPINWCZwLAo1hn3u2WOY57K6Gfzl68U","epub":"FDs3Uo53EdJzxShpJCiW-DfOCyTKC6Sw1y-OeRqjnYE.qTgra9EBMfhJMuYLVcZz4YbIKFo9zsA0zLq_6tEO0r4","priv":"jMy7WfcldJ4esZEijAj4LTb99smtY_H0yKJLemJl2HI","epriv":"1DszMh-85pGTPLYtRunG-Q-xB78AE4k07PPkbedYYwk"}
|
||||||
|
|
||||||
var gun = Gun({super: true}), tmp = Gun.node.soul(old);
|
var gun = Gun({super: true}), tmp = old._['#'];//Gun.node.soul(old);
|
||||||
var graph = {};
|
var graph = {};
|
||||||
graph[tmp] = old;
|
graph[tmp] = old;
|
||||||
var alias = SEA.opt.unpack(await SEA.verify(old.alias, false), 'alias', old);
|
var alias = SEA.opt.unpack(await SEA.verify(old.alias, false), 'alias', old);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user