├── .babelrc ├── .gitignore ├── .npmignore ├── Changelog.txt ├── Readme.md ├── chaingun.png ├── edge ├── all.js ├── all.js.map ├── count.js ├── count.js.map ├── date.js ├── date.js.map ├── each.js ├── each.js.map ├── fields.js ├── fields.js.map ├── index.js ├── index.js.map ├── local.js ├── local.js.map ├── map-reduce.js ├── map-reduce.js.map ├── no.js ├── no.js.map ├── print.js ├── print.js.map ├── put.js ├── put.js.map ├── recurse.js ├── recurse.js.map ├── set.js ├── set.js.map ├── soul.js ├── soul.js.map ├── timed.js ├── timed.js.map ├── value.js └── value.js.map ├── gulpfile.js ├── package.json ├── src ├── all.js ├── count.js ├── date.js ├── each.js ├── fields.js ├── index.js ├── local.js ├── map-reduce.js ├── no.js ├── print.js ├── put.js ├── recurse.js ├── set.js ├── soul.js ├── timed.js └── value.js └── test ├── count.test.js ├── date.test.js ├── each.test.js ├── fields.test.js ├── local.test.js ├── put-at.test.js ├── set-at.test.js ├── soul.test.js └── value.test.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | "latest" 4 | ], 5 | "plugins": [ 6 | "transform-runtime" 7 | ] 8 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | .vscode 3 | node_modules 4 | data.json 5 | play 6 | package-lock.json -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | test 2 | *.test.js 3 | *.ts 4 | *.html 5 | css 6 | gulpfile 7 | .babelrc 8 | sandbox 9 | play 10 | examples 11 | docs 12 | -------------------------------------------------------------------------------- /Changelog.txt: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## 0.1.2 4 | 5 | Fix bad reference to `live` -------------------------------------------------------------------------------- /Readme.md: -------------------------------------------------------------------------------- 1 | # Chaingun 2 | 3 | ![Chaingun](https://github.com/kristianmandrup/chaingun/raw/master/chaingun.png) 4 | 5 | Common [Gun.js](http://gun.js.org/) chain extensions and utility functions. 6 | 7 | ## Install 8 | 9 | `npm i -S chain-gun` 10 | 11 | ## Use 12 | 13 | Assuming Babel or similar transpiler setup (2017) 14 | 15 | To add all chain methods: 16 | 17 | ```js 18 | import Gun from 'gun/gun' 19 | import chain from 'chain-gun' 20 | chain(Gun) 21 | ``` 22 | 23 | To control which chain methods to add: 24 | 25 | ```js 26 | import { 27 | add 28 | } from 'chain-gun' 29 | add(Gun, 'date', 'fields') 30 | ``` 31 | 32 | Import individual chain modules 33 | 34 | ```js 35 | import { 36 | print, 37 | addPrint 38 | } from 'chain-gun/dist/print' 39 | addInspect(Gun.chain) 40 | ``` 41 | 42 | ### Require (Node.js) 43 | 44 | Using `require` 45 | 46 | ```js 47 | const Gun = require('gun/gun') 48 | require('chain-gun')(Gun) 49 | ``` 50 | 51 | ## API chain extensions 52 | 53 | Also available as utility functions 54 | 55 | - `count` 56 | - `date` 57 | - `each` 58 | - `fields` 59 | - `local` 60 | - `putAt` 61 | - `setAt` 62 | - `soul` 63 | - `timed` 64 | - `valueAt` 65 | - `value` 66 | 67 | ### each 68 | 69 | Map and iterate over every value of a node. 70 | The second options argument can be called with an `op` option, which 71 | can be used to override the default map operation `val`. 72 | Remaining arguments can contain callback function etc. 73 | 74 | `each(node, {op}, ...args)` or `node.each({op}, ...args)` 75 | 76 | **Examples** 77 | 78 | Utility function 79 | 80 | ```js 81 | each(node, {op: 'value'}) 82 | ``` 83 | 84 | Chaining 85 | 86 | ```js 87 | node.each({op: 'value'}) 88 | ``` 89 | 90 | Fine control 91 | 92 | ```js 93 | node.each({op: 'value'}, (data) => console.log(data)) 94 | ``` 95 | 96 | ### count 97 | 98 | Create a [CRDT](https://en.wikipedia.org/wiki/Conflict-free_replicated_data_type) counter 99 | 100 | `count(numFun)` or `node.count(numFun)` 101 | 102 | ### date 103 | 104 | Add a date field to a Gun node 105 | 106 | `date(dateValue)` or `node.date(dateValue)` 107 | 108 | ```js 109 | node.date(new Date()) 110 | ``` 111 | 112 | ### local 113 | 114 | Store locally only (ie. no peer sync) 115 | 116 | `local(data, cb, opt)` 117 | 118 | ### no 119 | 120 | `no(cb)` 121 | 122 | ### value 123 | 124 | Retrieve the node value (without `_` metadata) 125 | 126 | `value(cb, opt)` or `node.value()` 127 | 128 | ```js 129 | mark.value((data) => { 130 | t.is(data.name, 'mark') 131 | }) 132 | ``` 133 | 134 | ### valueAt 135 | 136 | Retrieve value at the given `path` (no metadata) 137 | Shorthand for `node.path('my/path').value(cb)` 138 | 139 | `valueAt(node, path, cb, opt)` or `node.valueAt(path, cb)` 140 | 141 | ```js 142 | mark.putAt(_path, amber) 143 | mark.valueAt(_path, (spouse) => { 144 | t.is(spouse.name, 'amber') 145 | }) 146 | ``` 147 | 148 | ### valAt 149 | 150 | Retrieve value at the given `path` (including `_` metadata). 151 | Shorthand for `node.path('my/path').val(cb)` 152 | 153 | `valAt(node, path, cb, opt)` or `node.valAt(path, cb)` 154 | 155 | ```js 156 | mark.putAt(_path, amber) 157 | mark.valAt(_path, (spouse) => { 158 | t.is(spouse.name, 'amber') 159 | }) 160 | ``` 161 | 162 | ### setAt 163 | 164 | `set` value at the given `path`. Shorthand for `node.path('my/path').set(value)` 165 | 166 | `setAt(node, path, cb, opt)` or `node.setAt(path, cb, opt)` 167 | 168 | ```js 169 | mark.setAt(_path, amber) 170 | mark.valueAt(_path, (spouse) => { 171 | t.is(spouse.name, 'amber') 172 | }) 173 | ``` 174 | 175 | ### putAt 176 | 177 | `put` value at the given `path`, shorthand for `node.path('my/path').set(value)` 178 | 179 | `.putAt(path, cb, opt)` 180 | 181 | ```js 182 | mark.putAt(_path, amber) 183 | mark.valueAt(_path, (spouse) => { 184 | t.is(spouse.name, 'amber') 185 | }) 186 | ``` 187 | 188 | ### localFields 189 | 190 | `localFields()` - get list of *local* field names (keys) in the bucket 191 | 192 | ```js 193 | let fieldNames = mark.localFields() 194 | ``` 195 | 196 | ### fields 197 | 198 | Retrieve the names of all fields of the node value (ie. Object keys) 199 | 200 | `node.fields(cb)` or `fields(node, cb)` 201 | 202 | ```js 203 | mark.fields((keys) => { 204 | console.log(keys) 205 | }) 206 | ``` 207 | 208 | ### soul 209 | 210 | `soul()` retrieve the soul (ID) of the node 211 | 212 | ```js 213 | let id = mark.soul() 214 | ``` 215 | 216 | ### print 217 | 218 | `print(label)` - print value to console (no meta). Note: You can set `Gun.log`, by default: `console.log` 219 | 220 | ```js 221 | amber.print() 222 | mark.print('mark') // with label 223 | ``` 224 | 225 | ### Useful internal Gun functions 226 | 227 | `Gun.obj.copy(val)` - copy a value 228 | `Gun.obj.map(data, function(val, field){ ... }` - map over a node 229 | `Gun.fn.is` - check if something is a function 230 | `Gun.text.random()` - generate random text 231 | `Gun.is.node.soul(data)` - test if data has a soul (ie. is a Gun node) 232 | `Gun.node.soul(data)` - return id of Gun node 233 | 234 | Please add more internal Gun functions to this list for reference ;) 235 | 236 | ## Useful chain methods 237 | 238 | `node.back()` - go one level back/up in the graph 239 | 240 | ## Contributing 241 | 242 | Install dependency modules/packages 243 | 244 | `npm i` 245 | 246 | ### Compile/Build 247 | 248 | The project includes a `gulpfile` configured to use Babel 6. 249 | All `/src` files are compiled to `/dist` including source maps. 250 | 251 | Scripts: 252 | 253 | - start: `npm start` 254 | - build: `npm run build` (ie. compile) 255 | - watch and start: `npm run watch` 256 | - watch and build: `npm run watch:b` 257 | 258 | ### Run Tests 259 | 260 | `npm test` or simply `ava test` 261 | 262 | ## License 263 | 264 | MIT Kristian Mandrup -------------------------------------------------------------------------------- /chaingun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kristianmandrup/chain-gun/92232898af069dc86c60b6358544bd717f44179b/chaingun.png -------------------------------------------------------------------------------- /edge/all.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.addValue = exports.addSet = exports.addRecurse = exports.addPut = exports.addLocal = exports.addPrint = exports.addEach = exports.addDate = undefined; 7 | exports.add = add; 8 | 9 | exports.default = function (Gun) { 10 | return add.apply(undefined, [Gun].concat(allNames)); 11 | }; 12 | 13 | var _count = require('./count'); 14 | 15 | var _date = require('./date'); 16 | 17 | var _each = require('./each'); 18 | 19 | var _fields = require('./fields'); 20 | 21 | var _print = require('./print'); 22 | 23 | var _timed = require('./timed'); 24 | 25 | var _local = require('./local'); 26 | 27 | var _mapReduce = require('./map-reduce'); 28 | 29 | var _no = require('./no'); 30 | 31 | var _recurse = require('./recurse'); 32 | 33 | var _put = require('./put'); 34 | 35 | var _set = require('./set'); 36 | 37 | var _soul = require('./soul'); 38 | 39 | var _value = require('./value'); 40 | 41 | var chains = { 42 | addCount: _count.addCount, 43 | addDate: _date.addDate, 44 | addEach: _each.addEach, 45 | addFields: _fields.addFields, 46 | addPrint: _print.addPrint, 47 | addTimed: _timed.addTimed, 48 | addLocal: _local.addLocal, 49 | addMapReduce: _mapReduce.addMapReduce, 50 | addNo: _no.addNo, 51 | addPut: _put.addPut, 52 | addRecurse: _recurse.addRecurse, 53 | addSet: _set.addSet, 54 | addSoul: _soul.addSoul, 55 | addValue: _value.addValue 56 | }; 57 | 58 | function capitalize(str) { 59 | return str.charAt(0).toUpperCase() + str.slice(1); 60 | } 61 | 62 | function add(Gun) { 63 | for (var _len = arguments.length, names = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { 64 | names[_key - 1] = arguments[_key]; 65 | } 66 | 67 | names.forEach(function (name) { 68 | var nameCap = capitalize(name); 69 | var fun = 'add' + nameCap; 70 | chains[fun]({ 71 | chain: Gun.chain, 72 | Gun: Gun 73 | }); 74 | }); 75 | return Gun; 76 | } 77 | 78 | var allNames = ['count', 'date', 'each', 'fields', 'print', 'timed', 'local', 'mapReduce', 'no', 'put', 'recurse', 'set', 'soul', 'value']; 79 | 80 | exports.addDate = _date.addDate; 81 | exports.addEach = _each.addEach; 82 | exports.addPrint = _print.addPrint; 83 | exports.addLocal = _local.addLocal; 84 | exports.addPut = _put.addPut; 85 | exports.addRecurse = _recurse.addRecurse; 86 | exports.addSet = _set.addSet; 87 | exports.addValue = _value.addValue; 88 | //# sourceMappingURL=all.js.map 89 | -------------------------------------------------------------------------------- /edge/all.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["all.js"],"names":["add","Gun","allNames","chains","addCount","addDate","addEach","addFields","addPrint","addTimed","addLocal","addMapReduce","addNo","addPut","addRecurse","addSet","addSoul","addValue","capitalize","str","charAt","toUpperCase","slice","names","forEach","nameCap","name","fun","chain"],"mappings":";;;;;;QAqCgBA,G,GAAAA,G;;kBAwCD,UAAUC,GAAV,EAAe;AAC1B,WAAOD,sBAAIC,GAAJ,SAAYC,QAAZ,EAAP;AACH,C;;AA/ED;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAGA,IAAMC,SAAS;AACXC,6BADW;AAEXC,0BAFW;AAGXC,0BAHW;AAIXC,gCAJW;AAKXC,6BALW;AAMXC,6BANW;AAOXC,6BAPW;AAQXC,yCARW;AASXC,oBATW;AAUXC,uBAVW;AAWXC,mCAXW;AAYXC,uBAZW;AAaXC,0BAbW;AAcXC;AAdW,CAAf;;AAiBA,SAASC,UAAT,CAAoBC,GAApB,EAAyB;AACrB,WAAOA,IAAIC,MAAJ,CAAW,CAAX,EAAcC,WAAd,KAA8BF,IAAIG,KAAJ,CAAU,CAAV,CAArC;AACH;;AAEM,SAAStB,GAAT,CAAaC,GAAb,EAA4B;AAAA,sCAAPsB,KAAO;AAAPA,aAAO;AAAA;;AAC/BA,UAAMC,OAAN,CAAc,gBAAQ;AAClB,YAAIC,UAAUP,WAAWQ,IAAX,CAAd;AACA,YAAIC,MAAM,QAAQF,OAAlB;AACAtB,eAAOwB,GAAP,EAAY;AACRC,mBAAO3B,IAAI2B,KADH;AAER3B;AAFQ,SAAZ;AAIH,KAPD;AAQA,WAAOA,GAAP;AACH;;AAED,IAAMC,WAAW,CACb,OADa,EAEb,MAFa,EAGb,MAHa,EAIb,QAJa,EAKb,OALa,EAMb,OANa,EAOb,OAPa,EAQb,WARa,EASb,IATa,EAUb,KAVa,EAWb,SAXa,EAYb,KAZa,EAab,MAba,EAcb,OAda,CAAjB;;QAkBIG,O;QACAC,O;QACAE,Q;QACAE,Q;QACAG,M;QACAC,U;QACAC,M;QACAE,Q","file":"all.js","sourcesContent":["import {addCount} from './count'\nimport {addDate} from './date'\nimport {addEach} from './each'\nimport {addFields} from './fields'\nimport {addPrint} from './print'\nimport {addTimed} from './timed'\nimport {addLocal} from './local'\nimport {addMapReduce} from './map-reduce'\nimport {addNo} from './no'\nimport {addRecurse} from './recurse'\nimport {addPut} from './put'\nimport {addSet} from './set'\nimport {addSoul} from './soul'\nimport {addValue} from './value'\n\n\nconst chains = {\n addCount,\n addDate,\n addEach,\n addFields,\n addPrint,\n addTimed,\n addLocal,\n addMapReduce,\n addNo,\n addPut,\n addRecurse,\n addSet,\n addSoul,\n addValue\n}\n\nfunction capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n\nexport function add(Gun, ...names) {\n names.forEach(name => {\n let nameCap = capitalize(name)\n let fun = 'add' + nameCap\n chains[fun]({\n chain: Gun.chain,\n Gun\n })\n })\n return Gun\n}\n\nconst allNames = [\n 'count',\n 'date',\n 'each',\n 'fields',\n 'print',\n 'timed',\n 'local',\n 'mapReduce',\n 'no',\n 'put',\n 'recurse',\n 'set',\n 'soul',\n 'value'\n]\n\nexport {\n addDate,\n addEach,\n addPrint,\n addLocal,\n addPut,\n addRecurse,\n addSet,\n addValue\n}\n\nexport default function (Gun) {\n return add(Gun, ...allNames)\n}"]} -------------------------------------------------------------------------------- /edge/count.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.count = count; 7 | exports.addCount = addCount; 8 | function count(node, num) { 9 | if (typeof num === 'number') { 10 | node.path(Gun.text.random()).put(num); 11 | } 12 | if (typeof num === 'function') { 13 | var sum = 0; 14 | node.map().val(function (val) { 15 | num(sum += val); 16 | }); 17 | } 18 | return node; 19 | } 20 | 21 | function addCount(_ref) { 22 | var chain = _ref.chain, 23 | Gun = _ref.Gun; 24 | 25 | chain.count = function (num) { 26 | return count(this, num); 27 | }; 28 | return chain; 29 | } 30 | //# sourceMappingURL=count.js.map 31 | -------------------------------------------------------------------------------- /edge/count.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["count.js"],"names":["count","addCount","node","num","path","Gun","text","random","put","sum","map","val","chain"],"mappings":";;;;;QAAgBA,K,GAAAA,K;QAaAC,Q,GAAAA,Q;AAbT,SAASD,KAAT,CAAeE,IAAf,EAAqBC,GAArB,EAA0B;AAC/B,MAAI,OAAOA,GAAP,KAAe,QAAnB,EAA6B;AAC3BD,SAAKE,IAAL,CAAUC,IAAIC,IAAJ,CAASC,MAAT,EAAV,EAA6BC,GAA7B,CAAiCL,GAAjC;AACD;AACD,MAAI,OAAOA,GAAP,KAAe,UAAnB,EAA+B;AAC7B,QAAIM,MAAM,CAAV;AACAP,SAAKQ,GAAL,GAAWC,GAAX,CAAe,UAAUA,GAAV,EAAe;AAC5BR,UAAIM,OAAOE,GAAX;AACD,KAFD;AAGD;AACD,SAAOT,IAAP;AACD;;AAEM,SAASD,QAAT,OAGJ;AAAA,MAFDW,KAEC,QAFDA,KAEC;AAAA,MADDP,GACC,QADDA,GACC;;AACDO,QAAMZ,KAAN,GAAc,UAAUG,GAAV,EAAe;AAC3B,WAAOH,MAAM,IAAN,EAAYG,GAAZ,CAAP;AACD,GAFD;AAGA,SAAOS,KAAP;AACD","file":"count.js","sourcesContent":["export function count(node, num) {\n if (typeof num === 'number') {\n node.path(Gun.text.random()).put(num);\n }\n if (typeof num === 'function') {\n var sum = 0;\n node.map().val(function (val) {\n num(sum += val);\n });\n }\n return node;\n}\n\nexport function addCount({\n chain,\n Gun\n}) {\n chain.count = function (num) {\n return count(this, num)\n }\n return chain\n}"]} -------------------------------------------------------------------------------- /edge/date.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.date = date; 7 | exports.addDate = addDate; 8 | 9 | var _gun = require('gun/gun'); 10 | 11 | var _gun2 = _interopRequireDefault(_gun); 12 | 13 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 14 | 15 | function date(node, data) { 16 | if (_gun2.default.fns.is(data)) { 17 | return node.val(function (val) { 18 | data.call(this, new Date(val)); 19 | }); 20 | } 21 | return node.put(data.getTime()); 22 | } 23 | 24 | function addDate(_ref) { 25 | var chain = _ref.chain; 26 | 27 | chain.date = function (data) { 28 | return date(node, data); 29 | }; 30 | 31 | return chain; 32 | } 33 | //# sourceMappingURL=date.js.map 34 | -------------------------------------------------------------------------------- /edge/date.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["date.js"],"names":["date","addDate","node","data","fns","is","val","call","Date","put","getTime","chain"],"mappings":";;;;;QAEgBA,I,GAAAA,I;QASAC,O,GAAAA,O;;AAXhB;;;;;;AAEO,SAASD,IAAT,CAAcE,IAAd,EAAoBC,IAApB,EAA0B;AAC/B,MAAI,cAAIC,GAAJ,CAAQC,EAAR,CAAWF,IAAX,CAAJ,EAAsB;AACpB,WAAOD,KAAKI,GAAL,CAAS,UAAUA,GAAV,EAAe;AAC7BH,WAAKI,IAAL,CAAU,IAAV,EAAgB,IAAIC,IAAJ,CAASF,GAAT,CAAhB;AACD,KAFM,CAAP;AAGD;AACD,SAAOJ,KAAKO,GAAL,CAASN,KAAKO,OAAL,EAAT,CAAP;AACD;;AAEM,SAAST,OAAT,OAEJ;AAAA,MADDU,KACC,QADDA,KACC;;AACDA,QAAMX,IAAN,GAAa,UAAUG,IAAV,EAAgB;AAC3B,WAAOH,KAAKE,IAAL,EAAWC,IAAX,CAAP;AACD,GAFD;;AAIA,SAAOQ,KAAP;AACD","file":"date.js","sourcesContent":["import Gun from 'gun/gun'\n\nexport function date(node, data) {\n if (Gun.fns.is(data)) {\n return node.val(function (val) {\n data.call(this, new Date(val));\n })\n }\n return node.put(data.getTime());\n}\n\nexport function addDate({\n chain\n}) {\n chain.date = function (data) {\n return date(node, data)\n }\n\n return chain\n}"]} -------------------------------------------------------------------------------- /edge/each.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.each = each; 7 | exports.addEach = addEach; 8 | function each(node, _ref) { 9 | var _node$op; 10 | 11 | var _ref$op = _ref.op, 12 | op = _ref$op === undefined ? 'val' : _ref$op; 13 | 14 | var each = node.map(); 15 | 16 | for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { 17 | args[_key - 2] = arguments[_key]; 18 | } 19 | 20 | return (_node$op = node[op]).apply.apply(_node$op, [each].concat(args)); 21 | } 22 | 23 | function addEach(_ref2) { 24 | var chain = _ref2.chain; 25 | 26 | chain.each = function (_ref3) { 27 | var op = _ref3.op; 28 | 29 | for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { 30 | args[_key2 - 1] = arguments[_key2]; 31 | } 32 | 33 | return each.apply(undefined, [this, { 34 | op: op 35 | }].concat(args)); 36 | }; 37 | return chain; 38 | } 39 | //# sourceMappingURL=each.js.map 40 | -------------------------------------------------------------------------------- /edge/each.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["each.js"],"names":["each","addEach","node","op","map","args","apply","chain"],"mappings":";;;;;QAAgBA,I,GAAAA,I;QAOAC,O,GAAAA,O;AAPT,SAASD,IAAT,CAAcE,IAAd,QAEK;AAAA;;AAAA,qBADVC,EACU;AAAA,MADVA,EACU,2BADL,KACK;;AACV,MAAIH,OAAOE,KAAKE,GAAL,EAAX;;AADU,oCAANC,IAAM;AAANA,QAAM;AAAA;;AAEV,SAAO,iBAAKF,EAAL,GAASG,KAAT,kBAAeN,IAAf,SAAwBK,IAAxB,EAAP;AACD;;AAEM,SAASJ,OAAT,QAEJ;AAAA,MADDM,KACC,SADDA,KACC;;AACDA,QAAMP,IAAN,GAAa,iBAED;AAAA,QADVG,EACU,SADVA,EACU;;AAAA,uCAANE,IAAM;AAANA,UAAM;AAAA;;AACV,WAAOL,uBAAK,IAAL,EAAW;AAChBG;AADgB,KAAX,SAEDE,IAFC,EAAP;AAGD,GAND;AAOA,SAAOE,KAAP;AACD","file":"each.js","sourcesContent":["export function each(node, {\n op = 'val'\n}, ...args) {\n var each = node.map();\n return node[op].apply(each, ...args)\n}\n\nexport function addEach({\n chain\n}) {\n chain.each = function ({\n op\n }, ...args) {\n return each(this, {\n op\n }, ...args)\n }\n return chain\n}"]} -------------------------------------------------------------------------------- /edge/fields.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | 7 | var _keys = require("babel-runtime/core-js/object/keys"); 8 | 9 | var _keys2 = _interopRequireDefault(_keys); 10 | 11 | var _values = require("babel-runtime/core-js/object/values"); 12 | 13 | var _values2 = _interopRequireDefault(_values); 14 | 15 | exports.localFields = localFields; 16 | exports.fields = fields; 17 | exports.addFields = addFields; 18 | 19 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 20 | 21 | function localFields(node) { 22 | var mp = node.map().val(function (v) { 23 | return v; 24 | }); 25 | var map = (0, _values2.default)(mp._.map); 26 | return (0, _values2.default)(map).map(function (v) { 27 | return v.at.field; 28 | }); 29 | } 30 | 31 | function fields(node, cb, opt) { 32 | node.value(function (v) { 33 | return cb((0, _keys2.default)(v)); 34 | }, opt); 35 | } 36 | 37 | function addFields(_ref) { 38 | var chain = _ref.chain; 39 | 40 | chain.fields = function (cb, opt) { 41 | return fields(this, cb, opt); 42 | }; 43 | return chain; 44 | } 45 | //# sourceMappingURL=fields.js.map 46 | -------------------------------------------------------------------------------- /edge/fields.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["fields.js"],"names":["localFields","fields","addFields","node","mp","map","val","v","_","at","field","cb","opt","value","chain"],"mappings":";;;;;;;;;;;;;;QAAgBA,W,GAAAA,W;QAMAC,M,GAAAA,M;QAIAC,S,GAAAA,S;;;;AAVT,SAASF,WAAT,CAAqBG,IAArB,EAA2B;AAChC,MAAIC,KAAKD,KAAKE,GAAL,GAAWC,GAAX,CAAe;AAAA,WAAKC,CAAL;AAAA,GAAf,CAAT;AACA,MAAIF,MAAM,sBAAcD,GAAGI,CAAH,CAAKH,GAAnB,CAAV;AACA,SAAO,sBAAcA,GAAd,EAAmBA,GAAnB,CAAuB;AAAA,WAAKE,EAAEE,EAAF,CAAKC,KAAV;AAAA,GAAvB,CAAP;AACD;;AAEM,SAAST,MAAT,CAAgBE,IAAhB,EAAsBQ,EAAtB,EAA0BC,GAA1B,EAA+B;AACpCT,OAAKU,KAAL,CAAW;AAAA,WAAKF,GAAG,oBAAYJ,CAAZ,CAAH,CAAL;AAAA,GAAX,EAAoCK,GAApC;AACD;;AAEM,SAASV,SAAT,OAEJ;AAAA,MADDY,KACC,QADDA,KACC;;AACDA,QAAMb,MAAN,GAAe,UAAUU,EAAV,EAAcC,GAAd,EAAmB;AAChC,WAAOX,OAAO,IAAP,EAAaU,EAAb,EAAiBC,GAAjB,CAAP;AACD,GAFD;AAGA,SAAOE,KAAP;AACD","file":"fields.js","sourcesContent":["export function localFields(node) {\n var mp = node.map().val(v => v)\n var map = Object.values(mp._.map)\n return Object.values(map).map(v => v.at.field)\n}\n\nexport function fields(node, cb, opt) {\n node.value(v => cb(Object.keys(v)), opt)\n}\n\nexport function addFields({\n chain\n}) {\n chain.fields = function (cb, opt) {\n return fields(this, cb, opt)\n }\n return chain\n}"]} -------------------------------------------------------------------------------- /edge/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.addAll = exports.add = undefined; 7 | 8 | exports.default = function (Gun) { 9 | Gun.chainAll = function () { 10 | for (var _len = arguments.length, funs = Array(_len), _key = 0; _key < _len; _key++) { 11 | funs[_key] = arguments[_key]; 12 | } 13 | 14 | funs.forEach(function (fun) { 15 | return fun(Gun.chain, Gun); 16 | }); 17 | }; 18 | return (0, _all2.default)(Gun); 19 | }; 20 | 21 | var _all = require('./all'); 22 | 23 | var _all2 = _interopRequireDefault(_all); 24 | 25 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 26 | 27 | exports.add = _all.add; 28 | exports.addAll = _all2.default; 29 | //# sourceMappingURL=index.js.map 30 | -------------------------------------------------------------------------------- /edge/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["index.js"],"names":["Gun","chainAll","funs","forEach","fun","chain","add","addAll"],"mappings":";;;;;;;kBAUe,UAAUA,GAAV,EAAe;AAC5BA,MAAIC,QAAJ,GAAe,YAAmB;AAAA,sCAANC,IAAM;AAANA,UAAM;AAAA;;AAChCA,SAAKC,OAAL,CAAa;AAAA,aAAOC,IAAIJ,IAAIK,KAAR,EAAeL,GAAf,CAAP;AAAA,KAAb;AACD,GAFD;AAGA,SAAO,mBAAOA,GAAP,CAAP;AACD,C;;AAfD;;;;;;QAMEM,G;QACAC,M","file":"index.js","sourcesContent":["import {\n add,\n default as addAll\n} from './all'\n\nexport {\n add,\n addAll\n}\n\nexport default function (Gun) {\n Gun.chainAll = function (...funs) {\n funs.forEach(fun => fun(Gun.chain, Gun))\n }\n return addAll(Gun)\n}"]} -------------------------------------------------------------------------------- /edge/local.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.local = local; 7 | exports.addLocal = addLocal; 8 | function local(node, data, cb, opt) { 9 | opt = opt || {}; 10 | opt.peers = {}; 11 | return node.put(data, cb, opt); 12 | } 13 | 14 | function addLocal(_ref) { 15 | var chain = _ref.chain; 16 | 17 | chain.local = function (data, cb, opt) { 18 | return local(this, data, cb, opt); 19 | }; 20 | 21 | return chain; 22 | } 23 | //# sourceMappingURL=local.js.map 24 | -------------------------------------------------------------------------------- /edge/local.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["local.js"],"names":["local","addLocal","node","data","cb","opt","peers","put","chain"],"mappings":";;;;;QAAgBA,K,GAAAA,K;QAMAC,Q,GAAAA,Q;AANT,SAASD,KAAT,CAAeE,IAAf,EAAqBC,IAArB,EAA2BC,EAA3B,EAA+BC,GAA/B,EAAoC;AACzCA,QAAMA,OAAO,EAAb;AACAA,MAAIC,KAAJ,GAAY,EAAZ;AACA,SAAOJ,KAAKK,GAAL,CAASJ,IAAT,EAAeC,EAAf,EAAmBC,GAAnB,CAAP;AACD;;AAEM,SAASJ,QAAT,OAEJ;AAAA,MADDO,KACC,QADDA,KACC;;AACDA,QAAMR,KAAN,GAAc,UAAUG,IAAV,EAAgBC,EAAhB,EAAoBC,GAApB,EAAyB;AACrC,WAAOL,MAAM,IAAN,EAAYG,IAAZ,EAAkBC,EAAlB,EAAsBC,GAAtB,CAAP;AACD,GAFD;;AAIA,SAAOG,KAAP;AACD","file":"local.js","sourcesContent":["export function local(node, data, cb, opt) {\n opt = opt || {};\n opt.peers = {};\n return node.put(data, cb, opt)\n}\n\nexport function addLocal({\n chain\n}) {\n chain.local = function (data, cb, opt) {\n return local(this, data, cb, opt)\n }\n\n return chain\n}"]} -------------------------------------------------------------------------------- /edge/map-reduce.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | 7 | var _keys = require('babel-runtime/core-js/object/keys'); 8 | 9 | var _keys2 = _interopRequireDefault(_keys); 10 | 11 | var _assign = require('babel-runtime/core-js/object/assign'); 12 | 13 | var _assign2 = _interopRequireDefault(_assign); 14 | 15 | exports.addMapReduce = addMapReduce; 16 | exports.mapReduce = mapReduce; 17 | 18 | var _gun = require('gun/gun'); 19 | 20 | var _gun2 = _interopRequireDefault(_gun); 21 | 22 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 23 | 24 | function addMapReduce(_ref) { 25 | var chain = _ref.chain; 26 | 27 | chain.mapReduce = function (opts, cb, putCb, opt) { 28 | mapReduce(this, opts, cb, putCb, opt); 29 | }; 30 | return chain; 31 | } 32 | 33 | function mapReduce(bucket) { 34 | var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 35 | var cb = arguments[2]; 36 | var putCb = arguments[3]; 37 | var opt = arguments[4]; 38 | 39 | bucket.fields(function (allFields) { 40 | options = (0, _assign2.default)(options, { 41 | allFields: allFields 42 | }); 43 | doMapReduce(bucket, options, cb, putCb, opt); 44 | }); 45 | } 46 | 47 | function defaultLogger(fun, logging) { 48 | return function () { 49 | var _console; 50 | 51 | for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { 52 | args[_key] = arguments[_key]; 53 | } 54 | 55 | if (logging) (_console = console).log.apply(_console, [fun].concat(args)); 56 | }; 57 | } 58 | 59 | function doMapReduce(bucket, _ref2, cb, putCb, opt) { 60 | var newField = _ref2.newField, 61 | newValue = _ref2.newValue, 62 | value = _ref2.value, 63 | transform = _ref2.transform, 64 | filter = _ref2.filter, 65 | filters = _ref2.filters, 66 | _ref2$fields = _ref2.fields, 67 | fields = _ref2$fields === undefined ? [] : _ref2$fields, 68 | _ref2$ignoreFields = _ref2.ignoreFields, 69 | ignoreFields = _ref2$ignoreFields === undefined ? [] : _ref2$ignoreFields, 70 | allFields = _ref2.allFields, 71 | _ref2$iterator = _ref2.iterator, 72 | iterator = _ref2$iterator === undefined ? 'val' : _ref2$iterator, 73 | validField = _ref2.validField, 74 | processWhile = _ref2.processWhile, 75 | updateWhen = _ref2.updateWhen, 76 | updateBucket = _ref2.updateBucket, 77 | filterBucket = _ref2.filterBucket, 78 | saveChanges = _ref2.saveChanges, 79 | done = _ref2.done, 80 | _ref2$logging = _ref2.logging, 81 | logging = _ref2$logging === undefined ? false : _ref2$logging, 82 | logger = _ref2.logger, 83 | context = _ref2.context; 84 | 85 | 86 | var ctx = { 87 | oldProps: {}, 88 | newProps: {}, 89 | filteredFields: {}, 90 | visited: {}, 91 | updated: false, 92 | processedFields: 0, 93 | allFields: allFields, 94 | fields: fields, 95 | ignoreFields: ignoreFields, 96 | iterator: iterator, 97 | context: context, 98 | putCb: putCb, 99 | opt: opt 100 | }; 101 | 102 | transform = transform || function (field, val) { 103 | return {}; 104 | }; 105 | 106 | logger = logger || defaultLogger; 107 | 108 | var log = logger(iterator, logging); 109 | 110 | log('ctx', ctx); 111 | 112 | function defaultProcessWhile(_ref3) { 113 | var field = _ref3.field, 114 | val = _ref3.val, 115 | ctx = _ref3.ctx; 116 | 117 | var reVisit = ctx.visited[field]; 118 | var decision = !reVisit; 119 | log('processWhile', reVisit, decision); 120 | return decision; 121 | } 122 | 123 | function defaultValidField(field, ctx) { 124 | var fields = ctx.fields, 125 | ignoreFields = ctx.ignoreFields; 126 | 127 | var valid = fields.length === 0 || fields.length > 0 && fields.indexOf(field) >= 0; 128 | var invalid = ignoreFields.length > 0 && ignoreFields.indexOf(field) >= 0; 129 | return valid && !invalid; 130 | } 131 | 132 | function defaultUpdateWhen(_ref4) { 133 | var field = _ref4.field, 134 | val = _ref4.val, 135 | ctx = _ref4.ctx; 136 | 137 | var processedAll = ctx.processedFields >= ctx.allFields.length; 138 | var visitedAll = ctx.allFields.every(function (f) { 139 | return ctx.visited[f]; 140 | }); 141 | var decision = visitedAll && processedAll; 142 | log('updateWhen', visitedAll, processedAll, decision); 143 | return decision; 144 | } 145 | 146 | function defaultSaveChanges(bucket, changesObj, ctx) { 147 | bucket.put(changesObj, ctx.putCb, ctx.opt); 148 | } 149 | 150 | function defaultFilterBucket(bucket, ctx) { 151 | var deleteKeys = (0, _keys2.default)(ctx.filteredFields); 152 | if (deleteKeys.length > 0) { 153 | log('FILTER', deleteKeys); 154 | var deleteObj = deleteKeys.reduce(function (obj, key) { 155 | obj[key] = null; 156 | return obj; 157 | }, {}); 158 | log('deleteObj', deleteObj); 159 | ctx.saveChanges(bucket, deleteObj, ctx); 160 | } 161 | } 162 | 163 | function defaultUpdateBucket(bucket, ctx) { 164 | log('UPDATE', props); 165 | var props = (0, _assign2.default)(ctx.oldProps, ctx.newProps); 166 | ctx.saveChanges(bucket, props, ctx); 167 | } 168 | 169 | function defaultDone(bucket, cb, ctx) { 170 | log('DONE'); 171 | if (cb) { 172 | cb(bucket, ctx); 173 | } else { 174 | throw Error(ctx.iterator + ': missing callback (in done)'); 175 | } 176 | } 177 | 178 | validField = validField || defaultValidField; 179 | processWhile = processWhile || defaultProcessWhile; 180 | updateWhen = updateWhen || defaultUpdateWhen; 181 | updateBucket = updateBucket || defaultUpdateBucket; 182 | filterBucket = filterBucket || defaultFilterBucket; 183 | saveChanges = saveChanges || defaultSaveChanges; 184 | done = done || defaultDone; 185 | 186 | ctx.saveChanges = saveChanges; 187 | 188 | function ensureFun(fun) { 189 | if (fun && typeof fun !== 'function') { 190 | return function (v) { 191 | return fun; 192 | }; 193 | } else { 194 | return fun; 195 | } 196 | } 197 | 198 | var newFieldFun = ensureFun(newField); 199 | var newValueFun = ensureFun(newValue); 200 | var oldValueFun = ensureFun(value); 201 | 202 | log(allFields); 203 | 204 | // processWhile = processWhile.bind(this) 205 | // updateWhen = updateWhen.bind(this) 206 | 207 | bucket.map()[iterator](function (val, field) { 208 | log('iterate', { 209 | field: field, 210 | val: val 211 | }); 212 | if (!validField(field, ctx)) return; 213 | 214 | var newKey = newFieldFun ? newFieldFun(field, val, ctx) : field; 215 | var newValue = newValueFun ? newValueFun(val, field, ctx) : val; 216 | var newObj = transform(field, val, ctx); 217 | 218 | var oldValue = oldValueFun ? oldValueFun(val, field, ctx) : val; 219 | var doFilter = false; 220 | 221 | if (filters) { 222 | log('process filters', filters.length); 223 | doFilter = filters.reduce(function (filtered, filter) { 224 | return !filtered ? filter(field, val, ctx) : filtered; 225 | }, false); 226 | } 227 | 228 | if (filter && filter(field, val)) { 229 | doFilter = true; 230 | } 231 | 232 | log({ 233 | newKey: newKey, 234 | newValue: newValue, 235 | oldValue: oldValue, 236 | doFilter: doFilter 237 | }); 238 | 239 | var doReduce = processWhile({ 240 | field: field, 241 | val: val, 242 | ctx: ctx 243 | }); 244 | log('doReduce', doReduce); 245 | 246 | if (doReduce) { 247 | log('reduce', { 248 | field: field, 249 | val: val, 250 | processedFields: ctx.processedFields 251 | }); 252 | if (doFilter) { 253 | ctx.filteredFields[field] = true; 254 | } else { 255 | ctx.newProps = (0, _assign2.default)(ctx.newProps, newObj); 256 | ctx.newProps[newKey] = newValue; 257 | 258 | ctx.oldProps[field] = oldValue; 259 | } 260 | ctx.visited[field] = true; 261 | ctx.visited[newKey] = true; 262 | ctx.processedFields++; 263 | } 264 | var doUpdate = updateWhen({ 265 | field: field, 266 | val: val, 267 | ctx: ctx 268 | }); 269 | log('doUpdate', doUpdate, ctx.processedFields); 270 | if (doUpdate) { 271 | if (!ctx.updated) { 272 | log('UPDATE BUCKET'); 273 | ctx.updated = true; 274 | updateBucket(bucket, ctx); 275 | filterBucket(bucket, ctx); 276 | done(bucket, cb, ctx); 277 | } else { 278 | log('ignore update'); 279 | } 280 | } 281 | }); 282 | } 283 | //# sourceMappingURL=map-reduce.js.map 284 | -------------------------------------------------------------------------------- /edge/map-reduce.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["map-reduce.js"],"names":["addMapReduce","mapReduce","chain","opts","cb","putCb","opt","bucket","options","fields","allFields","doMapReduce","defaultLogger","fun","logging","args","log","newField","newValue","value","transform","filter","filters","ignoreFields","iterator","validField","processWhile","updateWhen","updateBucket","filterBucket","saveChanges","done","logger","context","ctx","oldProps","newProps","filteredFields","visited","updated","processedFields","field","val","defaultProcessWhile","reVisit","decision","defaultValidField","valid","length","indexOf","invalid","defaultUpdateWhen","processedAll","visitedAll","every","f","defaultSaveChanges","changesObj","put","defaultFilterBucket","deleteKeys","deleteObj","reduce","obj","key","defaultUpdateBucket","props","defaultDone","Error","ensureFun","v","newFieldFun","newValueFun","oldValueFun","map","newKey","newObj","oldValue","doFilter","filtered","doReduce","doUpdate"],"mappings":"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","file":"map-reduce.js","sourcesContent":["import Gun from 'gun/gun'\n\nexport function addMapReduce({\n chain\n}) {\n chain.mapReduce = function (opts, cb, putCb, opt) {\n mapReduce(this, opts, cb, putCb, opt)\n }\n return chain\n}\n\nexport function mapReduce(bucket, options = {}, cb, putCb, opt) {\n bucket.fields((allFields) => {\n options = Object.assign(options, {\n allFields\n })\n doMapReduce(bucket, options, cb, putCb, opt)\n })\n}\n\nfunction defaultLogger(fun, logging) {\n return function (...args) {\n if (logging)\n console.log(fun, ...args)\n }\n}\n\nfunction doMapReduce(bucket, {\n newField,\n newValue,\n value,\n transform,\n filter,\n filters,\n fields = [],\n ignoreFields = [],\n allFields,\n iterator = 'val',\n validField,\n processWhile,\n updateWhen,\n updateBucket,\n filterBucket,\n saveChanges,\n done,\n logging = false,\n logger,\n context\n}, cb, putCb, opt) {\n\n let ctx = {\n oldProps: {},\n newProps: {},\n filteredFields: {},\n visited: {},\n updated: false,\n processedFields: 0,\n allFields,\n fields,\n ignoreFields,\n iterator,\n context,\n putCb,\n opt\n }\n\n transform = transform || function (field, val) {\n return {}\n }\n\n logger = logger || defaultLogger\n\n const log = logger(iterator, logging)\n\n log('ctx', ctx)\n\n function defaultProcessWhile({\n field,\n val,\n ctx\n }) {\n let reVisit = ctx.visited[field]\n let decision = !reVisit\n log('processWhile', reVisit, decision)\n return decision\n }\n\n function defaultValidField(field, ctx) {\n let {\n fields,\n ignoreFields\n } = ctx\n let valid = fields.length === 0 || fields.length > 0 && fields.indexOf(field) >= 0\n let invalid = ignoreFields.length > 0 && ignoreFields.indexOf(field) >= 0\n return valid && !invalid\n }\n\n function defaultUpdateWhen({\n field,\n val,\n ctx\n }) {\n let processedAll = (ctx.processedFields >= ctx.allFields.length)\n let visitedAll = ctx.allFields.every(f => ctx.visited[f])\n let decision = visitedAll && processedAll\n log('updateWhen', visitedAll, processedAll, decision)\n return decision\n }\n\n function defaultSaveChanges(bucket, changesObj, ctx) {\n bucket.put(changesObj, ctx.putCb, ctx.opt)\n }\n\n function defaultFilterBucket(bucket, ctx) {\n let deleteKeys = Object.keys(ctx.filteredFields)\n if (deleteKeys.length > 0) {\n log('FILTER', deleteKeys)\n let deleteObj = deleteKeys.reduce((obj, key) => {\n obj[key] = null\n return obj\n }, {})\n log('deleteObj', deleteObj)\n ctx.saveChanges(bucket, deleteObj, ctx)\n }\n }\n\n function defaultUpdateBucket(bucket, ctx) {\n log('UPDATE', props)\n let props = Object.assign(ctx.oldProps, ctx.newProps)\n ctx.saveChanges(bucket, props, ctx)\n }\n\n function defaultDone(bucket, cb, ctx) {\n log('DONE')\n if (cb) {\n cb(bucket, ctx)\n } else {\n throw Error(`${ctx.iterator}: missing callback (in done)`)\n }\n }\n\n validField = validField || defaultValidField\n processWhile = processWhile || defaultProcessWhile\n updateWhen = updateWhen || defaultUpdateWhen\n updateBucket = updateBucket || defaultUpdateBucket\n filterBucket = filterBucket || defaultFilterBucket\n saveChanges = saveChanges || defaultSaveChanges\n done = done || defaultDone\n\n ctx.saveChanges = saveChanges\n\n function ensureFun(fun) {\n if (fun && typeof fun !== 'function') {\n return (v) => fun\n } else {\n return fun\n }\n }\n\n let newFieldFun = ensureFun(newField)\n let newValueFun = ensureFun(newValue)\n let oldValueFun = ensureFun(value)\n\n log(allFields)\n\n // processWhile = processWhile.bind(this)\n // updateWhen = updateWhen.bind(this)\n\n bucket.map()[iterator](function (val, field) {\n log('iterate', {\n field,\n val\n })\n if (!validField(field, ctx)) return\n\n let newKey = newFieldFun ? newFieldFun(field, val, ctx) : field\n let newValue = newValueFun ? newValueFun(val, field, ctx) : val\n let newObj = transform(field, val, ctx)\n\n let oldValue = oldValueFun ? oldValueFun(val, field, ctx) : val\n let doFilter = false\n\n if (filters) {\n log('process filters', filters.length)\n doFilter = filters.reduce((filtered, filter) => {\n return !filtered ? filter(field, val, ctx) : filtered\n }, false)\n }\n\n if (filter && filter(field, val)) {\n doFilter = true\n }\n\n log({\n newKey,\n newValue,\n oldValue,\n doFilter\n })\n\n let doReduce = processWhile({\n field,\n val,\n ctx\n })\n log('doReduce', doReduce)\n\n if (doReduce) {\n log('reduce', {\n field,\n val,\n processedFields: ctx.processedFields\n })\n if (doFilter) {\n ctx.filteredFields[field] = true\n } else {\n ctx.newProps = Object.assign(ctx.newProps, newObj)\n ctx.newProps[newKey] = newValue\n\n ctx.oldProps[field] = oldValue\n }\n ctx.visited[field] = true\n ctx.visited[newKey] = true\n ctx.processedFields++\n }\n let doUpdate = updateWhen({\n field,\n val,\n ctx\n })\n log('doUpdate', doUpdate, ctx.processedFields)\n if (doUpdate) {\n if (!ctx.updated) {\n log('UPDATE BUCKET')\n ctx.updated = true\n updateBucket(bucket, ctx)\n filterBucket(bucket, ctx)\n done(bucket, cb, ctx)\n } else {\n log('ignore update')\n }\n }\n })\n}"]} -------------------------------------------------------------------------------- /edge/no.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.no = no; 7 | exports.addNo = addNo; 8 | function no(node, cb) { 9 | var chain = node.chain(), 10 | flag; 11 | 12 | node.not(function (a, b, c) { 13 | flag = true; 14 | if (!cb) { 15 | return; 16 | } 17 | cb.call(this, a, b, c); 18 | }); 19 | 20 | node.get(function (at, ev) { 21 | if (flag) { 22 | return ev.off(); 23 | } 24 | chain._.on('in', at); 25 | }); 26 | return chain; 27 | } 28 | 29 | function addNo(_ref) { 30 | var chain = _ref.chain; 31 | 32 | chain.no = function (cb) { 33 | return no(this, cb); 34 | }; 35 | 36 | return chain; 37 | } 38 | //# sourceMappingURL=no.js.map 39 | -------------------------------------------------------------------------------- /edge/no.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["no.js"],"names":["no","addNo","node","cb","chain","flag","not","a","b","c","call","get","at","ev","off","_","on"],"mappings":";;;;;QAAgBA,E,GAAAA,E;QAqBAC,K,GAAAA,K;AArBT,SAASD,EAAT,CAAYE,IAAZ,EAAkBC,EAAlB,EAAsB;AAC3B,MAAIC,QAAQF,KAAKE,KAAL,EAAZ;AAAA,MACEC,IADF;;AAGAH,OAAKI,GAAL,CAAS,UAAUC,CAAV,EAAaC,CAAb,EAAgBC,CAAhB,EAAmB;AAC1BJ,WAAO,IAAP;AACA,QAAI,CAACF,EAAL,EAAS;AACP;AACD;AACDA,OAAGO,IAAH,CAAQ,IAAR,EAAcH,CAAd,EAAiBC,CAAjB,EAAoBC,CAApB;AACD,GAND;;AAQAP,OAAKS,GAAL,CAAS,UAAUC,EAAV,EAAcC,EAAd,EAAkB;AACzB,QAAIR,IAAJ,EAAU;AACR,aAAOQ,GAAGC,GAAH,EAAP;AACD;AACDV,UAAMW,CAAN,CAAQC,EAAR,CAAW,IAAX,EAAiBJ,EAAjB;AACD,GALD;AAMA,SAAOR,KAAP;AACD;;AAEM,SAASH,KAAT,OAEJ;AAAA,MADDG,KACC,QADDA,KACC;;AACDA,QAAMJ,EAAN,GAAW,UAAUG,EAAV,EAAc;AACvB,WAAOH,GAAG,IAAH,EAASG,EAAT,CAAP;AACD,GAFD;;AAIA,SAAOC,KAAP;AACD","file":"no.js","sourcesContent":["export function no(node, cb) {\n var chain = node.chain(),\n flag;\n\n node.not(function (a, b, c) {\n flag = true;\n if (!cb) {\n return\n }\n cb.call(this, a, b, c)\n });\n\n node.get(function (at, ev) {\n if (flag) {\n return ev.off()\n }\n chain._.on('in', at);\n });\n return chain;\n}\n\nexport function addNo({\n chain\n}) {\n chain.no = function (cb) {\n return no(this, cb)\n }\n\n return chain\n}"]} -------------------------------------------------------------------------------- /edge/print.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.print = print; 7 | exports.addPrint = addPrint; 8 | 9 | var _value = require('./value'); 10 | 11 | function print(node, label, opt, log) { 12 | node.value(function (val) { 13 | label ? log(label, val) : log(val); 14 | }, opt); 15 | } 16 | 17 | function addPrint(_ref) { 18 | var chain = _ref.chain, 19 | Gun = _ref.Gun; 20 | 21 | (0, _value.addValue)(chain, Gun); 22 | var log = Gun.log || console.log; 23 | 24 | chain.print = function (label, opt) { 25 | print(this, label, opt, log); 26 | }; 27 | 28 | return chain; 29 | } 30 | //# sourceMappingURL=print.js.map 31 | -------------------------------------------------------------------------------- /edge/print.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["print.js"],"names":["print","addPrint","node","label","opt","log","value","val","chain","Gun","console"],"mappings":";;;;;QAIgBA,K,GAAAA,K;QAMAC,Q,GAAAA,Q;;AAVhB;;AAIO,SAASD,KAAT,CAAeE,IAAf,EAAqBC,KAArB,EAA4BC,GAA5B,EAAiCC,GAAjC,EAAsC;AAC3CH,OAAKI,KAAL,CAAW,eAAO;AAChBH,YAAQE,IAAIF,KAAJ,EAAWI,GAAX,CAAR,GAA0BF,IAAIE,GAAJ,CAA1B;AACD,GAFD,EAEGH,GAFH;AAGD;;AAEM,SAASH,QAAT,OAGJ;AAAA,MAFDO,KAEC,QAFDA,KAEC;AAAA,MADDC,GACC,QADDA,GACC;;AACD,uBAASD,KAAT,EAAgBC,GAAhB;AACA,MAAMJ,MAAMI,IAAIJ,GAAJ,IAAWK,QAAQL,GAA/B;;AAEAG,QAAMR,KAAN,GAAc,UAAUG,KAAV,EAAiBC,GAAjB,EAAsB;AAClCJ,UAAM,IAAN,EAAYG,KAAZ,EAAmBC,GAAnB,EAAwBC,GAAxB;AACD,GAFD;;AAIA,SAAOG,KAAP;AACD","file":"print.js","sourcesContent":["import {\n addValue\n} from './value'\n\nexport function print(node, label, opt, log) {\n node.value(val => {\n label ? log(label, val) : log(val)\n }, opt)\n}\n\nexport function addPrint({\n chain,\n Gun\n}) {\n addValue(chain, Gun)\n const log = Gun.log || console.log\n\n chain.print = function (label, opt) {\n print(this, label, opt, log)\n }\n\n return chain\n}"]} -------------------------------------------------------------------------------- /edge/put.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.putAt = putAt; 7 | exports.addPut = addPut; 8 | function putAt(node, at, obj, cb, opt) { 9 | var pathNode = node.path(at); 10 | if (pathNode) { 11 | node._.paths = node._.paths || []; 12 | pathNode.put(obj, cb, opt); 13 | node._.paths.push(at); 14 | } else { 15 | throw new Error("No such path " + at); 16 | } 17 | } 18 | 19 | function addPut(_ref) { 20 | var chain = _ref.chain; 21 | 22 | chain.putAt = function (at, obj, cb, opt) { 23 | return putAt(this, at, obj, cb, opt); 24 | }; 25 | 26 | chain.paths = function () { 27 | return this._.paths || []; 28 | }; 29 | 30 | return chain; 31 | } 32 | //# sourceMappingURL=put.js.map 33 | -------------------------------------------------------------------------------- /edge/put.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["put.js"],"names":["putAt","addPut","node","at","obj","cb","opt","pathNode","path","_","paths","put","push","Error","chain"],"mappings":";;;;;QAAgBA,K,GAAAA,K;QAWAC,M,GAAAA,M;AAXT,SAASD,KAAT,CAAeE,IAAf,EAAqBC,EAArB,EAAyBC,GAAzB,EAA8BC,EAA9B,EAAkCC,GAAlC,EAAuC;AAC5C,MAAIC,WAAWL,KAAKM,IAAL,CAAUL,EAAV,CAAf;AACA,MAAII,QAAJ,EAAc;AACZL,SAAKO,CAAL,CAAOC,KAAP,GAAeR,KAAKO,CAAL,CAAOC,KAAP,IAAgB,EAA/B;AACAH,aAASI,GAAT,CAAaP,GAAb,EAAkBC,EAAlB,EAAsBC,GAAtB;AACAJ,SAAKO,CAAL,CAAOC,KAAP,CAAaE,IAAb,CAAkBT,EAAlB;AACD,GAJD,MAIO;AACL,UAAM,IAAIU,KAAJ,mBAA0BV,EAA1B,CAAN;AACD;AACF;;AAEM,SAASF,MAAT,OAEJ;AAAA,MADDa,KACC,QADDA,KACC;;AACDA,QAAMd,KAAN,GAAc,UAAUG,EAAV,EAAcC,GAAd,EAAmBC,EAAnB,EAAuBC,GAAvB,EAA4B;AACxC,WAAON,MAAM,IAAN,EAAYG,EAAZ,EAAgBC,GAAhB,EAAqBC,EAArB,EAAyBC,GAAzB,CAAP;AACD,GAFD;;AAIAQ,QAAMJ,KAAN,GAAc,YAAY;AACxB,WAAO,KAAKD,CAAL,CAAOC,KAAP,IAAgB,EAAvB;AACD,GAFD;;AAIA,SAAOI,KAAP;AACD","file":"put.js","sourcesContent":["export function putAt(node, at, obj, cb, opt) {\n let pathNode = node.path(at)\n if (pathNode) {\n node._.paths = node._.paths || []\n pathNode.put(obj, cb, opt)\n node._.paths.push(at)\n } else {\n throw new Error(`No such path ${at}`)\n }\n}\n\nexport function addPut({\n chain\n}) {\n chain.putAt = function (at, obj, cb, opt) {\n return putAt(this, at, obj, cb, opt)\n }\n\n chain.paths = function () {\n return this._.paths || []\n }\n\n return chain\n}"]} -------------------------------------------------------------------------------- /edge/recurse.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.recurse = recurse; 7 | exports.addRecurse = addRecurse; 8 | function recurse(node, cb, filter) { 9 | if (!(filter instanceof Object)) { 10 | filter = {}; 11 | } 12 | node.val(cb); 13 | node.map().val(function (data) { 14 | if (!(data instanceof Object)) { 15 | return; 16 | } 17 | var soul = node.soul(data); 18 | if (filter[soul]) { 19 | return; 20 | } 21 | filter[soul] = true; 22 | this.recurse(cb, filter); 23 | }); 24 | return node; 25 | }; 26 | 27 | function addRecurse(_ref) { 28 | var chain = _ref.chain; 29 | 30 | chain.recurse = function (cb, filter) { 31 | return recurse(this, cb, filter); 32 | }; 33 | 34 | return chain; 35 | } 36 | //# sourceMappingURL=recurse.js.map 37 | -------------------------------------------------------------------------------- /edge/recurse.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["recurse.js"],"names":["recurse","addRecurse","node","cb","filter","Object","val","map","data","soul","chain"],"mappings":";;;;;QAAgBA,O,GAAAA,O;QAmBAC,U,GAAAA,U;AAnBT,SAASD,OAAT,CAAiBE,IAAjB,EAAuBC,EAAvB,EAA2BC,MAA3B,EAAmC;AACxC,MAAI,EAAEA,kBAAkBC,MAApB,CAAJ,EAAiC;AAC/BD,aAAS,EAAT;AACD;AACDF,OAAKI,GAAL,CAASH,EAAT;AACAD,OAAKK,GAAL,GAAWD,GAAX,CAAe,UAAUE,IAAV,EAAgB;AAC7B,QAAI,EAAEA,gBAAgBH,MAAlB,CAAJ,EAA+B;AAC7B;AACD;AACD,QAAII,OAAOP,KAAKO,IAAL,CAAUD,IAAV,CAAX;AACA,QAAIJ,OAAOK,IAAP,CAAJ,EAAkB;AAChB;AACD;AACDL,WAAOK,IAAP,IAAe,IAAf;AACA,SAAKT,OAAL,CAAaG,EAAb,EAAiBC,MAAjB;AACD,GAVD;AAWA,SAAOF,IAAP;AACD;;AAEM,SAASD,UAAT,OAEJ;AAAA,MADDS,KACC,QADDA,KACC;;AACDA,QAAMV,OAAN,GAAgB,UAAUG,EAAV,EAAcC,MAAd,EAAsB;AACpC,WAAOJ,QAAQ,IAAR,EAAcG,EAAd,EAAkBC,MAAlB,CAAP;AACD,GAFD;;AAIA,SAAOM,KAAP;AACD","file":"recurse.js","sourcesContent":["export function recurse(node, cb, filter) {\n if (!(filter instanceof Object)) {\n filter = {};\n }\n node.val(cb);\n node.map().val(function (data) {\n if (!(data instanceof Object)) {\n return;\n }\n var soul = node.soul(data);\n if (filter[soul]) {\n return;\n }\n filter[soul] = true;\n this.recurse(cb, filter);\n });\n return node;\n};\n\nexport function addRecurse({\n chain\n}) {\n chain.recurse = function (cb, filter) {\n return recurse(this, cb, filter)\n }\n\n return chain\n}"]} -------------------------------------------------------------------------------- /edge/set.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.setAt = setAt; 7 | exports.addSet = addSet; 8 | function setAt(node, at, cb, opt) { 9 | var pathNode = node.path(at); 10 | if (pathNode) { 11 | pathNode.set(cb, opt); 12 | } else { 13 | throw new Error("No such path " + at); 14 | } 15 | } 16 | 17 | function addSet(_ref) { 18 | var chain = _ref.chain; 19 | 20 | chain.setAt = function (cb, opt) { 21 | return setAt(this, cb, opt); 22 | }; 23 | return chain; 24 | } 25 | //# sourceMappingURL=set.js.map 26 | -------------------------------------------------------------------------------- /edge/set.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["set.js"],"names":["setAt","addSet","node","at","cb","opt","pathNode","path","set","Error","chain"],"mappings":";;;;;QAAgBA,K,GAAAA,K;QASAC,M,GAAAA,M;AATT,SAASD,KAAT,CAAeE,IAAf,EAAqBC,EAArB,EAAyBC,EAAzB,EAA6BC,GAA7B,EAAkC;AACvC,MAAIC,WAAWJ,KAAKK,IAAL,CAAUJ,EAAV,CAAf;AACA,MAAIG,QAAJ,EAAc;AACZA,aAASE,GAAT,CAAaJ,EAAb,EAAiBC,GAAjB;AACD,GAFD,MAEO;AACL,UAAM,IAAII,KAAJ,mBAA0BN,EAA1B,CAAN;AACD;AACF;;AAEM,SAASF,MAAT,OAEJ;AAAA,MADDS,KACC,QADDA,KACC;;AACDA,QAAMV,KAAN,GAAc,UAAUI,EAAV,EAAcC,GAAd,EAAmB;AAC/B,WAAOL,MAAM,IAAN,EAAYI,EAAZ,EAAgBC,GAAhB,CAAP;AACD,GAFD;AAGA,SAAOK,KAAP;AACD","file":"set.js","sourcesContent":["export function setAt(node, at, cb, opt) {\n let pathNode = node.path(at)\n if (pathNode) {\n pathNode.set(cb, opt)\n } else {\n throw new Error(`No such path ${at}`)\n }\n}\n\nexport function addSet({\n chain\n}) {\n chain.setAt = function (cb, opt) {\n return setAt(this, cb, opt)\n }\n return chain\n}"]} -------------------------------------------------------------------------------- /edge/soul.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.addSoul = addSoul; 7 | 8 | var _gun = require('gun/gun'); 9 | 10 | var _gun2 = _interopRequireDefault(_gun); 11 | 12 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 13 | 14 | function addSoul(_ref) { 15 | var chain = _ref.chain; 16 | 17 | chain.soul = function () { 18 | return _gun2.default.node.soul(this); 19 | }; 20 | return chain; 21 | } 22 | //# sourceMappingURL=soul.js.map 23 | -------------------------------------------------------------------------------- /edge/soul.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["soul.js"],"names":["addSoul","chain","soul","node"],"mappings":";;;;;QAEgBA,O,GAAAA,O;;AAFhB;;;;;;AAEO,SAASA,OAAT,OAEJ;AAAA,MADDC,KACC,QADDA,KACC;;AACDA,QAAMC,IAAN,GAAa,YAAY;AACvB,WAAO,cAAIC,IAAJ,CAASD,IAAT,CAAc,IAAd,CAAP;AACD,GAFD;AAGA,SAAOD,KAAP;AACD","file":"soul.js","sourcesContent":["import Gun from 'gun/gun'\n\nexport function addSoul({\n chain\n}) {\n chain.soul = function () {\n return Gun.node.soul(this)\n }\n return chain\n}"]} -------------------------------------------------------------------------------- /edge/timed.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | 7 | var _assign = require('babel-runtime/core-js/object/assign'); 8 | 9 | var _assign2 = _interopRequireDefault(_assign); 10 | 11 | exports.timed = timed; 12 | exports.addTimed = addTimed; 13 | 14 | var _gun = require('gun/gun'); 15 | 16 | var _gun2 = _interopRequireDefault(_gun); 17 | 18 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 19 | 20 | function timed(node) { 21 | var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 22 | 23 | var id = void 0, 24 | name = void 0; 25 | node.val(function (data) { 26 | id = _gun2.default.node.soul(data); 27 | name = opts.name || id || 'unknown'; 28 | }); 29 | 30 | console.log('TIMED', opts); 31 | 32 | var log = function log() { 33 | if (opts.log || opts.logging) { 34 | var _console; 35 | 36 | for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { 37 | args[_key] = arguments[_key]; 38 | } 39 | 40 | (_console = console).log.apply(_console, ['timed:', name].concat(args)); 41 | } 42 | }; 43 | 44 | if (typeof opts === 'function') { 45 | opts = { 46 | cb: opts 47 | }; 48 | } 49 | 50 | recurseTimed(opts); 51 | 52 | function recurseTimed(opts) { 53 | var cb = opts.cb, 54 | nextObj = opts.nextObj, 55 | nextOpts = opts.nextOpts, 56 | stopCondition = opts.stopCondition, 57 | operation = opts.operation, 58 | logging = opts.logging, 59 | _opts$interval = opts.interval, 60 | interval = _opts$interval === undefined ? 100 : _opts$interval, 61 | _opts$num = opts.num, 62 | num = _opts$num === undefined ? 0 : _opts$num, 63 | _opts$maxNum = opts.maxNum, 64 | maxNum = _opts$maxNum === undefined ? 10 : _opts$maxNum; 65 | 66 | 67 | var defaultStop = function defaultStop(_ref, opts) { 68 | var num = _ref.num; 69 | 70 | return num > maxNum; 71 | }; 72 | var defaultNextObj = function defaultNextObj(num, opts) { 73 | return { 74 | num: num + 1 75 | }; 76 | }; 77 | 78 | var defaultNextOpts = function defaultNextOpts(opts, num) { 79 | return (0, _assign2.default)(opts, { 80 | num: num 81 | }); 82 | }; 83 | 84 | var defaultOp = function defaultOp(node, obj, opts) { 85 | log('put', obj); 86 | node.put(obj); 87 | }; 88 | 89 | nextObj = nextObj || defaultNextObj; 90 | nextOpts = nextOpts || defaultNextOpts; 91 | stopCondition = stopCondition || defaultStop; 92 | operation = operation || defaultOp; 93 | 94 | setTimeout(function () { 95 | var obj = (0, _assign2.default)(nextObj(num, opts)); 96 | operation(node, obj, opts); 97 | if (stopCondition(obj, opts)) { 98 | if (cb) { 99 | cb(num); 100 | } else { 101 | console.error('timed: Missing cb to stop', opts); 102 | process.exit(1); 103 | } 104 | } 105 | 106 | recurseTimed(nextOpts(opts, obj.num)); 107 | }, interval); 108 | } 109 | } 110 | 111 | function addTimed(_ref2) { 112 | var chain = _ref2.chain; 113 | 114 | chain.timed = function (opts) { 115 | return timed(this, opts); 116 | }; 117 | return chain; 118 | } 119 | //# sourceMappingURL=timed.js.map 120 | -------------------------------------------------------------------------------- /edge/timed.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["timed.js"],"names":["timed","addTimed","node","opts","id","name","val","soul","data","console","log","logging","args","cb","recurseTimed","nextObj","nextOpts","stopCondition","operation","interval","num","maxNum","defaultStop","defaultNextObj","defaultNextOpts","defaultOp","obj","put","setTimeout","error","process","exit","chain"],"mappings":"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","file":"timed.js","sourcesContent":["import Gun from 'gun/gun';\n\nexport function timed(node, opts = {}) {\n let id, name\n node.val(data => {\n id = Gun.node.soul(data)\n name = opts.name || id || 'unknown'\n })\n\n console.log('TIMED', opts)\n\n const log = function (...args) {\n if (opts.log || opts.logging) {\n console.log('timed:', name, ...args)\n }\n }\n\n if (typeof opts === 'function') {\n opts = {\n cb: opts\n }\n }\n\n recurseTimed(opts)\n\n function recurseTimed(opts) {\n\n let {\n cb,\n nextObj,\n nextOpts,\n stopCondition,\n operation,\n logging,\n interval = 100,\n num = 0,\n maxNum = 10\n } = opts\n\n let defaultStop = ({\n num\n }, opts) => {\n return num > maxNum\n }\n let defaultNextObj = (num, opts) => {\n return {\n num: num + 1\n }\n }\n\n let defaultNextOpts = (opts, num) => {\n return Object.assign(opts, {\n num\n })\n }\n\n let defaultOp = (node, obj, opts) => {\n log('put', obj)\n node.put(obj)\n }\n\n nextObj = nextObj || defaultNextObj\n nextOpts = nextOpts || defaultNextOpts\n stopCondition = stopCondition || defaultStop\n operation = operation || defaultOp\n\n setTimeout(() => {\n let obj = Object.assign(nextObj(num, opts))\n operation(node, obj, opts)\n if (stopCondition(obj, opts)) {\n if (cb) {\n cb(num)\n } else {\n console.error('timed: Missing cb to stop', opts)\n process.exit(1)\n }\n }\n\n recurseTimed(nextOpts(opts, obj.num))\n }, interval)\n }\n}\n\nexport function addTimed({\n chain\n}) {\n chain.timed = function (opts) {\n return timed(this, opts)\n }\n return chain\n}"]} -------------------------------------------------------------------------------- /edge/value.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | Object.defineProperty(exports, "__esModule", { 4 | value: true 5 | }); 6 | exports.value = value; 7 | exports.valueAt = valueAt; 8 | exports.valAt = valAt; 9 | exports.addValue = addValue; 10 | 11 | var _gun = require('gun/gun'); 12 | 13 | var _gun2 = _interopRequireDefault(_gun); 14 | 15 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } 16 | 17 | function value(node, cb, opt) { 18 | return node.val(function (val, field) { 19 | var v = _gun2.default.obj.copy(val); 20 | delete v._; 21 | cb.call(this, v, field); 22 | }, opt); 23 | } 24 | 25 | function valueAt(node, at, cb, opt) { 26 | var pathNode = node.path(at); 27 | if (pathNode) { 28 | value(pathNode, cb, opt); 29 | } else { 30 | throw new Error('No such path ' + at); 31 | } 32 | } 33 | 34 | function valAt(node, at, cb, opt) { 35 | var pathNode = node.path(at); 36 | if (pathNode) { 37 | pathNode.val(cb, opt); 38 | } else { 39 | throw new Error('No such path ' + at); 40 | } 41 | } 42 | 43 | function addValue(_ref) { 44 | var chain = _ref.chain; 45 | 46 | chain.value = function (cb, opt) { 47 | return value(this, cb, opt); 48 | }; 49 | 50 | chain.valueAt = function (at, cb, opt) { 51 | return valueAt(this, at, cb, opt); 52 | }; 53 | 54 | chain.valAt = function (at, cb, opt) { 55 | return valAt(this, at, cb, opt); 56 | }; 57 | 58 | return chain; 59 | } 60 | //# sourceMappingURL=value.js.map 61 | -------------------------------------------------------------------------------- /edge/value.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["value.js"],"names":["value","valueAt","valAt","addValue","node","cb","opt","val","field","v","obj","copy","_","call","at","pathNode","path","Error","chain"],"mappings":";;;;;QAEgBA,K,GAAAA,K;QAQAC,O,GAAAA,O;QASAC,K,GAAAA,K;QASAC,Q,GAAAA,Q;;AA5BhB;;;;;;AAEO,SAASH,KAAT,CAAeI,IAAf,EAAqBC,EAArB,EAAyBC,GAAzB,EAA8B;AACnC,SAAOF,KAAKG,GAAL,CAAS,UAAUA,GAAV,EAAeC,KAAf,EAAsB;AACpC,QAAIC,IAAI,cAAIC,GAAJ,CAAQC,IAAR,CAAaJ,GAAb,CAAR;AACA,WAAOE,EAAEG,CAAT;AACAP,OAAGQ,IAAH,CAAQ,IAAR,EAAcJ,CAAd,EAAiBD,KAAjB;AACD,GAJM,EAIJF,GAJI,CAAP;AAKD;;AAEM,SAASL,OAAT,CAAiBG,IAAjB,EAAuBU,EAAvB,EAA2BT,EAA3B,EAA+BC,GAA/B,EAAoC;AACzC,MAAIS,WAAWX,KAAKY,IAAL,CAAUF,EAAV,CAAf;AACA,MAAIC,QAAJ,EAAc;AACZf,UAAMe,QAAN,EAAgBV,EAAhB,EAAoBC,GAApB;AACD,GAFD,MAEO;AACL,UAAM,IAAIW,KAAJ,mBAA0BH,EAA1B,CAAN;AACD;AACF;;AAEM,SAASZ,KAAT,CAAeE,IAAf,EAAqBU,EAArB,EAAyBT,EAAzB,EAA6BC,GAA7B,EAAkC;AACvC,MAAIS,WAAWX,KAAKY,IAAL,CAAUF,EAAV,CAAf;AACA,MAAIC,QAAJ,EAAc;AACZA,aAASR,GAAT,CAAaF,EAAb,EAAiBC,GAAjB;AACD,GAFD,MAEO;AACL,UAAM,IAAIW,KAAJ,mBAA0BH,EAA1B,CAAN;AACD;AACF;;AAEM,SAASX,QAAT,OAEJ;AAAA,MADDe,KACC,QADDA,KACC;;AACDA,QAAMlB,KAAN,GAAc,UAAUK,EAAV,EAAcC,GAAd,EAAmB;AAC/B,WAAON,MAAM,IAAN,EAAYK,EAAZ,EAAgBC,GAAhB,CAAP;AACD,GAFD;;AAIAY,QAAMjB,OAAN,GAAgB,UAAUa,EAAV,EAAcT,EAAd,EAAkBC,GAAlB,EAAuB;AACrC,WAAOL,QAAQ,IAAR,EAAca,EAAd,EAAkBT,EAAlB,EAAsBC,GAAtB,CAAP;AACD,GAFD;;AAIAY,QAAMhB,KAAN,GAAc,UAAUY,EAAV,EAAcT,EAAd,EAAkBC,GAAlB,EAAuB;AACnC,WAAOJ,MAAM,IAAN,EAAYY,EAAZ,EAAgBT,EAAhB,EAAoBC,GAApB,CAAP;AACD,GAFD;;AAIA,SAAOY,KAAP;AACD","file":"value.js","sourcesContent":["import Gun from 'gun/gun'\n\nexport function value(node, cb, opt) {\n return node.val(function (val, field) {\n let v = Gun.obj.copy(val)\n delete v._\n cb.call(this, v, field)\n }, opt);\n}\n\nexport function valueAt(node, at, cb, opt) {\n let pathNode = node.path(at)\n if (pathNode) {\n value(pathNode, cb, opt)\n } else {\n throw new Error(`No such path ${at}`)\n }\n}\n\nexport function valAt(node, at, cb, opt) {\n let pathNode = node.path(at)\n if (pathNode) {\n pathNode.val(cb, opt)\n } else {\n throw new Error(`No such path ${at}`)\n }\n}\n\nexport function addValue({\n chain\n}) {\n chain.value = function (cb, opt) {\n return value(this, cb, opt)\n }\n\n chain.valueAt = function (at, cb, opt) {\n return valueAt(this, at, cb, opt)\n }\n\n chain.valAt = function (at, cb, opt) {\n return valAt(this, at, cb, opt)\n }\n\n return chain\n}"]} -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | var gulp = require("gulp"); 2 | var babel = require("gulp-babel"); 3 | var livereload = require('gulp-livereload'); 4 | var sourcemaps = require('gulp-sourcemaps'); 5 | 6 | gulp.task('build', function () { 7 | return gulp.src('src/**/*.js') 8 | .pipe(sourcemaps.init()) 9 | .pipe(babel()) 10 | .pipe(sourcemaps.write('.')) 11 | .pipe(gulp.dest('edge')) 12 | }); 13 | 14 | gulp.task('build:play', function () { 15 | return gulp.src('play/es6/*.js') 16 | .pipe(sourcemaps.init()) 17 | .pipe(babel()) 18 | .pipe(sourcemaps.write('.')) 19 | .pipe(gulp.dest('play/es5')) 20 | }); 21 | 22 | gulp.task('watch:play', function () { 23 | livereload.listen(); 24 | gulp.watch('play/es6/*.js', ['build:play']); 25 | }); 26 | 27 | gulp.task('start', function () { 28 | return gulp.src('src/**/*.js') 29 | .pipe(sourcemaps.init()) 30 | .pipe(babel()) 31 | .pipe(sourcemaps.write('.')) 32 | .pipe(gulp.dest('edge')) 33 | .pipe(livereload()); 34 | }); 35 | 36 | gulp.task('watch', function () { 37 | livereload.listen(); 38 | gulp.watch('src/*.js', ['start']); 39 | }); 40 | 41 | gulp.task('watch:b', function () { 42 | livereload.listen(); 43 | gulp.watch('src/*.js', ['build']); 44 | }); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "chain-gun", 3 | "version": "0.1.2", 4 | "description": "Gun.js chain API extensions", 5 | "main": "edge/index.js", 6 | "scripts": { 7 | "test": "ava", 8 | "watch": "gulp watch", 9 | "watch:b": "gulp watch:b", 10 | "start": "gulp start", 11 | "build": "gulp build", 12 | "watch:play": "gulp watch:play", 13 | "build:play": "gulp build:play" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "https://github.com/kristianmandrup/chaingun.git" 18 | }, 19 | "keywords": [ 20 | "gun", 21 | "chain", 22 | "dsl", 23 | "api", 24 | "extension" 25 | ], 26 | "author": "Kristian Mandrup ", 27 | "license": "MIT", 28 | "dependencies": { 29 | "gun": "^0.6.6" 30 | }, 31 | "devDependencies": { 32 | "ava": "^0.18.2", 33 | "babel-cli": "^6.24.0", 34 | "babel-plugin-transform-runtime": "^6.23.0", 35 | "babel-preset-es2015": "^6.22.0", 36 | "babel-preset-latest": "^6.24.0", 37 | "gulp": "^3.9.1", 38 | "gulp-babel": "^6.1.2", 39 | "gulp-livereload": "^3.8.1", 40 | "gulp-sourcemaps": "^2.4.0" 41 | }, 42 | "ava": { 43 | "source": [ 44 | "src/**/*.{js}", 45 | "!edge/**/*" 46 | ], 47 | "modules": false, 48 | "require": [ 49 | "babel-register" 50 | ], 51 | "babel": "inherit" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/all.js: -------------------------------------------------------------------------------- 1 | import {addCount} from './count' 2 | import {addDate} from './date' 3 | import {addEach} from './each' 4 | import {addFields} from './fields' 5 | import {addPrint} from './print' 6 | import {addTimed} from './timed' 7 | import {addLocal} from './local' 8 | import {addMapReduce} from './map-reduce' 9 | import {addNo} from './no' 10 | import {addRecurse} from './recurse' 11 | import {addPut} from './put' 12 | import {addSet} from './set' 13 | import {addSoul} from './soul' 14 | import {addValue} from './value' 15 | 16 | 17 | const chains = { 18 | addCount, 19 | addDate, 20 | addEach, 21 | addFields, 22 | addPrint, 23 | addTimed, 24 | addLocal, 25 | addMapReduce, 26 | addNo, 27 | addPut, 28 | addRecurse, 29 | addSet, 30 | addSoul, 31 | addValue 32 | } 33 | 34 | function capitalize(str) { 35 | return str.charAt(0).toUpperCase() + str.slice(1); 36 | } 37 | 38 | export function add(Gun, ...names) { 39 | names.forEach(name => { 40 | let nameCap = capitalize(name) 41 | let fun = 'add' + nameCap 42 | chains[fun]({ 43 | chain: Gun.chain, 44 | Gun 45 | }) 46 | }) 47 | return Gun 48 | } 49 | 50 | const allNames = [ 51 | 'count', 52 | 'date', 53 | 'each', 54 | 'fields', 55 | 'print', 56 | 'timed', 57 | 'local', 58 | 'mapReduce', 59 | 'no', 60 | 'put', 61 | 'recurse', 62 | 'set', 63 | 'soul', 64 | 'value' 65 | ] 66 | 67 | export { 68 | addDate, 69 | addEach, 70 | addPrint, 71 | addLocal, 72 | addPut, 73 | addRecurse, 74 | addSet, 75 | addValue 76 | } 77 | 78 | export default function (Gun) { 79 | return add(Gun, ...allNames) 80 | } -------------------------------------------------------------------------------- /src/count.js: -------------------------------------------------------------------------------- 1 | export function count(node, num) { 2 | if (typeof num === 'number') { 3 | node.path(Gun.text.random()).put(num); 4 | } 5 | if (typeof num === 'function') { 6 | var sum = 0; 7 | node.map().val(function (val) { 8 | num(sum += val); 9 | }); 10 | } 11 | return node; 12 | } 13 | 14 | export function addCount({ 15 | chain, 16 | Gun 17 | }) { 18 | chain.count = function (num) { 19 | return count(this, num) 20 | } 21 | return chain 22 | } -------------------------------------------------------------------------------- /src/date.js: -------------------------------------------------------------------------------- 1 | import Gun from 'gun/gun' 2 | 3 | export function date(node, data) { 4 | if (Gun.fns.is(data)) { 5 | return node.val(function (val) { 6 | data.call(this, new Date(val)); 7 | }) 8 | } 9 | return node.put(data.getTime()); 10 | } 11 | 12 | export function addDate({ 13 | chain 14 | }) { 15 | chain.date = function (data) { 16 | return date(node, data) 17 | } 18 | 19 | return chain 20 | } -------------------------------------------------------------------------------- /src/each.js: -------------------------------------------------------------------------------- 1 | export function each(node, { 2 | op = 'val' 3 | }, ...args) { 4 | var each = node.map(); 5 | return node[op].apply(each, ...args) 6 | } 7 | 8 | export function addEach({ 9 | chain 10 | }) { 11 | chain.each = function ({ 12 | op 13 | }, ...args) { 14 | return each(this, { 15 | op 16 | }, ...args) 17 | } 18 | return chain 19 | } -------------------------------------------------------------------------------- /src/fields.js: -------------------------------------------------------------------------------- 1 | export function localFields(node) { 2 | var mp = node.map().val(v => v) 3 | var map = Object.values(mp._.map) 4 | return Object.values(map).map(v => v.at.field) 5 | } 6 | 7 | export function fields(node, cb, opt) { 8 | node.value(v => cb(Object.keys(v)), opt) 9 | } 10 | 11 | export function addFields({ 12 | chain 13 | }) { 14 | chain.fields = function (cb, opt) { 15 | return fields(this, cb, opt) 16 | } 17 | return chain 18 | } -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import { 2 | add, 3 | default as addAll 4 | } from './all' 5 | 6 | export { 7 | add, 8 | addAll 9 | } 10 | 11 | export default function (Gun) { 12 | Gun.chainAll = function (...funs) { 13 | funs.forEach(fun => fun(Gun.chain, Gun)) 14 | } 15 | return addAll(Gun) 16 | } -------------------------------------------------------------------------------- /src/local.js: -------------------------------------------------------------------------------- 1 | export function local(node, data, cb, opt) { 2 | opt = opt || {}; 3 | opt.peers = {}; 4 | return node.put(data, cb, opt) 5 | } 6 | 7 | export function addLocal({ 8 | chain 9 | }) { 10 | chain.local = function (data, cb, opt) { 11 | return local(this, data, cb, opt) 12 | } 13 | 14 | return chain 15 | } -------------------------------------------------------------------------------- /src/map-reduce.js: -------------------------------------------------------------------------------- 1 | import Gun from 'gun/gun' 2 | 3 | export function addMapReduce({ 4 | chain 5 | }) { 6 | chain.mapReduce = function (opts, cb, putCb, opt) { 7 | mapReduce(this, opts, cb, putCb, opt) 8 | } 9 | return chain 10 | } 11 | 12 | export function mapReduce(bucket, options = {}, cb, putCb, opt) { 13 | bucket.fields((allFields) => { 14 | options = Object.assign(options, { 15 | allFields 16 | }) 17 | doMapReduce(bucket, options, cb, putCb, opt) 18 | }) 19 | } 20 | 21 | function defaultLogger(fun, logging) { 22 | return function (...args) { 23 | if (logging) 24 | console.log(fun, ...args) 25 | } 26 | } 27 | 28 | function doMapReduce(bucket, { 29 | newField, 30 | newValue, 31 | value, 32 | transform, 33 | filter, 34 | filters, 35 | fields = [], 36 | ignoreFields = [], 37 | allFields, 38 | iterator = 'val', 39 | validField, 40 | processWhile, 41 | updateWhen, 42 | updateBucket, 43 | filterBucket, 44 | saveChanges, 45 | done, 46 | logging = false, 47 | logger, 48 | context 49 | }, cb, putCb, opt) { 50 | 51 | let ctx = { 52 | oldProps: {}, 53 | newProps: {}, 54 | filteredFields: {}, 55 | visited: {}, 56 | updated: false, 57 | processedFields: 0, 58 | allFields, 59 | fields, 60 | ignoreFields, 61 | iterator, 62 | context, 63 | putCb, 64 | opt 65 | } 66 | 67 | transform = transform || function (field, val) { 68 | return {} 69 | } 70 | 71 | logger = logger || defaultLogger 72 | 73 | const log = logger(iterator, logging) 74 | 75 | log('ctx', ctx) 76 | 77 | function defaultProcessWhile({ 78 | field, 79 | val, 80 | ctx 81 | }) { 82 | let reVisit = ctx.visited[field] 83 | let decision = !reVisit 84 | log('processWhile', reVisit, decision) 85 | return decision 86 | } 87 | 88 | function defaultValidField(field, ctx) { 89 | let { 90 | fields, 91 | ignoreFields 92 | } = ctx 93 | let valid = fields.length === 0 || fields.length > 0 && fields.indexOf(field) >= 0 94 | let invalid = ignoreFields.length > 0 && ignoreFields.indexOf(field) >= 0 95 | return valid && !invalid 96 | } 97 | 98 | function defaultUpdateWhen({ 99 | field, 100 | val, 101 | ctx 102 | }) { 103 | let processedAll = (ctx.processedFields >= ctx.allFields.length) 104 | let visitedAll = ctx.allFields.every(f => ctx.visited[f]) 105 | let decision = visitedAll && processedAll 106 | log('updateWhen', visitedAll, processedAll, decision) 107 | return decision 108 | } 109 | 110 | function defaultSaveChanges(bucket, changesObj, ctx) { 111 | bucket.put(changesObj, ctx.putCb, ctx.opt) 112 | } 113 | 114 | function defaultFilterBucket(bucket, ctx) { 115 | let deleteKeys = Object.keys(ctx.filteredFields) 116 | if (deleteKeys.length > 0) { 117 | log('FILTER', deleteKeys) 118 | let deleteObj = deleteKeys.reduce((obj, key) => { 119 | obj[key] = null 120 | return obj 121 | }, {}) 122 | log('deleteObj', deleteObj) 123 | ctx.saveChanges(bucket, deleteObj, ctx) 124 | } 125 | } 126 | 127 | function defaultUpdateBucket(bucket, ctx) { 128 | log('UPDATE', props) 129 | let props = Object.assign(ctx.oldProps, ctx.newProps) 130 | ctx.saveChanges(bucket, props, ctx) 131 | } 132 | 133 | function defaultDone(bucket, cb, ctx) { 134 | log('DONE') 135 | if (cb) { 136 | cb(bucket, ctx) 137 | } else { 138 | throw Error(`${ctx.iterator}: missing callback (in done)`) 139 | } 140 | } 141 | 142 | validField = validField || defaultValidField 143 | processWhile = processWhile || defaultProcessWhile 144 | updateWhen = updateWhen || defaultUpdateWhen 145 | updateBucket = updateBucket || defaultUpdateBucket 146 | filterBucket = filterBucket || defaultFilterBucket 147 | saveChanges = saveChanges || defaultSaveChanges 148 | done = done || defaultDone 149 | 150 | ctx.saveChanges = saveChanges 151 | 152 | function ensureFun(fun) { 153 | if (fun && typeof fun !== 'function') { 154 | return (v) => fun 155 | } else { 156 | return fun 157 | } 158 | } 159 | 160 | let newFieldFun = ensureFun(newField) 161 | let newValueFun = ensureFun(newValue) 162 | let oldValueFun = ensureFun(value) 163 | 164 | log(allFields) 165 | 166 | // processWhile = processWhile.bind(this) 167 | // updateWhen = updateWhen.bind(this) 168 | 169 | bucket.map()[iterator](function (val, field) { 170 | log('iterate', { 171 | field, 172 | val 173 | }) 174 | if (!validField(field, ctx)) return 175 | 176 | let newKey = newFieldFun ? newFieldFun(field, val, ctx) : field 177 | let newValue = newValueFun ? newValueFun(val, field, ctx) : val 178 | let newObj = transform(field, val, ctx) 179 | 180 | let oldValue = oldValueFun ? oldValueFun(val, field, ctx) : val 181 | let doFilter = false 182 | 183 | if (filters) { 184 | log('process filters', filters.length) 185 | doFilter = filters.reduce((filtered, filter) => { 186 | return !filtered ? filter(field, val, ctx) : filtered 187 | }, false) 188 | } 189 | 190 | if (filter && filter(field, val)) { 191 | doFilter = true 192 | } 193 | 194 | log({ 195 | newKey, 196 | newValue, 197 | oldValue, 198 | doFilter 199 | }) 200 | 201 | let doReduce = processWhile({ 202 | field, 203 | val, 204 | ctx 205 | }) 206 | log('doReduce', doReduce) 207 | 208 | if (doReduce) { 209 | log('reduce', { 210 | field, 211 | val, 212 | processedFields: ctx.processedFields 213 | }) 214 | if (doFilter) { 215 | ctx.filteredFields[field] = true 216 | } else { 217 | ctx.newProps = Object.assign(ctx.newProps, newObj) 218 | ctx.newProps[newKey] = newValue 219 | 220 | ctx.oldProps[field] = oldValue 221 | } 222 | ctx.visited[field] = true 223 | ctx.visited[newKey] = true 224 | ctx.processedFields++ 225 | } 226 | let doUpdate = updateWhen({ 227 | field, 228 | val, 229 | ctx 230 | }) 231 | log('doUpdate', doUpdate, ctx.processedFields) 232 | if (doUpdate) { 233 | if (!ctx.updated) { 234 | log('UPDATE BUCKET') 235 | ctx.updated = true 236 | updateBucket(bucket, ctx) 237 | filterBucket(bucket, ctx) 238 | done(bucket, cb, ctx) 239 | } else { 240 | log('ignore update') 241 | } 242 | } 243 | }) 244 | } -------------------------------------------------------------------------------- /src/no.js: -------------------------------------------------------------------------------- 1 | export function no(node, cb) { 2 | var chain = node.chain(), 3 | flag; 4 | 5 | node.not(function (a, b, c) { 6 | flag = true; 7 | if (!cb) { 8 | return 9 | } 10 | cb.call(this, a, b, c) 11 | }); 12 | 13 | node.get(function (at, ev) { 14 | if (flag) { 15 | return ev.off() 16 | } 17 | chain._.on('in', at); 18 | }); 19 | return chain; 20 | } 21 | 22 | export function addNo({ 23 | chain 24 | }) { 25 | chain.no = function (cb) { 26 | return no(this, cb) 27 | } 28 | 29 | return chain 30 | } -------------------------------------------------------------------------------- /src/print.js: -------------------------------------------------------------------------------- 1 | import { 2 | addValue 3 | } from './value' 4 | 5 | export function print(node, label, opt, log) { 6 | node.value(val => { 7 | label ? log(label, val) : log(val) 8 | }, opt) 9 | } 10 | 11 | export function addPrint({ 12 | chain, 13 | Gun 14 | }) { 15 | addValue(chain, Gun) 16 | const log = Gun.log || console.log 17 | 18 | chain.print = function (label, opt) { 19 | print(this, label, opt, log) 20 | } 21 | 22 | return chain 23 | } -------------------------------------------------------------------------------- /src/put.js: -------------------------------------------------------------------------------- 1 | export function putAt(node, at, obj, cb, opt) { 2 | let pathNode = node.path(at) 3 | if (pathNode) { 4 | node._.paths = node._.paths || [] 5 | pathNode.put(obj, cb, opt) 6 | node._.paths.push(at) 7 | } else { 8 | throw new Error(`No such path ${at}`) 9 | } 10 | } 11 | 12 | export function addPut({ 13 | chain 14 | }) { 15 | chain.putAt = function (at, obj, cb, opt) { 16 | return putAt(this, at, obj, cb, opt) 17 | } 18 | 19 | chain.paths = function () { 20 | return this._.paths || [] 21 | } 22 | 23 | return chain 24 | } -------------------------------------------------------------------------------- /src/recurse.js: -------------------------------------------------------------------------------- 1 | export function recurse(node, cb, filter) { 2 | if (!(filter instanceof Object)) { 3 | filter = {}; 4 | } 5 | node.val(cb); 6 | node.map().val(function (data) { 7 | if (!(data instanceof Object)) { 8 | return; 9 | } 10 | var soul = node.soul(data); 11 | if (filter[soul]) { 12 | return; 13 | } 14 | filter[soul] = true; 15 | this.recurse(cb, filter); 16 | }); 17 | return node; 18 | }; 19 | 20 | export function addRecurse({ 21 | chain 22 | }) { 23 | chain.recurse = function (cb, filter) { 24 | return recurse(this, cb, filter) 25 | } 26 | 27 | return chain 28 | } -------------------------------------------------------------------------------- /src/set.js: -------------------------------------------------------------------------------- 1 | export function setAt(node, at, cb, opt) { 2 | let pathNode = node.path(at) 3 | if (pathNode) { 4 | pathNode.set(cb, opt) 5 | } else { 6 | throw new Error(`No such path ${at}`) 7 | } 8 | } 9 | 10 | export function addSet({ 11 | chain 12 | }) { 13 | chain.setAt = function (cb, opt) { 14 | return setAt(this, cb, opt) 15 | } 16 | return chain 17 | } -------------------------------------------------------------------------------- /src/soul.js: -------------------------------------------------------------------------------- 1 | import Gun from 'gun/gun' 2 | 3 | export function addSoul({ 4 | chain 5 | }) { 6 | chain.soul = function () { 7 | return Gun.node.soul(this) 8 | } 9 | return chain 10 | } -------------------------------------------------------------------------------- /src/timed.js: -------------------------------------------------------------------------------- 1 | import Gun from 'gun/gun'; 2 | 3 | export function timed(node, opts = {}) { 4 | let id, name 5 | node.val(data => { 6 | id = Gun.node.soul(data) 7 | name = opts.name || id || 'unknown' 8 | }) 9 | 10 | console.log('TIMED', opts) 11 | 12 | const log = function (...args) { 13 | if (opts.log || opts.logging) { 14 | console.log('timed:', name, ...args) 15 | } 16 | } 17 | 18 | if (typeof opts === 'function') { 19 | opts = { 20 | cb: opts 21 | } 22 | } 23 | 24 | recurseTimed(opts) 25 | 26 | function recurseTimed(opts) { 27 | 28 | let { 29 | cb, 30 | nextObj, 31 | nextOpts, 32 | stopCondition, 33 | operation, 34 | logging, 35 | interval = 100, 36 | num = 0, 37 | maxNum = 10 38 | } = opts 39 | 40 | let defaultStop = ({ 41 | num 42 | }, opts) => { 43 | return num > maxNum 44 | } 45 | let defaultNextObj = (num, opts) => { 46 | return { 47 | num: num + 1 48 | } 49 | } 50 | 51 | let defaultNextOpts = (opts, num) => { 52 | return Object.assign(opts, { 53 | num 54 | }) 55 | } 56 | 57 | let defaultOp = (node, obj, opts) => { 58 | log('put', obj) 59 | node.put(obj) 60 | } 61 | 62 | nextObj = nextObj || defaultNextObj 63 | nextOpts = nextOpts || defaultNextOpts 64 | stopCondition = stopCondition || defaultStop 65 | operation = operation || defaultOp 66 | 67 | setTimeout(() => { 68 | let obj = Object.assign(nextObj(num, opts)) 69 | operation(node, obj, opts) 70 | if (stopCondition(obj, opts)) { 71 | if (cb) { 72 | cb(num) 73 | } else { 74 | console.error('timed: Missing cb to stop', opts) 75 | process.exit(1) 76 | } 77 | } 78 | 79 | recurseTimed(nextOpts(opts, obj.num)) 80 | }, interval) 81 | } 82 | } 83 | 84 | export function addTimed({ 85 | chain 86 | }) { 87 | chain.timed = function (opts) { 88 | return timed(this, opts) 89 | } 90 | return chain 91 | } -------------------------------------------------------------------------------- /src/value.js: -------------------------------------------------------------------------------- 1 | import Gun from 'gun/gun' 2 | 3 | export function value(node, cb, opt) { 4 | return node.val(function (val, field) { 5 | let v = Gun.obj.copy(val) 6 | delete v._ 7 | cb.call(this, v, field) 8 | }, opt); 9 | } 10 | 11 | export function valueAt(node, at, cb, opt) { 12 | let pathNode = node.path(at) 13 | if (pathNode) { 14 | value(pathNode, cb, opt) 15 | } else { 16 | throw new Error(`No such path ${at}`) 17 | } 18 | } 19 | 20 | export function valAt(node, at, cb, opt) { 21 | let pathNode = node.path(at) 22 | if (pathNode) { 23 | pathNode.val(cb, opt) 24 | } else { 25 | throw new Error(`No such path ${at}`) 26 | } 27 | } 28 | 29 | export function addValue({ 30 | chain 31 | }) { 32 | chain.value = function (cb, opt) { 33 | return value(this, cb, opt) 34 | } 35 | 36 | chain.valueAt = function (at, cb, opt) { 37 | return valueAt(this, at, cb, opt) 38 | } 39 | 40 | chain.valAt = function (at, cb, opt) { 41 | return valAt(this, at, cb, opt) 42 | } 43 | 44 | return chain 45 | } -------------------------------------------------------------------------------- /test/count.test.js: -------------------------------------------------------------------------------- 1 | import Gun from 'gun/gun' 2 | import test from 'ava' 3 | 4 | import edge from '../src' 5 | edge(Gun) 6 | 7 | const gun = Gun(); 8 | 9 | import { 10 | date 11 | } from '../src/date' 12 | 13 | test('date', async t => { 14 | // todo 15 | }) -------------------------------------------------------------------------------- /test/date.test.js: -------------------------------------------------------------------------------- 1 | import Gun from 'gun/gun' 2 | import test from 'ava' 3 | 4 | import edge from '../src' 5 | edge(Gun) 6 | 7 | const gun = Gun(); 8 | 9 | import { 10 | date 11 | } from '../src/date' 12 | 13 | test('date', async t => { 14 | // todo 15 | }) -------------------------------------------------------------------------------- /test/each.test.js: -------------------------------------------------------------------------------- 1 | import Gun from 'gun/gun' 2 | import test from 'ava' 3 | 4 | import edge from '../src' 5 | edge(Gun) 6 | 7 | const gun = Gun(); 8 | 9 | import { 10 | each 11 | } from '../src/each' 12 | 13 | test('each', async t => { 14 | // todo 15 | }) -------------------------------------------------------------------------------- /test/fields.test.js: -------------------------------------------------------------------------------- 1 | import Gun from 'gun/gun' 2 | import test from 'ava' 3 | 4 | import edge from '../src' 5 | edge(Gun) 6 | 7 | const gun = Gun(); 8 | 9 | import { 10 | fields 11 | } from '../src/fields' 12 | 13 | test('fields', async t => { 14 | // todo 15 | }) -------------------------------------------------------------------------------- /test/local.test.js: -------------------------------------------------------------------------------- 1 | import Gun from 'gun/gun' 2 | import test from 'ava' 3 | 4 | import edge from '../src' 5 | edge(Gun) 6 | 7 | const gun = Gun(); 8 | 9 | import { 10 | local 11 | } from '../src/local' 12 | 13 | test('local', async t => { 14 | // todo 15 | }) -------------------------------------------------------------------------------- /test/put-at.test.js: -------------------------------------------------------------------------------- 1 | import Gun from 'gun/gun' 2 | import test from 'ava' 3 | 4 | import chain from '../src' 5 | chain(Gun) 6 | 7 | const gun = Gun(); 8 | 9 | test('putAt simple', async t => { 10 | let cols = gun.get('colors') 11 | cols.put({ 12 | violet: true, 13 | red: true, 14 | green: false 15 | }) 16 | 17 | let _path = 'violet' 18 | 19 | cols.putAt(_path, { 20 | light: true 21 | }) 22 | 23 | cols.valueAt(_path, (color) => { 24 | t.is(color, true) 25 | t.is(cols.paths()[0], _path) 26 | }) 27 | }) 28 | 29 | test('putAt nodes', async t => { 30 | let mark = gun.get('mark') 31 | let amber = gun.get('amber') 32 | 33 | amber.put({ 34 | name: 'amber', 35 | gender: 'female' 36 | }) 37 | 38 | mark.put({ 39 | name: 'mark', 40 | gender: 'male', 41 | }) 42 | 43 | mark.path('wife').put(amber) 44 | mark.path('self').put(mark) 45 | 46 | let _path = 'spouse' 47 | 48 | mark.putAt(_path, amber) 49 | mark.valueAt(_path, (spouse) => { 50 | t.is(spouse.name, 'amber') 51 | }) 52 | }) -------------------------------------------------------------------------------- /test/set-at.test.js: -------------------------------------------------------------------------------- 1 | import Gun from 'gun/gun' 2 | import test from 'ava' 3 | import chain from '../src' 4 | chain(Gun) 5 | const gun = Gun(); 6 | 7 | import { 8 | setAt 9 | } from '../src/set' 10 | 11 | test('setAt', async t => { 12 | let cols = gun.get('colors') 13 | cols.put({ 14 | violet: true, 15 | red: true, 16 | green: false 17 | }) 18 | 19 | let _path = 'violet' 20 | 21 | cols.setAt(_path, { 22 | light: true 23 | }) 24 | 25 | // TODO 26 | // let color = await cols.$valueAt(_path) 27 | 28 | // t.is(color, true) 29 | // t.is(cols.paths()[0], _path) 30 | }) -------------------------------------------------------------------------------- /test/soul.test.js: -------------------------------------------------------------------------------- 1 | import Gun from 'gun/gun' 2 | import test from 'ava' 3 | import chain from '../src' 4 | chain(Gun) 5 | const gun = Gun(); 6 | 7 | import { 8 | soul 9 | } from '../src/soul' 10 | 11 | test('soul', async t => { 12 | // todo 13 | }) -------------------------------------------------------------------------------- /test/value.test.js: -------------------------------------------------------------------------------- 1 | import Gun from 'gun/gun' 2 | import test from 'ava' 3 | import chain from '../src' 4 | chain(Gun) 5 | const gun = Gun(); 6 | 7 | import { 8 | value 9 | } from '../src/value' 10 | 11 | test('value', async t => { 12 | // todo 13 | }) --------------------------------------------------------------------------------