autolevel.js

Automatically use the right abstract-leveldown module for your configuration
git clone git://git.finwo.net/lib/autolevel.js
Log | Files | Refs | README | LICENSE

commit dc9fbd827277b05ed3c06dd90ff8cf56564650e7
parent 223aa9d554437de40209f7b241b35a83c82b6b4f
Author: finwo <finwo@pm.me>
Date:   Wed, 14 Nov 2018 13:10:34 +0100

Added multilevel backend

Diffstat:
Mpackage-lock.json | 396++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
Mpackage.json | 2++
Msrc/adapter.js | 24++++++++++++++++++++----
Asrc/custom/wsrpc.js | 22++++++++++++++++++++++
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; +};