commit dc9fbd827277b05ed3c06dd90ff8cf56564650e7
parent 223aa9d554437de40209f7b241b35a83c82b6b4f
Author: finwo <finwo@pm.me>
Date: Wed, 14 Nov 2018 13:10:34 +0100
Added multilevel backend
Diffstat:
4 files changed, 438 insertions(+), 6 deletions(-)
diff --git a/package-lock.json b/package-lock.json
@@ -1336,6 +1336,12 @@
"integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==",
"dev": true
},
+ "backoff": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/backoff/-/backoff-2.3.0.tgz",
+ "integrity": "sha1-7nx+OAk/kuRyhZ22NedlJFT8Ieo=",
+ "optional": true
+ },
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@@ -1414,6 +1420,18 @@
"integrity": "sha1-e0F0wvlESXU7EcJlHAg9qEGnsIQ=",
"optional": true
},
+ "base64-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.0.2.tgz",
+ "integrity": "sha1-R0IRyV5s8qVH20YeT2d4tR0I+mU=",
+ "optional": true
+ },
+ "base64id": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/base64id/-/base64id-0.1.0.tgz",
+ "integrity": "sha1-As4P3u4M709ACA4ec+g08LG/zj8=",
+ "optional": true
+ },
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
@@ -1444,6 +1462,16 @@
"resolved": "http://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz",
"integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE="
},
+ "bops": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/bops/-/bops-1.0.0.tgz",
+ "integrity": "sha1-YxqJKPEXhBfrb3Bs9prNteWk6q0=",
+ "optional": true,
+ "requires": {
+ "base64-js": "1.0.2",
+ "to-utf8": "0.0.1"
+ }
+ },
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
@@ -2026,6 +2054,17 @@
"integrity": "sha1-eEf9ocAPtyIkWv+DZDpIh2cO/Sw=",
"optional": true
},
+ "duplex": {
+ "version": "1.0.0",
+ "resolved": "http://registry.npmjs.org/duplex/-/duplex-1.0.0.tgz",
+ "integrity": "sha1-arxcFuwX5MV4V4cnEmcAWQ06Ldo=",
+ "optional": true
+ },
+ "duplexer": {
+ "version": "0.1.1",
+ "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
+ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E="
+ },
"each-series": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/each-series/-/each-series-1.0.0.tgz",
@@ -2048,6 +2087,14 @@
"integrity": "sha512-DqJoDarxq50dcHsOOlMLNoy+qQitlMNbYb6wwbE0oUw2veHdRkpNrhmngiUYKMErdJ8SJ48rpJsZTQgy5SoEAA==",
"dev": true
},
+ "emitter": {
+ "version": "http://github.com/component/emitter/archive/1.0.1.tar.gz",
+ "integrity": "sha512-k3Da+QreMb9waaGCHNAHox5QqxnZEYlQmvIVYwQibrI6OpIRyIIyFGgDV5dXRLr1AJ32JLqEh0VxQEq20dFskw==",
+ "optional": true,
+ "requires": {
+ "indexof": "0.0.1"
+ }
+ },
"end-of-stream": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
@@ -2056,6 +2103,113 @@
"once": "^1.4.0"
}
},
+ "engine.io": {
+ "version": "0.7.12",
+ "resolved": "http://registry.npmjs.org/engine.io/-/engine.io-0.7.12.tgz",
+ "integrity": "sha1-2l3Int45u83xOawUKFzliaTQaLY=",
+ "optional": true,
+ "requires": {
+ "base64id": "0.1.0",
+ "debug": "0.6.0",
+ "engine.io-parser": "0.3.0",
+ "ws": "0.4.31"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "0.6.1",
+ "resolved": "http://registry.npmjs.org/commander/-/commander-0.6.1.tgz",
+ "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=",
+ "optional": true
+ },
+ "debug": {
+ "version": "0.6.0",
+ "resolved": "http://registry.npmjs.org/debug/-/debug-0.6.0.tgz",
+ "integrity": "sha1-zp1dAl1SlLPwdIpJS+uvPJ/Yc08=",
+ "optional": true
+ },
+ "nan": {
+ "version": "0.3.2",
+ "resolved": "http://registry.npmjs.org/nan/-/nan-0.3.2.tgz",
+ "integrity": "sha1-DfGTXKsVNpB17xYK0olBB6oU3C0=",
+ "optional": true
+ },
+ "ws": {
+ "version": "0.4.31",
+ "resolved": "http://registry.npmjs.org/ws/-/ws-0.4.31.tgz",
+ "integrity": "sha1-WkhJ56nM0e1aga60hHyf7fMSKSc=",
+ "optional": true,
+ "requires": {
+ "commander": "~0.6.1",
+ "nan": "~0.3.0",
+ "options": ">=0.0.5",
+ "tinycolor": "0.x"
+ }
+ }
+ }
+ },
+ "engine.io-client": {
+ "version": "0.7.12",
+ "resolved": "http://registry.npmjs.org/engine.io-client/-/engine.io-client-0.7.12.tgz",
+ "integrity": "sha1-GuhJUxpCr7lRUJgTxdfFKDsTc2U=",
+ "optional": true,
+ "requires": {
+ "debug": "0.7.2",
+ "emitter": "http://github.com/component/emitter/archive/1.0.1.tar.gz",
+ "engine.io-parser": "0.3.0",
+ "global": "https://github.com/component/global/archive/v2.0.1.tar.gz",
+ "has-cors": "https://github.com/component/has-cors/archive/v1.0.2.tar.gz",
+ "indexof": "0.0.1",
+ "ws": "0.4.31",
+ "xmlhttprequest": "https://github.com/LearnBoost/node-XMLHttpRequest/archive/0f36d0b5ebc03d85f860d42a64ae9791e1daa433.tar.gz"
+ },
+ "dependencies": {
+ "commander": {
+ "version": "0.6.1",
+ "resolved": "http://registry.npmjs.org/commander/-/commander-0.6.1.tgz",
+ "integrity": "sha1-+mihT2qUXVTbvlDYzbMyDp47GgY=",
+ "optional": true
+ },
+ "debug": {
+ "version": "0.7.2",
+ "resolved": "http://registry.npmjs.org/debug/-/debug-0.7.2.tgz",
+ "integrity": "sha1-BWaSyGZwl38RXegpF5GLjouaEPA=",
+ "optional": true
+ },
+ "nan": {
+ "version": "0.3.2",
+ "resolved": "http://registry.npmjs.org/nan/-/nan-0.3.2.tgz",
+ "integrity": "sha1-DfGTXKsVNpB17xYK0olBB6oU3C0=",
+ "optional": true
+ },
+ "ws": {
+ "version": "0.4.31",
+ "resolved": "http://registry.npmjs.org/ws/-/ws-0.4.31.tgz",
+ "integrity": "sha1-WkhJ56nM0e1aga60hHyf7fMSKSc=",
+ "optional": true,
+ "requires": {
+ "commander": "~0.6.1",
+ "nan": "~0.3.0",
+ "options": ">=0.0.5",
+ "tinycolor": "0.x"
+ }
+ }
+ }
+ },
+ "engine.io-parser": {
+ "version": "0.3.0",
+ "resolved": "http://registry.npmjs.org/engine.io-parser/-/engine.io-parser-0.3.0.tgz",
+ "integrity": "sha1-Z/pA27xK4BtR3arafer3XsosUGE="
+ },
+ "engine.io-stream": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/engine.io-stream/-/engine.io-stream-0.4.3.tgz",
+ "integrity": "sha1-IcgmSJajejkeTM9Y+SrbjgIE+hs=",
+ "optional": true,
+ "requires": {
+ "engine.io": "0.7.12",
+ "engine.io-client": "0.7.12"
+ }
+ },
"errno": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
@@ -3070,6 +3224,10 @@
"is-glob": "^2.0.0"
}
},
+ "global": {
+ "version": "https://github.com/component/global/archive/v2.0.1.tar.gz",
+ "integrity": "sha512-O91OcV/NbdmQJPHaRu2ekSP7bqFRLWgqSwaJvqHPZHUwmHBagQYTOra29+LnzzG3lZkXH1ANzHzfCxtAPM9HMA=="
+ },
"globals": {
"version": "9.18.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
@@ -3141,6 +3299,14 @@
"ansi-regex": "^2.0.0"
}
},
+ "has-cors": {
+ "version": "https://github.com/component/has-cors/archive/v1.0.2.tar.gz",
+ "integrity": "sha512-mRFI0KYjdxHUuiVNncS42nzgFekJkW5svmMzFFFxAwwcbzbkrpzoSEL5F2s0hNt194rGw5ELKqGujwrC4m9jPw==",
+ "optional": true,
+ "requires": {
+ "global": "https://github.com/component/global/archive/v2.0.1.tar.gz"
+ }
+ },
"has-flag": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
@@ -3292,6 +3458,11 @@
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
"dev": true
},
+ "indexof": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
+ "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10="
+ },
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
@@ -4637,6 +4808,12 @@
"integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=",
"dev": true
},
+ "json-buffer": {
+ "version": "2.0.11",
+ "resolved": "http://registry.npmjs.org/json-buffer/-/json-buffer-2.0.11.tgz",
+ "integrity": "sha1-PkQf2jCYvo0eMXGtWRvGKjPi1V8=",
+ "optional": true
+ },
"json-schema": {
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
@@ -4786,6 +4963,23 @@
"xtend": "^4.0.0"
}
},
+ "level-manifest": {
+ "version": "1.2.0",
+ "resolved": "http://registry.npmjs.org/level-manifest/-/level-manifest-1.2.0.tgz",
+ "integrity": "sha1-BiANOnaL/WtRgbJ7+psO/LsG/lU=",
+ "optional": true,
+ "requires": {
+ "deep-extend": "~0.2.5"
+ },
+ "dependencies": {
+ "deep-extend": {
+ "version": "0.2.11",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.2.11.tgz",
+ "integrity": "sha1-eha6aXKRMjQFBhcElLyD9wdv4I8=",
+ "optional": true
+ }
+ }
+ },
"leveldown": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/leveldown/-/leveldown-4.0.1.tgz",
@@ -5169,6 +5363,104 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
+ "msgpack-js": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/msgpack-js/-/msgpack-js-0.3.0.tgz",
+ "integrity": "sha1-Aw7AjFlW+cp9F9QKVy1Tlv7BCSM=",
+ "optional": true,
+ "requires": {
+ "bops": "~0.0.6"
+ },
+ "dependencies": {
+ "base64-js": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.2.tgz",
+ "integrity": "sha1-Ak8Pcq+iW3X5wO5zzU9V7Bvtl4Q=",
+ "optional": true
+ },
+ "bops": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/bops/-/bops-0.0.7.tgz",
+ "integrity": "sha1-tKClqDmkBkVK8P4FqLkaenZqVOI=",
+ "optional": true,
+ "requires": {
+ "base64-js": "0.0.2",
+ "to-utf8": "0.0.1"
+ }
+ }
+ }
+ },
+ "msgpack-stream": {
+ "version": "0.0.13",
+ "resolved": "https://registry.npmjs.org/msgpack-stream/-/msgpack-stream-0.0.13.tgz",
+ "integrity": "sha1-UKZzrE6uyl43cBkk0JPUM1DB5Sw=",
+ "optional": true,
+ "requires": {
+ "bops": "1.0.0",
+ "msgpack-js": "0.3.0",
+ "through": "2.3.4"
+ },
+ "dependencies": {
+ "through": {
+ "version": "2.3.4",
+ "resolved": "http://registry.npmjs.org/through/-/through-2.3.4.tgz",
+ "integrity": "sha1-SV5A6Nio6uvHwnXqiMK4/BTFZFU=",
+ "optional": true
+ }
+ }
+ },
+ "multilevel": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/multilevel/-/multilevel-7.2.3.tgz",
+ "integrity": "sha512-jpn9Q9C+GqwrLbfEBD3ZLCZjvVzHrg9D05zk44DD3ifsUM85O2GCn6U+0uujsVAtXN5V8KMFbyZohHjXEsxYgQ==",
+ "optional": true,
+ "requires": {
+ "duplexer": "^0.1.1",
+ "level-manifest": "^1.2.0",
+ "mux-demux": "^3.7.9",
+ "rpc-stream": "^2.1.2",
+ "stream-combiner": "^0.2.2",
+ "tmp-stream": "^0.3.2"
+ }
+ },
+ "mux-demux": {
+ "version": "3.7.9",
+ "resolved": "http://registry.npmjs.org/mux-demux/-/mux-demux-3.7.9.tgz",
+ "integrity": "sha1-NTZ3GP02AcgLzi63YlMVdtekrO8=",
+ "optional": true,
+ "requires": {
+ "duplex": "~1.0.0",
+ "json-buffer": "~2.0.4",
+ "msgpack-stream": "~0.0.10",
+ "stream-combiner": "0.0.2",
+ "stream-serializer": "~1.1.1",
+ "through": "~2.3.1",
+ "xtend": "~1.0.3"
+ },
+ "dependencies": {
+ "duplexer": {
+ "version": "0.0.4",
+ "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.0.4.tgz",
+ "integrity": "sha1-r8t/H4uNdPggcmFx1dZKyeSo/yA=",
+ "optional": true
+ },
+ "stream-combiner": {
+ "version": "0.0.2",
+ "resolved": "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.2.tgz",
+ "integrity": "sha1-3+DnRnV0JWXnbGBWeI6lwjvZfbQ=",
+ "optional": true,
+ "requires": {
+ "duplexer": "~0.0.3"
+ }
+ },
+ "xtend": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-1.0.3.tgz",
+ "integrity": "sha1-P12Tc1PM7Y4IU5mlY/2yJUHClgo=",
+ "optional": true
+ }
+ }
+ },
"nan": {
"version": "2.10.0",
"resolved": "http://registry.npmjs.org/nan/-/nan-2.10.0.tgz",
@@ -5447,6 +5739,11 @@
}
}
},
+ "options": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/options/-/options-0.0.6.tgz",
+ "integrity": "sha1-7CLTEoBrtT5zF3Pnza788cZDEo8="
+ },
"os-homedir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
@@ -5870,6 +6167,25 @@
"util.promisify": "^1.0.0"
}
},
+ "reconnect-core": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/reconnect-core/-/reconnect-core-0.2.2.tgz",
+ "integrity": "sha1-KSS2KzQRccym0PZjHy28sjlYB2M=",
+ "optional": true,
+ "requires": {
+ "backoff": "~2.3.0"
+ }
+ },
+ "reconnect-engine": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/reconnect-engine/-/reconnect-engine-0.1.0.tgz",
+ "integrity": "sha1-Nb8qKJy4YulGOmbV/RvseNgy4Uc=",
+ "optional": true,
+ "requires": {
+ "engine.io-stream": "~0.4.0",
+ "reconnect-core": "~0.2.0"
+ }
+ },
"regenerate": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
@@ -6138,6 +6454,24 @@
}
}
},
+ "rpc-stream": {
+ "version": "2.1.2",
+ "resolved": "http://registry.npmjs.org/rpc-stream/-/rpc-stream-2.1.2.tgz",
+ "integrity": "sha1-wkpt7lKfOGKEuw1v0xK5scDYQps=",
+ "optional": true,
+ "requires": {
+ "stream-serializer": "~1.0.0",
+ "through": "~2.3.1"
+ },
+ "dependencies": {
+ "stream-serializer": {
+ "version": "1.0.0",
+ "resolved": "http://registry.npmjs.org/stream-serializer/-/stream-serializer-1.0.0.tgz",
+ "integrity": "sha1-qiEvNDkg+Mxq/8ZcJAunAOtsSbk=",
+ "optional": true
+ }
+ }
+ },
"rsvp": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz",
@@ -6840,6 +7174,22 @@
"integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=",
"dev": true
},
+ "stream-combiner": {
+ "version": "0.2.2",
+ "resolved": "http://registry.npmjs.org/stream-combiner/-/stream-combiner-0.2.2.tgz",
+ "integrity": "sha1-rsjLrBd7Vrb0+kec7YwZEs7lKFg=",
+ "optional": true,
+ "requires": {
+ "duplexer": "~0.1.1",
+ "through": "~2.3.4"
+ }
+ },
+ "stream-serializer": {
+ "version": "1.1.2",
+ "resolved": "http://registry.npmjs.org/stream-serializer/-/stream-serializer-1.1.2.tgz",
+ "integrity": "sha1-wfl9FdolH1lK4n1B7IraCahG408=",
+ "optional": true
+ },
"string-length": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
@@ -6986,8 +7336,7 @@
"through": {
"version": "2.3.8",
"resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",
- "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
- "optional": true
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
},
"through2": {
"version": "0.6.5",
@@ -7025,6 +7374,24 @@
}
}
},
+ "throughout": {
+ "version": "0.0.0",
+ "resolved": "https://registry.npmjs.org/throughout/-/throughout-0.0.0.tgz",
+ "integrity": "sha1-2pNVJyMaeUTapg061HoyQprxqME=",
+ "optional": true,
+ "requires": {
+ "duplexer": "~0.0.2",
+ "through": "~2.3.4"
+ },
+ "dependencies": {
+ "duplexer": {
+ "version": "0.0.4",
+ "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.0.4.tgz",
+ "integrity": "sha1-r8t/H4uNdPggcmFx1dZKyeSo/yA=",
+ "optional": true
+ }
+ }
+ },
"thunky": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.3.tgz",
@@ -7040,6 +7407,21 @@
"user-home": "^1.0.0"
}
},
+ "tinycolor": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/tinycolor/-/tinycolor-0.0.1.tgz",
+ "integrity": "sha1-MgtaUtg6u1l42Bo+iH1K77FaYWQ="
+ },
+ "tmp-stream": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/tmp-stream/-/tmp-stream-0.3.2.tgz",
+ "integrity": "sha1-3hFf11PQ3MwojyarQOtuvu5dGyA=",
+ "optional": true,
+ "requires": {
+ "through": "~2.3.4",
+ "throughout": "0.0.0"
+ }
+ },
"tmpl": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz",
@@ -7106,6 +7488,11 @@
}
}
},
+ "to-utf8": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/to-utf8/-/to-utf8-0.0.1.tgz",
+ "integrity": "sha1-0Xrqcv8vujm55DYBvns/9y4ImFI="
+ },
"tough-cookie": {
"version": "2.4.3",
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
@@ -7484,6 +7871,11 @@
"integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==",
"dev": true
},
+ "xmlhttprequest": {
+ "version": "https://github.com/LearnBoost/node-XMLHttpRequest/archive/0f36d0b5ebc03d85f860d42a64ae9791e1daa433.tar.gz",
+ "integrity": "sha512-TVSZwoeUQ7OKhb8jnQdSxGFz+lm4MGWmhG0deeYg85VQT74x5LcSrKeXHE0ZIzEycgqQ5mF8r8e1AykA7TpNAQ==",
+ "optional": true
+ },
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
diff --git a/package.json b/package.json
@@ -29,6 +29,8 @@
"leveldown": "^4.0.1",
"memdown": "^3.0.0",
"mongodown": "^1.2.0",
+ "multilevel": "^7.2.3",
+ "reconnect-engine": "^0.1.0",
"sqldown": "^2.1.0"
},
"keywords": [
diff --git a/src/adapter.js b/src/adapter.js
@@ -45,6 +45,13 @@ let adapters = [
name : ['pg', 'postgres', 'postgresql'],
backend : 'sqldown',
dependencies: ['levelup', 'sqldown', 'knex', 'pg', 'pg-query-stream']
+ }, {
+ name : ['wsrpc','wssrpc','ws-rpc','wss-rpc','rpc','rpcs'],
+ backend : './custom/wsrpc',
+ dependencies: ['levelup', 'shoe', 'multilevel'],
+ options : {
+ direct: true
+ }
}
];
@@ -75,6 +82,15 @@ function wrapper(descriptor) {
}
}
+ // Some return a levelup(-compatible) instance directly
+ let levelup = descriptor.options.direct ?
+ function( leveldown, location, options, callback ) {
+ return leveldown(location, options, callback);
+ } :
+ function( leveldown, location, options, callback ) {
+ return require('levelup')(leveldown(location), options, callback);
+ };
+
// Let's build the actual wrapper
switch (typeof descriptor.options.path) {
case 'string':
@@ -82,13 +98,13 @@ function wrapper(descriptor) {
case 'omit':
descriptor.wrapper = function (parsedLocation, options, callback) {
let backend = 'function' === typeof descriptor.backend ? descriptor.backend : require(descriptor.backend);
- return require('levelup')(backend(), options, callback);
+ return levelup(backend, undefined, options, callback);
};
break;
case 'absolute':
descriptor.wrapper = function (parsedLocation, options, callback) {
let backend = 'function' === typeof descriptor.backend ? descriptor.backend : require(descriptor.backend);
- return require('levelup')(backend(toAbsolutePath(parsedLocation)), options, callback);
+ return levelup(backend, toAbsolutePath(parsedLocation), options, callback);
};
break;
}
@@ -97,13 +113,13 @@ function wrapper(descriptor) {
descriptor.wrapper = function (parsedLocation, options, callback) {
let backend = 'function' === typeof descriptor.backend ? descriptor.backend : require(descriptor.backend);
Object.assign(parsedLocation, descriptor.options.path);
- return require('levelup')(backend(parsedLocation.toString()), options, callback);
+ return levelup(backend, parsedLocation.toString(), options, callback);
};
break;
default:
descriptor.wrapper = function (parsedLocation, options, callback) {
let backend = 'function' === typeof descriptor.backend ? descriptor.backend : require(descriptor.backend);
- return require('levelup')(backend(parsedLocation.href || parsedLocation), options, callback);
+ return levelup(backend, parsedLocation.href || parsedLocation, options, callback);
};
break;
}
diff --git a/src/custom/wsrpc.js b/src/custom/wsrpc.js
@@ -0,0 +1,22 @@
+const multilevel = require('multilevel'),
+ shoe = require('shoe'),
+ urlParse = require('url-parse');
+
+const protomap = {
+ 'wsrpc' : 'ws',
+ 'wssrpc' : 'wss',
+ 'ws-rpc' : 'ws',
+ 'wss-rpc': 'wss',
+ 'rpc' : 'ws',
+ 'rpcs' : 'wss'
+};
+
+module.exports = function (location, options, callback) {
+ let parsedLocation = urlParse(location),
+ proto = protomap[parsedLocation.protocol.split(':').shift().toLowerCase()];
+ parsedLocation.protocol = proto + ':';
+ let db = multilevel.client(),
+ stream = shoe(parsedLocation.toString());
+ stream.pipe(db.createRpcStream()).pipe(stream);
+ return db;
+};