From 0f3f8995ff99dd6881fb3fdb7028a94ba81cbdcf Mon Sep 17 00:00:00 2001 From: neonphog Date: Tue, 5 Mar 2019 10:32:12 -0700 Subject: [PATCH] mono-repo to single project --- README.md | 20 +- bin/n3h | 157 + .../n3h/bin => bin}/run-integration-suite.js | 0 lerna.json | 6 - {packages/n3h/lib => lib}/file-logger.js | 0 {packages/n3h/lib => lib}/file-logger.test.js | 2 +- .../hackmode/lib => lib/hackmode}/config.js | 2 +- .../hackmode/lib => lib/hackmode}/index.js | 6 +- .../lib => lib/hackmode}/index.test.js | 0 .../hackmode/lib => lib/hackmode}/mem.js | 0 .../hackmode/lib => lib/hackmode}/mem.test.js | 0 .../hackmode}/p2p-backend-hackmode-peer.js | 14 +- .../p2p-backend-hackmode-peer.test.js | 6 +- .../hackmode/lib => lib/hackmode}/util58.js | 0 .../lib => lib/hackmode}/util58.test.js | 0 .../hc-dpki/lib => lib/hc-dpki}/index.js | 0 .../hc-dpki/lib => lib/hc-dpki}/keypair.js | 4 +- .../lib => lib/hc-dpki}/keypair.test.js | 2 +- {packages/hc-dpki/lib => lib/hc-dpki}/seed.js | 4 +- .../hc-dpki/lib => lib/hc-dpki}/seed.test.js | 2 +- {packages/hc-dpki/lib => lib/hc-dpki}/util.js | 2 +- .../hc-dpki/lib => lib/hc-dpki}/util.test.js | 0 {packages/hc-dpki/lib => lib/hc-dpki}/work.js | 2 +- .../hc-dpki/lib => lib/hc-dpki}/work.test.js | 2 +- {packages/n3h/lib => lib}/index.js | 20 +- {packages/n3h/lib => lib}/index.test.js | 0 .../mosodium/lib => lib/mosodium}/aead.js | 0 .../lib => lib/mosodium}/aead.test.js | 0 .../mosodium/lib => lib/mosodium}/hash.js | 0 .../lib => lib/mosodium}/hash.test.js | 0 .../mosodium/lib => lib/mosodium}/index.js | 0 .../mosodium/lib => lib/mosodium}/kdf.js | 0 .../mosodium/lib => lib/mosodium}/kdf.test.js | 0 {packages/mosodium/lib => lib/mosodium}/kx.js | 0 .../mosodium/lib => lib/mosodium}/kx.test.js | 0 .../mosodium/lib => lib/mosodium}/pwhash.js | 0 .../lib => lib/mosodium}/pwhash.test.js | 0 .../mosodium/lib => lib/mosodium}/random.js | 0 .../lib => lib/mosodium}/random.test.js | 0 .../mosodium/lib => lib/mosodium}/secbuf.js | 0 .../lib => lib/mosodium}/secbuf.test.js | 0 .../mosodium/lib => lib/mosodium}/sign.js | 0 .../lib => lib/mosodium}/sign.test.js | 0 .../mosodium/lib => lib/mosodium}/util.js | 0 .../lib => lib/mosodium}/util.test.js | 0 .../lib => lib/n3h-common}/async-class.js | 0 .../n3h-common}/async-class.test.js | 0 .../lib => lib/n3h-common}/config.js | 0 .../lib => lib/n3h-common}/config.test.js | 0 .../lib => lib/n3h-common}/event.js | 0 .../lib => lib/n3h-common}/event.test.js | 0 .../n3h-common/lib => lib/n3h-common}/exec.js | 0 .../lib => lib/n3h-common}/exec.test.js | 0 .../lib => lib/n3h-common}/index.js | 0 .../lib => lib/n3h-common}/mkdirp.js | 0 .../lib => lib/n3h-common}/mkdirp.test.js | 0 .../lib => lib/n3h-common}/modmod.js | 0 .../lib => lib/n3h-common}/modmod.test.js | 0 .../lib => lib/n3h-common}/promisify.js | 0 .../lib => lib/n3h-common}/promisify.test.js | 0 .../lib => lib/n3h-common}/sleep.js | 0 .../lib => lib/n3h-common}/sleep.test.js | 0 .../lib => lib/n3h-common}/track.js | 0 .../lib => lib/n3h-common}/track.test.js | 0 .../n3h-common/lib => lib/n3h-common}/type.js | 0 .../lib => lib/n3h-common}/type.test.js | 0 lib/n3h-ipc/index.js | 0 .../n3h-ipc/lib => lib/n3h-ipc}/msg-types.js | 0 .../lib => lib/n3h-ipc}/msg-types.test.js | 0 .../n3h-ipc/lib => lib/n3h-ipc}/n3hMode.js | 11 +- .../n3h-mock/lib => lib/n3h-mock}/index.js | 4 +- .../lib => lib/n3h-mock}/index.test.js | 0 .../n3h-mock/lib => lib/n3h-mock}/mem.js | 0 .../n3h-mock/lib => lib/n3h-mock}/mem.test.js | 0 .../n3h-mod-connection-wss}/index.js | 0 .../n3h-mod-connection-wss}/wss-connection.js | 6 +- .../wss-connection.test.js | 4 +- .../n3h-mod-connection-wss}/wss-server.js | 4 +- .../n3h-mod-dht-fullsync}/dht-fullsync.js | 4 +- .../dht-fullsync.test.js | 2 +- .../n3h-mod-dht-fullsync}/gossip.js | 2 +- .../n3h-mod-dht-fullsync}/gossip.test.js | 0 .../lib => lib/n3h-mod-dht-fullsync}/index.js | 0 .../n3h-mod-spec}/connection-spec.js | 2 +- .../n3h-mod-spec}/connection-spec.test.js | 2 +- .../lib => lib/n3h-mod-spec}/dht-spec.js | 2 +- .../lib => lib/n3h-mod-spec}/dht-spec.test.js | 2 +- .../lib => lib/n3h-mod-spec}/index.js | 2 +- .../lib => lib/n3h-mod-spec}/p2p-spec.js | 2 +- .../lib => lib/n3h-mod-spec}/p2p-spec.test.js | 2 +- lib/tweetlog/index.js | 1 + .../tweetlog/lib => lib/tweetlog}/tweetlog.js | 0 .../lib => lib/tweetlog}/tweetlog.test.js | 4 +- package-lock.json | 10387 +++------------- package.json | 56 +- packages/.gitignore | 1 - packages/hackmode/README.md | 3 - packages/hackmode/package.json | 57 - packages/hc-dpki/README.md | 66 - packages/hc-dpki/bin/hc-dpki-util | 195 - packages/hc-dpki/package.json | 56 - packages/mosocket/README.md | 3 - packages/mosocket/examples/test.js | 133 - packages/mosocket/lib/config.js | 10 - packages/mosocket/lib/config.test.js | 30 - packages/mosocket/lib/index.js | 4 - packages/mosocket/lib/message.js | 145 - packages/mosocket/lib/message.test.js | 18 - packages/mosocket/lib/mosocket.js | 205 - packages/mosocket/lib/multiaddr.js | 121 - packages/mosocket/lib/multiaddr.test.js | 95 - packages/mosocket/lib/protocol.js | 407 - packages/mosocket/lib/queue.js | 124 - packages/mosocket/lib/queue.test.js | 71 - packages/mosocket/lib/session.js | 146 - packages/mosocket/lib/tcp.js | 386 - packages/mosocket/lib/tweetlog.js | 37 - packages/mosocket/lib/tweetlog.test.js | 105 - packages/mosocket/package.json | 47 - packages/mosodium/README.md | 3 - packages/mosodium/example/mopg/mopg | 128 - packages/mosodium/package.json | 56 - packages/n3h-common/README.md | 3 - packages/n3h-common/package.json | 46 - packages/n3h-ipc/README.md | 2 - packages/n3h-ipc/lib/client.js | 164 - packages/n3h-ipc/lib/client.test.js | 9 - packages/n3h-ipc/lib/index.js | 2 - packages/n3h-ipc/lib/server.js | 208 - packages/n3h-ipc/lib/server.test.js | 57 - packages/n3h-ipc/package.json | 54 - packages/n3h-ipc/test/mock-zmq.js | 27 - packages/n3h-mock/README.md | 3 - packages/n3h-mock/package.json | 47 - packages/n3h-mod-connection-wss/.gitignore | 1 - packages/n3h-mod-connection-wss/README.md | 3 - packages/n3h-mod-connection-wss/package.json | 53 - packages/n3h-mod-dht-fullsync/README.md | 3 - packages/n3h-mod-dht-fullsync/package.json | 49 - packages/n3h-mod-message-libp2p/README.md | 3 - packages/n3h-mod-message-libp2p/lib/index.js | 2 - .../n3h-mod-message-libp2p/lib/index.test.js | 9 - .../lib/libp2p-bundle.js | 277 - .../n3h-mod-message-libp2p/lib/wrapper.js | 148 - packages/n3h-mod-message-libp2p/package.json | 54 - packages/n3h-mod-message-mosocket/README.md | 10 - packages/n3h-mod-message-mosocket/bin/test.js | 55 - .../examples/c3hat/_c3hat_p2p.js | 123 - .../examples/c3hat/c3hat.js | 155 - .../n3h-mod-message-mosocket/lib/config.js | 27 - .../n3h-mod-message-mosocket/lib/index.js | 2 - .../lib/mnemonic/mnemonic.js | 71 - .../lib/mnemonic/mnemonic.test.js | 28 - .../lib/mnemonic/words.js | 1 - packages/n3h-mod-message-mosocket/lib/node.js | 168 - .../lib/protocol/l3h.js | 72 - .../n3h-mod-message-mosocket/package.json | 49 - packages/n3h-mod-nv-persist-sqlite3/README.md | 3 - .../n3h-mod-nv-persist-sqlite3/lib/index.js | 120 - .../lib/index.test.js | 95 - .../n3h-mod-nv-persist-sqlite3/lib/sqlite3.js | 132 - .../lib/sqlite3.test.js | 75 - .../n3h-mod-nv-persist-sqlite3/package.json | 47 - packages/n3h-mod-persist-cache-lru/README.md | 3 - .../n3h-mod-persist-cache-lru/lib/index.js | 151 - .../lib/index.test.js | 138 - .../n3h-mod-persist-cache-lru/package.json | 46 - packages/n3h-mod-spec/README.md | 3 - packages/n3h-mod-spec/package.json | 46 - packages/n3h/README.md | 3 - packages/n3h/bin/n3h | 157 +- packages/n3h/package.json | 57 - packages/test-suite-executor/README.md | 3 - packages/test-suite-executor/lib/index.js | 201 - .../test-suite-executor/lib/index.test.js | 9 - .../test-suite-executor/lib/ipc-wrapper.js | 181 - packages/test-suite-executor/package.json | 48 - packages/tweetlog/README.md | 111 - packages/tweetlog/package.json | 47 - 179 files changed, 2346 insertions(+), 14717 deletions(-) create mode 100755 bin/n3h rename {packages/n3h/bin => bin}/run-integration-suite.js (100%) delete mode 100644 lerna.json rename {packages/n3h/lib => lib}/file-logger.js (100%) rename {packages/n3h/lib => lib}/file-logger.test.js (96%) rename {packages/hackmode/lib => lib/hackmode}/config.js (94%) rename {packages/hackmode/lib => lib/hackmode}/index.js (99%) rename {packages/hackmode/lib => lib/hackmode}/index.test.js (100%) rename {packages/hackmode/lib => lib/hackmode}/mem.js (100%) rename {packages/hackmode/lib => lib/hackmode}/mem.test.js (100%) rename {packages/hackmode/lib => lib/hackmode}/p2p-backend-hackmode-peer.js (96%) rename {packages/hackmode/lib => lib/hackmode}/p2p-backend-hackmode-peer.test.js (95%) rename {packages/hackmode/lib => lib/hackmode}/util58.js (100%) rename {packages/hackmode/lib => lib/hackmode}/util58.test.js (100%) rename {packages/hc-dpki/lib => lib/hc-dpki}/index.js (100%) rename {packages/hc-dpki/lib => lib/hc-dpki}/keypair.js (98%) rename {packages/hc-dpki/lib => lib/hc-dpki}/keypair.test.js (98%) rename {packages/hc-dpki/lib => lib/hc-dpki}/seed.js (98%) rename {packages/hc-dpki/lib => lib/hc-dpki}/seed.test.js (99%) rename {packages/hc-dpki/lib => lib/hc-dpki}/util.js (98%) rename {packages/hc-dpki/lib => lib/hc-dpki}/util.test.js (100%) rename {packages/hc-dpki/lib => lib/hc-dpki}/work.js (97%) rename {packages/hc-dpki/lib => lib/hc-dpki}/work.test.js (96%) rename {packages/n3h/lib => lib}/index.js (90%) rename {packages/n3h/lib => lib}/index.test.js (100%) rename {packages/mosodium/lib => lib/mosodium}/aead.js (100%) rename {packages/mosodium/lib => lib/mosodium}/aead.test.js (100%) rename {packages/mosodium/lib => lib/mosodium}/hash.js (100%) rename {packages/mosodium/lib => lib/mosodium}/hash.test.js (100%) rename {packages/mosodium/lib => lib/mosodium}/index.js (100%) rename {packages/mosodium/lib => lib/mosodium}/kdf.js (100%) rename {packages/mosodium/lib => lib/mosodium}/kdf.test.js (100%) rename {packages/mosodium/lib => lib/mosodium}/kx.js (100%) rename {packages/mosodium/lib => lib/mosodium}/kx.test.js (100%) rename {packages/mosodium/lib => lib/mosodium}/pwhash.js (100%) rename {packages/mosodium/lib => lib/mosodium}/pwhash.test.js (100%) rename {packages/mosodium/lib => lib/mosodium}/random.js (100%) rename {packages/mosodium/lib => lib/mosodium}/random.test.js (100%) rename {packages/mosodium/lib => lib/mosodium}/secbuf.js (100%) rename {packages/mosodium/lib => lib/mosodium}/secbuf.test.js (100%) rename {packages/mosodium/lib => lib/mosodium}/sign.js (100%) rename {packages/mosodium/lib => lib/mosodium}/sign.test.js (100%) rename {packages/mosodium/lib => lib/mosodium}/util.js (100%) rename {packages/mosodium/lib => lib/mosodium}/util.test.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/async-class.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/async-class.test.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/config.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/config.test.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/event.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/event.test.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/exec.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/exec.test.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/index.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/mkdirp.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/mkdirp.test.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/modmod.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/modmod.test.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/promisify.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/promisify.test.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/sleep.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/sleep.test.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/track.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/track.test.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/type.js (100%) rename {packages/n3h-common/lib => lib/n3h-common}/type.test.js (100%) create mode 100644 lib/n3h-ipc/index.js rename {packages/n3h-ipc/lib => lib/n3h-ipc}/msg-types.js (100%) rename {packages/n3h-ipc/lib => lib/n3h-ipc}/msg-types.test.js (100%) rename {packages/n3h-ipc/lib => lib/n3h-ipc}/n3hMode.js (95%) rename {packages/n3h-mock/lib => lib/n3h-mock}/index.js (99%) rename {packages/n3h-mock/lib => lib/n3h-mock}/index.test.js (100%) rename {packages/n3h-mock/lib => lib/n3h-mock}/mem.js (100%) rename {packages/n3h-mock/lib => lib/n3h-mock}/mem.test.js (100%) rename {packages/n3h-mod-connection-wss/lib => lib/n3h-mod-connection-wss}/index.js (100%) rename {packages/n3h-mod-connection-wss/lib => lib/n3h-mod-connection-wss}/wss-connection.js (97%) rename {packages/n3h-mod-connection-wss/lib => lib/n3h-mod-connection-wss}/wss-connection.test.js (94%) rename {packages/n3h-mod-connection-wss/lib => lib/n3h-mod-connection-wss}/wss-server.js (98%) rename {packages/n3h-mod-dht-fullsync/lib => lib/n3h-mod-dht-fullsync}/dht-fullsync.js (99%) rename {packages/n3h-mod-dht-fullsync/lib => lib/n3h-mod-dht-fullsync}/dht-fullsync.test.js (96%) rename {packages/n3h-mod-dht-fullsync/lib => lib/n3h-mod-dht-fullsync}/gossip.js (99%) rename {packages/n3h-mod-dht-fullsync/lib => lib/n3h-mod-dht-fullsync}/gossip.test.js (100%) rename {packages/n3h-mod-dht-fullsync/lib => lib/n3h-mod-dht-fullsync}/index.js (100%) rename {packages/n3h-mod-spec/lib => lib/n3h-mod-spec}/connection-spec.js (98%) rename {packages/n3h-mod-spec/lib => lib/n3h-mod-spec}/connection-spec.test.js (98%) rename {packages/n3h-mod-spec/lib => lib/n3h-mod-spec}/dht-spec.js (98%) rename {packages/n3h-mod-spec/lib => lib/n3h-mod-spec}/dht-spec.test.js (98%) rename {packages/n3h-mod-spec/lib => lib/n3h-mod-spec}/index.js (88%) rename {packages/n3h-mod-spec/lib => lib/n3h-mod-spec}/p2p-spec.js (99%) rename {packages/n3h-mod-spec/lib => lib/n3h-mod-spec}/p2p-spec.test.js (97%) create mode 100644 lib/tweetlog/index.js rename {packages/tweetlog/lib => lib/tweetlog}/tweetlog.js (100%) rename {packages/tweetlog/lib => lib/tweetlog}/tweetlog.test.js (96%) delete mode 100644 packages/.gitignore delete mode 100644 packages/hackmode/README.md delete mode 100644 packages/hackmode/package.json delete mode 100644 packages/hc-dpki/README.md delete mode 100755 packages/hc-dpki/bin/hc-dpki-util delete mode 100644 packages/hc-dpki/package.json delete mode 100644 packages/mosocket/README.md delete mode 100755 packages/mosocket/examples/test.js delete mode 100644 packages/mosocket/lib/config.js delete mode 100644 packages/mosocket/lib/config.test.js delete mode 100644 packages/mosocket/lib/index.js delete mode 100644 packages/mosocket/lib/message.js delete mode 100644 packages/mosocket/lib/message.test.js delete mode 100644 packages/mosocket/lib/mosocket.js delete mode 100644 packages/mosocket/lib/multiaddr.js delete mode 100644 packages/mosocket/lib/multiaddr.test.js delete mode 100644 packages/mosocket/lib/protocol.js delete mode 100644 packages/mosocket/lib/queue.js delete mode 100644 packages/mosocket/lib/queue.test.js delete mode 100644 packages/mosocket/lib/session.js delete mode 100644 packages/mosocket/lib/tcp.js delete mode 100644 packages/mosocket/lib/tweetlog.js delete mode 100644 packages/mosocket/lib/tweetlog.test.js delete mode 100644 packages/mosocket/package.json delete mode 100644 packages/mosodium/README.md delete mode 100755 packages/mosodium/example/mopg/mopg delete mode 100644 packages/mosodium/package.json delete mode 100644 packages/n3h-common/README.md delete mode 100644 packages/n3h-common/package.json delete mode 100644 packages/n3h-ipc/README.md delete mode 100644 packages/n3h-ipc/lib/client.js delete mode 100644 packages/n3h-ipc/lib/client.test.js delete mode 100644 packages/n3h-ipc/lib/index.js delete mode 100644 packages/n3h-ipc/lib/server.js delete mode 100644 packages/n3h-ipc/lib/server.test.js delete mode 100644 packages/n3h-ipc/package.json delete mode 100644 packages/n3h-ipc/test/mock-zmq.js delete mode 100644 packages/n3h-mock/README.md delete mode 100644 packages/n3h-mock/package.json delete mode 100644 packages/n3h-mod-connection-wss/.gitignore delete mode 100644 packages/n3h-mod-connection-wss/README.md delete mode 100644 packages/n3h-mod-connection-wss/package.json delete mode 100644 packages/n3h-mod-dht-fullsync/README.md delete mode 100644 packages/n3h-mod-dht-fullsync/package.json delete mode 100644 packages/n3h-mod-message-libp2p/README.md delete mode 100644 packages/n3h-mod-message-libp2p/lib/index.js delete mode 100644 packages/n3h-mod-message-libp2p/lib/index.test.js delete mode 100644 packages/n3h-mod-message-libp2p/lib/libp2p-bundle.js delete mode 100644 packages/n3h-mod-message-libp2p/lib/wrapper.js delete mode 100644 packages/n3h-mod-message-libp2p/package.json delete mode 100644 packages/n3h-mod-message-mosocket/README.md delete mode 100755 packages/n3h-mod-message-mosocket/bin/test.js delete mode 100755 packages/n3h-mod-message-mosocket/examples/c3hat/_c3hat_p2p.js delete mode 100755 packages/n3h-mod-message-mosocket/examples/c3hat/c3hat.js delete mode 100644 packages/n3h-mod-message-mosocket/lib/config.js delete mode 100644 packages/n3h-mod-message-mosocket/lib/index.js delete mode 100644 packages/n3h-mod-message-mosocket/lib/mnemonic/mnemonic.js delete mode 100644 packages/n3h-mod-message-mosocket/lib/mnemonic/mnemonic.test.js delete mode 100644 packages/n3h-mod-message-mosocket/lib/mnemonic/words.js delete mode 100644 packages/n3h-mod-message-mosocket/lib/node.js delete mode 100644 packages/n3h-mod-message-mosocket/lib/protocol/l3h.js delete mode 100644 packages/n3h-mod-message-mosocket/package.json delete mode 100644 packages/n3h-mod-nv-persist-sqlite3/README.md delete mode 100644 packages/n3h-mod-nv-persist-sqlite3/lib/index.js delete mode 100644 packages/n3h-mod-nv-persist-sqlite3/lib/index.test.js delete mode 100644 packages/n3h-mod-nv-persist-sqlite3/lib/sqlite3.js delete mode 100644 packages/n3h-mod-nv-persist-sqlite3/lib/sqlite3.test.js delete mode 100644 packages/n3h-mod-nv-persist-sqlite3/package.json delete mode 100644 packages/n3h-mod-persist-cache-lru/README.md delete mode 100644 packages/n3h-mod-persist-cache-lru/lib/index.js delete mode 100644 packages/n3h-mod-persist-cache-lru/lib/index.test.js delete mode 100644 packages/n3h-mod-persist-cache-lru/package.json delete mode 100644 packages/n3h-mod-spec/README.md delete mode 100644 packages/n3h-mod-spec/package.json delete mode 100644 packages/n3h/README.md delete mode 100644 packages/n3h/package.json delete mode 100644 packages/test-suite-executor/README.md delete mode 100644 packages/test-suite-executor/lib/index.js delete mode 100644 packages/test-suite-executor/lib/index.test.js delete mode 100644 packages/test-suite-executor/lib/ipc-wrapper.js delete mode 100644 packages/test-suite-executor/package.json delete mode 100644 packages/tweetlog/README.md delete mode 100644 packages/tweetlog/package.json diff --git a/README.md b/README.md index 8e1facf..f453f55 100644 --- a/README.md +++ b/README.md @@ -35,13 +35,7 @@ First, make sure our own dependencies are installed: npm install ``` -Next, install all project dependencies (through lerna monorepo manager): - -```shell -npm run bootstrap -``` - -Now, test all projects: +Now, to test: ```shell npm test @@ -51,18 +45,6 @@ npm test Holochain is an open source project. We welcome all sorts of participation and are actively working on increasing surface area to accept it. Please see our [contributing guidelines](https://github.com/holochain/org/blob/master/CONTRIBUTING.md) for our general practices and protocols on participating in the community. -### Lerna - -This monorepo is managed with the [Lerna](https://www.npmjs.com/package/lerna) helper tool. - -### New projects - -To create a new project, execute the following and fill out the prompts: - -```shell -npm run new -``` - ## License [![License: Apache-2.0](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0) diff --git a/bin/n3h b/bin/n3h new file mode 100755 index 0000000..9eb40b4 --- /dev/null +++ b/bin/n3h @@ -0,0 +1,157 @@ +#!/usr/bin/env node + +const fs = require('fs') +const path = require('path') +const os = require('os') + +const { mkdirp } = require('../lib/n3h-common') +const tweetlog = require('../lib/tweetlog') +const log = tweetlog('n3h-bin') + +const { buildLogHandler } = require('../lib/file-logger') +const { N3hNode, N3hHackMode, N3hMock } = require('../lib/index') +const { unhandledRejection } = require('../lib/n3h-common') +unhandledRejection.strict() + +async function main () { + const workDir = 'N3H_WORK_DIR' in process.env + ? process.env.N3H_WORK_DIR + : path.resolve(path.join( + os.homedir(), '.n3h')) + + // Move into working directory? + await mkdirp(workDir) + process.chdir(workDir) + + const logDir = path.join(workDir, 'logs') + await mkdirp(logDir) + + const logHandler = buildLogHandler({ + dir: logDir + }) + + // setup logging + tweetlog.set('t') // enable trace logging + tweetlog.listen(logHandler) + + const quietMode = 'N3H_QUIET' in process.env + if (!quietMode) { + tweetlog.listen((level, tag, ...args) => { + args = args.map(a => { + if (a instanceof Error) { + return a.stack || a.toString() + } else if (typeof a === 'object') { + return JSON.stringify(a) + } + return a.toString() + }).join(' ') + console.error(`(${tag}) [${level}] ${args}`) + }) + } + + let rawConfigData = null + + try { + rawConfigData = JSON.parse((await _tryReadStdin()).toString()) + log.w('got stdin config!', rawConfigData) + } catch (e) { + log.w('could not read stdin', e) + } + + if (!rawConfigData) { + try { + rawConfigData = JSON.parse(fs.readFileSync(path.resolve('n3h-config.json'))) + } catch (e) { + log.w('failed to load config', e) + } + } + + let mode = 'HACK' + + // mode from config + if (rawConfigData && 'mode' in rawConfigData) { + mode = rawConfigData.mode + } + + // environment mode override + if ('N3H_MODE' in process.env) { + mode = process.env.N3H_MODE + } + + var n3hNode = null + + let terminated = false + const terminate = async () => { + if (terminated) { + return + } + try { + if (n3hNode) { + await n3hNode.destroy() + } + log.i('n3h exited cleanly') + await logHandler.cleanup() + process.exit(0) + } catch (e) { + try { + await logHandler.cleanup() + } catch (e) { /* pass */ } + log.e(e.stack || e.toString()) + process.exit(1) + } + } + + process.on('SIGINT', terminate) + process.on('SIGTERM', terminate) + process.on('unhandledRejection', err => { + log.e(err) + terminate() + }) + + log.i('executing mode ' + mode) + switch(mode) { + case 'MOCK': + n3hNode = await new N3hMock(workDir, rawConfigData) + break + case 'HACK': + n3hNode = await new N3hHackMode(workDir, rawConfigData) + break + default: + log.e('so called "real" mode disabled while running POC on hackmode / mockmode') + process.exit(1) + //n3hNode = await N3hNode.constructDefault(workDir, rawConfigData) + //break + } + + await n3hNode.run() +} + +main().then(() => {}, (err) => { + log.e(err) + process.exit(1) +}) + +/** + * read from stdin until closed + * timeout if not read in 4 seconds + */ +async function _tryReadStdin () { + const timeout = (new Error('timeout')).stack + return new Promise((resolve, reject) => { + const timer = setTimeout(() => { + reject(timeout) + }, 4000) + + log.w('attempting read stdin') + process.stdin.resume() + + let data = Buffer.alloc(0) + process.stdin.on('data', chunk => { + data = Buffer.concat([data, chunk]) + }) + process.stdin.on('end', () => { + clearTimeout(timer) + resolve(data) + }) + }) +} diff --git a/packages/n3h/bin/run-integration-suite.js b/bin/run-integration-suite.js similarity index 100% rename from packages/n3h/bin/run-integration-suite.js rename to bin/run-integration-suite.js diff --git a/lerna.json b/lerna.json deleted file mode 100644 index d6707ca..0000000 --- a/lerna.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "packages": [ - "packages/*" - ], - "version": "0.0.0" -} diff --git a/packages/n3h/lib/file-logger.js b/lib/file-logger.js similarity index 100% rename from packages/n3h/lib/file-logger.js rename to lib/file-logger.js diff --git a/packages/n3h/lib/file-logger.test.js b/lib/file-logger.test.js similarity index 96% rename from packages/n3h/lib/file-logger.test.js rename to lib/file-logger.test.js index dcd6370..94e15ed 100644 --- a/packages/n3h/lib/file-logger.test.js +++ b/lib/file-logger.test.js @@ -1,5 +1,5 @@ const { expect } = require('chai') -const { $sleep } = require('@holochain/n3h-common') +const { $sleep } = require('./n3h-common') const fs = require('fs') const path = require('path') const tmp = require('tmp') diff --git a/packages/hackmode/lib/config.js b/lib/hackmode/config.js similarity index 94% rename from packages/hackmode/lib/config.js rename to lib/hackmode/config.js index b534e6c..63b651b 100644 --- a/packages/hackmode/lib/config.js +++ b/lib/hackmode/config.js @@ -1,4 +1,4 @@ -const { config } = require('@holochain/n3h-common') +const { config } = require('../n3h-common') module.exports = exports = config.createDefinition({ ipc: { diff --git a/packages/hackmode/lib/index.js b/lib/hackmode/index.js similarity index 99% rename from packages/hackmode/lib/index.js rename to lib/hackmode/index.js index c47c9b7..d057413 100644 --- a/packages/hackmode/lib/index.js +++ b/lib/hackmode/index.js @@ -1,13 +1,13 @@ const msgpack = require('msgpack-lite') -const { P2p } = require('@holochain/n3h-mod-spec') +const { P2p } = require('../n3h-mod-spec') const { P2pBackendHackmodePeer } = require('./p2p-backend-hackmode-peer') -const { N3hMode } = require('../../n3h-ipc/lib/n3hMode') +const { N3hMode } = require('../n3h-ipc/n3hMode') const { Mem, getHash } = require('./mem') -const tweetlog = require('@holochain/tweetlog') +const tweetlog = require('../tweetlog') const log = tweetlog('@hackmode@') /** diff --git a/packages/hackmode/lib/index.test.js b/lib/hackmode/index.test.js similarity index 100% rename from packages/hackmode/lib/index.test.js rename to lib/hackmode/index.test.js diff --git a/packages/hackmode/lib/mem.js b/lib/hackmode/mem.js similarity index 100% rename from packages/hackmode/lib/mem.js rename to lib/hackmode/mem.js diff --git a/packages/hackmode/lib/mem.test.js b/lib/hackmode/mem.test.js similarity index 100% rename from packages/hackmode/lib/mem.test.js rename to lib/hackmode/mem.test.js diff --git a/packages/hackmode/lib/p2p-backend-hackmode-peer.js b/lib/hackmode/p2p-backend-hackmode-peer.js similarity index 96% rename from packages/hackmode/lib/p2p-backend-hackmode-peer.js rename to lib/hackmode/p2p-backend-hackmode-peer.js index aa826e1..3dc1e82 100644 --- a/packages/hackmode/lib/p2p-backend-hackmode-peer.js +++ b/lib/hackmode/p2p-backend-hackmode-peer.js @@ -1,7 +1,7 @@ -const { AsyncClass, Track } = require('@holochain/n3h-common') -const { Keypair } = require('@holochain/hc-dpki') -const mosodium = require('@holochain/mosodium') -const tweetlog = require('@holochain/tweetlog') +const { AsyncClass, Track } = require('../n3h-common') +const { Keypair } = require('../hc-dpki') +const mosodium = require('../mosodium') +const tweetlog = require('../tweetlog') const log = tweetlog('p2p-hackmode') const { URL } = require('url') @@ -12,10 +12,10 @@ const { Dht, DhtEvent, P2pEvent -} = require('@holochain/n3h-mod-spec') +} = require('../n3h-mod-spec') -const { ConnectionBackendWss } = require('@holochain/n3h-mod-connection-wss') -const { DhtBackendFullsync } = require('@holochain/n3h-mod-dht-fullsync') +const { ConnectionBackendWss } = require('../n3h-mod-connection-wss') +const { DhtBackendFullsync } = require('../n3h-mod-dht-fullsync') /** * @param {object} options diff --git a/packages/hackmode/lib/p2p-backend-hackmode-peer.test.js b/lib/hackmode/p2p-backend-hackmode-peer.test.js similarity index 95% rename from packages/hackmode/lib/p2p-backend-hackmode-peer.test.js rename to lib/hackmode/p2p-backend-hackmode-peer.test.js index e968715..d78ed65 100644 --- a/packages/hackmode/lib/p2p-backend-hackmode-peer.test.js +++ b/lib/hackmode/p2p-backend-hackmode-peer.test.js @@ -1,15 +1,15 @@ -const { $sleep, unhandledRejection } = require('@holochain/n3h-common') +const { $sleep, unhandledRejection } = require('../n3h-common') unhandledRejection.strict() const msgpack = require('msgpack-lite') -const tweetlog = require('@holochain/tweetlog') +const tweetlog = require('../tweetlog') tweetlog.set('t') const log = tweetlog('@@-unit-test-@@') tweetlog.listen(tweetlog.console) const { expect } = require('chai') -const { P2p } = require('@holochain/n3h-mod-spec') +const { P2p } = require('../n3h-mod-spec') const { P2pBackendHackmodePeer } = require('./p2p-backend-hackmode-peer') describe('hackmode module p2p peer backend Suite', () => { diff --git a/packages/hackmode/lib/util58.js b/lib/hackmode/util58.js similarity index 100% rename from packages/hackmode/lib/util58.js rename to lib/hackmode/util58.js diff --git a/packages/hackmode/lib/util58.test.js b/lib/hackmode/util58.test.js similarity index 100% rename from packages/hackmode/lib/util58.test.js rename to lib/hackmode/util58.test.js diff --git a/packages/hc-dpki/lib/index.js b/lib/hc-dpki/index.js similarity index 100% rename from packages/hc-dpki/lib/index.js rename to lib/hc-dpki/index.js diff --git a/packages/hc-dpki/lib/keypair.js b/lib/hc-dpki/keypair.js similarity index 98% rename from packages/hc-dpki/lib/keypair.js rename to lib/hc-dpki/keypair.js index 58aa4ac..0bca42d 100644 --- a/packages/hc-dpki/lib/keypair.js +++ b/lib/hc-dpki/keypair.js @@ -1,7 +1,7 @@ const msgpack = require('msgpack-lite') -const { AsyncClass } = require('@holochain/n3h-common') -const mosodium = require('@holochain/mosodium') +const { AsyncClass } = require('../n3h-common') +const mosodium = require('../mosodium') const util = require('./util') diff --git a/packages/hc-dpki/lib/keypair.test.js b/lib/hc-dpki/keypair.test.js similarity index 98% rename from packages/hc-dpki/lib/keypair.test.js rename to lib/hc-dpki/keypair.test.js index b66be49..e9adf8f 100644 --- a/packages/hc-dpki/lib/keypair.test.js +++ b/lib/hc-dpki/keypair.test.js @@ -1,6 +1,6 @@ const { expect } = require('chai') -const mosodium = require('@holochain/mosodium') +const mosodium = require('../mosodium') mosodium.SecBuf.setLockLevel(mosodium.SecBuf.LOCK_NONE) const { Keypair } = require('./index') diff --git a/packages/hc-dpki/lib/seed.js b/lib/hc-dpki/seed.js similarity index 98% rename from packages/hc-dpki/lib/seed.js rename to lib/hc-dpki/seed.js index ae43159..d69551f 100644 --- a/packages/hc-dpki/lib/seed.js +++ b/lib/hc-dpki/seed.js @@ -1,5 +1,5 @@ -const { AsyncClass } = require('@holochain/n3h-common') -const mosodium = require('@holochain/mosodium') +const { AsyncClass } = require('../n3h-common') +const mosodium = require('../mosodium') const bip39 = require('bip39') const { Keypair } = require('./keypair') diff --git a/packages/hc-dpki/lib/seed.test.js b/lib/hc-dpki/seed.test.js similarity index 99% rename from packages/hc-dpki/lib/seed.test.js rename to lib/hc-dpki/seed.test.js index bd227b3..9b92638 100644 --- a/packages/hc-dpki/lib/seed.test.js +++ b/lib/hc-dpki/seed.test.js @@ -1,6 +1,6 @@ const { expect } = require('chai') -const mosodium = require('@holochain/mosodium') +const mosodium = require('../mosodium') mosodium.SecBuf.setLockLevel(mosodium.SecBuf.LOCK_NONE) const util = require('./util') diff --git a/packages/hc-dpki/lib/util.js b/lib/hc-dpki/util.js similarity index 98% rename from packages/hc-dpki/lib/util.js rename to lib/hc-dpki/util.js index d216b97..0d5b99f 100644 --- a/packages/hc-dpki/lib/util.js +++ b/lib/hc-dpki/util.js @@ -1,4 +1,4 @@ -const mosodium = require('@holochain/mosodium') +const mosodium = require('../mosodium') const msgpack = require('msgpack-lite') const { Encoder, Decoder } = require('@holochain/n-bch-rs') diff --git a/packages/hc-dpki/lib/util.test.js b/lib/hc-dpki/util.test.js similarity index 100% rename from packages/hc-dpki/lib/util.test.js rename to lib/hc-dpki/util.test.js diff --git a/packages/hc-dpki/lib/work.js b/lib/hc-dpki/work.js similarity index 97% rename from packages/hc-dpki/lib/work.js rename to lib/hc-dpki/work.js index 2b306c3..798f4cb 100644 --- a/packages/hc-dpki/lib/work.js +++ b/lib/hc-dpki/work.js @@ -1,4 +1,4 @@ -const mosodium = require('@holochain/mosodium') +const mosodium = require('../mosodium') const DEF_WORK_TARGET = Buffer.from('000000000000000000000000000000000000000000000000000000000000b400', 'hex') diff --git a/packages/hc-dpki/lib/work.test.js b/lib/hc-dpki/work.test.js similarity index 96% rename from packages/hc-dpki/lib/work.test.js rename to lib/hc-dpki/work.test.js index 8e37a99..ffdbb55 100644 --- a/packages/hc-dpki/lib/work.test.js +++ b/lib/hc-dpki/work.test.js @@ -1,4 +1,4 @@ -const mosodium = require('@holochain/mosodium') +const mosodium = require('../mosodium') const { expect } = require('chai') const work = require('./work') diff --git a/packages/n3h/lib/index.js b/lib/index.js similarity index 90% rename from packages/n3h/lib/index.js rename to lib/index.js index 047bd1a..759b853 100644 --- a/packages/n3h/lib/index.js +++ b/lib/index.js @@ -1,27 +1,31 @@ const path = require('path') const os = require('os') const { URL } = require('url') -const { AsyncClass, mkdirp, ModMod } = require('@holochain/n3h-common') +const { AsyncClass, mkdirp, ModMod } = require('./n3h-common') -const { IpcServer } = require('@holochain/n3h-ipc') +// const { IpcServer } = require('./n3h-ipc') +/* const DEFAULT_MODULES = [ - require('@holochain/n3h-mod-nv-persist-sqlite3').NvPersistSqlite3, - require('@holochain/n3h-mod-persist-cache-lru').PersistCacheLru, - require('@holochain/n3h-mod-message-libp2p').MessageLibP2p + require('./n3h-mod-nv-persist-sqlite3').NvPersistSqlite3, + require('./n3h-mod-persist-cache-lru').PersistCacheLru, + require('./n3h-mod-message-libp2p').MessageLibP2p ] +*/ -exports.N3hHackMode = require('@holochain/hackmode').N3hHackMode -exports.N3hMock = require('@holochain/n3h-mock').N3hMock +exports.N3hHackMode = require('./hackmode').N3hHackMode +exports.N3hMock = require('./n3h-mock').N3hMock /** */ class N3hNode extends AsyncClass { /** */ + /* static async constructDefault (workDir, rawConfigData, modules) { return new N3hNode(workDir, (modules || []).concat(DEFAULT_MODULES)) } + */ /** */ @@ -110,7 +114,7 @@ class N3hNode extends AsyncClass { this._state = 'need_config' - this._ipc = await new IpcServer() + // this._ipc = await new IpcServer() // hack for module init this._ipc.ready = () => {} diff --git a/packages/n3h/lib/index.test.js b/lib/index.test.js similarity index 100% rename from packages/n3h/lib/index.test.js rename to lib/index.test.js diff --git a/packages/mosodium/lib/aead.js b/lib/mosodium/aead.js similarity index 100% rename from packages/mosodium/lib/aead.js rename to lib/mosodium/aead.js diff --git a/packages/mosodium/lib/aead.test.js b/lib/mosodium/aead.test.js similarity index 100% rename from packages/mosodium/lib/aead.test.js rename to lib/mosodium/aead.test.js diff --git a/packages/mosodium/lib/hash.js b/lib/mosodium/hash.js similarity index 100% rename from packages/mosodium/lib/hash.js rename to lib/mosodium/hash.js diff --git a/packages/mosodium/lib/hash.test.js b/lib/mosodium/hash.test.js similarity index 100% rename from packages/mosodium/lib/hash.test.js rename to lib/mosodium/hash.test.js diff --git a/packages/mosodium/lib/index.js b/lib/mosodium/index.js similarity index 100% rename from packages/mosodium/lib/index.js rename to lib/mosodium/index.js diff --git a/packages/mosodium/lib/kdf.js b/lib/mosodium/kdf.js similarity index 100% rename from packages/mosodium/lib/kdf.js rename to lib/mosodium/kdf.js diff --git a/packages/mosodium/lib/kdf.test.js b/lib/mosodium/kdf.test.js similarity index 100% rename from packages/mosodium/lib/kdf.test.js rename to lib/mosodium/kdf.test.js diff --git a/packages/mosodium/lib/kx.js b/lib/mosodium/kx.js similarity index 100% rename from packages/mosodium/lib/kx.js rename to lib/mosodium/kx.js diff --git a/packages/mosodium/lib/kx.test.js b/lib/mosodium/kx.test.js similarity index 100% rename from packages/mosodium/lib/kx.test.js rename to lib/mosodium/kx.test.js diff --git a/packages/mosodium/lib/pwhash.js b/lib/mosodium/pwhash.js similarity index 100% rename from packages/mosodium/lib/pwhash.js rename to lib/mosodium/pwhash.js diff --git a/packages/mosodium/lib/pwhash.test.js b/lib/mosodium/pwhash.test.js similarity index 100% rename from packages/mosodium/lib/pwhash.test.js rename to lib/mosodium/pwhash.test.js diff --git a/packages/mosodium/lib/random.js b/lib/mosodium/random.js similarity index 100% rename from packages/mosodium/lib/random.js rename to lib/mosodium/random.js diff --git a/packages/mosodium/lib/random.test.js b/lib/mosodium/random.test.js similarity index 100% rename from packages/mosodium/lib/random.test.js rename to lib/mosodium/random.test.js diff --git a/packages/mosodium/lib/secbuf.js b/lib/mosodium/secbuf.js similarity index 100% rename from packages/mosodium/lib/secbuf.js rename to lib/mosodium/secbuf.js diff --git a/packages/mosodium/lib/secbuf.test.js b/lib/mosodium/secbuf.test.js similarity index 100% rename from packages/mosodium/lib/secbuf.test.js rename to lib/mosodium/secbuf.test.js diff --git a/packages/mosodium/lib/sign.js b/lib/mosodium/sign.js similarity index 100% rename from packages/mosodium/lib/sign.js rename to lib/mosodium/sign.js diff --git a/packages/mosodium/lib/sign.test.js b/lib/mosodium/sign.test.js similarity index 100% rename from packages/mosodium/lib/sign.test.js rename to lib/mosodium/sign.test.js diff --git a/packages/mosodium/lib/util.js b/lib/mosodium/util.js similarity index 100% rename from packages/mosodium/lib/util.js rename to lib/mosodium/util.js diff --git a/packages/mosodium/lib/util.test.js b/lib/mosodium/util.test.js similarity index 100% rename from packages/mosodium/lib/util.test.js rename to lib/mosodium/util.test.js diff --git a/packages/n3h-common/lib/async-class.js b/lib/n3h-common/async-class.js similarity index 100% rename from packages/n3h-common/lib/async-class.js rename to lib/n3h-common/async-class.js diff --git a/packages/n3h-common/lib/async-class.test.js b/lib/n3h-common/async-class.test.js similarity index 100% rename from packages/n3h-common/lib/async-class.test.js rename to lib/n3h-common/async-class.test.js diff --git a/packages/n3h-common/lib/config.js b/lib/n3h-common/config.js similarity index 100% rename from packages/n3h-common/lib/config.js rename to lib/n3h-common/config.js diff --git a/packages/n3h-common/lib/config.test.js b/lib/n3h-common/config.test.js similarity index 100% rename from packages/n3h-common/lib/config.test.js rename to lib/n3h-common/config.test.js diff --git a/packages/n3h-common/lib/event.js b/lib/n3h-common/event.js similarity index 100% rename from packages/n3h-common/lib/event.js rename to lib/n3h-common/event.js diff --git a/packages/n3h-common/lib/event.test.js b/lib/n3h-common/event.test.js similarity index 100% rename from packages/n3h-common/lib/event.test.js rename to lib/n3h-common/event.test.js diff --git a/packages/n3h-common/lib/exec.js b/lib/n3h-common/exec.js similarity index 100% rename from packages/n3h-common/lib/exec.js rename to lib/n3h-common/exec.js diff --git a/packages/n3h-common/lib/exec.test.js b/lib/n3h-common/exec.test.js similarity index 100% rename from packages/n3h-common/lib/exec.test.js rename to lib/n3h-common/exec.test.js diff --git a/packages/n3h-common/lib/index.js b/lib/n3h-common/index.js similarity index 100% rename from packages/n3h-common/lib/index.js rename to lib/n3h-common/index.js diff --git a/packages/n3h-common/lib/mkdirp.js b/lib/n3h-common/mkdirp.js similarity index 100% rename from packages/n3h-common/lib/mkdirp.js rename to lib/n3h-common/mkdirp.js diff --git a/packages/n3h-common/lib/mkdirp.test.js b/lib/n3h-common/mkdirp.test.js similarity index 100% rename from packages/n3h-common/lib/mkdirp.test.js rename to lib/n3h-common/mkdirp.test.js diff --git a/packages/n3h-common/lib/modmod.js b/lib/n3h-common/modmod.js similarity index 100% rename from packages/n3h-common/lib/modmod.js rename to lib/n3h-common/modmod.js diff --git a/packages/n3h-common/lib/modmod.test.js b/lib/n3h-common/modmod.test.js similarity index 100% rename from packages/n3h-common/lib/modmod.test.js rename to lib/n3h-common/modmod.test.js diff --git a/packages/n3h-common/lib/promisify.js b/lib/n3h-common/promisify.js similarity index 100% rename from packages/n3h-common/lib/promisify.js rename to lib/n3h-common/promisify.js diff --git a/packages/n3h-common/lib/promisify.test.js b/lib/n3h-common/promisify.test.js similarity index 100% rename from packages/n3h-common/lib/promisify.test.js rename to lib/n3h-common/promisify.test.js diff --git a/packages/n3h-common/lib/sleep.js b/lib/n3h-common/sleep.js similarity index 100% rename from packages/n3h-common/lib/sleep.js rename to lib/n3h-common/sleep.js diff --git a/packages/n3h-common/lib/sleep.test.js b/lib/n3h-common/sleep.test.js similarity index 100% rename from packages/n3h-common/lib/sleep.test.js rename to lib/n3h-common/sleep.test.js diff --git a/packages/n3h-common/lib/track.js b/lib/n3h-common/track.js similarity index 100% rename from packages/n3h-common/lib/track.js rename to lib/n3h-common/track.js diff --git a/packages/n3h-common/lib/track.test.js b/lib/n3h-common/track.test.js similarity index 100% rename from packages/n3h-common/lib/track.test.js rename to lib/n3h-common/track.test.js diff --git a/packages/n3h-common/lib/type.js b/lib/n3h-common/type.js similarity index 100% rename from packages/n3h-common/lib/type.js rename to lib/n3h-common/type.js diff --git a/packages/n3h-common/lib/type.test.js b/lib/n3h-common/type.test.js similarity index 100% rename from packages/n3h-common/lib/type.test.js rename to lib/n3h-common/type.test.js diff --git a/lib/n3h-ipc/index.js b/lib/n3h-ipc/index.js new file mode 100644 index 0000000..e69de29 diff --git a/packages/n3h-ipc/lib/msg-types.js b/lib/n3h-ipc/msg-types.js similarity index 100% rename from packages/n3h-ipc/lib/msg-types.js rename to lib/n3h-ipc/msg-types.js diff --git a/packages/n3h-ipc/lib/msg-types.test.js b/lib/n3h-ipc/msg-types.test.js similarity index 100% rename from packages/n3h-ipc/lib/msg-types.test.js rename to lib/n3h-ipc/msg-types.test.js diff --git a/packages/n3h-ipc/lib/n3hMode.js b/lib/n3h-ipc/n3hMode.js similarity index 95% rename from packages/n3h-ipc/lib/n3hMode.js rename to lib/n3h-ipc/n3hMode.js index 560a274..39b320d 100644 --- a/packages/n3h-ipc/lib/n3hMode.js +++ b/lib/n3h-ipc/n3hMode.js @@ -1,13 +1,13 @@ const msgpack = require('msgpack-lite') -const { AsyncClass } = require('../../n3h-common/lib/index') +const { AsyncClass } = require('../n3h-common') -const { Connection } = require('../../n3h-mod-spec/lib/index') -const { ConnectionBackendWss } = require('../../n3h-mod-connection-wss/lib/index') +const { Connection } = require('../n3h-mod-spec') +const { ConnectionBackendWss } = require('../n3h-mod-connection-wss') -const config = require('../../hackmode/lib/config') +const config = require('../hackmode/config') -const tweetlog = require('../../tweetlog/lib/tweetlog') +const tweetlog = require('../tweetlog') const log = tweetlog('*n3hMode*') /** @@ -158,7 +158,6 @@ class N3hMode extends AsyncClass { } } - /** * @private */ diff --git a/packages/n3h-mock/lib/index.js b/lib/n3h-mock/index.js similarity index 99% rename from packages/n3h-mock/lib/index.js rename to lib/n3h-mock/index.js index 2096b03..2f7bc7e 100644 --- a/packages/n3h-mock/lib/index.js +++ b/lib/n3h-mock/index.js @@ -1,9 +1,9 @@ -const { N3hMode } = require('../../n3h-ipc/lib/n3hMode') +const { N3hMode } = require('../n3h-ipc/n3hMode') const { Mem } = require('./mem') -const tweetlog = require('@holochain/tweetlog') +const tweetlog = require('../tweetlog') const log = tweetlog('@mock@') class N3hMock extends N3hMode { diff --git a/packages/n3h-mock/lib/index.test.js b/lib/n3h-mock/index.test.js similarity index 100% rename from packages/n3h-mock/lib/index.test.js rename to lib/n3h-mock/index.test.js diff --git a/packages/n3h-mock/lib/mem.js b/lib/n3h-mock/mem.js similarity index 100% rename from packages/n3h-mock/lib/mem.js rename to lib/n3h-mock/mem.js diff --git a/packages/n3h-mock/lib/mem.test.js b/lib/n3h-mock/mem.test.js similarity index 100% rename from packages/n3h-mock/lib/mem.test.js rename to lib/n3h-mock/mem.test.js diff --git a/packages/n3h-mod-connection-wss/lib/index.js b/lib/n3h-mod-connection-wss/index.js similarity index 100% rename from packages/n3h-mod-connection-wss/lib/index.js rename to lib/n3h-mod-connection-wss/index.js diff --git a/packages/n3h-mod-connection-wss/lib/wss-connection.js b/lib/n3h-mod-connection-wss/wss-connection.js similarity index 97% rename from packages/n3h-mod-connection-wss/lib/wss-connection.js rename to lib/n3h-mod-connection-wss/wss-connection.js index 6d5254d..4667b91 100644 --- a/packages/n3h-mod-connection-wss/lib/wss-connection.js +++ b/lib/n3h-mod-connection-wss/wss-connection.js @@ -3,11 +3,11 @@ const { URL } = require('url') const Wss = require('ws') -const { AsyncClass } = require('@holochain/n3h-common') +const { AsyncClass } = require('../n3h-common') const { WssServer } = require('./wss-server') -const { ConnectionEvent } = require('@holochain/n3h-mod-spec') +const { ConnectionEvent } = require('../n3h-mod-spec') -const tweetlog = require('@holochain/tweetlog') +const tweetlog = require('../tweetlog') const log = tweetlog('wss-connection') const agent = new https.Agent({ diff --git a/packages/n3h-mod-connection-wss/lib/wss-connection.test.js b/lib/n3h-mod-connection-wss/wss-connection.test.js similarity index 94% rename from packages/n3h-mod-connection-wss/lib/wss-connection.test.js rename to lib/n3h-mod-connection-wss/wss-connection.test.js index 211b846..b5b8124 100644 --- a/packages/n3h-mod-connection-wss/lib/wss-connection.test.js +++ b/lib/n3h-mod-connection-wss/wss-connection.test.js @@ -1,7 +1,7 @@ const { expect } = require('chai') -const { Connection } = require('@holochain/n3h-mod-spec') +const { Connection } = require('../n3h-mod-spec') const { ConnectionBackendWss } = require('./index') -const { $sleep } = require('@holochain/n3h-common') +const { $sleep } = require('../n3h-common') describe('Wss Connection Suite', () => { let c = null diff --git a/packages/n3h-mod-connection-wss/lib/wss-server.js b/lib/n3h-mod-connection-wss/wss-server.js similarity index 98% rename from packages/n3h-mod-connection-wss/lib/wss-server.js rename to lib/n3h-mod-connection-wss/wss-server.js index 5f680db..7d5aadf 100644 --- a/packages/n3h-mod-connection-wss/lib/wss-server.js +++ b/lib/n3h-mod-connection-wss/wss-server.js @@ -7,8 +7,8 @@ const fs = require('fs') const os = require('os') const https = require('https') -const { AsyncClass } = require('@holochain/n3h-common') -const tweetlog = require('@holochain/tweetlog') +const { AsyncClass } = require('../n3h-common') +const tweetlog = require('../tweetlog') const log = tweetlog('wss-server-utils') /** diff --git a/packages/n3h-mod-dht-fullsync/lib/dht-fullsync.js b/lib/n3h-mod-dht-fullsync/dht-fullsync.js similarity index 99% rename from packages/n3h-mod-dht-fullsync/lib/dht-fullsync.js rename to lib/n3h-mod-dht-fullsync/dht-fullsync.js index a35495b..cdf091c 100644 --- a/packages/n3h-mod-dht-fullsync/lib/dht-fullsync.js +++ b/lib/n3h-mod-dht-fullsync/dht-fullsync.js @@ -6,8 +6,8 @@ const { AsyncClass, Executor, $sleep -} = require('@holochain/n3h-common') -const { Dht } = require('@holochain/n3h-mod-spec') +} = require('../n3h-common') +const { Dht } = require('../n3h-mod-spec') const DhtEvent = Dht.DhtEvent const evtType2Fn = { diff --git a/packages/n3h-mod-dht-fullsync/lib/dht-fullsync.test.js b/lib/n3h-mod-dht-fullsync/dht-fullsync.test.js similarity index 96% rename from packages/n3h-mod-dht-fullsync/lib/dht-fullsync.test.js rename to lib/n3h-mod-dht-fullsync/dht-fullsync.test.js index debe1f2..091313b 100644 --- a/packages/n3h-mod-dht-fullsync/lib/dht-fullsync.test.js +++ b/lib/n3h-mod-dht-fullsync/dht-fullsync.test.js @@ -1,6 +1,6 @@ const { expect } = require('chai') -const { Dht, DhtEvent } = require('@holochain/n3h-mod-spec') +const { Dht, DhtEvent } = require('../n3h-mod-spec') const { DhtBackendFullsync } = require('./index') const TEST_URI_1 = 'fake://some/place' diff --git a/packages/n3h-mod-dht-fullsync/lib/gossip.js b/lib/n3h-mod-dht-fullsync/gossip.js similarity index 99% rename from packages/n3h-mod-dht-fullsync/lib/gossip.js rename to lib/n3h-mod-dht-fullsync/gossip.js index c2029b3..1d1404e 100644 --- a/packages/n3h-mod-dht-fullsync/lib/gossip.js +++ b/lib/n3h-mod-dht-fullsync/gossip.js @@ -1,5 +1,5 @@ const msgpack = require('msgpack-lite') -const { encodeId, decodeId } = require('@holochain/hc-dpki') +const { encodeId, decodeId } = require('../hc-dpki') /** */ diff --git a/packages/n3h-mod-dht-fullsync/lib/gossip.test.js b/lib/n3h-mod-dht-fullsync/gossip.test.js similarity index 100% rename from packages/n3h-mod-dht-fullsync/lib/gossip.test.js rename to lib/n3h-mod-dht-fullsync/gossip.test.js diff --git a/packages/n3h-mod-dht-fullsync/lib/index.js b/lib/n3h-mod-dht-fullsync/index.js similarity index 100% rename from packages/n3h-mod-dht-fullsync/lib/index.js rename to lib/n3h-mod-dht-fullsync/index.js diff --git a/packages/n3h-mod-spec/lib/connection-spec.js b/lib/n3h-mod-spec/connection-spec.js similarity index 98% rename from packages/n3h-mod-spec/lib/connection-spec.js rename to lib/n3h-mod-spec/connection-spec.js index f1817af..5cf7308 100644 --- a/packages/n3h-mod-spec/lib/connection-spec.js +++ b/lib/n3h-mod-spec/connection-spec.js @@ -1,4 +1,4 @@ -const { AsyncClass, createEventSpec, type } = require('@holochain/n3h-common') +const { AsyncClass, createEventSpec, type } = require('../n3h-common') const ConnectionEvent = createEventSpec({ /** diff --git a/packages/n3h-mod-spec/lib/connection-spec.test.js b/lib/n3h-mod-spec/connection-spec.test.js similarity index 98% rename from packages/n3h-mod-spec/lib/connection-spec.test.js rename to lib/n3h-mod-spec/connection-spec.test.js index c3f3f97..d076a69 100644 --- a/packages/n3h-mod-spec/lib/connection-spec.test.js +++ b/lib/n3h-mod-spec/connection-spec.test.js @@ -1,6 +1,6 @@ const { expect } = require('chai') -const { AsyncClass } = require('@holochain/n3h-common') +const { AsyncClass } = require('../n3h-common') const { Connection, ConnectionEvent } = require('./index') const CEvent = ConnectionEvent diff --git a/packages/n3h-mod-spec/lib/dht-spec.js b/lib/n3h-mod-spec/dht-spec.js similarity index 98% rename from packages/n3h-mod-spec/lib/dht-spec.js rename to lib/n3h-mod-spec/dht-spec.js index bd9f117..87d3a4e 100644 --- a/packages/n3h-mod-spec/lib/dht-spec.js +++ b/lib/n3h-mod-spec/dht-spec.js @@ -1,4 +1,4 @@ -const { AsyncClass, createEventSpec, type } = require('@holochain/n3h-common') +const { AsyncClass, createEventSpec, type } = require('../n3h-common') const DhtEvent = createEventSpec({ /** diff --git a/packages/n3h-mod-spec/lib/dht-spec.test.js b/lib/n3h-mod-spec/dht-spec.test.js similarity index 98% rename from packages/n3h-mod-spec/lib/dht-spec.test.js rename to lib/n3h-mod-spec/dht-spec.test.js index 31aac1c..792676f 100644 --- a/packages/n3h-mod-spec/lib/dht-spec.test.js +++ b/lib/n3h-mod-spec/dht-spec.test.js @@ -1,7 +1,7 @@ const { expect } = require('chai') const { Dht, DhtEvent } = require('./index') -const { AsyncClass } = require('@holochain/n3h-common') +const { AsyncClass } = require('../n3h-common') class DhtBackendMock extends AsyncClass { async init (spec) { diff --git a/packages/n3h-mod-spec/lib/index.js b/lib/n3h-mod-spec/index.js similarity index 88% rename from packages/n3h-mod-spec/lib/index.js rename to lib/n3h-mod-spec/index.js index 6c2d4c8..27cf74b 100644 --- a/packages/n3h-mod-spec/lib/index.js +++ b/lib/n3h-mod-spec/index.js @@ -1,4 +1,4 @@ -const { type } = require('@holochain/n3h-common') +const { type } = require('../n3h-common') const { URL } = require('url') type.addTerminal('url', v => typeof v === 'string' && !!new URL(v)) diff --git a/packages/n3h-mod-spec/lib/p2p-spec.js b/lib/n3h-mod-spec/p2p-spec.js similarity index 99% rename from packages/n3h-mod-spec/lib/p2p-spec.js rename to lib/n3h-mod-spec/p2p-spec.js index 066dbf5..77f214d 100644 --- a/packages/n3h-mod-spec/lib/p2p-spec.js +++ b/lib/n3h-mod-spec/p2p-spec.js @@ -3,7 +3,7 @@ const { Track, createEventSpec, type -} = require('@holochain/n3h-common') +} = require('../n3h-common') const P2pEvent = createEventSpec({ /** diff --git a/packages/n3h-mod-spec/lib/p2p-spec.test.js b/lib/n3h-mod-spec/p2p-spec.test.js similarity index 97% rename from packages/n3h-mod-spec/lib/p2p-spec.test.js rename to lib/n3h-mod-spec/p2p-spec.test.js index 8315ce7..991ea8e 100644 --- a/packages/n3h-mod-spec/lib/p2p-spec.test.js +++ b/lib/n3h-mod-spec/p2p-spec.test.js @@ -1,7 +1,7 @@ const { expect } = require('chai') const { P2p, P2pEvent } = require('./index') -const { AsyncClass, $sleep } = require('@holochain/n3h-common') +const { AsyncClass, $sleep } = require('../n3h-common') class P2pBackendMock extends AsyncClass { async init (spec, initOptions) { diff --git a/lib/tweetlog/index.js b/lib/tweetlog/index.js new file mode 100644 index 0000000..f29db98 --- /dev/null +++ b/lib/tweetlog/index.js @@ -0,0 +1 @@ +module.exports = exports = require('./tweetlog') diff --git a/packages/tweetlog/lib/tweetlog.js b/lib/tweetlog/tweetlog.js similarity index 100% rename from packages/tweetlog/lib/tweetlog.js rename to lib/tweetlog/tweetlog.js diff --git a/packages/tweetlog/lib/tweetlog.test.js b/lib/tweetlog/tweetlog.test.js similarity index 96% rename from packages/tweetlog/lib/tweetlog.test.js rename to lib/tweetlog/tweetlog.test.js index 16de41d..8c12e68 100644 --- a/packages/tweetlog/lib/tweetlog.test.js +++ b/lib/tweetlog/tweetlog.test.js @@ -101,13 +101,13 @@ describe('tweetlog Suite', () => { expect(s.callCount).equals(0) }) - it('should output to console.error', () => { + it.skip('should output to console.error', () => { logger.listen(logger.console) logger('test').e('test') expect(console.error.calledWith('(test) [e] test')).equals(true) }) - it('should output to console.log', () => { + it.skip('should output to console.log', () => { logger.listen(logger.console) logger('test').i('test') expect(console.log.calledWith('(test) [i] test')).equals(true) diff --git a/package-lock.json b/package-lock.json index 3ee684f..55e9c0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "version": "7.0.0-beta.51", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.51.tgz", "integrity": "sha1-vXHZsZKvl435FYKdOdQJRFZDmgw=", + "dev": true, "requires": { "@babel/highlight": "7.0.0-beta.51" } @@ -16,6 +17,7 @@ "version": "7.0.0-beta.51", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.51.tgz", "integrity": "sha1-bHV1/952HQdIXgS67cA5LG2eMPY=", + "dev": true, "requires": { "@babel/types": "7.0.0-beta.51", "jsesc": "^2.5.1", @@ -27,7 +29,8 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true } } }, @@ -35,6 +38,7 @@ "version": "7.0.0-beta.51", "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.51.tgz", "integrity": "sha1-IbSHSiJ8+Z7K/MMKkDAtpaJkBWE=", + "dev": true, "requires": { "@babel/helper-get-function-arity": "7.0.0-beta.51", "@babel/template": "7.0.0-beta.51", @@ -45,6 +49,7 @@ "version": "7.0.0-beta.51", "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.51.tgz", "integrity": "sha1-MoGy0EWvlcFyzpGyCCXYXqRnZBE=", + "dev": true, "requires": { "@babel/types": "7.0.0-beta.51" } @@ -53,6 +58,7 @@ "version": "7.0.0-beta.51", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.51.tgz", "integrity": "sha1-imw/ZsTSZTUvwHdIT59ugKUauXg=", + "dev": true, "requires": { "@babel/types": "7.0.0-beta.51" } @@ -61,6 +67,7 @@ "version": "7.0.0-beta.51", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.51.tgz", "integrity": "sha1-6IRK4loVlcz9QriWI7Q3bKBtIl0=", + "dev": true, "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", @@ -70,12 +77,14 @@ "@babel/parser": { "version": "7.0.0-beta.51", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.0.0-beta.51.tgz", - "integrity": "sha1-J87C30Cd9gr1gnDtj2qlVAnqhvY=" + "integrity": "sha1-J87C30Cd9gr1gnDtj2qlVAnqhvY=", + "dev": true }, "@babel/template": { "version": "7.0.0-beta.51", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.51.tgz", "integrity": "sha1-lgKkCuvPNXrpZ34lMu9fyBD1+/8=", + "dev": true, "requires": { "@babel/code-frame": "7.0.0-beta.51", "@babel/parser": "7.0.0-beta.51", @@ -87,6 +96,7 @@ "version": "7.0.0-beta.51", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.51.tgz", "integrity": "sha1-mB2vLOw0emIx06odnhgDsDqqpKg=", + "dev": true, "requires": { "@babel/code-frame": "7.0.0-beta.51", "@babel/generator": "7.0.0-beta.51", @@ -104,6 +114,7 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, "requires": { "ms": "^2.1.1" } @@ -111,7 +122,8 @@ "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true } } }, @@ -119,6 +131,7 @@ "version": "7.0.0-beta.51", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.51.tgz", "integrity": "sha1-2AK3tUO1g2x3iqaReXq/APPZfqk=", + "dev": true, "requires": { "esutils": "^2.0.2", "lodash": "^4.17.5", @@ -130,5817 +143,1864 @@ "resolved": "https://registry.npmjs.org/@holochain/n-bch-rs/-/n-bch-rs-0.0.4.tgz", "integrity": "sha512-iVyNz9IIO8LGnN7hbf7ih6Q9X9GsWd8VVINdxtYSkRrQrn6xFoCyU0KZK0MiThSX1mri6nJ9tPUHQKo2njkw5Q==" }, - "@lerna/add": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/add/-/add-3.5.0.tgz", - "integrity": "sha512-hoOqtal/ChEEtt9rxR/6xmyvTN7581XF4kWHoWPV9NbfZN9e8uTR8z4mCcJq2DiZhRuY7aA5FEROEbl12soowQ==", - "dev": true, - "requires": { - "@lerna/bootstrap": "^3.5.0", - "@lerna/command": "^3.5.0", - "@lerna/filter-options": "^3.5.0", - "@lerna/npm-conf": "^3.4.1", - "@lerna/validation-error": "^3.0.0", - "dedent": "^0.7.0", - "npm-package-arg": "^6.0.0", - "p-map": "^1.2.0", - "pacote": "^9.1.0", - "semver": "^5.5.0" - } - }, - "@lerna/batch-packages": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@lerna/batch-packages/-/batch-packages-3.1.2.tgz", - "integrity": "sha512-HAkpptrYeUVlBYbLScXgeCgk6BsNVXxDd53HVWgzzTWpXV4MHpbpeKrByyt7viXlNhW0w73jJbipb/QlFsHIhQ==", + "@sinonjs/commons": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.1.tgz", + "integrity": "sha512-rgmZk5CrBGAMATk0HlHOFvo8V44/r+On6cKS80tqid0Eljd+fFBWBOXZp9H2/EB3faxdNdzXTx6QZIKLkbJ7mA==", "dev": true, "requires": { - "@lerna/package-graph": "^3.1.2", - "@lerna/validation-error": "^3.0.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/bootstrap": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/bootstrap/-/bootstrap-3.5.0.tgz", - "integrity": "sha512-+z4kVVJFO5EGfC2ob/4C9LetqWwDtbhZgTRllr1+zOi/2clbD+WKcVI0ku+/ckzKjz783SOc83swX7RrmiLwMQ==", - "dev": true, - "requires": { - "@lerna/batch-packages": "^3.1.2", - "@lerna/command": "^3.5.0", - "@lerna/filter-options": "^3.5.0", - "@lerna/has-npm-version": "^3.3.0", - "@lerna/npm-conf": "^3.4.1", - "@lerna/npm-install": "^3.3.0", - "@lerna/rimraf-dir": "^3.3.0", - "@lerna/run-lifecycle": "^3.4.1", - "@lerna/run-parallel-batches": "^3.0.0", - "@lerna/symlink-binary": "^3.3.0", - "@lerna/symlink-dependencies": "^3.3.0", - "@lerna/validation-error": "^3.0.0", - "dedent": "^0.7.0", - "get-port": "^3.2.0", - "multimatch": "^2.1.0", - "npm-package-arg": "^6.0.0", - "npmlog": "^4.1.2", - "p-finally": "^1.0.0", - "p-map": "^1.2.0", - "p-map-series": "^1.0.0", - "p-waterfall": "^1.0.0", - "read-package-tree": "^5.1.6", - "semver": "^5.5.0" + "type-detect": "4.0.8" } }, - "@lerna/changed": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/changed/-/changed-3.5.0.tgz", - "integrity": "sha512-p9o7/hXwFAoet7UPeHIzIPonYxLHZe9bcNcjxKztZYAne5/OgmZiF4X1UPL2S12wtkT77WQy4Oz8NjRTczcapg==", + "@sinonjs/formatio": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.1.tgz", + "integrity": "sha512-tsHvOB24rvyvV2+zKMmPkZ7dXX6LSLKZ7aOtXY6Edklp0uRcgGpOsQTTGTcWViFyx4uhWc6GV8QdnALbIbIdeQ==", "dev": true, "requires": { - "@lerna/collect-updates": "^3.5.0", - "@lerna/command": "^3.5.0", - "@lerna/listable": "^3.0.0", - "@lerna/output": "^3.0.0", - "@lerna/version": "^3.5.0" + "@sinonjs/commons": "^1", + "@sinonjs/samsam": "^3.1.0" } }, - "@lerna/check-working-tree": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/check-working-tree/-/check-working-tree-3.5.0.tgz", - "integrity": "sha512-aWeIputHddeZgf7/wA1e5yuv6q9S5si2y7fzO2Ah7m3KyDyl8XHP1M0VSSDzZeiloYCryAYQAoRgcrdH65Vhow==", + "@sinonjs/samsam": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.2.0.tgz", + "integrity": "sha512-j5F1rScewLtx6pbTK0UAjA3jJj4RYiSKOix53YWv+Jzy/AZ69qHxUpU8fwVLjyKbEEud9QrLpv6Ggs7WqTimYw==", "dev": true, "requires": { - "@lerna/describe-ref": "^3.5.0", - "@lerna/validation-error": "^3.0.0" + "@sinonjs/commons": "^1.0.2", + "array-from": "^2.1.1", + "lodash": "^4.17.11" } }, - "@lerna/child-process": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lerna/child-process/-/child-process-3.3.0.tgz", - "integrity": "sha512-q2d/OPlNX/cBXB6Iz1932RFzOmOHq6ZzPjqebkINNaTojHWuuRpvJJY4Uz3NGpJ3kEtPDvBemkZqUBTSO5wb1g==", - "dev": true, - "requires": { - "chalk": "^2.3.1", - "execa": "^1.0.0", - "strong-log-transformer": "^2.0.0" - } + "@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "dev": true }, - "@lerna/clean": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/clean/-/clean-3.5.0.tgz", - "integrity": "sha512-bHUFF6Wv7ms81Tmwe56xk296oqU74Sg9NSkUCDG4kZLpYZx347Aw+89ZPTlaSmUwqCgEXKYLr65ZVVvKmflpcA==", - "dev": true, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "@lerna/command": "^3.5.0", - "@lerna/filter-options": "^3.5.0", - "@lerna/prompt": "^3.3.1", - "@lerna/rimraf-dir": "^3.3.0", - "p-map": "^1.2.0", - "p-map-series": "^1.0.0", - "p-waterfall": "^1.0.0" + "mime-types": "~2.1.18", + "negotiator": "0.6.1" } }, - "@lerna/cli": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@lerna/cli/-/cli-3.2.0.tgz", - "integrity": "sha512-JdbLyTxHqxUlrkI+Ke+ltXbtyA+MPu9zR6kg/n8Fl6uaez/2fZWtReXzYi8MgLxfUFa7+1OHWJv4eAMZlByJ+Q==", + "acorn": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", + "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "dev": true + }, + "acorn-jsx": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "dev": true + }, + "ajv": { + "version": "6.10.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", + "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", "dev": true, "requires": { - "@lerna/global-options": "^3.1.3", - "dedent": "^0.7.0", - "npmlog": "^4.1.2", - "yargs": "^12.0.1" + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, - "@lerna/collect-updates": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/collect-updates/-/collect-updates-3.5.0.tgz", - "integrity": "sha512-rFCng14K8vHyrDJSAacj6ABKKT/TxZdpL9uPEtZN7DsoJKlKPzqFeRvRGA2+ed/I6mEm4ltauEjEpKG5O6xqtw==", + "ajv-keywords": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.0.tgz", + "integrity": "sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw==", + "dev": true + }, + "ansi-escape-sequences": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.1.0.tgz", + "integrity": "sha512-dzW9kHxH011uBsidTXd14JXgzye/YLb2LzeKZ4bsgl/Knwx8AtbSFkkGxagdNOoh0DlqHCmfiEjWKBaqjOanVw==", "dev": true, "requires": { - "@lerna/child-process": "^3.3.0", - "@lerna/describe-ref": "^3.5.0", - "minimatch": "^3.0.4", - "npmlog": "^4.1.2", - "slash": "^1.0.0" - } - }, - "@lerna/command": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/command/-/command-3.5.0.tgz", - "integrity": "sha512-C/0e7qPbuKZ9vEqzRePksoKDJk4TOWzsU5qaPP/ikqc6vClJbKucsIehk3za6glSjlgLCJpzBTF2lFjHfb+JNw==", - "dev": true, - "requires": { - "@lerna/child-process": "^3.3.0", - "@lerna/package-graph": "^3.1.2", - "@lerna/project": "^3.5.0", - "@lerna/validation-error": "^3.0.0", - "@lerna/write-log-file": "^3.0.0", - "dedent": "^0.7.0", - "execa": "^1.0.0", - "is-ci": "^1.0.10", - "lodash": "^4.17.5", - "npmlog": "^4.1.2" + "array-back": "^3.0.1" + }, + "dependencies": { + "array-back": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.0.1.tgz", + "integrity": "sha512-nzD+aqgQPTZlUGH6tE8JEjYPpnuBUFghPbq6zEWBHUmCHGQKWD9pf1PIuc2bMBtzi2OoIaoTJwgBV3h0ztdrFg==", + "dev": true + } } }, - "@lerna/conventional-commits": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/conventional-commits/-/conventional-commits-3.5.0.tgz", - "integrity": "sha512-roKPILPYnDWiCDxOeBQ0cObJ2FbDgzJSToxr1ZwIqvJU5hGQ4RmooCf8GHcCW9maBJz7ETeestv8M2mBUgBPbg==", - "dev": true, - "requires": { - "@lerna/validation-error": "^3.0.0", - "conventional-changelog-angular": "^5.0.2", - "conventional-changelog-core": "^3.1.5", - "conventional-recommended-bump": "^4.0.4", - "fs-extra": "^7.0.0", - "get-stream": "^4.0.0", - "npm-package-arg": "^6.0.0", - "npmlog": "^4.1.2", - "semver": "^5.5.0" - } + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true }, - "@lerna/create": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-3.5.0.tgz", - "integrity": "sha512-ek4flHRmpMegZp9tP3RmuDhmMb9+/Hhy9B5eaZc5X5KWqDvFKJtn56sw+M9hNjiYehiimCwhaLWgE2WSikPvcQ==", - "dev": true, - "requires": { - "@lerna/child-process": "^3.3.0", - "@lerna/command": "^3.5.0", - "@lerna/npm-conf": "^3.4.1", - "@lerna/validation-error": "^3.0.0", - "camelcase": "^4.1.0", - "dedent": "^0.7.0", - "fs-extra": "^7.0.0", - "globby": "^8.0.1", - "init-package-json": "^1.10.3", - "npm-package-arg": "^6.0.0", - "pify": "^3.0.0", - "semver": "^5.5.0", - "slash": "^1.0.0", - "validate-npm-package-license": "^3.0.3", - "validate-npm-package-name": "^3.0.0", - "whatwg-url": "^7.0.0" - } + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true }, - "@lerna/create-symlink": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lerna/create-symlink/-/create-symlink-3.3.0.tgz", - "integrity": "sha512-0lb88Nnq1c/GG+fwybuReOnw3+ah4dB81PuWwWwuqUNPE0n50qUf/M/7FfSb5JEh/93fcdbZI0La8t3iysNW1w==", + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "cmd-shim": "^2.0.2", - "fs-extra": "^7.0.0", - "npmlog": "^4.1.2" + "color-convert": "^1.9.0" } }, - "@lerna/describe-ref": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/describe-ref/-/describe-ref-3.5.0.tgz", - "integrity": "sha512-XvecK2PSwUv4z+otib5moWJMI+h3mtAg8nFlfo4KbivVtD/sI11jfKsr3S75HuAwhVAa8tAijoAxmuBJSsTE1g==", + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "@lerna/child-process": "^3.3.0", - "npmlog": "^4.1.2" + "sprintf-js": "~1.0.2" } }, - "@lerna/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-iyZ0ZRPqH5Y5XEhOYoKS8H/8UXC/gZ/idlToMFHhUn1oTSd8v9HVU1c2xq1ge0u36ZH/fx/YydUk0A/KSv+p3Q==", + "argv-tools": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz", + "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==", "dev": true, "requires": { - "@lerna/child-process": "^3.3.0", - "@lerna/command": "^3.5.0", - "@lerna/validation-error": "^3.0.0", - "npmlog": "^4.1.2" + "array-back": "^2.0.0", + "find-replace": "^2.0.1" } }, - "@lerna/exec": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/exec/-/exec-3.5.0.tgz", - "integrity": "sha512-H5jeIueDiuNsxeuGKaP7HqTcenvMsFfBFeWr0W6knHv9NrOF8il34dBqYgApZEDSQ7+2fA3ghwWbF+jUGTSh/A==", + "array-back": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", + "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", "dev": true, "requires": { - "@lerna/batch-packages": "^3.1.2", - "@lerna/child-process": "^3.3.0", - "@lerna/command": "^3.5.0", - "@lerna/filter-options": "^3.5.0", - "@lerna/run-parallel-batches": "^3.0.0", - "@lerna/validation-error": "^3.0.0" + "typical": "^2.6.1" } }, - "@lerna/filter-options": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-options/-/filter-options-3.5.0.tgz", - "integrity": "sha512-7pEQy1i5ynYOYjcSeo+Qaps4+Ais55RRdnT6/SLLBgyyHAMziflFLX5TnoyEaaXoU90iKfQ5z/ioEp6dFAXSMg==", - "dev": true, - "requires": { - "@lerna/collect-updates": "^3.5.0", - "@lerna/filter-packages": "^3.0.0", - "dedent": "^0.7.0" - } + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "@lerna/filter-packages": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/filter-packages/-/filter-packages-3.0.0.tgz", - "integrity": "sha512-zwbY1J4uRjWRZ/FgYbtVkq7I3Nduwsg2V2HwLKSzwV2vPglfGqgovYOVkND6/xqe2BHwDX4IyA2+e7OJmLaLSA==", - "dev": true, - "requires": { - "@lerna/validation-error": "^3.0.0", - "multimatch": "^2.1.0", - "npmlog": "^4.1.2" - } + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", + "dev": true }, - "@lerna/get-npm-exec-opts": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.0.0.tgz", - "integrity": "sha512-arcYUm+4xS8J3Palhl+5rRJXnZnFHsLFKHBxznkPIxjwGQeAEw7df38uHdVjEQ+HNeFmHnBgSqfbxl1VIw5DHg==", + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", "dev": true, "requires": { - "npmlog": "^4.1.2" + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" } }, - "@lerna/global-options": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@lerna/global-options/-/global-options-3.1.3.tgz", - "integrity": "sha512-LVeZU/Zgc0XkHdGMRYn+EmHfDmmYNwYRv3ta59iCVFXLVp7FRFWF7oB1ss/WRa9x/pYU0o6L8as/5DomLUGASA==", + "assertion-error": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", + "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", "dev": true }, - "@lerna/has-npm-version": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lerna/has-npm-version/-/has-npm-version-3.3.0.tgz", - "integrity": "sha512-GX7omRep1eBRZHgjZLRw3MpBJSdA5gPZFz95P7rxhpvsiG384Tdrr/cKFMhm0A09yq27Tk/nuYTaZIj7HsVE6g==", + "async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", + "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", "dev": true, "requires": { - "@lerna/child-process": "^3.3.0", - "semver": "^5.5.0" + "lodash": "^4.17.11" } }, - "@lerna/import": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/import/-/import-3.5.0.tgz", - "integrity": "sha512-vgI6lMEzd1ODgi75cmAlfPYylaK37WY3E2fwKyO/lj6UKSGj46dVSK0KwTRHx33tu4PLvPzFi5C6nbY57o5ykQ==", - "dev": true, - "requires": { - "@lerna/child-process": "^3.3.0", - "@lerna/command": "^3.5.0", - "@lerna/prompt": "^3.3.1", - "@lerna/validation-error": "^3.0.0", - "dedent": "^0.7.0", - "fs-extra": "^7.0.0", - "p-map-series": "^1.0.0" - } + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" }, - "@lerna/init": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/init/-/init-3.5.0.tgz", - "integrity": "sha512-V21/UWj34Mph+9NxIGH1kYcuJAp+uFjfG8Ku2nMy62OGL3553+YQ+Izr+R6egY8y/99UMCDpi5gkQni5eGv3MA==", + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "@lerna/child-process": "^3.3.0", - "@lerna/command": "^3.5.0", - "fs-extra": "^7.0.0", - "p-map": "^1.2.0", - "write-json-file": "^2.3.0" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } } }, - "@lerna/link": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/link/-/link-3.5.0.tgz", - "integrity": "sha512-KSu1mhxwNRmguqMqUTJd4c7QIk9/xmxJxbmMkA71OaJd4fwondob6DyI/B17NIWutdLbvSWQ7pRlFOPxjQVoUw==", - "dev": true, - "requires": { - "@lerna/command": "^3.5.0", - "@lerna/package-graph": "^3.1.2", - "@lerna/symlink-dependencies": "^3.3.0", - "p-map": "^1.2.0", - "slash": "^1.0.0" - } + "babylon": { + "version": "7.0.0-beta.19", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz", + "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==", + "dev": true }, - "@lerna/list": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/list/-/list-3.5.0.tgz", - "integrity": "sha512-T+NZBQ/l6FmZklgrtFuN7luMs3AC/BoS52APOPrM7ZmxW4nenvov0xMwQW1783w/t365YDkDlYd5gM0nX3D1Hg==", - "dev": true, - "requires": { - "@lerna/command": "^3.5.0", - "@lerna/filter-options": "^3.5.0", - "@lerna/listable": "^3.0.0", - "@lerna/output": "^3.0.0" - } + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true }, - "@lerna/listable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/listable/-/listable-3.0.0.tgz", - "integrity": "sha512-HX/9hyx1HLg2kpiKXIUc1EimlkK1T58aKQ7ovO7rQdTx9ForpefoMzyLnHE1n4XrUtEszcSWJIICJ/F898M6Ag==", - "dev": true, + "base-x": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.5.tgz", + "integrity": "sha512-C3picSgzPSLE+jW3tcBzJoGwitOtazb5B+5YmAxZm2ybmTi9LNgAtDO/jjVEBZwHoXmDBZ9m/IELj3elJVRBcA==", "requires": { - "chalk": "^2.3.1", - "columnify": "^1.5.4" + "safe-buffer": "^5.0.1" } }, - "@lerna/log-packed": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@lerna/log-packed/-/log-packed-3.0.4.tgz", - "integrity": "sha512-vVQHgMagE2wnbxhNY9nFkdu+Cx2TsyWalkJfkxbNzmo6gOCrDsxCBDj9vTEV8Q+4aWx0C0Bsc0sB2Eb8y/+ofA==", - "dev": true, + "bip39": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-2.5.0.tgz", + "integrity": "sha512-xwIx/8JKoT2+IPJpFEfXoWdYwP7UVAoUxxLNfGCfVowaJE7yg1Y5B1BVPqlUNsBq5/nGwmFkwRJ8xDW4sX8OdA==", "requires": { - "byte-size": "^4.0.3", - "columnify": "^1.5.4", - "has-unicode": "^2.0.1", - "npmlog": "^4.1.2" + "create-hash": "^1.1.0", + "pbkdf2": "^3.0.9", + "randombytes": "^2.0.1", + "safe-buffer": "^5.0.1", + "unorm": "^1.3.3" } }, - "@lerna/npm-conf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@lerna/npm-conf/-/npm-conf-3.4.1.tgz", - "integrity": "sha512-i9G6DnbCqiAqxKx2rSXej/n14qxlV/XOebL6QZonxJKzNTB+Q2wglnhTXmfZXTPJfoqimLaY4NfAEtbOXRWOXQ==", - "dev": true, - "requires": { - "config-chain": "^1.1.11", - "pify": "^3.0.0" - } + "bluebird": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.3.tgz", + "integrity": "sha512-/qKPUQlaW1OyR51WeCPBvRnAlnZFUJkCSG5HzGnuIqhgyJtF+T94lFnn33eiazjRm2LAHVy2guNnaq48X9SJuw==", + "dev": true }, - "@lerna/npm-dist-tag": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-dist-tag/-/npm-dist-tag-3.3.0.tgz", - "integrity": "sha512-EtZJXzh3w5tqXEev+EBBPrWKWWn0WgJfxm4FihfS9VgyaAW8udIVZHGkIQ3f+tBtupcAzA9Q8cQNUkGF2efwmA==", - "dev": true, + "body-parser": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", "requires": { - "@lerna/child-process": "^3.3.0", - "@lerna/get-npm-exec-opts": "^3.0.0", - "npmlog": "^4.1.2" + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", + "on-finished": "~2.3.0", + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" } }, - "@lerna/npm-install": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-install/-/npm-install-3.3.0.tgz", - "integrity": "sha512-WoVvKdS8ltROTGSNQwo6NDq0YKnjwhvTG4li1okcN/eHKOS3tL9bxbgPx7No0wOq5DKBpdeS9KhAfee6LFAZ5g==", + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "@lerna/child-process": "^3.3.0", - "@lerna/get-npm-exec-opts": "^3.0.0", - "fs-extra": "^7.0.0", - "npm-package-arg": "^6.0.0", - "npmlog": "^4.1.2", - "signal-exit": "^3.0.2", - "write-pkg": "^3.1.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "@lerna/npm-publish": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@lerna/npm-publish/-/npm-publish-3.3.1.tgz", - "integrity": "sha512-bVTlWIcBL6Zpyzqvr9C7rxXYcoPw+l7IPz5eqQDNREj1R39Wj18OWB2KTJq8l7LIX7Wf4C2A1uT5hJaEf9BuvA==", - "dev": true, - "requires": { - "@lerna/child-process": "^3.3.0", - "@lerna/get-npm-exec-opts": "^3.0.0", - "@lerna/has-npm-version": "^3.3.0", - "@lerna/log-packed": "^3.0.4", - "fs-extra": "^7.0.0", - "npmlog": "^4.1.2", - "p-map": "^1.2.0" - } + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, - "@lerna/npm-run-script": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lerna/npm-run-script/-/npm-run-script-3.3.0.tgz", - "integrity": "sha512-YqDguWZzp4jIomaE4aWMUP7MIAJAFvRAf6ziQLpqwoQskfWLqK5mW0CcszT1oLjhfb3cY3MMfSTFaqwbdKmICg==", - "dev": true, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", "requires": { - "@lerna/child-process": "^3.3.0", - "@lerna/get-npm-exec-opts": "^3.0.0", - "npmlog": "^4.1.2" + "base-x": "^3.0.2" } }, - "@lerna/output": { + "bytes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/output/-/output-3.0.0.tgz", - "integrity": "sha512-EFxnSbO0zDEVKkTKpoCUAFcZjc3gn3DwPlyTDxbeqPU7neCfxP4rA4+0a6pcOfTlRS5kLBRMx79F2TRCaMM3DA==", - "dev": true, - "requires": { - "npmlog": "^4.1.2" - } + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, - "@lerna/package": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/package/-/package-3.0.0.tgz", - "integrity": "sha512-djzEJxzn212wS8d9znBnlXkeRlPL7GqeAYBykAmsuq51YGvaQK67Umh5ejdO0uxexF/4r7yRwgrlRHpQs8Rfqg==", + "cache-point": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cache-point/-/cache-point-0.4.1.tgz", + "integrity": "sha512-4TgWfe9SF+bUy5cCql8gWHqKNrviufNwSYxLjf2utB0pY4+bdcuFwMmY1hDB+67Gz/L1vmhFNhePAjJTFBtV+Q==", "dev": true, "requires": { - "npm-package-arg": "^6.0.0", - "write-pkg": "^3.1.0" + "array-back": "^2.0.0", + "fs-then-native": "^2.0.0", + "mkdirp2": "^1.0.3" } }, - "@lerna/package-graph": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@lerna/package-graph/-/package-graph-3.1.2.tgz", - "integrity": "sha512-9wIWb49I1IJmyjPdEVZQ13IAi9biGfH/OZHOC04U2zXGA0GLiY+B3CAx6FQvqkZ8xEGfqzmXnv3LvZ0bQfc1aQ==", + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", "dev": true, "requires": { - "@lerna/validation-error": "^3.0.0", - "npm-package-arg": "^6.0.0", - "semver": "^5.5.0" + "callsites": "^0.2.0" } }, - "@lerna/project": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/project/-/project-3.5.0.tgz", - "integrity": "sha512-uFDzqwrD7a/tTohQoo0voTsRy2cgl9D1ZOU2pHZzHzow9S1M8E0x5q3hJI2HlwsZry9IUugmDUGO6UddTjwm3Q==", - "dev": true, - "requires": { - "@lerna/package": "^3.0.0", - "@lerna/validation-error": "^3.0.0", - "cosmiconfig": "^5.0.2", - "dedent": "^0.7.0", - "dot-prop": "^4.2.0", - "glob-parent": "^3.1.0", - "globby": "^8.0.1", - "load-json-file": "^4.0.0", - "npmlog": "^4.1.2", - "p-map": "^1.2.0", - "resolve-from": "^4.0.0", - "write-json-file": "^2.3.0" - } - }, - "@lerna/prompt": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@lerna/prompt/-/prompt-3.3.1.tgz", - "integrity": "sha512-eJhofrUCUaItMIH6et8kI7YqHfhjWqGZoTsE+40NRCfAraOMWx+pDzfRfeoAl3qeRAH2HhNj1bkYn70FbUOxuQ==", - "dev": true, - "requires": { - "inquirer": "^6.2.0", - "npmlog": "^4.1.2" - } - }, - "@lerna/publish": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@lerna/publish/-/publish-3.5.1.tgz", - "integrity": "sha512-ltw2YdWWzev9cZRAzons5ywZh9NJARPX67meeA95oMDVMrhD4Y9VHQNJ3T8ueec/W78/4sKlMSr3ecWyPNp5bg==", - "dev": true, - "requires": { - "@lerna/batch-packages": "^3.1.2", - "@lerna/check-working-tree": "^3.5.0", - "@lerna/child-process": "^3.3.0", - "@lerna/collect-updates": "^3.5.0", - "@lerna/command": "^3.5.0", - "@lerna/describe-ref": "^3.5.0", - "@lerna/get-npm-exec-opts": "^3.0.0", - "@lerna/npm-conf": "^3.4.1", - "@lerna/npm-dist-tag": "^3.3.0", - "@lerna/npm-publish": "^3.3.1", - "@lerna/output": "^3.0.0", - "@lerna/prompt": "^3.3.1", - "@lerna/run-lifecycle": "^3.4.1", - "@lerna/run-parallel-batches": "^3.0.0", - "@lerna/validation-error": "^3.0.0", - "@lerna/version": "^3.5.0", - "fs-extra": "^7.0.0", - "libnpmaccess": "^3.0.0", - "npm-package-arg": "^6.0.0", - "npm-registry-fetch": "^3.8.0", - "npmlog": "^4.1.2", - "p-finally": "^1.0.0", - "p-map": "^1.2.0", - "p-pipe": "^1.2.0", - "p-reduce": "^1.0.0", - "semver": "^5.5.0" - } + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true }, - "@lerna/resolve-symlink": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lerna/resolve-symlink/-/resolve-symlink-3.3.0.tgz", - "integrity": "sha512-KmoPDcFJ2aOK2inYHbrsiO9SodedUj0L1JDvDgirVNIjMUaQe2Q6Vi4Gh+VCJcyB27JtfHioV9R2NxU72Pk2hg==", - "dev": true, - "requires": { - "fs-extra": "^7.0.0", - "npmlog": "^4.1.2", - "read-cmd-shim": "^1.0.1" - } + "camelize": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", + "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" }, - "@lerna/rimraf-dir": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lerna/rimraf-dir/-/rimraf-dir-3.3.0.tgz", - "integrity": "sha512-vSqOcZ4kZduiSprbt+y40qziyN3VKYh+ygiCdnbBbsaxpdKB6CfrSMUtrLhVFrqUfBHIZRzHIzgjTdtQex1KLw==", + "catharsis": { + "version": "0.8.9", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", + "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", "dev": true, "requires": { - "@lerna/child-process": "^3.3.0", - "npmlog": "^4.1.2", - "path-exists": "^3.0.0", - "rimraf": "^2.6.2" + "underscore-contrib": "~0.3.0" } }, - "@lerna/run": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/run/-/run-3.5.0.tgz", - "integrity": "sha512-BnPD52tj794xG2Xsc4FvgksyFX2CLmSR28TZw/xASEuy14NuQYMZkvbaj61SEhyOEsq7pLhHE5PpfbIv2AIFJw==", + "chai": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", + "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", "dev": true, "requires": { - "@lerna/batch-packages": "^3.1.2", - "@lerna/command": "^3.5.0", - "@lerna/filter-options": "^3.5.0", - "@lerna/npm-run-script": "^3.3.0", - "@lerna/output": "^3.0.0", - "@lerna/run-parallel-batches": "^3.0.0", - "@lerna/timer": "^3.5.0", - "@lerna/validation-error": "^3.0.0", - "p-map": "^1.2.0" + "assertion-error": "^1.1.0", + "check-error": "^1.0.2", + "deep-eql": "^3.0.1", + "get-func-name": "^2.0.0", + "pathval": "^1.1.0", + "type-detect": "^4.0.5" } }, - "@lerna/run-lifecycle": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@lerna/run-lifecycle/-/run-lifecycle-3.4.1.tgz", - "integrity": "sha512-N/hi2srM9A4BWEkXccP7vCEbf4MmIuALF00DTBMvc0A/ccItwUpl3XNuM7+ADDRK0mkwE3hDw89lJ3A7f8oUQw==", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { - "@lerna/npm-conf": "^3.4.1", - "npm-lifecycle": "^2.0.0", - "npmlog": "^4.1.2" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, - "@lerna/run-parallel-batches": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/run-parallel-batches/-/run-parallel-batches-3.0.0.tgz", - "integrity": "sha512-Mj1ravlXF7AkkewKd9YFq9BtVrsStNrvVLedD/b2wIVbNqcxp8lS68vehXVOzoL/VWNEDotvqCQtyDBilCodGw==", - "dev": true, - "requires": { - "p-map": "^1.2.0", - "p-map-series": "^1.0.0" - } + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true }, - "@lerna/symlink-binary": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-binary/-/symlink-binary-3.3.0.tgz", - "integrity": "sha512-zRo6CimhvH/VJqCFl9T4IC6syjpWyQIxEfO2sBhrapEcfwjtwbhoGgKwucsvt4rIpFazCw63jQ/AXMT27KUIHg==", - "dev": true, - "requires": { - "@lerna/create-symlink": "^3.3.0", - "@lerna/package": "^3.0.0", - "fs-extra": "^7.0.0", - "p-map": "^1.2.0", - "read-pkg": "^3.0.0" - } + "check-error": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", + "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", + "dev": true }, - "@lerna/symlink-dependencies": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@lerna/symlink-dependencies/-/symlink-dependencies-3.3.0.tgz", - "integrity": "sha512-IRngSNCmuD5uBKVv23tHMvr7Mplti0lKHilFKcvhbvhAfu6m/Vclxhkfs/uLyHzG+DeRpl/9o86SQET3h4XDhg==", - "dev": true, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "requires": { - "@lerna/create-symlink": "^3.3.0", - "@lerna/resolve-symlink": "^3.3.0", - "@lerna/symlink-binary": "^3.3.0", - "fs-extra": "^7.0.0", - "p-finally": "^1.0.0", - "p-map": "^1.2.0", - "p-map-series": "^1.0.0" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "@lerna/timer": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/timer/-/timer-3.5.0.tgz", - "integrity": "sha512-TAb99hqQN6E3JBGtG9iyZNPq1/DbmqgBOeNrKtdJsGvIeX/NGLgUDWMrj2h04V4O+jpBFmSf6HIld6triKmxCA==", + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", "dev": true }, - "@lerna/validation-error": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/validation-error/-/validation-error-3.0.0.tgz", - "integrity": "sha512-5wjkd2PszV0kWvH+EOKZJWlHEqCTTKrWsvfHnHhcUaKBe/NagPZFWs+0xlsDPZ3DJt5FNfbAPAnEBQ05zLirFA==", + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "npmlog": "^4.1.2" + "restore-cursor": "^2.0.0" } }, - "@lerna/version": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/@lerna/version/-/version-3.5.0.tgz", - "integrity": "sha512-vxuGkUSfjJuvOIgPG7SDXVmk4GPwJF9F+uhDW9T/wJzTk4UaxL37GpBeJDo43eutQ7mwluP+t88Luwf8S3WXlA==", - "dev": true, - "requires": { - "@lerna/batch-packages": "^3.1.2", - "@lerna/check-working-tree": "^3.5.0", - "@lerna/child-process": "^3.3.0", - "@lerna/collect-updates": "^3.5.0", - "@lerna/command": "^3.5.0", - "@lerna/conventional-commits": "^3.5.0", - "@lerna/output": "^3.0.0", - "@lerna/prompt": "^3.3.1", - "@lerna/run-lifecycle": "^3.4.1", - "@lerna/validation-error": "^3.0.0", - "chalk": "^2.3.1", - "dedent": "^0.7.0", - "minimatch": "^3.0.4", - "npmlog": "^4.1.2", - "p-map": "^1.2.0", - "p-pipe": "^1.2.0", - "p-reduce": "^1.0.0", - "p-waterfall": "^1.0.0", - "semver": "^5.5.0", - "slash": "^1.0.0", - "temp-write": "^3.4.0" - } + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true }, - "@lerna/write-log-file": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@lerna/write-log-file/-/write-log-file-3.0.0.tgz", - "integrity": "sha512-SfbPp29lMeEVOb/M16lJwn4nnx5y+TwCdd7Uom9umd7KcZP0NOvpnX0PHehdonl7TyHZ1Xx2maklYuCLbQrd/A==", + "collect-all": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-all/-/collect-all-1.0.3.tgz", + "integrity": "sha512-0y0rBgoX8IzIjBAUnO73SEtSb4Mhk3IoceWJq5zZSxb9mWORhWH8xLYo4EDSOE1jRBk1LhmfjqWFFt10h/+MEA==", "dev": true, "requires": { - "npmlog": "^4.1.2", - "write-file-atomic": "^2.3.0" + "stream-connect": "^1.0.2", + "stream-via": "^1.0.4" } }, - "@mrmlnc/readdir-enhanced": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", - "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { - "call-me-maybe": "^1.0.1", - "glob-to-regexp": "^0.3.0" + "color-name": "1.1.3" } }, - "@nodelib/fs.stat": { + "color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, - "@nodeutils/defaults-deep": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@nodeutils/defaults-deep/-/defaults-deep-1.1.0.tgz", - "integrity": "sha1-uxEk3I184LxdodZorOWBSSWO8gs=", - "requires": { - "lodash": "^4.15.0" - } - }, - "@sinonjs/commons": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.3.0.tgz", - "integrity": "sha512-j4ZwhaHmwsCb4DlDOIWnI5YyKDNMoNThsmwEpfHx6a1EpsGZ9qYLxP++LMlmBRjtGptGHFsGItJ768snllFWpA==", - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/formatio": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.1.0.tgz", - "integrity": "sha512-ZAR2bPHOl4Xg6eklUGpsdiIJ4+J1SNag1DHHrG/73Uz/nVwXqjgUtRPLoS+aVyieN9cSbc0E4LsU984tWcDyNg==", - "requires": { - "@sinonjs/samsam": "^2 || ^3" - } - }, - "@sinonjs/samsam": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.0.2.tgz", - "integrity": "sha512-m08g4CS3J6lwRQk1pj1EO+KEVWbrbXsmi9Pw0ySmrIbcVxVaedoFgLvFsV8wHLwh01EpROVz3KvVcD1Jmks9FQ==", - "requires": { - "@sinonjs/commons": "^1.0.2", - "array-from": "^2.1.1", - "lodash.get": "^4.4.2" - } + "colors": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", + "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", + "dev": true }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "command-line-args": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz", + "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==", "dev": true, "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - } - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "accepts": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", - "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", - "requires": { - "mime-types": "~2.1.18", - "negotiator": "0.6.1" + "argv-tools": "^0.1.1", + "array-back": "^2.0.0", + "find-replace": "^2.0.1", + "lodash.camelcase": "^4.3.0", + "typical": "^2.6.1" } }, - "acorn": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz", - "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==", - "dev": true - }, - "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", - "dev": true - }, - "agent-base": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", - "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "command-line-tool": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/command-line-tool/-/command-line-tool-0.8.0.tgz", + "integrity": "sha512-Xw18HVx/QzQV3Sc5k1vy3kgtOeGmsKIqwtFFoyjI4bbcpSgnw2CWVULvtakyw4s6fhyAdI6soQQhXc2OzJy62g==", "dev": true, "requires": { - "es6-promisify": "^5.0.0" + "ansi-escape-sequences": "^4.0.0", + "array-back": "^2.0.0", + "command-line-args": "^5.0.0", + "command-line-usage": "^4.1.0", + "typical": "^2.6.1" } }, - "agentkeepalive": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", - "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "command-line-usage": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz", + "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==", "dev": true, "requires": { - "humanize-ms": "^1.2.1" + "ansi-escape-sequences": "^4.0.0", + "array-back": "^2.0.0", + "table-layout": "^0.4.2", + "typical": "^2.6.1" } }, - "ajv": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz", - "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==", + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", "dev": true, - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } + "optional": true }, - "ajv-keywords": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", - "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "common-sequence": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/common-sequence/-/common-sequence-1.0.2.tgz", + "integrity": "sha1-MOB/P49vf5s97oVPILLTnu4Ibeg=", "dev": true }, - "ansi-escape-sequences": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-4.0.1.tgz", - "integrity": "sha512-G3Aona26cXv8nWIwID6MP11WSishqnyOPQjYaVJ7CfY2Xgu5sHOXM39nQg6XtyfF9++oLV6l2uFGojBb4zglGA==", + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "config-master": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/config-master/-/config-master-3.1.0.tgz", + "integrity": "sha1-ZnZjWQUFooO/JqSE1oSJ10xUhdo=", "dev": true, "requires": { - "array-back": "^2.0.0" + "walk-back": "^2.0.1" + }, + "dependencies": { + "walk-back": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-2.0.1.tgz", + "integrity": "sha1-VU4qnYdPrEeoywBr9EwvDEmYoKQ=", + "dev": true + } } }, - "ansi-escapes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", "dev": true }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + "content-security-policy-builder": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.0.0.tgz", + "integrity": "sha512-j+Nhmj1yfZAikJLImCvPJFE29x/UuBi+/MWqggGGc515JKaZrjuei2RhULJmy0MsstW3E3htl002bwmBNMKr7w==" }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "requires": { - "sprintf-js": "~1.0.2" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, - "argv-tools": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.1.tgz", - "integrity": "sha512-Cc0dBvx4dvrjjKpyDA6w8RlNAw8Su30NvZbWl/Tv9ZALEVlLVkWQiHMi84Q0xNfpVuSaiQbYkdmWK8g1PLGhKw==", + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "array-back": "^2.0.0", - "find-replace": "^2.0.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "cycle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", + "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", "dev": true }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true + "dasherize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", + "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "debug-log": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", + "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", "dev": true }, - "array-back": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", - "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", + "deep-eql": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", + "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { - "typical": "^2.6.1" + "type-detect": "^4.0.0" } }, - "array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "deep-equal": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz", + "integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0=", "dev": true }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "array-from": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", - "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=" - }, - "array-ify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", "dev": true }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" + "object-keys": "^1.0.12" } }, - "array-union": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", - "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "deglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz", + "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==", "dev": true, "requires": { - "array-uniq": "^1.0.1" + "find-root": "^1.0.0", + "glob": "^7.0.5", + "ignore": "^3.0.9", + "pkg-config": "^1.1.0", + "run-parallel": "^1.1.2", + "uniq": "^1.0.1" + }, + "dependencies": { + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + } } }, - "array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dmd": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/dmd/-/dmd-3.0.13.tgz", + "integrity": "sha512-FV/417bH2c/CYpe8BjFEAHoaHaItcJnPlKELi/qyPZdmUom8joyuC78OhhfPUdyKD/WcouTQ2LxQT4M/RoiJ3w==", + "dev": true, "requires": { - "safer-buffer": "~2.1.0" + "array-back": "^2.0.0", + "cache-point": "^0.4.1", + "common-sequence": "^1.0.2", + "file-set": "^2.0.0", + "handlebars": "^4.0.11", + "marked": "^0.3.16", + "object-get": "^2.1.0", + "reduce-flatten": "^1.0.1", + "reduce-unique": "^1.0.0", + "reduce-without": "^1.0.1", + "test-value": "^3.0.0", + "walk-back": "^3.0.0" } }, - "asn1.js": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.0.1.tgz", - "integrity": "sha512-aO8EaEgbgqq77IEw+1jfx5c9zTbzvkfuRBuZsSsPnTHMkmd5AI4J6OtITLZFa381jReeaQL67J0GBTUu0+ZTVw==", + "dns-prefetch-control": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz", + "integrity": "sha1-YN20V3dOF48flBXwyrsOhbCzALI=" + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "esutils": "^2.0.2" } }, - "assert-plus": { + "dont-sniff-mimetype": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz", + "integrity": "sha1-WTKJDcn04vGeXrAqIAJuXl78j1g=" }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==" + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, - "async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", - "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, "requires": { - "lodash": "^4.17.10" + "is-arrayish": "^0.2.1" } }, - "async-limiter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", - "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "es-abstract": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.0", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" + } }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "es-to-primitive": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", + "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "eslint": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.4.0.tgz", + "integrity": "sha512-UIpL91XGex3qtL6qwyCQJar2j3osKxK9e3ano3OcGEIRM4oWIpCkDg9x95AXEC2wMs7PnxzOkPZ2gq+tsMS9yg==", "dev": true, "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" + "ajv": "^6.5.0", + "babel-code-frame": "^6.26.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^4.0.0", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^4.0.0", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.2", + "imurmurhash": "^0.1.4", + "inquirer": "^5.2.0", + "is-resolvable": "^1.1.0", + "js-yaml": "^3.11.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.5", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^2.0.0", + "require-uncached": "^1.0.3", + "semver": "^5.5.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^4.0.3", + "text-table": "^0.2.0" }, "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" + "ms": "^2.1.1" } }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true } } }, - "babylon": { - "version": "7.0.0-beta.19", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz", - "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A==", + "eslint-config-standard": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz", + "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==", "dev": true }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "eslint-config-standard-jsx": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-6.0.2.tgz", + "integrity": "sha512-D+YWAoXw+2GIdbMBRAzWwr1ZtvnSf4n4yL0gKGg7ShUOGXkSOLerI17K4F6LdQMJPNMoWYqepzQD/fKY+tXNSg==", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + } + }, + "eslint-module-utils": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz", + "integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==", + "dev": true, + "requires": { + "debug": "^2.6.8", + "pkg-dir": "^2.0.0" + } + }, + "eslint-plugin-es": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz", + "integrity": "sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==", + "dev": true, + "requires": { + "eslint-utils": "^1.3.0", + "regexpp": "^2.0.1" + } }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "eslint-plugin-import": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", + "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", "dev": true, "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" + "contains-path": "^0.1.0", + "debug": "^2.6.8", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.1", + "eslint-module-utils": "^2.2.0", + "has": "^1.0.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.3", + "read-pkg-up": "^2.0.0", + "resolve": "^1.6.0" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } } } }, - "base-x": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.5.tgz", - "integrity": "sha512-C3picSgzPSLE+jW3tcBzJoGwitOtazb5B+5YmAxZm2ybmTi9LNgAtDO/jjVEBZwHoXmDBZ9m/IELj3elJVRBcA==", + "eslint-plugin-node": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz", + "integrity": "sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw==", + "dev": true, "requires": { - "safe-buffer": "^5.0.1" + "eslint-plugin-es": "^1.3.1", + "eslint-utils": "^1.3.1", + "ignore": "^4.0.2", + "minimatch": "^3.0.4", + "resolve": "^1.8.1", + "semver": "^5.5.0" } }, - "base32.js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base32.js/-/base32.js-0.1.0.tgz", - "integrity": "sha1-tYLexpPC8R6JPPBk7mrFthMaIgI=" + "eslint-plugin-promise": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz", + "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==", + "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "eslint-plugin-react": { + "version": "7.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz", + "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==", + "dev": true, "requires": { - "tweetnacl": "^0.14.3" + "array-includes": "^3.0.3", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.0.1", + "prop-types": "^15.6.2" } }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "bindings": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.1.tgz", - "integrity": "sha512-i47mqjF9UbjxJhxGf+pZ6kSxrnI3wBLlnGI2ArWJ4r0VrvDS7ZYXkprq/pLaBWYq4GM0r4zdHY+NNRqEMU7uew==" + "eslint-plugin-standard": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz", + "integrity": "sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==", + "dev": true }, - "bip39": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-2.5.0.tgz", - "integrity": "sha512-xwIx/8JKoT2+IPJpFEfXoWdYwP7UVAoUxxLNfGCfVowaJE7yg1Y5B1BVPqlUNsBq5/nGwmFkwRJ8xDW4sX8OdA==", + "eslint-scope": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz", + "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==", + "dev": true, "requires": { - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1", - "safe-buffer": "^5.0.1", - "unorm": "^1.3.3" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, - "bip66": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/bip66/-/bip66-1.1.5.tgz", - "integrity": "sha1-AfqHSHhcpwlV1QESF9GzE5lpyiI=", + "eslint-utils": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", + "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", + "dev": true + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", + "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", + "dev": true, "requires": { - "safe-buffer": "^5.0.1" + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" } }, - "bl": { - "version": "1.2.2", - "resolved": "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz", - "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" + "estraverse": "^4.0.0" } }, - "blakejs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.0.tgz", - "integrity": "sha1-ad+S75U6qIylGjLfarHFShVfx6U=" - }, - "block-stream": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "inherits": "~2.0.0" + "estraverse": "^4.1.0" } }, - "bluebird": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz", - "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==", + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", "dev": true }, - "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true }, - "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=", - "requires": { - "bytes": "3.0.0", + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "event-lite": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/event-lite/-/event-lite-0.1.2.tgz", + "integrity": "sha512-HnSYx1BsJ87/p6swwzv+2v6B4X+uxUteoDfRxsAb1S1BePzQqOLevVmkdA15GHJVd9A9Ok6wygUR18Hu0YeV9g==" + }, + "expect-ct": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.1.1.tgz", + "integrity": "sha512-ngXzTfoRGG7fYens3/RMb6yYoVLvLMfmsSllP/mZPxNHgFq41TmPSLF/nLY7fwoclI2vElvAmILFWGUYqdjfCg==" + }, + "express": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "requires": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.4", "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } + "range-parser": "~1.2.0", + "safe-buffer": "5.1.2", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" } }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "express-ws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/express-ws/-/express-ws-4.0.0.tgz", + "integrity": "sha512-KEyUw8AwRET2iFjFsI1EJQrJ/fHeGiJtgpYgEWG3yDv4l/To/m3a2GaYfeGyB3lsWdvbesjF5XCMx+SVBgAAYw==", "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "ws": "^5.2.0" }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, + "ws": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", + "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", "requires": { - "is-extendable": "^0.1.0" + "async-limiter": "~1.0.0" } } } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=" - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==" - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha1-vhYedsNU9veIrkBx9j806MTwpCo=", - "requires": { - "base-x": "^3.0.2" - } - }, - "buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "requires": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" - }, - "buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" - }, - "buffer-indexof": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-0.0.2.tgz", - "integrity": "sha1-7Q82t64WamanzRdMBGeuje3wCPU=" - }, - "buffer-split": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-split/-/buffer-split-1.0.0.tgz", - "integrity": "sha1-RCfb/1NzG2HXpxq6R/UDOWYTeEo=", + "external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, "requires": { - "buffer-indexof": "~0.0.0" + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" } }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=" - }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", "dev": true }, - "builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", "dev": true }, - "byline": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/byline/-/byline-5.0.0.tgz", - "integrity": "sha1-dBxSFkaOrcRXsDQQEYrXfejB3bE=", + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, - "byte-size": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-4.0.4.tgz", - "integrity": "sha512-82RPeneC6nqCdSwCX2hZUz3JPOvN5at/nTEw/CMf05Smu3Hrpo9Psb7LjN+k+XndNArG1EY8L4+BM3aTM4BCvw==", + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + "feature-policy": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.2.0.tgz", + "integrity": "sha512-2hGrlv6efG4hscYVZeaYjpzpT6I2OZgYqE2yDUzeAcKj2D1SH0AsEzqJNXzdoglEddcIXQQYop3lD97XpG75Jw==" }, - "cacache": { - "version": "11.3.1", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.1.tgz", - "integrity": "sha512-2PEw4cRRDu+iQvBTTuttQifacYjLPhET+SYO/gEFMy8uhi+jlJREDAjSF5FWSdV/Aw5h18caHA7vMTw2c+wDzA==", + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "bluebird": "^3.5.1", - "chownr": "^1.0.1", - "figgy-pudding": "^3.1.0", - "glob": "^7.1.2", - "graceful-fs": "^4.1.11", - "lru-cache": "^4.1.3", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.2", - "ssri": "^6.0.0", - "unique-filename": "^1.1.0", - "y18n": "^4.0.0" + "escape-string-regexp": "^1.0.5" } }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", "dev": true, "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" } }, - "cache-point": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cache-point/-/cache-point-0.4.1.tgz", - "integrity": "sha512-4TgWfe9SF+bUy5cCql8gWHqKNrviufNwSYxLjf2utB0pY4+bdcuFwMmY1hDB+67Gz/L1vmhFNhePAjJTFBtV+Q==", + "file-set": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/file-set/-/file-set-2.0.1.tgz", + "integrity": "sha512-XgOUUpgR6FbbfYcniLw0qm1Am7PnNYIAkd+eXxRt42LiYhjaso0WiuQ+VmrNdtwotyM+cLCfZ56AZrySP3QnKA==", "dev": true, "requires": { "array-back": "^2.0.0", - "fs-then-native": "^2.0.0", - "mkdirp2": "^1.0.3" + "glob": "^7.1.3" } }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "caller-callsite": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", - "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", - "dev": true, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "requires": { - "callsites": "^2.0.0" - }, - "dependencies": { - "callsites": { - "version": "2.0.0", - "resolved": "http://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", - "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", - "dev": true - } + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" } }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "find-replace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz", + "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==", "dev": true, "requires": { - "callsites": "^0.2.0" + "array-back": "^2.0.0", + "test-value": "^3.0.0" } }, - "callsites": { - "version": "0.2.0", - "resolved": "http://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true - }, - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", "dev": true }, - "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "camelcase": "^4.1.0", - "map-obj": "^2.0.0", - "quick-lru": "^1.0.0" + "locate-path": "^2.0.0" } }, - "camelize": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz", - "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=" - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "catharsis": { - "version": "0.8.9", - "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.9.tgz", - "integrity": "sha1-mMyJDKZS3S7w5ws3klMQ/56Q/Is=", + "flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", "dev": true, "requires": { - "underscore-contrib": "~0.3.0" + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" } }, - "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^3.0.1", - "get-func-name": "^2.0.0", - "pathval": "^1.1.0", - "type-detect": "^4.0.5" - } + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } + "frameguard": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.0.0.tgz", + "integrity": "sha1-e8rUae57lukdEs6zlZx4I1qScuk=" }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs-then-native": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fs-then-native/-/fs-then-native-2.0.0.tgz", + "integrity": "sha1-GaEk2U2QwiyOBF8ujdbr6jbUjGc=", "dev": true }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=" + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, - "chownr": { + "function-bind": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==" + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true }, - "chunky": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/chunky/-/chunky-0.0.0.tgz", - "integrity": "sha1-HnWAojwIOJfSrWYkWefv2EZfYIo=" + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true }, - "ci-info": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz", - "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "get-func-name": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", + "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=", "dev": true }, - "cids": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/cids/-/cids-0.5.7.tgz", - "integrity": "sha512-SlAz4p8XMEW3mhwiYbzfjn+5+Y//+kIuHqzRUytK0a3uGBnsjJb76xHliehv0HcVMCjRKv2vZnPTwd4QX+IcMA==", - "requires": { - "class-is": "^1.1.0", - "multibase": "~0.6.0", - "multicodec": "~0.2.7", - "multihashes": "~0.4.14" - } + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "globals": { + "version": "11.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz", + "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==", "dev": true }, - "class-is": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/class-is/-/class-is-1.1.0.tgz", - "integrity": "sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw==" + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true + }, + "handlebars": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz", + "integrity": "sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==", "dev": true, "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "async": "^2.5.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" } }, - "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { - "restore-cursor": "^2.0.0" + "function-bind": "^1.1.1" } }, - "cli-width": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true - }, - "cliui": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", - "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "string-width": "^2.1.1", - "strip-ansi": "^4.0.0", - "wrap-ansi": "^2.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } + "ansi-regex": "^2.0.0" } }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "dev": true }, - "cmd-shim": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-2.0.2.tgz", - "integrity": "sha1-b8vamUg6j9FdfTChlspp1oii79s=", - "dev": true, + "has-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "dev": true + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "requires": { - "graceful-fs": "^4.1.2", - "mkdirp": "~0.5.0" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true }, - "collect-all": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/collect-all/-/collect-all-1.0.3.tgz", - "integrity": "sha512-0y0rBgoX8IzIjBAUnO73SEtSb4Mhk3IoceWJq5zZSxb9mWORhWH8xLYo4EDSOE1jRBk1LhmfjqWFFt10h/+MEA==", - "dev": true, + "helmet": { + "version": "3.15.1", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.15.1.tgz", + "integrity": "sha512-hgoNe/sjKlKNvJ3g9Gz149H14BjMMWOCmW/DTXl7IfyKGtIK37GePwZrHNfr4aPXdKVyXcTj26RgRFbPKDy9lw==", "requires": { - "stream-connect": "^1.0.2", - "stream-via": "^1.0.4" + "depd": "2.0.0", + "dns-prefetch-control": "0.1.0", + "dont-sniff-mimetype": "1.0.0", + "expect-ct": "0.1.1", + "feature-policy": "0.2.0", + "frameguard": "3.0.0", + "helmet-crossdomain": "0.3.0", + "helmet-csp": "2.7.1", + "hide-powered-by": "1.0.0", + "hpkp": "2.0.0", + "hsts": "2.1.0", + "ienoopen": "1.0.0", + "nocache": "2.0.0", + "referrer-policy": "1.1.0", + "x-xss-protection": "1.1.0" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + } } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - } + "helmet-crossdomain": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/helmet-crossdomain/-/helmet-crossdomain-0.3.0.tgz", + "integrity": "sha512-YiXhj0E35nC4Na5EPE4mTfoXMf9JTGpN4OtB4aLqShKuH9d2HNaJX5MQoglO6STVka0uMsHyG5lCut5Kzsy7Lg==" }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "helmet-csp": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.7.1.tgz", + "integrity": "sha512-sCHwywg4daQ2mY0YYwXSZRsgcCeerUwxMwNixGA7aMLkVmPTYBl7gJoZDHOZyXkqPrtuDT3s2B1A+RLI7WxSdQ==", "requires": { - "color-name": "1.1.3" + "camelize": "1.0.0", + "content-security-policy-builder": "2.0.0", + "dasherize": "2.0.0", + "platform": "1.3.5" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + "hide-powered-by": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.0.0.tgz", + "integrity": "sha1-SoWtZYgfYoV/xwr3F0oRhNzM4ys=" }, - "colors": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.2.tgz", - "integrity": "sha512-rhP0JSBGYvpcNQj4s5AdShMeE5ahMop96cTeDl/v9qQQm2fYClE2QXZRi8wLzc+GmXSxdIqqbOIAhyObEXDbfQ==", + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", "dev": true }, - "columnify": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.5.4.tgz", - "integrity": "sha1-Rzfd8ce2mop8NAVweC6UfuyOeLs=", - "dev": true, - "requires": { - "strip-ansi": "^3.0.0", - "wcwidth": "^1.0.0" - } + "hpkp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz", + "integrity": "sha1-EOFCJk52IVpdMMROxD3mTe5tFnI=" }, - "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "hsts": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hsts/-/hsts-2.1.0.tgz", + "integrity": "sha512-zXhh/DqgrTXJ7erTN6Fh5k/xjMhDGXCqdYN3wvxUvGUQvnxcFfUd8E+6vLg/nk3ss1TYMb+DhRl25fYABioTvA==" + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "delayed-stream": "~1.0.0" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" } }, - "command-line-args": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz", - "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==", - "dev": true, + "i": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", + "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "requires": { - "argv-tools": "^0.1.1", - "array-back": "^2.0.0", - "find-replace": "^2.0.1", - "lodash.camelcase": "^4.3.0", - "typical": "^2.6.1" + "safer-buffer": ">= 2.1.2 < 3" } }, - "command-line-tool": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/command-line-tool/-/command-line-tool-0.8.0.tgz", - "integrity": "sha512-Xw18HVx/QzQV3Sc5k1vy3kgtOeGmsKIqwtFFoyjI4bbcpSgnw2CWVULvtakyw4s6fhyAdI6soQQhXc2OzJy62g==", - "dev": true, - "requires": { - "ansi-escape-sequences": "^4.0.0", - "array-back": "^2.0.0", - "command-line-args": "^5.0.0", - "command-line-usage": "^4.1.0", - "typical": "^2.6.1" - } + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" }, - "command-line-usage": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-4.1.0.tgz", - "integrity": "sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==", - "dev": true, - "requires": { - "ansi-escape-sequences": "^4.0.0", - "array-back": "^2.0.0", - "table-layout": "^0.4.2", - "typical": "^2.6.1" - } + "ienoopen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.0.0.tgz", + "integrity": "sha1-NGpCj0dKrI9QzzeE6i0PFvYr2ms=" }, - "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", - "dev": true, - "optional": true + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true }, - "common-sequence": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/common-sequence/-/common-sequence-1.0.2.tgz", - "integrity": "sha1-MOB/P49vf5s97oVPILLTnu4Ibeg=", + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, - "compare-func": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-1.3.2.tgz", - "integrity": "sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg=", + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "array-ify": "^1.0.0", - "dot-prop": "^3.0.0" - }, - "dependencies": { - "dot-prop": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-3.0.0.tgz", - "integrity": "sha1-G3CK8JSknJoOfbyteQq6U52sEXc=", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - } + "once": "^1.3.0", + "wrappy": "1" } }, - "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, - "config-chain": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.12.tgz", - "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", - "dev": true, - "requires": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, - "config-master": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/config-master/-/config-master-3.1.0.tgz", - "integrity": "sha1-ZnZjWQUFooO/JqSE1oSJ10xUhdo=", + "inquirer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", + "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", "dev": true, "requires": { - "walk-back": "^2.0.1" + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.1.0", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^5.5.2", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" }, "dependencies": { - "walk-back": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-2.0.1.tgz", - "integrity": "sha1-VU4qnYdPrEeoywBr9EwvDEmYoKQ=", + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", "dev": true } } }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" - }, - "content-security-policy-builder": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/content-security-policy-builder/-/content-security-policy-builder-2.0.0.tgz", - "integrity": "sha512-j+Nhmj1yfZAikJLImCvPJFE29x/UuBi+/MWqggGGc515JKaZrjuei2RhULJmy0MsstW3E3htl002bwmBNMKr7w==" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "conventional-changelog-angular": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.2.tgz", - "integrity": "sha512-yx7m7lVrXmt4nKWQgWZqxSALEiAKZhOAcbxdUaU9575mB0CzXVbgrgpfSnSP7OqWDUTYGD0YVJ0MSRdyOPgAwA==", - "dev": true, - "requires": { - "compare-func": "^1.3.1", - "q": "^1.5.1" - } - }, - "conventional-changelog-core": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-3.1.5.tgz", - "integrity": "sha512-iwqAotS4zk0wA4S84YY1JCUG7X3LxaRjJxuUo6GI4dZuIy243j5nOg/Ora35ExT4DOiw5dQbMMQvw2SUjh6moQ==", - "dev": true, - "requires": { - "conventional-changelog-writer": "^4.0.2", - "conventional-commits-parser": "^3.0.1", - "dateformat": "^3.0.0", - "get-pkg-repo": "^1.0.0", - "git-raw-commits": "2.0.0", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^2.0.2", - "lodash": "^4.2.1", - "normalize-package-data": "^2.3.5", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^2.0.0" - } - }, - "conventional-changelog-preset-loader": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.0.2.tgz", - "integrity": "sha512-pBY+qnUoJPXAXXqVGwQaVmcye05xi6z231QM98wHWamGAmu/ghkBprQAwmF5bdmyobdVxiLhPY3PrCfSeUNzRQ==", - "dev": true - }, - "conventional-changelog-writer": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.0.2.tgz", - "integrity": "sha512-d8/FQY/fix2xXEBUhOo8u3DCbyEw3UOQgYHxLsPDw+wHUDma/GQGAGsGtoH876WyNs32fViHmTOUrgRKVLvBug==", - "dev": true, - "requires": { - "compare-func": "^1.3.1", - "conventional-commits-filter": "^2.0.1", - "dateformat": "^3.0.0", - "handlebars": "^4.0.2", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.2.1", - "meow": "^4.0.0", - "semver": "^5.5.0", - "split": "^1.0.0", - "through2": "^2.0.0" - } - }, - "conventional-commits-filter": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.1.tgz", - "integrity": "sha512-92OU8pz/977udhBjgPEbg3sbYzIxMDFTlQT97w7KdhR9igNqdJvy8smmedAAgn4tPiqseFloKkrVfbXCVd+E7A==", - "dev": true, - "requires": { - "is-subset": "^0.1.1", - "modify-values": "^1.0.0" - } - }, - "conventional-commits-parser": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.0.1.tgz", - "integrity": "sha512-P6U5UOvDeidUJ8ebHVDIoXzI7gMlQ1OF/id6oUvp8cnZvOXMt1n8nYl74Ey9YMn0uVQtxmCtjPQawpsssBWtGg==", - "dev": true, - "requires": { - "JSONStream": "^1.0.4", - "is-text-path": "^1.0.0", - "lodash": "^4.2.1", - "meow": "^4.0.0", - "split2": "^2.0.0", - "through2": "^2.0.0", - "trim-off-newlines": "^1.0.0" - } - }, - "conventional-recommended-bump": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-4.0.4.tgz", - "integrity": "sha512-9mY5Yoblq+ZMqJpBzgS+RpSq+SUfP2miOR3H/NR9drGf08WCrY9B6HAGJZEm6+ThsVP917VHAahSOjM6k1vhPg==", - "dev": true, - "requires": { - "concat-stream": "^1.6.0", - "conventional-changelog-preset-loader": "^2.0.2", - "conventional-commits-filter": "^2.0.1", - "conventional-commits-parser": "^3.0.1", - "git-raw-commits": "2.0.0", - "git-semver-tags": "^2.0.2", - "meow": "^4.0.0", - "q": "^1.5.1" - } - }, - "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, - "cosmiconfig": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.7.tgz", - "integrity": "sha512-PcLqxTKiDmNT6pSpy4N6KtuPwb53W+2tzNvwOZw0WH9N6O0vLIBq0x8aj8Oj75ere4YcGi48bDFCL+3fRJdlNA==", - "dev": true, - "requires": { - "import-fresh": "^2.0.0", - "is-directory": "^0.3.1", - "js-yaml": "^3.9.0", - "parse-json": "^4.0.0" - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "http://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=", - "dev": true - }, - "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", - "dev": true + "int64-buffer": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/int64-buffer/-/int64-buffer-0.1.10.tgz", + "integrity": "sha1-J3siiofZWtd30HwTgyAiQGpHNCM=" }, - "dargs": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz", - "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=", + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { - "number-is-nan": "^1.0.0" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" + "loose-envify": "^1.0.0" } }, - "dasherize": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dasherize/-/dasherize-2.0.0.tgz", - "integrity": "sha1-bYCcnNDPe7iVLYD8hPoT1H3bEwg=" - }, - "dateformat": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", - "dev": true + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "debug-log": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz", - "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=", - "dev": true - }, - "debuglog": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/debuglog/-/debuglog-1.0.1.tgz", - "integrity": "sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI=", - "dev": true - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - } - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", - "dev": true - }, - "deep-eql": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz", - "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-equal": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz", - "integrity": "sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0=", - "dev": true - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "defaults-deep": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/defaults-deep/-/defaults-deep-0.2.4.tgz", - "integrity": "sha512-V6BtqzcMvn0EPOy7f+SfMhfmTawq+7UQdt9yZH0EBK89+IHo5f+Hse/qzTorAXOBrQpxpwb6cB/8OgtaMrT+Fg==", - "requires": { - "for-own": "^0.1.3", - "is-extendable": "^0.1.1", - "lazy-cache": "^0.2.3" - } - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "deglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz", - "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==", - "dev": true, - "requires": { - "find-root": "^1.0.0", - "glob": "^7.0.5", - "ignore": "^3.0.9", - "pkg-config": "^1.1.0", - "run-parallel": "^1.1.2", - "uniq": "^1.0.1" - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "detect-indent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", - "integrity": "sha1-OHHMCmoALow+Wzz38zYmRnXwa50=", - "dev": true - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" - }, - "dezalgo": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", - "integrity": "sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY=", - "dev": true, - "requires": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==" - }, - "dir-glob": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", - "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "path-type": "^3.0.0" - } - }, - "dmd": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/dmd/-/dmd-3.0.13.tgz", - "integrity": "sha512-FV/417bH2c/CYpe8BjFEAHoaHaItcJnPlKELi/qyPZdmUom8joyuC78OhhfPUdyKD/WcouTQ2LxQT4M/RoiJ3w==", - "dev": true, - "requires": { - "array-back": "^2.0.0", - "cache-point": "^0.4.1", - "common-sequence": "^1.0.2", - "file-set": "^2.0.0", - "handlebars": "^4.0.11", - "marked": "^0.3.16", - "object-get": "^2.1.0", - "reduce-flatten": "^1.0.1", - "reduce-unique": "^1.0.0", - "reduce-without": "^1.0.1", - "test-value": "^3.0.0", - "walk-back": "^3.0.0" - } - }, - "dns-prefetch-control": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/dns-prefetch-control/-/dns-prefetch-control-0.1.0.tgz", - "integrity": "sha1-YN20V3dOF48flBXwyrsOhbCzALI=" - }, - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - }, - "dont-sniff-mimetype": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz", - "integrity": "sha1-WTKJDcn04vGeXrAqIAJuXl78j1g=" - }, - "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", - "dev": true, - "requires": { - "is-obj": "^1.0.0" - } - }, - "drbg.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/drbg.js/-/drbg.js-1.0.1.tgz", - "integrity": "sha1-Pja2xCs3BDgjzbwzLVjzHiRFSAs=", - "requires": { - "browserify-aes": "^1.0.6", - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4" - } - }, - "duplexer": { - "version": "0.1.1", - "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", - "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" - } - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "dev": true, - "requires": { - "iconv-lite": "~0.4.13" - } - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "^1.4.0" - } - }, - "err-code": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", - "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", - "dev": true, - "requires": { - "es-to-primitive": "^1.1.1", - "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" - } - }, - "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "es6-promise": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", - "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==", - "dev": true - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "http://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "^4.0.3" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - }, - "eslint": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.4.0.tgz", - "integrity": "sha512-UIpL91XGex3qtL6qwyCQJar2j3osKxK9e3ano3OcGEIRM4oWIpCkDg9x95AXEC2wMs7PnxzOkPZ2gq+tsMS9yg==", - "dev": true, - "requires": { - "ajv": "^6.5.0", - "babel-code-frame": "^6.26.0", - "chalk": "^2.1.0", - "cross-spawn": "^6.0.5", - "debug": "^3.1.0", - "doctrine": "^2.1.0", - "eslint-scope": "^4.0.0", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^4.0.0", - "esquery": "^1.0.1", - "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", - "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", - "ignore": "^4.0.2", - "imurmurhash": "^0.1.4", - "inquirer": "^5.2.0", - "is-resolvable": "^1.1.0", - "js-yaml": "^3.11.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.3.0", - "lodash": "^4.17.5", - "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", - "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", - "progress": "^2.0.0", - "regexpp": "^2.0.0", - "require-uncached": "^1.0.3", - "semver": "^5.5.0", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^4.0.3", - "text-table": "^0.2.0" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "chardet": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", - "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", - "dev": true - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "external-editor": { - "version": "2.2.0", - "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", - "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", - "dev": true, - "requires": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - } - }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - }, - "inquirer": { - "version": "5.2.0", - "resolved": "http://registry.npmjs.org/inquirer/-/inquirer-5.2.0.tgz", - "integrity": "sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.1.0", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^5.5.2", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "rxjs": { - "version": "5.5.12", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", - "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", - "dev": true, - "requires": { - "symbol-observable": "1.0.1" - } - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "eslint-config-standard": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz", - "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==", - "dev": true - }, - "eslint-config-standard-jsx": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-6.0.2.tgz", - "integrity": "sha512-D+YWAoXw+2GIdbMBRAzWwr1ZtvnSf4n4yL0gKGg7ShUOGXkSOLerI17K4F6LdQMJPNMoWYqepzQD/fKY+tXNSg==", - "dev": true - }, - "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.5.0" - } - }, - "eslint-module-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", - "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", - "dev": true, - "requires": { - "debug": "^2.6.8", - "pkg-dir": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "^1.0.0" - } - } - } - }, - "eslint-plugin-es": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz", - "integrity": "sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==", - "dev": true, - "requires": { - "eslint-utils": "^1.3.0", - "regexpp": "^2.0.1" - } - }, - "eslint-plugin-import": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", - "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", - "dev": true, - "requires": { - "contains-path": "^0.1.0", - "debug": "^2.6.8", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.1", - "eslint-module-utils": "^2.2.0", - "has": "^1.0.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.3", - "read-pkg-up": "^2.0.0", - "resolve": "^1.6.0" - }, - "dependencies": { - "doctrine": { - "version": "1.5.0", - "resolved": "http://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", - "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, - "requires": { - "esutils": "^2.0.2", - "isarray": "^1.0.0" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - } - } - }, - "eslint-plugin-node": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz", - "integrity": "sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw==", - "dev": true, - "requires": { - "eslint-plugin-es": "^1.3.1", - "eslint-utils": "^1.3.1", - "ignore": "^4.0.2", - "minimatch": "^3.0.4", - "resolve": "^1.8.1", - "semver": "^5.5.0" - }, - "dependencies": { - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true - } - } - }, - "eslint-plugin-promise": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz", - "integrity": "sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==", - "dev": true - }, - "eslint-plugin-react": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz", - "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==", - "dev": true, - "requires": { - "array-includes": "^3.0.3", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1", - "prop-types": "^15.6.2" - } - }, - "eslint-plugin-standard": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz", - "integrity": "sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==", - "dev": true - }, - "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", - "dev": true, - "requires": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true - }, - "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true - }, - "espree": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", - "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", - "dev": true, - "requires": { - "acorn": "^6.0.2", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esquery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", - "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, - "requires": { - "estraverse": "^4.0.0" - } - }, - "esrecurse": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", - "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, - "requires": { - "estraverse": "^4.1.0" - } - }, - "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true - }, - "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "event-lite": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/event-lite/-/event-lite-0.1.2.tgz", - "integrity": "sha512-HnSYx1BsJ87/p6swwzv+2v6B4X+uxUteoDfRxsAb1S1BePzQqOLevVmkdA15GHJVd9A9Ok6wygUR18Hu0YeV9g==" - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "expand-template": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz", - "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==" - }, - "expect-ct": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/expect-ct/-/expect-ct-0.1.1.tgz", - "integrity": "sha512-ngXzTfoRGG7fYens3/RMb6yYoVLvLMfmsSllP/mZPxNHgFq41TmPSLF/nLY7fwoclI2vElvAmILFWGUYqdjfCg==" - }, - "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", - "requires": { - "accepts": "~1.3.5", - "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", - "content-type": "~1.0.4", - "cookie": "0.3.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.1.1", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - } - } - }, - "express-ws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/express-ws/-/express-ws-4.0.0.tgz", - "integrity": "sha512-KEyUw8AwRET2iFjFsI1EJQrJ/fHeGiJtgpYgEWG3yDv4l/To/m3a2GaYfeGyB3lsWdvbesjF5XCMx+SVBgAAYw==", - "requires": { - "ws": "^5.2.0" - }, - "dependencies": { - "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", - "requires": { - "async-limiter": "~1.0.0" - } - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "eyes": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", - "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=", - "dev": true - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true - }, - "fast-glob": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.4.tgz", - "integrity": "sha512-FjK2nCGI/McyzgNtTESqaWP3trPvHyRyoyY70hxjc3oKPNmDe8taohLZpoVKoUjW85tbU5txaYUZCNtVzygl1g==", - "dev": true, - "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" - }, - "dependencies": { - "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - } - } - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, - "feature-policy": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/feature-policy/-/feature-policy-0.2.0.tgz", - "integrity": "sha512-2hGrlv6efG4hscYVZeaYjpzpT6I2OZgYqE2yDUzeAcKj2D1SH0AsEzqJNXzdoglEddcIXQQYop3lD97XpG75Jw==" - }, - "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", - "dev": true - }, - "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, - "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" - } - }, - "file-set": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/file-set/-/file-set-2.0.1.tgz", - "integrity": "sha512-XgOUUpgR6FbbfYcniLw0qm1Am7PnNYIAkd+eXxRt42LiYhjaso0WiuQ+VmrNdtwotyM+cLCfZ56AZrySP3QnKA==", - "dev": true, - "requires": { - "array-back": "^2.0.0", - "glob": "^7.1.3" - } - }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, - "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", - "unpipe": "~1.0.0" - } - }, - "find-replace": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz", - "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==", - "dev": true, - "requires": { - "array-back": "^2.0.0", - "test-value": "^3.0.0" - } - }, - "find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", - "dev": true - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", - "dev": true, - "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" - } - }, - "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" - }, - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "requires": { - "for-in": "^1.0.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "frameguard": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/frameguard/-/frameguard-3.0.0.tgz", - "integrity": "sha1-e8rUae57lukdEs6zlZx4I1qScuk=" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", - "requires": { - "minipass": "^2.2.1" - } - }, - "fs-then-native": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fs-then-native/-/fs-then-native-2.0.0.tgz", - "integrity": "sha1-GaEk2U2QwiyOBF8ujdbr6jbUjGc=", - "dev": true - }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fstream": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", - "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "genfun": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", - "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", - "dev": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=" - }, - "get-pkg-repo": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-1.4.0.tgz", - "integrity": "sha1-xztInAbYDMVTbCyFP54FIyBWly0=", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "meow": "^3.3.0", - "normalize-package-data": "^2.3.0", - "parse-github-repo-url": "^1.3.0", - "through2": "^2.0.0" - }, - "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "meow": { - "version": "3.7.0", - "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - } - } - }, - "get-port": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", - "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "git-raw-commits": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.0.tgz", - "integrity": "sha512-w4jFEJFgKXMQJ0H0ikBk2S+4KP2VEjhCvLCNqbNRQC8BgGWgLKNCO7a9K9LI+TVT7Gfoloje502sEnctibffgg==", - "dev": true, - "requires": { - "dargs": "^4.0.1", - "lodash.template": "^4.0.2", - "meow": "^4.0.0", - "split2": "^2.0.0", - "through2": "^2.0.0" - } - }, - "git-remote-origin-url": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", - "integrity": "sha1-UoJlna4hBxRaERJhEq0yFuxfpl8=", - "dev": true, - "requires": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } - } - }, - "git-semver-tags": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-2.0.2.tgz", - "integrity": "sha512-34lMF7Yo1xEmsK2EkbArdoU79umpvm0MfzaDkSNYSJqtM5QLAVTPWgpiXSVI5o/O9EvZPSrP4Zvnec/CqhSd5w==", - "dev": true, - "requires": { - "meow": "^4.0.0", - "semver": "^5.5.0" - } - }, - "gitconfiglocal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", - "integrity": "sha1-QdBF84UaXqiPA/JMocYXgRRGS5s=", - "dev": true, - "requires": { - "ini": "^1.3.2" - } - }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "requires": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "glob-to-regexp": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", - "dev": true - }, - "globals": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", - "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==" - }, - "globby": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", - "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", - "dev": true, - "requires": { - "array-union": "^1.0.1", - "dir-glob": "^2.0.0", - "fast-glob": "^2.0.2", - "glob": "^7.1.2", - "ignore": "^3.3.5", - "pify": "^3.0.0", - "slash": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==" - }, - "handlebars": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz", - "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==", - "dev": true, - "requires": { - "async": "^2.5.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - }, - "dependencies": { - "ajv": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz", - "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==", - "requires": { - "fast-deep-equal": "^2.0.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hashlru": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/hashlru/-/hashlru-2.3.0.tgz", - "integrity": "sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==" - }, - "he": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", - "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=" - }, - "heap": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.6.tgz", - "integrity": "sha1-CH4fELBGky/IWU3Z5tN4r8nR5aw=" - }, - "helmet": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-3.15.0.tgz", - "integrity": "sha512-j9JjtAnWJj09lqe/PEICrhuDaX30TeokXJ9tW6ZPhVH0+LMoihDeJ58CdWeTGzM66p6EiIODmgAaWfdeIWI4Gg==", - "requires": { - "dns-prefetch-control": "0.1.0", - "dont-sniff-mimetype": "1.0.0", - "expect-ct": "0.1.1", - "feature-policy": "0.2.0", - "frameguard": "3.0.0", - "helmet-crossdomain": "0.3.0", - "helmet-csp": "2.7.1", - "hide-powered-by": "1.0.0", - "hpkp": "2.0.0", - "hsts": "2.1.0", - "ienoopen": "1.0.0", - "nocache": "2.0.0", - "referrer-policy": "1.1.0", - "x-xss-protection": "1.1.0" - } - }, - "helmet-crossdomain": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/helmet-crossdomain/-/helmet-crossdomain-0.3.0.tgz", - "integrity": "sha512-YiXhj0E35nC4Na5EPE4mTfoXMf9JTGpN4OtB4aLqShKuH9d2HNaJX5MQoglO6STVka0uMsHyG5lCut5Kzsy7Lg==" - }, - "helmet-csp": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/helmet-csp/-/helmet-csp-2.7.1.tgz", - "integrity": "sha512-sCHwywg4daQ2mY0YYwXSZRsgcCeerUwxMwNixGA7aMLkVmPTYBl7gJoZDHOZyXkqPrtuDT3s2B1A+RLI7WxSdQ==", - "requires": { - "camelize": "1.0.0", - "content-security-policy-builder": "2.0.0", - "dasherize": "2.0.0", - "platform": "1.3.5" - } - }, - "hide-powered-by": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hide-powered-by/-/hide-powered-by-1.0.0.tgz", - "integrity": "sha1-SoWtZYgfYoV/xwr3F0oRhNzM4ys=" - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hoek": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", - "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==" - }, - "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true - }, - "hpkp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hpkp/-/hpkp-2.0.0.tgz", - "integrity": "sha1-EOFCJk52IVpdMMROxD3mTe5tFnI=" - }, - "hsts": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hsts/-/hsts-2.1.0.tgz", - "integrity": "sha512-zXhh/DqgrTXJ7erTN6Fh5k/xjMhDGXCqdYN3wvxUvGUQvnxcFfUd8E+6vLg/nk3ss1TYMb+DhRl25fYABioTvA==" - }, - "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", - "dev": true - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "dev": true, - "requires": { - "agent-base": "4", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz", - "integrity": "sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ==", - "dev": true, - "requires": { - "agent-base": "^4.1.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", - "dev": true, - "requires": { - "ms": "^2.0.0" - } - }, - "i": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/i/-/i-0.3.6.tgz", - "integrity": "sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==" - }, - "ienoopen": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.0.0.tgz", - "integrity": "sha1-NGpCj0dKrI9QzzeE6i0PFvYr2ms=" - }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, - "ignore": { - "version": "3.3.10", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", - "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", - "dev": true - }, - "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "requires": { - "minimatch": "^3.0.4" - } - }, - "import-fresh": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", - "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", - "dev": true, - "requires": { - "caller-path": "^2.0.0", - "resolve-from": "^3.0.0" - }, - "dependencies": { - "caller-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", - "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", - "dev": true, - "requires": { - "caller-callsite": "^2.0.0" - } - }, - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } - } - }, - "import-local": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", - "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", - "dev": true, - "requires": { - "pkg-dir": "^2.0.0", - "resolve-cwd": "^2.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" - }, - "init-package-json": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-1.10.3.tgz", - "integrity": "sha512-zKSiXKhQveNteyhcj1CoOP8tqp1QuxPIPBl8Bid99DGLFqA1p87M6lNgfjJHSBoWJJlidGOv5rWjyYKEB3g2Jw==", - "dev": true, - "requires": { - "glob": "^7.1.1", - "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", - "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "1 || 2", - "semver": "2.x || 3.x || 4 || 5", - "validate-npm-package-license": "^3.0.1", - "validate-npm-package-name": "^3.0.0" - } - }, - "inquirer": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.1.tgz", - "integrity": "sha512-088kl3DRT2dLU5riVMKKr1DlImd6X7smDhpXUCkJDCKvTEJeRiXh0G132HG9u5a+6Ylw9plFRY7RuTnwohYSpg==", - "dev": true, - "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^3.0.0", - "figures": "^2.0.0", - "lodash": "^4.17.10", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rxjs": "^6.1.0", - "string-width": "^2.1.0", - "strip-ansi": "^5.0.0", - "through": "^2.3.6" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "dependencies": { - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "strip-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz", - "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==", - "dev": true, - "requires": { - "ansi-regex": "^4.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz", - "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==", - "dev": true - } - } - } - } - }, - "int64-buffer": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/int64-buffer/-/int64-buffer-0.1.10.tgz", - "integrity": "sha1-J3siiofZWtd30HwTgyAiQGpHNCM=" - }, - "interface-connection": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/interface-connection/-/interface-connection-0.3.3.tgz", - "integrity": "sha512-OV9Rj7AhUlssWJTO6nOazJdPFGqWDOVZ3j5aM+i0RPKyTzR87vJ949VqhMyKkCIR0GBAaNqfB7F4YA70a/QWiw==", - "requires": { - "pull-defer": "~0.2.3" - } - }, - "interface-datastore": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-0.6.0.tgz", - "integrity": "sha512-aDbjWsEdTHd2Yc2A8QOeAEWMwlWDwumVX24bE0/AE7XxfDveWuDUKP7HQito0u1c80FZmR+y/Op14um+cG0CSw==", - "requires": { - "async": "^2.6.1", - "class-is": "^1.1.0", - "err-code": "^1.1.2", - "pull-defer": "~0.2.3", - "pull-stream": "^3.6.9", - "uuid": "^3.2.2" - } - }, - "invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { - "loose-envify": "^1.0.0" - } - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=" - }, - "ip-address": { - "version": "5.8.9", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-5.8.9.tgz", - "integrity": "sha512-7ay355oMN34iXhET1BmCJVsHjOTSItEEIIpOs38qUC23AIhOy+xIPnkrTuEFjeLMrTJ7m8KMXWgWfy/2Vn9sDw==", - "requires": { - "jsbn": "1.1.0", - "lodash.find": "^4.6.0", - "lodash.max": "^4.0.1", - "lodash.merge": "^4.6.0", - "lodash.padstart": "^4.6.1", - "lodash.repeat": "^4.1.0", - "sprintf-js": "1.1.0" - }, - "dependencies": { - "jsbn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", - "integrity": "sha1-sBMHyym2GKHtJux56RH4A8TaAEA=" - }, - "sprintf-js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.0.tgz", - "integrity": "sha1-z/yvcC2vZeo5u04PorKZzsGhvkY=" - } - } - }, - "ipaddr.js": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", - "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=" - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } - }, - "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true - }, - "is-ci": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz", - "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", - "dev": true, - "requires": { - "ci-info": "^1.5.0" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-directory": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", - "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", - "dev": true - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-obj": { - "version": "1.0.1", - "resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", - "dev": true - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true - }, - "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, - "requires": { - "has": "^1.0.1" - } - }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, - "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", - "dev": true - }, - "is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=", - "dev": true - }, - "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, - "requires": { - "has-symbols": "^1.0.0" - } - }, - "is-text-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", - "dev": true, - "requires": { - "text-extensions": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=" - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "isemail": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.2.0.tgz", - "integrity": "sha512-zKqkK+O+dGqevc93KNsbZ/TqTUFd46MwWjYOoMrjIMZ51eU7DtQG3Wmd9SQQT7i7RVnuTPEiYEWHU3MSbxC1Tg==", - "requires": { - "punycode": "2.x.x" - } - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "istanbul-lib-coverage": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz", - "integrity": "sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA==" - }, - "istanbul-lib-instrument": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-2.3.2.tgz", - "integrity": "sha512-l7TD/VnBsIB2OJvSyxaLW/ab1+92dxZNH9wLH7uHPPioy3JZ8tnx2UXUdKmdkgmP2EFPzg64CToUP6dAS3U32Q==", - "requires": { - "@babel/generator": "7.0.0-beta.51", - "@babel/parser": "7.0.0-beta.51", - "@babel/template": "7.0.0-beta.51", - "@babel/traverse": "7.0.0-beta.51", - "@babel/types": "7.0.0-beta.51", - "istanbul-lib-coverage": "^2.0.1", - "semver": "^5.5.0" - } - }, - "joi": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-13.7.0.tgz", - "integrity": "sha512-xuY5VkHfeOYK3Hdi91ulocfuFopwgbSORmIwzcwHKESQhC7w1kD5jaVSPnqDxS2I8t3RZ9omCKAxNwXN5zG1/Q==", - "requires": { - "hoek": "5.x.x", - "isemail": "3.x.x", - "topo": "3.x.x" - } - }, - "joi-browser": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/joi-browser/-/joi-browser-13.4.0.tgz", - "integrity": "sha512-TfzJd2JaJ/lg/gU+q5j9rLAjnfUNF9DUmXTP9w+GfmG79LjFOXFeM7hIFuXCBcZCivUDFwd9l1btTV9rhHumtQ==" - }, - "js-sha3": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.7.0.tgz", - "integrity": "sha512-Wpks3yBDm0UcL5qlVhwW9Jr9n9i4FfeWBFOOXP5puDS/SiudJGhw7DPyBqn3487qD4F0lsC0q3zxink37f7zeA==" - }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" - }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "js2xmlparser": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz", - "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", - "dev": true, - "requires": { - "xmlcreate": "^1.0.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, - "jsdoc": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz", - "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==", - "dev": true, - "requires": { - "babylon": "7.0.0-beta.19", - "bluebird": "~3.5.0", - "catharsis": "~0.8.9", - "escape-string-regexp": "~1.0.5", - "js2xmlparser": "~3.0.0", - "klaw": "~2.0.0", - "marked": "~0.3.6", - "mkdirp": "~0.5.1", - "requizzle": "~0.2.1", - "strip-json-comments": "~2.0.1", - "taffydb": "2.6.2", - "underscore": "~1.8.3" - } - }, - "jsdoc-api": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/jsdoc-api/-/jsdoc-api-4.0.3.tgz", - "integrity": "sha512-dfYq9JgB+XahY0XfSEw93PmXmocjwYcvJ5aMuQUJ/OdDRGWamf2SSOk3W06Bsj8qdjp/UdefzqpP/mpwsvHuvA==", - "dev": true, - "requires": { - "array-back": "^2.0.0", - "cache-point": "^0.4.1", - "collect-all": "^1.0.3", - "file-set": "^2.0.0", - "fs-then-native": "^2.0.0", - "jsdoc": "~3.5.5", - "object-to-spawn-args": "^1.1.1", - "temp-path": "^1.0.0", - "walk-back": "^3.0.0" - } - }, - "jsdoc-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/jsdoc-parse/-/jsdoc-parse-3.0.1.tgz", - "integrity": "sha512-btZLp4wYl90vcAfgk4hoGQbO17iBVrhh3LJRMKZNtZgniO3F8H2CjxXld0owBIB1XxN+j3bAcWZnZKMnSj3iMA==", - "dev": true, - "requires": { - "array-back": "^2.0.0", - "lodash.omit": "^4.5.0", - "lodash.pick": "^4.4.0", - "reduce-extract": "^1.0.0", - "sort-array": "^2.0.0", - "test-value": "^3.0.0" - } - }, - "jsdoc-to-markdown": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsdoc-to-markdown/-/jsdoc-to-markdown-4.0.1.tgz", - "integrity": "sha512-LHJRoLoLyDdxNcColgkLoB/rFG5iRP+PNJjMILI0x+95IdEAtyjSt0wJ6ZlKxRpkhBYtQXTQQ119hMqPIUZzTQ==", - "dev": true, - "requires": { - "array-back": "^2.0.0", - "command-line-tool": "^0.8.0", - "config-master": "^3.1.0", - "dmd": "^3.0.10", - "jsdoc-api": "^4.0.1", - "jsdoc-parse": "^3.0.1", - "walk-back": "^3.0.0" - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", - "dev": true, - "requires": { - "array-includes": "^3.0.3" - } - }, - "just-extend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", - "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==" - }, - "k-bucket": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/k-bucket/-/k-bucket-4.0.1.tgz", - "integrity": "sha512-YvDpmY3waI999h1zZoW1rJ04fZrgZ+5PAlVmvwDHT6YO/Q1AOhdel07xsKy9eAvJjQ9xZV1wz3rXKqEfaWvlcQ==", - "requires": { - "inherits": "^2.0.1", - "randombytes": "^2.0.3" - } - }, - "keypair": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/keypair/-/keypair-1.0.1.tgz", - "integrity": "sha1-dgNxknCvtlZO04oiCHoG/Jqk6hs=" - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "klaw": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", - "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "latency-monitor": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/latency-monitor/-/latency-monitor-0.2.1.tgz", - "integrity": "sha1-QEPV8j3obiv872ztSjtbki4d1+0=", - "requires": { - "debug": "^2.6.0", - "lodash": "^4.17.4" - } - }, - "lazy-cache": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.7.tgz", - "integrity": "sha1-f+3fLctu23fRHvHRF6tf/fCrG2U=" - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "left-pad": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", - "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==" - }, - "length-prefixed-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/length-prefixed-stream/-/length-prefixed-stream-1.6.0.tgz", - "integrity": "sha512-gsJvrb5giDqil/ScQ7fEoplsI2Ch4DwnvnfTW2EGl9KBW6Ekzn8JSNESObqNAeZD8HkSjEMvc5XjhuB66fsSZQ==", - "requires": { - "buffer-alloc-unsafe": "^1.0.0", - "readable-stream": "^2.0.0", - "varint": "^5.0.0" - } - }, - "lerna": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-3.5.1.tgz", - "integrity": "sha512-0AyxMr2UpR3RAJsyrfNtYvfcI01YVSSnbRdzum7frZAtb7S+8NSY2ip7aDbN6/YsQK2K/zOCQ4shu/nwgub8aw==", - "dev": true, - "requires": { - "@lerna/add": "^3.5.0", - "@lerna/bootstrap": "^3.5.0", - "@lerna/changed": "^3.5.0", - "@lerna/clean": "^3.5.0", - "@lerna/cli": "^3.2.0", - "@lerna/create": "^3.5.0", - "@lerna/diff": "^3.5.0", - "@lerna/exec": "^3.5.0", - "@lerna/import": "^3.5.0", - "@lerna/init": "^3.5.0", - "@lerna/link": "^3.5.0", - "@lerna/list": "^3.5.0", - "@lerna/publish": "^3.5.1", - "@lerna/run": "^3.5.0", - "@lerna/version": "^3.5.0", - "import-local": "^1.0.0", - "npmlog": "^4.1.2" - } - }, - "levn": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, - "requires": { - "prelude-ls": "~1.1.2", - "type-check": "~0.3.2" - } - }, - "libnpmaccess": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-3.0.1.tgz", - "integrity": "sha512-RlZ7PNarCBt+XbnP7R6PoVgOq9t+kou5rvhaInoNibhPO7eMlRfS0B8yjatgn2yaHIwWNyoJDolC/6Lc5L/IQA==", - "dev": true, - "requires": { - "aproba": "^2.0.0", - "get-stream": "^4.0.0", - "npm-package-arg": "^6.1.0", - "npm-registry-fetch": "^3.8.0" - }, - "dependencies": { - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true - } - } - }, - "libp2p": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-0.23.1.tgz", - "integrity": "sha512-ArCIJ+EHpeT2qdfEI1Q9sN8oIB0R3Lw7YKLbJKfhK7Mq/+kYug+6RJqgomLJDVDeChTWZa0oe7CB7wEt+IvEpA==", - "requires": { - "async": "^2.6.1", - "joi": "^13.4.0", - "joi-browser": "^13.4.0", - "libp2p-connection-manager": "~0.0.2", - "libp2p-floodsub": "~0.15.0", - "libp2p-ping": "~0.8.0", - "libp2p-switch": "~0.40.7", - "libp2p-websockets": "~0.12.0", - "mafmt": "^6.0.0", - "multiaddr": "^5.0.0", - "peer-book": "~0.8.0", - "peer-id": "~0.11.0", - "peer-info": "~0.14.1" - } - }, - "libp2p-circuit": { + "is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/libp2p-circuit/-/libp2p-circuit-0.2.1.tgz", - "integrity": "sha512-Nr2MyO3onFk1E3hnEtII6MefU7Ps4oPOQ1dcsiFSkoq0NOf2PDCIJ12ySyMfZilmnJbMsGklSVi2fuPyv9PqvA==", - "requires": { - "async": "^2.6.0", - "debug": "^3.1.0", - "defaults-deep": "^0.2.4", - "interface-connection": "^0.3.2", - "mafmt": "^6.0.0", - "multiaddr": "^5.0.0", - "multistream-select": "^0.14.1", - "peer-id": "^0.11.0", - "peer-info": "~0.14.1", - "protons": "^1.0.1", - "pull-abortable": "^4.1.1", - "pull-handshake": "^1.1.4", - "pull-stream": "^3.6.7" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "libp2p-connection-manager": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/libp2p-connection-manager/-/libp2p-connection-manager-0.0.2.tgz", - "integrity": "sha512-G/OzMfxQe0lHx7ujibPqpFLCeMN9I5vNH0+Rs9zat6+uIT51Saupx95lyoyh5J8nh93ui2cNH7PQnwJMZVKa1A==", - "requires": { - "debug": "^3.1.0", - "latency-monitor": "^0.2.1" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "libp2p-crypto": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.14.1.tgz", - "integrity": "sha512-JP3bfEzNik76fFIWOeU909+v76tjj5BMukbPCc61bgh1ixftcHkr4bH79duz+oSxRpGA+orCLxvkhgALV+pfwg==", - "requires": { - "asn1.js": "^5.0.1", - "async": "^2.6.1", - "browserify-aes": "^1.2.0", - "bs58": "^4.0.1", - "keypair": "^1.0.1", - "libp2p-crypto-secp256k1": "~0.2.2", - "multihashing-async": "~0.5.1", - "node-forge": "~0.7.6", - "pem-jwk": "^1.5.1", - "protons": "^1.0.1", - "rsa-pem-to-jwk": "^1.1.3", - "tweetnacl": "^1.0.0", - "ursa-optional": "~0.9.9", - "webcrypto-shim": "github:dignifiedquire/webcrypto-shim#190bc9ec341375df6025b17ae12ddb2428ea49c8" - }, - "dependencies": { - "tweetnacl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.0.tgz", - "integrity": "sha1-cT2LgY2kIGh0C/aDhtBHnmb8ins=" - } - } - }, - "libp2p-crypto-secp256k1": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/libp2p-crypto-secp256k1/-/libp2p-crypto-secp256k1-0.2.2.tgz", - "integrity": "sha1-DdUh8Yq8TjahUuJOmzYwewrpzwU=", - "requires": { - "async": "^2.5.0", - "multihashing-async": "~0.4.6", - "nodeify": "^1.0.1", - "safe-buffer": "^5.1.1", - "secp256k1": "^3.3.0" - }, - "dependencies": { - "multihashing-async": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-0.4.8.tgz", - "integrity": "sha512-LCc4lfxmTJOHKIjZjFNgvmfB6nXS/ErLInT9uwU8udFrRm2PH+aTPk3mfCREKmCiSHOlCWiv2O8rlnBx+OjlMw==", - "requires": { - "async": "^2.6.0", - "blakejs": "^1.1.0", - "js-sha3": "^0.7.0", - "multihashes": "~0.4.13", - "murmurhash3js": "^3.0.1", - "nodeify": "^1.0.1" - } - } - } - }, - "libp2p-floodsub": { - "version": "0.15.5", - "resolved": "https://registry.npmjs.org/libp2p-floodsub/-/libp2p-floodsub-0.15.5.tgz", - "integrity": "sha512-c9aq+vHJLwipOjM37tZruPJqEw1Anw2PU3PGmYAF1DcqTERHoqeniALkbznR2cDMoxEDJqk4KRYrTFU4eam+rQ==", - "requires": { - "async": "^2.6.1", - "bs58": "^4.0.1", - "debug": "^4.1.0", - "length-prefixed-stream": "^1.6.0", - "libp2p-crypto": "~0.14.1", - "lodash": "^4.17.11", - "protons": "^1.0.1", - "pull-pushable": "^2.2.0", - "time-cache": "~0.3.0" - }, - "dependencies": { - "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "libp2p-identify": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/libp2p-identify/-/libp2p-identify-0.7.3.tgz", - "integrity": "sha512-RnOXphXxwEzDw8e+aQIE2tqqxXEqZXf457PuzQlOdfMpxDnhHeKObXrjcyfMosyguwJeAzv1x1DJ45ZCXIXFiw==", - "requires": { - "multiaddr": "^5.0.2", - "peer-id": "~0.12.0", - "peer-info": "~0.14.1", - "protons": "^1.0.1", - "pull-length-prefixed": "^1.3.0", - "pull-stream": "^3.6.9" - }, - "dependencies": { - "libp2p-crypto": { - "version": "0.13.0", - "resolved": "http://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.13.0.tgz", - "integrity": "sha512-i3r1TBec/xYmC5bcpPiIs3OyUAU3iy53OdRdxqawKoWTQPjYB+TyQ4w+otT66Y0sMcw70O0wH3GFAfPmQgFn+g==", - "requires": { - "asn1.js": "^5.0.0", - "async": "^2.6.0", - "browserify-aes": "^1.2.0", - "bs58": "^4.0.1", - "keypair": "^1.0.1", - "libp2p-crypto-secp256k1": "~0.2.2", - "multihashing-async": "~0.4.8", - "node-forge": "^0.7.5", - "pem-jwk": "^1.5.1", - "protons": "^1.0.1", - "rsa-pem-to-jwk": "^1.1.3", - "tweetnacl": "^1.0.0", - "webcrypto-shim": "github:dignifiedquire/webcrypto-shim#190bc9ec341375df6025b17ae12ddb2428ea49c8" - } - }, - "multihashing-async": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-0.4.8.tgz", - "integrity": "sha512-LCc4lfxmTJOHKIjZjFNgvmfB6nXS/ErLInT9uwU8udFrRm2PH+aTPk3mfCREKmCiSHOlCWiv2O8rlnBx+OjlMw==", - "requires": { - "async": "^2.6.0", - "blakejs": "^1.1.0", - "js-sha3": "^0.7.0", - "multihashes": "~0.4.13", - "murmurhash3js": "^3.0.1", - "nodeify": "^1.0.1" - } - }, - "peer-id": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.12.0.tgz", - "integrity": "sha512-pPKk4IDBWGGzcjXe6zzngIwKmyadYNsIOUH1PKb7GYTVVTKHpHn78ljZNZdAXAWZ2V1TmlU2OS6d9MfW2E5DNA==", - "requires": { - "async": "^2.6.1", - "class-is": "^1.1.0", - "libp2p-crypto": "~0.13.0", - "lodash": "^4.17.10", - "multihashes": "~0.4.13" - } - }, - "tweetnacl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.0.tgz", - "integrity": "sha1-cT2LgY2kIGh0C/aDhtBHnmb8ins=" - } - } - }, - "libp2p-kad-dht": { - "version": "0.10.6", - "resolved": "https://registry.npmjs.org/libp2p-kad-dht/-/libp2p-kad-dht-0.10.6.tgz", - "integrity": "sha512-s94YvwenmqppiC4HdKZiCGfii15zMvVy6hTQ0R+sRWzOazxXUemb59kDS3smsg1Q0IQMDDt5ZD70Y3vGX8onXQ==", - "requires": { - "async": "^2.6.1", - "base32.js": "~0.1.0", - "cids": "~0.5.3", - "debug": "^3.1.0", - "hashlru": "^2.2.1", - "heap": "~0.2.6", - "interface-datastore": "~0.6.0", - "k-bucket": "^4.0.1", - "libp2p-crypto": "~0.13.0", - "libp2p-record": "~0.6.0", - "multihashes": "~0.4.14", - "multihashing-async": "~0.5.1", - "peer-id": "~0.11.0", - "peer-info": "~0.14.1", - "priorityqueue": "~0.2.1", - "protons": "^1.0.1", - "pull-length-prefixed": "^1.3.1", - "pull-stream": "^3.6.8", - "varint": "^5.0.0", - "xor-distance": "^1.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "libp2p-crypto": { - "version": "0.13.0", - "resolved": "http://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.13.0.tgz", - "integrity": "sha512-i3r1TBec/xYmC5bcpPiIs3OyUAU3iy53OdRdxqawKoWTQPjYB+TyQ4w+otT66Y0sMcw70O0wH3GFAfPmQgFn+g==", - "requires": { - "asn1.js": "^5.0.0", - "async": "^2.6.0", - "browserify-aes": "^1.2.0", - "bs58": "^4.0.1", - "keypair": "^1.0.1", - "libp2p-crypto-secp256k1": "~0.2.2", - "multihashing-async": "~0.4.8", - "node-forge": "^0.7.5", - "pem-jwk": "^1.5.1", - "protons": "^1.0.1", - "rsa-pem-to-jwk": "^1.1.3", - "tweetnacl": "^1.0.0", - "webcrypto-shim": "github:dignifiedquire/webcrypto-shim#190bc9ec341375df6025b17ae12ddb2428ea49c8" - }, - "dependencies": { - "multihashing-async": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-0.4.8.tgz", - "integrity": "sha512-LCc4lfxmTJOHKIjZjFNgvmfB6nXS/ErLInT9uwU8udFrRm2PH+aTPk3mfCREKmCiSHOlCWiv2O8rlnBx+OjlMw==", - "requires": { - "async": "^2.6.0", - "blakejs": "^1.1.0", - "js-sha3": "^0.7.0", - "multihashes": "~0.4.13", - "murmurhash3js": "^3.0.1", - "nodeify": "^1.0.1" - } - } - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "tweetnacl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.0.tgz", - "integrity": "sha1-cT2LgY2kIGh0C/aDhtBHnmb8ins=" - } - } - }, - "libp2p-mplex": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/libp2p-mplex/-/libp2p-mplex-0.8.4.tgz", - "integrity": "sha512-dZHjk4UpDZ4gAghr+qhhHnA5nAxTlielDhFxzyRqi05tJA5ebnNVOjtHgzdDD0ps6dsme3V6+Nv1rNIcnDO8xw==", - "requires": { - "async": "^2.6.1", - "chunky": "0.0.0", - "concat-stream": "^1.6.2", - "debug": "^4.1.0", - "duplexify": "^3.6.0", - "interface-connection": "~0.3.2", - "pull-catch": "^1.0.0", - "pull-stream": "^3.6.9", - "pull-stream-to-stream": "^1.3.4", - "pump": "^3.0.0", - "readable-stream": "^3.0.6", - "stream-to-pull-stream": "^1.7.2", - "varint": "^5.0.0" - }, - "dependencies": { - "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, - "readable-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.0.tgz", - "integrity": "sha512-vpydAvIJvPODZNagCPuHG87O9JNPtvFEtjHHRVwNVsVVRBqemvPJkc2SYbxJsiZXawJdtZNmkmnsPuE3IgsG0A==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } - } - }, - "libp2p-ping": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/libp2p-ping/-/libp2p-ping-0.8.3.tgz", - "integrity": "sha512-8AiUH1FxscWmfZY5EpbEBHp5C2VLmfB4kdBD7pjiMhiv+DkYJkMBAMOD88703wSbldiuEys9shw8BxeDljr7wQ==", - "requires": { - "libp2p-crypto": "~0.14.1", - "pull-handshake": "^1.1.4", - "pull-stream": "^3.6.9" - } - }, - "libp2p-record": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/libp2p-record/-/libp2p-record-0.6.1.tgz", - "integrity": "sha512-GUZ0kQTHFpxeljJhW5f1PnmwW2A0qU9NmF3TP4xkZDmJs3HqawrYovVr9ROGNEPI4ovwjZkJSuG+an3QCQxXWA==", - "requires": { - "async": "^2.5.0", - "buffer-split": "^1.0.0", - "err-code": "^1.1.2", - "left-pad": "^1.1.3", - "multihashes": "~0.4.14", - "multihashing-async": "~0.4.6", - "protons": "^1.0.0" - }, - "dependencies": { - "multihashing-async": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-0.4.8.tgz", - "integrity": "sha512-LCc4lfxmTJOHKIjZjFNgvmfB6nXS/ErLInT9uwU8udFrRm2PH+aTPk3mfCREKmCiSHOlCWiv2O8rlnBx+OjlMw==", - "requires": { - "async": "^2.6.0", - "blakejs": "^1.1.0", - "js-sha3": "^0.7.0", - "multihashes": "~0.4.13", - "murmurhash3js": "^3.0.1", - "nodeify": "^1.0.1" - } - } - } - }, - "libp2p-switch": { - "version": "0.40.8", - "resolved": "https://registry.npmjs.org/libp2p-switch/-/libp2p-switch-0.40.8.tgz", - "integrity": "sha512-+xCO9qyFanPP93rg5ft/o+VvAUw6LanSpZVO+vMdaFP+EoLp7INzJTAKZC7FSF6HhuVqhpUd/Y8/fvPi6mZ4Yw==", - "requires": { - "async": "^2.6.1", - "big.js": "^5.1.2", - "debug": "^3.1.0", - "hashlru": "^2.2.1", - "interface-connection": "~0.3.2", - "ip-address": "^5.8.9", - "libp2p-circuit": "~0.2.1", - "libp2p-identify": "~0.7.2", - "lodash.includes": "^4.3.0", - "moving-average": "^1.0.0", - "multiaddr": "^5.0.0", - "multistream-select": "~0.14.3", - "once": "^1.4.0", - "peer-id": "~0.11.0", - "peer-info": "~0.14.1", - "pull-stream": "^3.6.9" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "libp2p-tcp": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/libp2p-tcp/-/libp2p-tcp-0.13.0.tgz", - "integrity": "sha512-bsmfxi+uVegK61x9UxBEgWtvujPl+zwzuVEyaVRs2IxHu6OE5MGKnj7AflzlK4e3w2HZn8nm4qwMV5m+fhqK1g==", - "requires": { - "class-is": "^1.1.0", - "debug": "^3.1.0", - "interface-connection": "~0.3.2", - "ip-address": "^5.8.9", - "lodash.includes": "^4.3.0", - "lodash.isfunction": "^3.0.9", - "mafmt": "^6.0.2", - "multiaddr": "^5.0.0", - "once": "^1.4.0", - "stream-to-pull-stream": "^1.7.2" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "libp2p-websockets": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/libp2p-websockets/-/libp2p-websockets-0.12.0.tgz", - "integrity": "sha512-I4m0MNqzBOwoIneCF/5mXHGaavNf0Hoe/7NFg2WUm74o7240dZEIuNkAoLu1+OJyOPyu4RXeIBhUOS4cjBdCew==", - "requires": { - "class-is": "^1.1.0", - "interface-connection": "~0.3.2", - "lodash.includes": "^4.3.0", - "mafmt": "^6.0.0", - "pull-ws": "^3.3.1" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.11", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", - "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" - }, - "lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, - "lodash.filter": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", - "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true }, - "lodash.find": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", - "integrity": "sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=" + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, - "lodash.get": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } }, - "lodash.isfunction": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", - "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==" + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true }, - "lodash.map": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", - "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + "is-symbol": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", + "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "dev": true, + "requires": { + "has-symbols": "^1.0.0" + } }, - "lodash.max": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.max/-/lodash.max-4.0.1.tgz", - "integrity": "sha1-hzVWbGGLNan3YFILSHrnllivE2o=" + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true }, - "lodash.merge": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", - "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==" + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "lodash.omit": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", - "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=", + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, - "lodash.padend": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", - "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=", + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "lodash.padstart": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/lodash.padstart/-/lodash.padstart-4.6.1.tgz", - "integrity": "sha1-0uPuv/DZ05rVD1y9G1KnvOa7YRs=" - }, - "lodash.pick": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "istanbul-lib-coverage": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz", + "integrity": "sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw==", "dev": true }, - "lodash.range": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.range/-/lodash.range-3.2.0.tgz", - "integrity": "sha1-9GHliPZmg/fq3q3lE+OKaaVloV0=" - }, - "lodash.repeat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.repeat/-/lodash.repeat-4.1.0.tgz", - "integrity": "sha1-/H3oEx2MisB+S0n3T/6CnR8r7EQ=" + "istanbul-lib-instrument": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-2.3.2.tgz", + "integrity": "sha512-l7TD/VnBsIB2OJvSyxaLW/ab1+92dxZNH9wLH7uHPPioy3JZ8tnx2UXUdKmdkgmP2EFPzg64CToUP6dAS3U32Q==", + "dev": true, + "requires": { + "@babel/generator": "7.0.0-beta.51", + "@babel/parser": "7.0.0-beta.51", + "@babel/template": "7.0.0-beta.51", + "@babel/traverse": "7.0.0-beta.51", + "@babel/types": "7.0.0-beta.51", + "istanbul-lib-coverage": "^2.0.1", + "semver": "^5.5.0" + } }, - "lodash.sortby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", - "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", "dev": true }, - "lodash.template": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.4.0.tgz", - "integrity": "sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A=", + "js-yaml": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz", + "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==", "dev": true, "requires": { - "lodash._reinterpolate": "~3.0.0", - "lodash.templatesettings": "^4.0.0" + "argparse": "^1.0.7", + "esprima": "^4.0.0" } }, - "lodash.templatesettings": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz", - "integrity": "sha1-K01OlbpEDZFf8IvImeRVNmZxMxY=", + "js2xmlparser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz", + "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=", "dev": true, "requires": { - "lodash._reinterpolate": "~3.0.0" + "xmlcreate": "^1.0.1" } }, - "lodash.throttle": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", - "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=" - }, - "lodash.uniqby": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=" - }, - "lolex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.0.0.tgz", - "integrity": "sha512-hcnW80h3j2lbUfFdMArd5UPA/vxZJ+G8vobd+wg3nVEQA0EigStbYcrG030FJxL6xiDDPEkoMatV9xIh5OecQQ==" + "jsdoc": { + "version": "3.5.5", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz", + "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==", + "dev": true, + "requires": { + "babylon": "7.0.0-beta.19", + "bluebird": "~3.5.0", + "catharsis": "~0.8.9", + "escape-string-regexp": "~1.0.5", + "js2xmlparser": "~3.0.0", + "klaw": "~2.0.0", + "marked": "~0.3.6", + "mkdirp": "~0.5.1", + "requizzle": "~0.2.1", + "strip-json-comments": "~2.0.1", + "taffydb": "2.6.2", + "underscore": "~1.8.3" + } }, - "looper": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/looper/-/looper-3.0.0.tgz", - "integrity": "sha1-LvpUw7HLq6m5Su4uWRSwvlf7t0k=" + "jsdoc-api": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/jsdoc-api/-/jsdoc-api-4.0.3.tgz", + "integrity": "sha512-dfYq9JgB+XahY0XfSEw93PmXmocjwYcvJ5aMuQUJ/OdDRGWamf2SSOk3W06Bsj8qdjp/UdefzqpP/mpwsvHuvA==", + "dev": true, + "requires": { + "array-back": "^2.0.0", + "cache-point": "^0.4.1", + "collect-all": "^1.0.3", + "file-set": "^2.0.0", + "fs-then-native": "^2.0.0", + "jsdoc": "~3.5.5", + "object-to-spawn-args": "^1.1.1", + "temp-path": "^1.0.0", + "walk-back": "^3.0.0" + } }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "jsdoc-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsdoc-parse/-/jsdoc-parse-3.0.1.tgz", + "integrity": "sha512-btZLp4wYl90vcAfgk4hoGQbO17iBVrhh3LJRMKZNtZgniO3F8H2CjxXld0owBIB1XxN+j3bAcWZnZKMnSj3iMA==", + "dev": true, "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "array-back": "^2.0.0", + "lodash.omit": "^4.5.0", + "lodash.pick": "^4.4.0", + "reduce-extract": "^1.0.0", + "sort-array": "^2.0.0", + "test-value": "^3.0.0" } }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "jsdoc-to-markdown": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jsdoc-to-markdown/-/jsdoc-to-markdown-4.0.1.tgz", + "integrity": "sha512-LHJRoLoLyDdxNcColgkLoB/rFG5iRP+PNJjMILI0x+95IdEAtyjSt0wJ6ZlKxRpkhBYtQXTQQ119hMqPIUZzTQ==", "dev": true, "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" + "array-back": "^2.0.0", + "command-line-tool": "^0.8.0", + "config-master": "^3.1.0", + "dmd": "^3.0.10", + "jsdoc-api": "^4.0.1", + "jsdoc-parse": "^3.0.1", + "walk-back": "^3.0.0" } }, - "lru-cache": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", - "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "jsx-ast-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", + "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "array-includes": "^3.0.3" } }, - "mafmt": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/mafmt/-/mafmt-6.0.3.tgz", - "integrity": "sha512-VtaYiM1oQu3zmT9iejn2fFkAse1PtG1ytWr+AqeydTqpIpnYp9ycipQEJSP9yeZnQSqVmXVlErkgjG4WnAkk8A==", + "just-extend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.0.2.tgz", + "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", + "dev": true + }, + "klaw": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-2.0.0.tgz", + "integrity": "sha1-WcEo4Nxc5BAgEVEZTuucv4WGUPY=", + "dev": true, "requires": { - "multiaddr": "^6.0.0" - }, - "dependencies": { - "multiaddr": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-6.0.2.tgz", - "integrity": "sha512-yqnJt5BgO5tOutXgWHqwxchbUMjnQSVFxJMiRQa4itQInrq8ZM2ncM274tpDqA/JILleTTNKZGztu+WnW7ssMg==", - "requires": { - "bs58": "^4.0.1", - "class-is": "^1.1.0", - "ip": "^1.1.5", - "ip-address": "^5.8.9", - "lodash.filter": "^4.6.0", - "lodash.map": "^4.6.0", - "varint": "^5.0.0", - "xtend": "^4.0.1" - } - } + "graceful-fs": "^4.1.9" } }, - "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "pify": "^3.0.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, - "make-fetch-happen": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-4.0.1.tgz", - "integrity": "sha512-7R5ivfy9ilRJ1EMKIOziwrns9fGeAD4bAha8EB7BIiBBLHm2KeTUGCrICFt2rbHfzheTLynv50GnNTK1zDTrcQ==", + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "agentkeepalive": "^3.4.1", - "cacache": "^11.0.1", - "http-cache-semantics": "^3.8.1", - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1", - "lru-cache": "^4.1.2", - "mississippi": "^3.0.0", - "node-fetch-npm": "^2.0.2", - "promise-retry": "^1.1.1", - "socks-proxy-agent": "^4.0.0", - "ssri": "^6.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" } }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "p-defer": "^1.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==", + "dev": true + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.omit": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", + "integrity": "sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA=", + "dev": true + }, + "lodash.padend": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", + "integrity": "sha1-U8y6BH0G4VjTEfRdpiX05J5vFm4=", + "dev": true + }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", "dev": true }, - "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "lolex": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-3.1.0.tgz", + "integrity": "sha512-zFo5MgCJ0rZ7gQg69S4pqBsLURbFw11X68C18OcJjJQbqaXm2NoTrGl1IMM3TIz0/BnN1tIs2tzmmqvCsOMMjw==", "dev": true }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "object-visit": "^1.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" } }, "marked": { "version": "0.3.19", - "resolved": "http://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", "dev": true }, @@ -5959,95 +2019,32 @@ "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" }, - "mem": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", - "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^1.0.0", - "p-is-promise": "^1.1.0" - } - }, - "meow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/meow/-/meow-4.0.1.tgz", - "integrity": "sha512-xcSBHD5Z86zaOc+781KrupuHAzeGXSLtiAOmBsiLDiPSaYSB6hdew2ng9EBAnZ62jagG9MHAOdxpDi/lWBFJ/A==", - "dev": true, - "requires": { - "camelcase-keys": "^4.0.0", - "decamelize-keys": "^1.0.0", - "loud-rejection": "^1.0.0", - "minimist": "^1.1.3", - "minimist-options": "^3.0.1", - "normalize-package-data": "^2.3.4", - "read-pkg-up": "^3.0.0", - "redent": "^2.0.0", - "trim-newlines": "^2.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } - }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, - "merge2": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.3.tgz", - "integrity": "sha512-gdUU1Fwj5ep4kplwcmftruWofEFt6lfpkkr3h860CXbAB9c3hGb55EOL2ali0Td5oebvW0E1+3Sr+Ur7XfKpRA==", - "dev": true - }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - } - }, "mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" }, "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==" + "version": "1.38.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz", + "integrity": "sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==" }, "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "version": "2.1.22", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz", + "integrity": "sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==", "requires": { - "mime-db": "~1.37.0" + "mime-db": "~1.38.0" } }, "mimic-fn": { @@ -6056,120 +2053,35 @@ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", "dev": true }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=" - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.10", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=", "dev": true }, - "minimist-options": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0" - } - }, - "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - }, - "dependencies": { - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - } - } - }, - "minizlib": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.1.tgz", - "integrity": "sha512-TrfjCjk4jLhcJyGMYymBH6oTXcWjYbUAXTHDbtnWHjZC25h0cdajHuPE1zxb4DVmu8crfh+HwH/WMuyLG0nHBg==", - "requires": { - "minipass": "^2.2.1" - } - }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - } - }, - "mixin-deep": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", - "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, "mkdirp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, "requires": { "minimist": "0.0.8" }, "dependencies": { "minimist": { "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true } } }, @@ -6183,6 +2095,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", + "dev": true, "requires": { "browser-stdout": "1.3.1", "commander": "2.15.1", @@ -6199,13 +2112,15 @@ "dependencies": { "commander": { "version": "2.15.1", - "resolved": "http://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true }, "debug": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, "requires": { "ms": "2.0.0" } @@ -6214,6 +2129,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6222,42 +2138,9 @@ "once": "^1.3.0", "path-is-absolute": "^1.0.0" } - }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", - "requires": { - "has-flag": "^3.0.0" - } } } }, - "modify-values": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", - "dev": true - }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "moving-average": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/moving-average/-/moving-average-1.0.0.tgz", - "integrity": "sha512-97cgMz0U2zciiDp4xRl/n+MYgrm9l7UiYbtsBLPr0rhw6KH3m4LyK2w4d96V6+UwKo+ph7KtQSoL2qgnqZVgvA==" - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -6274,123 +2157,10 @@ "isarray": "^1.0.0" } }, - "multiaddr": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/multiaddr/-/multiaddr-5.0.2.tgz", - "integrity": "sha512-dXz1chaUHV6L6okujDLS7uRA6NmCbitpikOJA0vMMnrwVyai5kC3ot2CSLrSfj3B8XIgNzpe/j5auSYrnbGGzA==", - "requires": { - "bs58": "^4.0.1", - "class-is": "^1.1.0", - "ip": "^1.1.5", - "ip-address": "^5.8.9", - "lodash.filter": "^4.6.0", - "lodash.map": "^4.6.0", - "varint": "^5.0.0", - "xtend": "^4.0.1" - } - }, - "multibase": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/multibase/-/multibase-0.6.0.tgz", - "integrity": "sha512-R9bNLQhbD7MsitPm1NeY7w9sDgu6d7cuj25snAWH7k5PSNPSwIQQBpcpj8jx1W96dLbdigZqmUWOdQRMnAmgjA==", - "requires": { - "base-x": "3.0.4" - }, - "dependencies": { - "base-x": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.4.tgz", - "integrity": "sha512-UYOadoSIkEI/VrRGSG6qp93rp2WdokiAiNYDfGW5qURAY8GiAQkvMbwNNSDYiVJopqv4gCna7xqf4rrNGp+5AA==", - "requires": { - "safe-buffer": "^5.0.1" - } - } - } - }, - "multicodec": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/multicodec/-/multicodec-0.2.7.tgz", - "integrity": "sha512-96xc9zs7bsclMW0Po9ERnRFqcsWHY8OZ8JW/I8DeHG58YYJZy3cBGI00Ze7hz9Ix56DNHMTSxEj9cgoZByruMg==", - "requires": { - "varint": "^5.0.0" - } - }, - "multihashes": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/multihashes/-/multihashes-0.4.14.tgz", - "integrity": "sha512-V/g/EIN6nALXfS/xHUAgtfPP3mn3sPIF/i9beuGKf25QXS2QZYCpeVJbDPEannkz32B2fihzCe2D/KMrbcmefg==", - "requires": { - "bs58": "^4.0.1", - "varint": "^5.0.0" - } - }, - "multihashing-async": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-0.5.1.tgz", - "integrity": "sha512-Ft5lQNcJCfsns1QN1TDXqPZrrNwBYqIokprYJR2h2Jj01x0GFcYmJYAqHvme6vJoyI3XptEcmZpdr9g5Oy7q3Q==", - "requires": { - "async": "^2.6.1", - "blakejs": "^1.1.0", - "js-sha3": "^0.7.0", - "multihashes": "~0.4.13", - "murmurhash3js": "^3.0.1", - "nodeify": "^1.0.1" - } - }, - "multimatch": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-2.1.0.tgz", - "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", - "dev": true, - "requires": { - "array-differ": "^1.0.0", - "array-union": "^1.0.1", - "arrify": "^1.0.0", - "minimatch": "^3.0.0" - } - }, - "multistream-select": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/multistream-select/-/multistream-select-0.14.3.tgz", - "integrity": "sha512-Wu2ulJtUv5DWrilQ3I3rMRd+zdN8K+fZGX09UYfBGr9ZFLeiukCKvftkTiF6j7viCDNDS5VnjwVqwjrLwoS06g==", - "requires": { - "async": "^2.6.0", - "debug": "^3.1.0", - "interface-connection": "~0.3.2", - "lodash.isfunction": "^3.0.9", - "lodash.range": "^3.2.0", - "once": "^1.4.0", - "pull-handshake": "^1.1.4", - "pull-length-prefixed": "^1.3.1", - "pull-stream": "^3.6.7", - "semver": "^5.5.0", - "varint": "^5.0.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } - } - }, - "murmurhash3js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/murmurhash3js/-/murmurhash3js-3.0.1.tgz", - "integrity": "sha1-Ppg+W0fCoG9DpxMXTn5DXKBEuZg=" - }, "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, "nan": { @@ -6398,30 +2168,6 @@ "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==" }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - } - }, - "napi-build-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz", - "integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==" - }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -6430,20 +2176,10 @@ }, "ncp": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz", "integrity": "sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY=", "dev": true }, - "needle": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.2.4.tgz", - "integrity": "sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==", - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, "negotiator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", @@ -6456,271 +2192,73 @@ "dev": true }, "nise": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.8.tgz", - "integrity": "sha512-kGASVhuL4tlAV0tvA34yJYZIVihrUt/5bDwpp4tTluigxUr2bBlJeDXmivb6NuEdFkqvdv/Ybb9dm16PSKUhtw==", + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.4.10.tgz", + "integrity": "sha512-sa0RRbj53dovjc7wombHmVli9ZihXbXCQ2uH3TNm03DyvOSIQbxg+pbqDKrk2oxMK1rtLGVlKxcB9rrc6X5YjA==", + "dev": true, "requires": { "@sinonjs/formatio": "^3.1.0", + "@sinonjs/text-encoding": "^0.7.1", "just-extend": "^4.0.2", "lolex": "^2.3.2", - "path-to-regexp": "^1.7.0", - "text-encoding": "^0.6.4" - }, - "dependencies": { - "lolex": { - "version": "2.7.5", - "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", - "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==" - } - } - }, - "nocache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz", - "integrity": "sha1-ICtIAhoMTL3i34DeFaF0Q8i0OYA=" - }, - "node-abi": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.5.0.tgz", - "integrity": "sha512-9g2twBGSP6wIR5PW7tXvAWnEWKJDH/VskdXp168xsw9VVxpEGov8K4jsP4/VeoC7b2ZAyzckvMCuQuQlw44lXg==", - "requires": { - "semver": "^5.4.1" - } - }, - "node-fetch-npm": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.2.tgz", - "integrity": "sha512-nJIxm1QmAj4v3nfCvEeCrYSoVwXyxLnaPBK5W1W5DGEJwjlKuC2VEUycGw5oxk+4zZahRrB84PUJJgEmhFTDFw==", - "dev": true, - "requires": { - "encoding": "^0.1.11", - "json-parse-better-errors": "^1.0.0", - "safe-buffer": "^5.1.1" - } - }, - "node-forge": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz", - "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==" - }, - "node-gyp": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", - "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", - "dev": true, - "requires": { - "fstream": "^1.0.0", - "glob": "^7.0.3", - "graceful-fs": "^4.1.2", - "mkdirp": "^0.5.0", - "nopt": "2 || 3", - "npmlog": "0 || 1 || 2 || 3 || 4", - "osenv": "0", - "request": "^2.87.0", - "rimraf": "2", - "semver": "~5.3.0", - "tar": "^2.0.0", - "which": "1" - }, - "dependencies": { - "semver": { - "version": "5.3.0", - "resolved": "http://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", - "dev": true - } - } - }, - "node-gyp-build": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.6.0.tgz", - "integrity": "sha512-4yfIUBKGAjjsgRI50D1U5RF8zgOn+xfV8qmP9zQ078erdxIX6dOPCRb37Vj0nm1yaONuWAJJcWwSZqrt+Fq/MA==" - }, - "node-pre-gyp": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz", - "integrity": "sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==", - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - }, - "dependencies": { - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "tar": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - } - } - }, - "nodeify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/nodeify/-/nodeify-1.0.1.tgz", - "integrity": "sha1-ZKtpp7268DzhB7TwM1yHwLnpGx0=", - "requires": { - "is-promise": "~1.0.0", - "promise": "~1.3.0" + "path-to-regexp": "^1.7.0" }, "dependencies": { - "is-promise": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", - "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=" - } - } - }, - "noop-logger": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "npm-bundled": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.5.tgz", - "integrity": "sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==" - }, - "npm-lifecycle": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/npm-lifecycle/-/npm-lifecycle-2.1.0.tgz", - "integrity": "sha512-QbBfLlGBKsktwBZLj6AviHC6Q9Y3R/AY4a2PYSIRhSKSS0/CxRyD/PfxEX6tPeOCXQgMSNdwGeECacstgptc+g==", - "dev": true, - "requires": { - "byline": "^5.0.0", - "graceful-fs": "^4.1.11", - "node-gyp": "^3.8.0", - "resolve-from": "^4.0.0", - "slide": "^1.1.6", - "uid-number": "0.0.6", - "umask": "^1.1.0", - "which": "^1.3.1" - } - }, - "npm-package-arg": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-6.1.0.tgz", - "integrity": "sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.6.0", - "osenv": "^0.1.5", - "semver": "^5.5.0", - "validate-npm-package-name": "^3.0.0" + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "lolex": { + "version": "2.7.5", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.7.5.tgz", + "integrity": "sha512-l9x0+1offnKKIzYVjyXU2SiwhXDLekRzKyhnbyldPHvC7BvLPVpdNUNR2KeMAiCN2D/kLNttZgQD5WjSxuBx3Q==", + "dev": true + }, + "path-to-regexp": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", + "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", + "dev": true, + "requires": { + "isarray": "0.0.1" + } + } } }, - "npm-packlist": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.1.12.tgz", - "integrity": "sha512-WJKFOVMeAlsU/pjXuqVdzU0WfgtIBCupkEVwn+1Y0ERAbUfWw8R4GjgVbaKnUjRoD2FoQbHOCbOyT5Mbs9Lw4g==", - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } + "nocache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.0.0.tgz", + "integrity": "sha1-ICtIAhoMTL3i34DeFaF0Q8i0OYA=" }, - "npm-pick-manifest": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz", - "integrity": "sha512-+IluBC5K201+gRU85vFlUwX3PFShZAbAgDNp2ewJdWMVSppdo/Zih0ul2Ecky/X7b51J7LrrUAP+XOmOCvYZqA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1", - "npm-package-arg": "^6.0.0", - "semver": "^5.4.1" - } + "node-forge": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.6.tgz", + "integrity": "sha512-sol30LUpz1jQFBjOKwbjxijiE3b6pjd74YwfD0fJOKPjF+fONKb2Yg8rYgS6+bK6VDl+/wfr4IYpC7jDzLUIfw==" }, - "npm-registry-fetch": { + "node-gyp-build": { "version": "3.8.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-3.8.0.tgz", - "integrity": "sha512-hrw8UMD+Nob3Kl3h8Z/YjmKamb1gf7D1ZZch2otrIXM3uFLB5vjEY6DhMlq80z/zZet6eETLbOXcuQudCB3Zpw==", - "dev": true, - "requires": { - "JSONStream": "^1.3.4", - "bluebird": "^3.5.1", - "figgy-pudding": "^3.4.1", - "lru-cache": "^4.1.3", - "make-fetch-happen": "^4.0.1", - "npm-package-arg": "^6.1.0" - } + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.8.0.tgz", + "integrity": "sha512-bYbpIHyRqZ7sVWXxGpz8QIRug5JZc/hzZH4GbdT9HTZi6WmKCZ8GLvP8OZ9TTiIBvwPFKgtGrlWQSXDAvYdsPw==" }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { - "path-key": "^2.0.0" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, "nyc": { "version": "12.0.2", "resolved": "https://registry.npmjs.org/nyc/-/nyc-12.0.2.tgz", "integrity": "sha1-ikpO1pCWbBHsWH/4fuoMEsl0upk=", + "dev": true, "requires": { "archy": "^1.0.0", "arrify": "^1.0.1", @@ -6754,6 +2292,7 @@ "align-text": { "version": "0.1.4", "bundled": true, + "dev": true, "requires": { "kind-of": "^3.0.2", "longest": "^1.0.1", @@ -6762,62 +2301,76 @@ }, "amdefine": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "ansi-regex": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "append-transform": { "version": "0.4.0", "bundled": true, + "dev": true, "requires": { "default-require-extensions": "^1.0.0" } }, "archy": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "arr-diff": { "version": "4.0.0", - "bundled": true + "bundled": true, + "dev": true }, "arr-flatten": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "arr-union": { "version": "3.1.0", - "bundled": true + "bundled": true, + "dev": true }, "array-unique": { "version": "0.3.2", - "bundled": true + "bundled": true, + "dev": true }, "arrify": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "assign-symbols": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "async": { "version": "1.5.2", - "bundled": true + "bundled": true, + "dev": true }, "atob": { "version": "2.1.1", - "bundled": true + "bundled": true, + "dev": true }, "balanced-match": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "base": { "version": "0.11.2", "bundled": true, + "dev": true, "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -6831,6 +2384,7 @@ "define-property": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -6838,6 +2392,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -6845,6 +2400,7 @@ "is-data-descriptor": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -6852,6 +2408,7 @@ "is-descriptor": { "version": "1.0.2", "bundled": true, + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -6860,13 +2417,15 @@ }, "kind-of": { "version": "6.0.2", - "bundled": true + "bundled": true, + "dev": true } } }, "brace-expansion": { "version": "1.1.11", "bundled": true, + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -6875,6 +2434,7 @@ "braces": { "version": "2.3.2", "bundled": true, + "dev": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -6891,6 +2451,7 @@ "extend-shallow": { "version": "2.0.1", "bundled": true, + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -6899,11 +2460,13 @@ }, "builtin-modules": { "version": "1.1.1", - "bundled": true + "bundled": true, + "dev": true }, "cache-base": { "version": "1.0.1", "bundled": true, + "dev": true, "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -6919,6 +2482,7 @@ "caching-transform": { "version": "1.0.1", "bundled": true, + "dev": true, "requires": { "md5-hex": "^1.2.0", "mkdirp": "^0.5.1", @@ -6928,11 +2492,13 @@ "camelcase": { "version": "1.2.1", "bundled": true, + "dev": true, "optional": true }, "center-align": { "version": "0.1.3", "bundled": true, + "dev": true, "optional": true, "requires": { "align-text": "^0.1.3", @@ -6942,6 +2508,7 @@ "class-utils": { "version": "0.3.6", "bundled": true, + "dev": true, "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -6952,6 +2519,7 @@ "define-property": { "version": "0.2.5", "bundled": true, + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -6961,6 +2529,7 @@ "cliui": { "version": "2.1.0", "bundled": true, + "dev": true, "optional": true, "requires": { "center-align": "^0.1.1", @@ -6971,17 +2540,20 @@ "wordwrap": { "version": "0.0.2", "bundled": true, + "dev": true, "optional": true } } }, "code-point-at": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "collection-visit": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -6989,27 +2561,33 @@ }, "commondir": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "component-emitter": { "version": "1.2.1", - "bundled": true + "bundled": true, + "dev": true }, "concat-map": { "version": "0.0.1", - "bundled": true + "bundled": true, + "dev": true }, "convert-source-map": { "version": "1.5.1", - "bundled": true + "bundled": true, + "dev": true }, "copy-descriptor": { "version": "0.1.1", - "bundled": true + "bundled": true, + "dev": true }, "cross-spawn": { "version": "4.0.2", "bundled": true, + "dev": true, "requires": { "lru-cache": "^4.0.1", "which": "^1.2.9" @@ -7018,25 +2596,30 @@ "debug": { "version": "3.1.0", "bundled": true, + "dev": true, "requires": { "ms": "2.0.0" } }, "debug-log": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "decamelize": { "version": "1.2.0", - "bundled": true + "bundled": true, + "dev": true }, "decode-uri-component": { "version": "0.2.0", - "bundled": true + "bundled": true, + "dev": true }, "default-require-extensions": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "strip-bom": "^2.0.0" } @@ -7044,6 +2627,7 @@ "define-property": { "version": "2.0.2", "bundled": true, + "dev": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -7052,6 +2636,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -7059,6 +2644,7 @@ "is-data-descriptor": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -7066,6 +2652,7 @@ "is-descriptor": { "version": "1.0.2", "bundled": true, + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -7074,13 +2661,15 @@ }, "kind-of": { "version": "6.0.2", - "bundled": true + "bundled": true, + "dev": true } } }, "error-ex": { "version": "1.3.1", "bundled": true, + "dev": true, "requires": { "is-arrayish": "^0.2.1" } @@ -7088,6 +2677,7 @@ "execa": { "version": "0.7.0", "bundled": true, + "dev": true, "requires": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -7101,6 +2691,7 @@ "cross-spawn": { "version": "5.1.0", "bundled": true, + "dev": true, "requires": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", @@ -7112,6 +2703,7 @@ "expand-brackets": { "version": "2.1.4", "bundled": true, + "dev": true, "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -7125,6 +2717,7 @@ "debug": { "version": "2.6.9", "bundled": true, + "dev": true, "requires": { "ms": "2.0.0" } @@ -7132,6 +2725,7 @@ "define-property": { "version": "0.2.5", "bundled": true, + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -7139,6 +2733,7 @@ "extend-shallow": { "version": "2.0.1", "bundled": true, + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -7148,6 +2743,7 @@ "extend-shallow": { "version": "3.0.2", "bundled": true, + "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -7156,6 +2752,7 @@ "is-extendable": { "version": "1.0.1", "bundled": true, + "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -7165,6 +2762,7 @@ "extglob": { "version": "2.0.4", "bundled": true, + "dev": true, "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -7179,6 +2777,7 @@ "define-property": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -7186,6 +2785,7 @@ "extend-shallow": { "version": "2.0.1", "bundled": true, + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -7193,6 +2793,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -7200,6 +2801,7 @@ "is-data-descriptor": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -7207,6 +2809,7 @@ "is-descriptor": { "version": "1.0.2", "bundled": true, + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -7215,13 +2818,15 @@ }, "kind-of": { "version": "6.0.2", - "bundled": true + "bundled": true, + "dev": true } } }, "fill-range": { "version": "4.0.0", "bundled": true, + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -7232,6 +2837,7 @@ "extend-shallow": { "version": "2.0.1", "bundled": true, + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -7241,6 +2847,7 @@ "find-cache-dir": { "version": "0.1.1", "bundled": true, + "dev": true, "requires": { "commondir": "^1.0.1", "mkdirp": "^0.5.1", @@ -7250,17 +2857,20 @@ "find-up": { "version": "2.1.0", "bundled": true, + "dev": true, "requires": { "locate-path": "^2.0.0" } }, "for-in": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "foreground-child": { "version": "1.5.6", "bundled": true, + "dev": true, "requires": { "cross-spawn": "^4", "signal-exit": "^3.0.0" @@ -7269,29 +2879,35 @@ "fragment-cache": { "version": "0.2.1", "bundled": true, + "dev": true, "requires": { "map-cache": "^0.2.2" } }, "fs.realpath": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "get-caller-file": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "get-stream": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "get-value": { "version": "2.0.6", - "bundled": true + "bundled": true, + "dev": true }, "glob": { "version": "7.1.2", "bundled": true, + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7303,11 +2919,13 @@ }, "graceful-fs": { "version": "4.1.11", - "bundled": true + "bundled": true, + "dev": true }, "handlebars": { "version": "4.0.11", "bundled": true, + "dev": true, "requires": { "async": "^1.4.0", "optimist": "^0.6.1", @@ -7318,6 +2936,7 @@ "source-map": { "version": "0.4.4", "bundled": true, + "dev": true, "requires": { "amdefine": ">=0.0.4" } @@ -7327,6 +2946,7 @@ "has-value": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -7336,6 +2956,7 @@ "has-values": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -7344,6 +2965,7 @@ "kind-of": { "version": "4.0.0", "bundled": true, + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -7352,15 +2974,18 @@ }, "hosted-git-info": { "version": "2.6.0", - "bundled": true + "bundled": true, + "dev": true }, "imurmurhash": { "version": "0.1.4", - "bundled": true + "bundled": true, + "dev": true }, "inflight": { "version": "1.0.6", "bundled": true, + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -7368,30 +2993,36 @@ }, "inherits": { "version": "2.0.3", - "bundled": true + "bundled": true, + "dev": true }, "invert-kv": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "is-accessor-descriptor": { "version": "0.1.6", "bundled": true, + "dev": true, "requires": { "kind-of": "^3.0.2" } }, "is-arrayish": { "version": "0.2.1", - "bundled": true + "bundled": true, + "dev": true }, "is-buffer": { "version": "1.1.6", - "bundled": true + "bundled": true, + "dev": true }, "is-builtin-module": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "builtin-modules": "^1.0.0" } @@ -7399,6 +3030,7 @@ "is-data-descriptor": { "version": "0.1.4", "bundled": true, + "dev": true, "requires": { "kind-of": "^3.0.2" } @@ -7406,6 +3038,7 @@ "is-descriptor": { "version": "0.1.6", "bundled": true, + "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -7414,21 +3047,25 @@ "dependencies": { "kind-of": { "version": "5.1.0", - "bundled": true + "bundled": true, + "dev": true } } }, "is-extendable": { "version": "0.1.1", - "bundled": true + "bundled": true, + "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "is-number": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "kind-of": "^3.0.2" } @@ -7436,54 +3073,65 @@ "is-odd": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "is-number": "^4.0.0" }, "dependencies": { "is-number": { "version": "4.0.0", - "bundled": true + "bundled": true, + "dev": true } } }, "is-plain-object": { "version": "2.0.4", "bundled": true, + "dev": true, "requires": { "isobject": "^3.0.1" } }, "is-stream": { "version": "1.1.0", - "bundled": true + "bundled": true, + "dev": true }, "is-utf8": { "version": "0.2.1", - "bundled": true + "bundled": true, + "dev": true }, "is-windows": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "isarray": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "isexe": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "isobject": { "version": "3.0.1", - "bundled": true + "bundled": true, + "dev": true }, "istanbul-lib-coverage": { "version": "1.2.0", - "bundled": true + "bundled": true, + "dev": true }, "istanbul-lib-hook": { "version": "1.1.0", "bundled": true, + "dev": true, "requires": { "append-transform": "^0.4.0" } @@ -7491,6 +3139,7 @@ "istanbul-lib-report": { "version": "1.1.3", "bundled": true, + "dev": true, "requires": { "istanbul-lib-coverage": "^1.1.2", "mkdirp": "^0.5.1", @@ -7500,11 +3149,13 @@ "dependencies": { "has-flag": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "supports-color": { "version": "3.2.3", "bundled": true, + "dev": true, "requires": { "has-flag": "^1.0.0" } @@ -7514,6 +3165,7 @@ "istanbul-lib-source-maps": { "version": "1.2.5", "bundled": true, + "dev": true, "requires": { "debug": "^3.1.0", "istanbul-lib-coverage": "^1.2.0", @@ -7525,6 +3177,7 @@ "istanbul-reports": { "version": "1.4.1", "bundled": true, + "dev": true, "requires": { "handlebars": "^4.0.3" } @@ -7532,6 +3185,7 @@ "kind-of": { "version": "3.2.2", "bundled": true, + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -7539,11 +3193,13 @@ "lazy-cache": { "version": "1.0.4", "bundled": true, + "dev": true, "optional": true }, "lcid": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "invert-kv": "^1.0.0" } @@ -7551,6 +3207,7 @@ "load-json-file": { "version": "1.1.0", "bundled": true, + "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -7562,6 +3219,7 @@ "locate-path": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -7569,17 +3227,20 @@ "dependencies": { "path-exists": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true } } }, "longest": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "lru-cache": { "version": "4.1.3", "bundled": true, + "dev": true, "requires": { "pseudomap": "^1.0.2", "yallist": "^2.1.2" @@ -7587,11 +3248,13 @@ }, "map-cache": { "version": "0.2.2", - "bundled": true + "bundled": true, + "dev": true }, "map-visit": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "object-visit": "^1.0.0" } @@ -7599,17 +3262,20 @@ "md5-hex": { "version": "1.3.0", "bundled": true, + "dev": true, "requires": { "md5-o-matic": "^0.1.1" } }, "md5-o-matic": { "version": "0.1.1", - "bundled": true + "bundled": true, + "dev": true }, "mem": { "version": "1.1.0", "bundled": true, + "dev": true, "requires": { "mimic-fn": "^1.0.0" } @@ -7617,19 +3283,22 @@ "merge-source-map": { "version": "1.1.0", "bundled": true, + "dev": true, "requires": { "source-map": "^0.6.1" }, "dependencies": { "source-map": { "version": "0.6.1", - "bundled": true + "bundled": true, + "dev": true } } }, "micromatch": { "version": "3.1.10", "bundled": true, + "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -7648,28 +3317,33 @@ "dependencies": { "kind-of": { "version": "6.0.2", - "bundled": true + "bundled": true, + "dev": true } } }, "mimic-fn": { "version": "1.2.0", - "bundled": true + "bundled": true, + "dev": true }, "minimatch": { "version": "3.0.4", "bundled": true, + "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", - "bundled": true + "bundled": true, + "dev": true }, "mixin-deep": { "version": "1.3.1", "bundled": true, + "dev": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -7678,6 +3352,7 @@ "is-extendable": { "version": "1.0.1", "bundled": true, + "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -7687,17 +3362,20 @@ "mkdirp": { "version": "0.5.1", "bundled": true, + "dev": true, "requires": { "minimist": "0.0.8" } }, "ms": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "nanomatch": { "version": "1.2.9", "bundled": true, + "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -7715,13 +3393,15 @@ "dependencies": { "kind-of": { "version": "6.0.2", - "bundled": true + "bundled": true, + "dev": true } } }, "normalize-package-data": { "version": "2.4.0", "bundled": true, + "dev": true, "requires": { "hosted-git-info": "^2.1.4", "is-builtin-module": "^1.0.0", @@ -7732,21 +3412,25 @@ "npm-run-path": { "version": "2.0.2", "bundled": true, + "dev": true, "requires": { "path-key": "^2.0.0" } }, "number-is-nan": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "object-assign": { "version": "4.1.1", - "bundled": true + "bundled": true, + "dev": true }, "object-copy": { "version": "0.1.0", "bundled": true, + "dev": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -7756,6 +3440,7 @@ "define-property": { "version": "0.2.5", "bundled": true, + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -7765,6 +3450,7 @@ "object-visit": { "version": "1.0.1", "bundled": true, + "dev": true, "requires": { "isobject": "^3.0.0" } @@ -7772,6 +3458,7 @@ "object.pick": { "version": "1.3.0", "bundled": true, + "dev": true, "requires": { "isobject": "^3.0.1" } @@ -7779,6 +3466,7 @@ "once": { "version": "1.4.0", "bundled": true, + "dev": true, "requires": { "wrappy": "1" } @@ -7786,6 +3474,7 @@ "optimist": { "version": "0.6.1", "bundled": true, + "dev": true, "requires": { "minimist": "~0.0.1", "wordwrap": "~0.0.2" @@ -7793,11 +3482,13 @@ }, "os-homedir": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "os-locale": { "version": "2.1.0", "bundled": true, + "dev": true, "requires": { "execa": "^0.7.0", "lcid": "^1.0.0", @@ -7806,11 +3497,13 @@ }, "p-finally": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "p-limit": { "version": "1.2.0", "bundled": true, + "dev": true, "requires": { "p-try": "^1.0.0" } @@ -7818,47 +3511,56 @@ "p-locate": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "p-limit": "^1.1.0" } }, "p-try": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "parse-json": { "version": "2.2.0", "bundled": true, + "dev": true, "requires": { "error-ex": "^1.2.0" } }, "pascalcase": { "version": "0.1.1", - "bundled": true + "bundled": true, + "dev": true }, "path-exists": { "version": "2.1.0", "bundled": true, + "dev": true, "requires": { "pinkie-promise": "^2.0.0" } }, "path-is-absolute": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "path-key": { "version": "2.0.1", - "bundled": true + "bundled": true, + "dev": true }, "path-parse": { "version": "1.0.5", - "bundled": true + "bundled": true, + "dev": true }, "path-type": { "version": "1.1.0", "bundled": true, + "dev": true, "requires": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", @@ -7867,15 +3569,18 @@ }, "pify": { "version": "2.3.0", - "bundled": true + "bundled": true, + "dev": true }, "pinkie": { "version": "2.0.4", - "bundled": true + "bundled": true, + "dev": true }, "pinkie-promise": { "version": "2.0.1", "bundled": true, + "dev": true, "requires": { "pinkie": "^2.0.0" } @@ -7883,6 +3588,7 @@ "pkg-dir": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "find-up": "^1.0.0" }, @@ -7890,6 +3596,7 @@ "find-up": { "version": "1.1.2", "bundled": true, + "dev": true, "requires": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -7899,15 +3606,18 @@ }, "posix-character-classes": { "version": "0.1.1", - "bundled": true + "bundled": true, + "dev": true }, "pseudomap": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "read-pkg": { "version": "1.1.0", "bundled": true, + "dev": true, "requires": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", @@ -7917,6 +3627,7 @@ "read-pkg-up": { "version": "1.0.1", "bundled": true, + "dev": true, "requires": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" @@ -7925,6 +3636,7 @@ "find-up": { "version": "1.1.2", "bundled": true, + "dev": true, "requires": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" @@ -7935,6 +3647,7 @@ "regex-not": { "version": "1.0.2", "bundled": true, + "dev": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -7942,35 +3655,43 @@ }, "repeat-element": { "version": "1.1.2", - "bundled": true + "bundled": true, + "dev": true }, "repeat-string": { "version": "1.6.1", - "bundled": true + "bundled": true, + "dev": true }, "require-directory": { "version": "2.1.1", - "bundled": true + "bundled": true, + "dev": true }, "require-main-filename": { "version": "1.0.1", - "bundled": true + "bundled": true, + "dev": true }, "resolve-from": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "resolve-url": { "version": "0.2.1", - "bundled": true + "bundled": true, + "dev": true }, "ret": { "version": "0.1.15", - "bundled": true + "bundled": true, + "dev": true }, "right-align": { "version": "0.1.3", "bundled": true, + "dev": true, "optional": true, "requires": { "align-text": "^0.1.1" @@ -7979,6 +3700,7 @@ "rimraf": { "version": "2.6.2", "bundled": true, + "dev": true, "requires": { "glob": "^7.0.5" } @@ -7986,21 +3708,25 @@ "safe-regex": { "version": "1.1.0", "bundled": true, + "dev": true, "requires": { "ret": "~0.1.10" } }, "semver": { "version": "5.5.0", - "bundled": true + "bundled": true, + "dev": true }, "set-blocking": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "set-value": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -8011,6 +3737,7 @@ "extend-shallow": { "version": "2.0.1", "bundled": true, + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -8020,25 +3747,30 @@ "shebang-command": { "version": "1.2.0", "bundled": true, + "dev": true, "requires": { "shebang-regex": "^1.0.0" } }, "shebang-regex": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "signal-exit": { "version": "3.0.2", - "bundled": true + "bundled": true, + "dev": true }, "slide": { "version": "1.1.6", - "bundled": true + "bundled": true, + "dev": true }, "snapdragon": { "version": "0.8.2", "bundled": true, + "dev": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -8053,6 +3785,7 @@ "debug": { "version": "2.6.9", "bundled": true, + "dev": true, "requires": { "ms": "2.0.0" } @@ -8060,6 +3793,7 @@ "define-property": { "version": "0.2.5", "bundled": true, + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -8067,6 +3801,7 @@ "extend-shallow": { "version": "2.0.1", "bundled": true, + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -8076,6 +3811,7 @@ "snapdragon-node": { "version": "2.1.1", "bundled": true, + "dev": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -8085,6 +3821,7 @@ "define-property": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -8092,6 +3829,7 @@ "is-accessor-descriptor": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -8099,6 +3837,7 @@ "is-data-descriptor": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -8106,6 +3845,7 @@ "is-descriptor": { "version": "1.0.2", "bundled": true, + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -8114,24 +3854,28 @@ }, "kind-of": { "version": "6.0.2", - "bundled": true + "bundled": true, + "dev": true } } }, "snapdragon-util": { "version": "3.0.1", "bundled": true, + "dev": true, "requires": { "kind-of": "^3.2.0" } }, "source-map": { "version": "0.5.7", - "bundled": true + "bundled": true, + "dev": true }, "source-map-resolve": { "version": "0.5.2", "bundled": true, + "dev": true, "requires": { "atob": "^2.1.1", "decode-uri-component": "^0.2.0", @@ -8142,11 +3886,13 @@ }, "source-map-url": { "version": "0.4.0", - "bundled": true + "bundled": true, + "dev": true }, "spawn-wrap": { "version": "1.4.2", "bundled": true, + "dev": true, "requires": { "foreground-child": "^1.5.6", "mkdirp": "^0.5.0", @@ -8159,6 +3905,7 @@ "spdx-correct": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -8166,11 +3913,13 @@ }, "spdx-exceptions": { "version": "2.1.0", - "bundled": true + "bundled": true, + "dev": true }, "spdx-expression-parse": { "version": "3.0.0", "bundled": true, + "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -8178,11 +3927,13 @@ }, "spdx-license-ids": { "version": "3.0.0", - "bundled": true + "bundled": true, + "dev": true }, "split-string": { "version": "3.1.0", "bundled": true, + "dev": true, "requires": { "extend-shallow": "^3.0.0" } @@ -8190,6 +3941,7 @@ "static-extend": { "version": "0.1.2", "bundled": true, + "dev": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -8198,6 +3950,7 @@ "define-property": { "version": "0.2.5", "bundled": true, + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -8207,6 +3960,7 @@ "string-width": { "version": "2.1.1", "bundled": true, + "dev": true, "requires": { "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^4.0.0" @@ -8215,6 +3969,7 @@ "strip-ansi": { "version": "4.0.0", "bundled": true, + "dev": true, "requires": { "ansi-regex": "^3.0.0" } @@ -8222,17 +3977,20 @@ "strip-bom": { "version": "2.0.0", "bundled": true, + "dev": true, "requires": { "is-utf8": "^0.2.0" } }, "strip-eof": { "version": "1.0.0", - "bundled": true + "bundled": true, + "dev": true }, "test-exclude": { "version": "4.2.1", "bundled": true, + "dev": true, "requires": { "arrify": "^1.0.1", "micromatch": "^3.1.8", @@ -8244,6 +4002,7 @@ "to-object-path": { "version": "0.3.0", "bundled": true, + "dev": true, "requires": { "kind-of": "^3.0.2" } @@ -8251,6 +4010,7 @@ "to-regex": { "version": "3.0.2", "bundled": true, + "dev": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -8261,6 +4021,7 @@ "to-regex-range": { "version": "2.1.1", "bundled": true, + "dev": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -8269,6 +4030,7 @@ "uglify-js": { "version": "2.8.29", "bundled": true, + "dev": true, "optional": true, "requires": { "source-map": "~0.5.1", @@ -8279,6 +4041,7 @@ "yargs": { "version": "3.10.0", "bundled": true, + "dev": true, "optional": true, "requires": { "camelcase": "^1.0.2", @@ -8292,11 +4055,13 @@ "uglify-to-browserify": { "version": "1.0.2", "bundled": true, + "dev": true, "optional": true }, "union-value": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -8307,6 +4072,7 @@ "extend-shallow": { "version": "2.0.1", "bundled": true, + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -8314,6 +4080,7 @@ "set-value": { "version": "0.4.3", "bundled": true, + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -8326,6 +4093,7 @@ "unset-value": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -8334,6 +4102,7 @@ "has-value": { "version": "0.3.1", "bundled": true, + "dev": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -8343,6 +4112,7 @@ "isobject": { "version": "2.1.0", "bundled": true, + "dev": true, "requires": { "isarray": "1.0.0" } @@ -8351,30 +4121,35 @@ }, "has-values": { "version": "0.1.4", - "bundled": true + "bundled": true, + "dev": true } } }, "urix": { "version": "0.1.0", - "bundled": true + "bundled": true, + "dev": true }, "use": { "version": "3.1.0", "bundled": true, + "dev": true, "requires": { "kind-of": "^6.0.2" }, "dependencies": { "kind-of": { "version": "6.0.2", - "bundled": true + "bundled": true, + "dev": true } } }, "validate-npm-package-license": { "version": "3.0.3", "bundled": true, + "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -8383,26 +4158,31 @@ "which": { "version": "1.3.1", "bundled": true, + "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-module": { "version": "2.0.0", - "bundled": true + "bundled": true, + "dev": true }, "window-size": { "version": "0.1.0", "bundled": true, + "dev": true, "optional": true }, "wordwrap": { "version": "0.0.3", - "bundled": true + "bundled": true, + "dev": true }, "wrap-ansi": { "version": "2.1.0", "bundled": true, + "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" @@ -8410,11 +4190,13 @@ "dependencies": { "ansi-regex": { "version": "2.1.1", - "bundled": true + "bundled": true, + "dev": true }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, + "dev": true, "requires": { "number-is-nan": "^1.0.0" } @@ -8422,6 +4204,7 @@ "string-width": { "version": "1.0.2", "bundled": true, + "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -8431,6 +4214,7 @@ "strip-ansi": { "version": "3.0.1", "bundled": true, + "dev": true, "requires": { "ansi-regex": "^2.0.0" } @@ -8439,11 +4223,13 @@ }, "wrappy": { "version": "1.0.2", - "bundled": true + "bundled": true, + "dev": true }, "write-file-atomic": { "version": "1.3.4", "bundled": true, + "dev": true, "requires": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", @@ -8452,15 +4238,18 @@ }, "y18n": { "version": "3.2.1", - "bundled": true + "bundled": true, + "dev": true }, "yallist": { "version": "2.1.2", - "bundled": true + "bundled": true, + "dev": true }, "yargs": { "version": "11.1.0", "bundled": true, + "dev": true, "requires": { "cliui": "^4.0.0", "decamelize": "^1.1.1", @@ -8478,11 +4267,13 @@ "dependencies": { "camelcase": { "version": "4.1.0", - "bundled": true + "bundled": true, + "dev": true }, "cliui": { "version": "4.1.0", "bundled": true, + "dev": true, "requires": { "string-width": "^2.1.1", "strip-ansi": "^4.0.0", @@ -8492,6 +4283,7 @@ "yargs-parser": { "version": "9.0.2", "bundled": true, + "dev": true, "requires": { "camelcase": "^4.1.0" } @@ -8501,58 +4293,25 @@ "yargs-parser": { "version": "8.1.0", "bundled": true, + "dev": true, "requires": { "camelcase": "^4.1.0" }, "dependencies": { "camelcase": { "version": "4.1.0", - "bundled": true + "bundled": true, + "dev": true } } } } }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true }, "object-get": { "version": "2.1.0", @@ -8561,9 +4320,9 @@ "dev": true }, "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz", + "integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==", "dev": true }, "object-to-spawn-args": { @@ -8572,24 +4331,6 @@ "integrity": "sha1-d9qIJ/Bz0BHJ4bFz+JV4FHAkZ4U=", "dev": true }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -8602,6 +4343,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -8619,6 +4361,7 @@ "version": "5.4.0", "resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz", "integrity": "sha512-YF9MNdVy/0qvJvDtunAOzFw9iasOQHpVthTCvGzxt61Il64AYSGdK+rYwld7NAfk9qJ7dt+hymBNSc9LNYS+Sw==", + "dev": true, "requires": { "is-wsl": "^1.1.0" } @@ -8655,225 +4398,43 @@ } } }, - "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", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-locale": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz", - "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", - "dev": true, - "requires": { - "execa": "^0.10.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - }, - "dependencies": { - "execa": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", - "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^3.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - } - } - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", - "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", - "dev": true - }, - "p-map-series": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-1.0.0.tgz", - "integrity": "sha1-v5j+V1cFZYqeE1G++4WuTB8Hvco=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - } - }, - "p-pipe": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz", - "integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k=", - "dev": true - }, - "p-reduce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-1.0.0.tgz", - "integrity": "sha1-GMKw3ZNqRpClKfgjH1ig/bakffo=", - "dev": true - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "p-waterfall": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-1.0.0.tgz", - "integrity": "sha1-ftlLPOszMngjU69qrhGqn8I1uwA=", - "dev": true, - "requires": { - "p-reduce": "^1.0.0" - } + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true }, - "pacote": { - "version": "9.2.3", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.2.3.tgz", - "integrity": "sha512-Y3+yY3nBRAxMlZWvr62XLJxOwCmG9UmkGZkFurWHoCjqF0cZL72cTOCRJTvWw8T4OhJS2RTg13x4oYYriauvEw==", + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { - "bluebird": "^3.5.2", - "cacache": "^11.2.0", - "figgy-pudding": "^3.5.1", - "get-stream": "^4.1.0", - "glob": "^7.1.3", - "lru-cache": "^4.1.3", - "make-fetch-happen": "^4.0.1", - "minimatch": "^3.0.4", - "minipass": "^2.3.5", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "normalize-package-data": "^2.4.0", - "npm-package-arg": "^6.1.0", - "npm-packlist": "^1.1.12", - "npm-pick-manifest": "^2.2.3", - "npm-registry-fetch": "^3.8.0", - "osenv": "^0.1.5", - "promise-inflight": "^1.0.1", - "promise-retry": "^1.1.1", - "protoduck": "^5.0.1", - "rimraf": "^2.6.2", - "safe-buffer": "^5.1.2", - "semver": "^5.6.0", - "ssri": "^6.0.1", - "tar": "^4.4.6", - "unique-filename": "^1.1.1", - "which": "^1.3.1" - }, - "dependencies": { - "tar": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true - } + "p-try": "^1.0.0" } }, - "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "cyclist": "~0.2.2", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" + "p-limit": "^1.1.0" } }, - "parse-github-repo-url": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/parse-github-repo-url/-/parse-github-repo-url-1.4.1.tgz", - "integrity": "sha1-nn2LslKmy2ukJZUGC3v23z28H1A=", + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "error-ex": "^1.2.0" } }, "parseurl": { @@ -8881,18 +4442,6 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", @@ -8902,7 +4451,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-is-inside": { "version": "1.0.2", @@ -8923,33 +4473,24 @@ "dev": true }, "path-to-regexp": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.7.0.tgz", - "integrity": "sha1-Wf3g9DW62suhA6hOnTvGTpa5k30=", - "requires": { - "isarray": "0.0.1" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - } - } + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "^2.0.0" } }, "pathval": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=" + "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "dev": true }, "pbkdf2": { "version": "3.0.17", @@ -8963,257 +4504,52 @@ "sha.js": "^2.4.8" } }, - "peer-book": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/peer-book/-/peer-book-0.8.0.tgz", - "integrity": "sha512-0An5viX2NnYeaqmwe2Vpzl03K9yxJ08mrktzkCPJyyd6rO4xz6QV2JK2Ku2vTHATP8Ag0ambxvr0QbrkT4UCYA==", - "requires": { - "bs58": "^4.0.1", - "peer-id": "^0.10.7", - "peer-info": "^0.14.1" - }, - "dependencies": { - "libp2p-crypto": { - "version": "0.12.1", - "resolved": "http://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.12.1.tgz", - "integrity": "sha512-1/z8rxZ0DcQNreZhEsl7PnLr7DWOioSvYbKBLGkRwNRiNh1JJLgh0PdTySBb44wkrOGT+TxcGRd7iq3/X6Wxwg==", - "requires": { - "asn1.js": "^5.0.0", - "async": "^2.6.0", - "browserify-aes": "^1.1.1", - "bs58": "^4.0.1", - "keypair": "^1.0.1", - "libp2p-crypto-secp256k1": "~0.2.2", - "multihashing-async": "~0.4.7", - "node-forge": "^0.7.1", - "pem-jwk": "^1.5.1", - "protons": "^1.0.1", - "rsa-pem-to-jwk": "^1.1.3", - "tweetnacl": "^1.0.0", - "webcrypto-shim": "github:dignifiedquire/webcrypto-shim#190bc9ec341375df6025b17ae12ddb2428ea49c8" - } - }, - "multihashing-async": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-0.4.8.tgz", - "integrity": "sha512-LCc4lfxmTJOHKIjZjFNgvmfB6nXS/ErLInT9uwU8udFrRm2PH+aTPk3mfCREKmCiSHOlCWiv2O8rlnBx+OjlMw==", - "requires": { - "async": "^2.6.0", - "blakejs": "^1.1.0", - "js-sha3": "^0.7.0", - "multihashes": "~0.4.13", - "murmurhash3js": "^3.0.1", - "nodeify": "^1.0.1" - } - }, - "peer-id": { - "version": "0.10.7", - "resolved": "http://registry.npmjs.org/peer-id/-/peer-id-0.10.7.tgz", - "integrity": "sha512-VEpMFcL9q0NQijmR0jsj38OGbY4yzaWMEareVkDahopmlNT+Cpsot8btPgsgBBApP9NiZj2Enwvh8rZN30ocQw==", - "requires": { - "async": "^2.6.0", - "libp2p-crypto": "~0.12.1", - "lodash": "^4.17.5", - "multihashes": "~0.4.13" - } - }, - "tweetnacl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.0.tgz", - "integrity": "sha1-cT2LgY2kIGh0C/aDhtBHnmb8ins=" - } - } - }, - "peer-id": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/peer-id/-/peer-id-0.11.0.tgz", - "integrity": "sha512-C/lRJk4CWIgOdKvfO572NvHbPcUwe49I6G0toIhDB5tCohqv/qzy0uBcAK9Ww8TvYI6U4J3C8ACShV9fWjNU4w==", - "requires": { - "async": "^2.6.1", - "libp2p-crypto": "~0.13.0", - "lodash": "^4.17.10", - "multihashes": "~0.4.13" - }, - "dependencies": { - "libp2p-crypto": { - "version": "0.13.0", - "resolved": "http://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.13.0.tgz", - "integrity": "sha512-i3r1TBec/xYmC5bcpPiIs3OyUAU3iy53OdRdxqawKoWTQPjYB+TyQ4w+otT66Y0sMcw70O0wH3GFAfPmQgFn+g==", - "requires": { - "asn1.js": "^5.0.0", - "async": "^2.6.0", - "browserify-aes": "^1.2.0", - "bs58": "^4.0.1", - "keypair": "^1.0.1", - "libp2p-crypto-secp256k1": "~0.2.2", - "multihashing-async": "~0.4.8", - "node-forge": "^0.7.5", - "pem-jwk": "^1.5.1", - "protons": "^1.0.1", - "rsa-pem-to-jwk": "^1.1.3", - "tweetnacl": "^1.0.0", - "webcrypto-shim": "github:dignifiedquire/webcrypto-shim#190bc9ec341375df6025b17ae12ddb2428ea49c8" - } - }, - "multihashing-async": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-0.4.8.tgz", - "integrity": "sha512-LCc4lfxmTJOHKIjZjFNgvmfB6nXS/ErLInT9uwU8udFrRm2PH+aTPk3mfCREKmCiSHOlCWiv2O8rlnBx+OjlMw==", - "requires": { - "async": "^2.6.0", - "blakejs": "^1.1.0", - "js-sha3": "^0.7.0", - "multihashes": "~0.4.13", - "murmurhash3js": "^3.0.1", - "nodeify": "^1.0.1" - } - }, - "tweetnacl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.0.tgz", - "integrity": "sha1-cT2LgY2kIGh0C/aDhtBHnmb8ins=" - } - } + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true }, - "peer-info": { - "version": "0.14.1", - "resolved": "http://registry.npmjs.org/peer-info/-/peer-info-0.14.1.tgz", - "integrity": "sha512-I9K+q7sisU0gg5ej6ekbhgolwlcm1tc2wDtLmumptoLYx0DkIT8WVHtgoTnupYwRRqcYADtwddFdiXfb8QFqzg==", + "pkg-conf": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", + "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", + "dev": true, "requires": { - "lodash.uniqby": "^4.7.0", - "mafmt": "^6.0.0", - "multiaddr": "^4.0.0", - "peer-id": "~0.10.7" + "find-up": "^2.0.0", + "load-json-file": "^4.0.0" }, "dependencies": { - "libp2p-crypto": { - "version": "0.12.1", - "resolved": "http://registry.npmjs.org/libp2p-crypto/-/libp2p-crypto-0.12.1.tgz", - "integrity": "sha512-1/z8rxZ0DcQNreZhEsl7PnLr7DWOioSvYbKBLGkRwNRiNh1JJLgh0PdTySBb44wkrOGT+TxcGRd7iq3/X6Wxwg==", - "requires": { - "asn1.js": "^5.0.0", - "async": "^2.6.0", - "browserify-aes": "^1.1.1", - "bs58": "^4.0.1", - "keypair": "^1.0.1", - "libp2p-crypto-secp256k1": "~0.2.2", - "multihashing-async": "~0.4.7", - "node-forge": "^0.7.1", - "pem-jwk": "^1.5.1", - "protons": "^1.0.1", - "rsa-pem-to-jwk": "^1.1.3", - "tweetnacl": "^1.0.0", - "webcrypto-shim": "github:dignifiedquire/webcrypto-shim#190bc9ec341375df6025b17ae12ddb2428ea49c8" - } - }, - "multiaddr": { + "load-json-file": { "version": "4.0.0", - "resolved": "http://registry.npmjs.org/multiaddr/-/multiaddr-4.0.0.tgz", - "integrity": "sha512-zUatrOCfBd/tJNOSoJ10d2EI2FDXB9PyPZhqUMdXE9mOyR3C+HLuOjga2Ga/eChwvEHIpTYRMoIKF2Nv7af2qQ==", - "requires": { - "bs58": "^4.0.1", - "class-is": "^1.1.0", - "ip": "^1.1.5", - "ip-address": "^5.8.9", - "lodash.filter": "^4.6.0", - "lodash.map": "^4.6.0", - "varint": "^5.0.0", - "xtend": "^4.0.1" - } - }, - "multihashing-async": { - "version": "0.4.8", - "resolved": "https://registry.npmjs.org/multihashing-async/-/multihashing-async-0.4.8.tgz", - "integrity": "sha512-LCc4lfxmTJOHKIjZjFNgvmfB6nXS/ErLInT9uwU8udFrRm2PH+aTPk3mfCREKmCiSHOlCWiv2O8rlnBx+OjlMw==", - "requires": { - "async": "^2.6.0", - "blakejs": "^1.1.0", - "js-sha3": "^0.7.0", - "multihashes": "~0.4.13", - "murmurhash3js": "^3.0.1", - "nodeify": "^1.0.1" - } - }, - "peer-id": { - "version": "0.10.7", - "resolved": "http://registry.npmjs.org/peer-id/-/peer-id-0.10.7.tgz", - "integrity": "sha512-VEpMFcL9q0NQijmR0jsj38OGbY4yzaWMEareVkDahopmlNT+Cpsot8btPgsgBBApP9NiZj2Enwvh8rZN30ocQw==", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, "requires": { - "async": "^2.6.0", - "libp2p-crypto": "~0.12.1", - "lodash": "^4.17.5", - "multihashes": "~0.4.13" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, - "tweetnacl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.0.tgz", - "integrity": "sha1-cT2LgY2kIGh0C/aDhtBHnmb8ins=" - } - } - }, - "pem-jwk": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pem-jwk/-/pem-jwk-1.5.1.tgz", - "integrity": "sha1-eoY3/S9nqCflfAxC4cI8P9Us+wE=", - "requires": { - "asn1.js": "1.0.3" - }, - "dependencies": { - "asn1.js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-1.0.3.tgz", - "integrity": "sha1-KBuj7B8kSP52X5Kk7s+IP+E2S1Q=", + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, "requires": { - "bn.js": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, - "bn.js": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-1.3.0.tgz", - "integrity": "sha1-DbTL+W+PI7dC9by50ap6mZSgXoM=", - "optional": true + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true } } }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-conf": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "load-json-file": "^4.0.0" - } - }, "pkg-config": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz", @@ -9251,104 +4587,18 @@ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", "dev": true }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "prebuild-install": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.2.1.tgz", - "integrity": "sha512-9DAccsInWHB48TBQi2eJkLPE049JuAI6FjIH0oIrij4bpDVEbX6JvlWRAcAAlUqBHhjgq0jNqA3m3bBXWm9v6w==", - "requires": { - "detect-libc": "^1.0.3", - "expand-template": "^1.0.2", - "github-from-package": "0.0.0", - "minimist": "^1.2.0", - "mkdirp": "^0.5.1", - "napi-build-utils": "^1.0.1", - "node-abi": "^2.2.0", - "noop-logger": "^0.1.1", - "npmlog": "^4.0.1", - "os-homedir": "^1.0.1", - "pump": "^2.0.1", - "rc": "^1.2.7", - "simple-get": "^2.7.0", - "tar-fs": "^1.13.0", - "tunnel-agent": "^0.6.0", - "which-pm-runs": "^1.0.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", "dev": true }, - "priorityqueue": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/priorityqueue/-/priorityqueue-0.2.1.tgz", - "integrity": "sha512-Dr6ZkRFGZHoAri6iNp5KvspOrFPfhxJ5AExXqLy5ChgdwALd3nC+q5/QG+gmjmf9W63joDXc+Zp0h05Ug/RtYg==" - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true }, - "promise": { - "version": "1.3.0", - "resolved": "http://registry.npmjs.org/promise/-/promise-1.3.0.tgz", - "integrity": "sha1-5cyaTIJ45GZP/twBx9qEhCsEAXU=", - "requires": { - "is-promise": "~1" - }, - "dependencies": { - "is-promise": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", - "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=" - } - } - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, - "promise-retry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", - "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", - "dev": true, - "requires": { - "err-code": "^1.0.0", - "retry": "^0.10.0" - } - }, "prompt": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/prompt/-/prompt-1.0.0.tgz", @@ -9363,54 +4613,15 @@ "winston": "2.1.x" } }, - "promzard": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/promzard/-/promzard-0.3.0.tgz", - "integrity": "sha1-JqXW7ox97kyxIggwWs+5O6OCqe4=", - "dev": true, - "requires": { - "read": "1" - } - }, "prop-types": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", - "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", - "dev": true, - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } - }, - "proto-list": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=", - "dev": true - }, - "protocol-buffers-schema": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz", - "integrity": "sha512-Xdayp8sB/mU+sUV4G7ws8xtYMGdQnxbeIfLjyO9TZZRJdztBGhlmbI5x1qcY4TG5hBkIKGnc28i7nXxaugu88w==" - }, - "protoduck": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", - "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", "dev": true, "requires": { - "genfun": "^5.0.0" - } - }, - "protons": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/protons/-/protons-1.0.1.tgz", - "integrity": "sha512-+0ZKnfVs+4c43tbAQ5j0Mck8wPcLnlxUYzKQoB4iDW4ocdXGnN4P+0dDbgX1FTpoY9+7P2Tn2scJyHHqj+S/lQ==", - "requires": { - "protocol-buffers-schema": "^3.3.1", - "safe-buffer": "^5.1.1", - "signed-varint": "^2.0.1", - "varint": "^5.0.0" + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" } }, "proxy-addr": { @@ -9422,163 +4633,21 @@ "ipaddr.js": "1.8.0" } }, - "pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", - "dev": true - }, - "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==" - }, - "pull-abortable": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/pull-abortable/-/pull-abortable-4.1.1.tgz", - "integrity": "sha1-s61a77QRayWRbSbbiTk6yY0NzqE=" - }, - "pull-cat": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/pull-cat/-/pull-cat-1.1.11.tgz", - "integrity": "sha1-tkLdElXaN2pwa220+pYvX9t0wxs=" - }, - "pull-catch": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pull-catch/-/pull-catch-1.0.0.tgz", - "integrity": "sha1-9YA361woLMtQavn3awAn0zkx5Is=" - }, - "pull-defer": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/pull-defer/-/pull-defer-0.2.3.tgz", - "integrity": "sha512-/An3KE7mVjZCqNhZsr22k1Tx8MACnUnHZZNPSJ0S62td8JtYr/AiRG42Vz7Syu31SoTLUzVIe61jtT/pNdjVYA==" - }, - "pull-handshake": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/pull-handshake/-/pull-handshake-1.1.4.tgz", - "integrity": "sha1-YACg/QGIhM39c3JU+Mxgqypjd5E=", - "requires": { - "pull-cat": "^1.1.9", - "pull-pair": "~1.1.0", - "pull-pushable": "^2.0.0", - "pull-reader": "^1.2.3" - } - }, - "pull-length-prefixed": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pull-length-prefixed/-/pull-length-prefixed-1.3.1.tgz", - "integrity": "sha512-Ho0KoVKOILITGPusghadRVcUzflFHAHcv1Hvi/OkUSJLkGK2LNmVjsmIaJbWkizI//okIj2n376JyTFwCWdsYA==", - "requires": { - "pull-pushable": "^2.0.1", - "pull-reader": "^1.3.0", - "safe-buffer": "^5.0.1", - "varint": "^5.0.0" - } - }, - "pull-pair": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pull-pair/-/pull-pair-1.1.0.tgz", - "integrity": "sha1-fuQnJj/fTaglOXrAoF4atLdL120=" - }, - "pull-pushable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/pull-pushable/-/pull-pushable-2.2.0.tgz", - "integrity": "sha1-Xy867UethpGfAbEqLpnW8b13ZYE=" - }, - "pull-reader": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pull-reader/-/pull-reader-1.3.1.tgz", - "integrity": "sha512-CBkejkE5nX50SiSEzu0Qoz4POTJMS/mw8G6aj3h3M/RJoKgggLxyF0IyTZ0mmpXFlXRcLmLmIEW4xeYn7AeDYw==" - }, - "pull-stream": { - "version": "3.6.9", - "resolved": "https://registry.npmjs.org/pull-stream/-/pull-stream-3.6.9.tgz", - "integrity": "sha512-hJn4POeBrkttshdNl0AoSCVjMVSuBwuHocMerUdoZ2+oIUzrWHFTwJMlbHND7OiKLVgvz6TFj8ZUVywUMXccbw==" - }, - "pull-stream-to-stream": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/pull-stream-to-stream/-/pull-stream-to-stream-1.3.4.tgz", - "integrity": "sha1-P4HYIWvRjSv9GhmBkEcRgOJzg5k=" - }, - "pull-ws": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/pull-ws/-/pull-ws-3.3.1.tgz", - "integrity": "sha512-kJodbLQT+oKjcRIQO+vQNw6xWBuEo7Kxp51VMOvb6cvPvHYA+aNLzm+NmkB/5dZwbuTRYGMal9QPvH52tzM1ZA==", - "requires": { - "relative-url": "^1.0.2", - "safe-buffer": "^5.1.1", - "ws": "^1.1.0" - }, - "dependencies": { - "ws": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ws/-/ws-1.1.5.tgz", - "integrity": "sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==", - "requires": { - "options": ">=0.0.5", - "ultron": "1.0.x" - } - } - } - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, "qs": { "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" - }, - "quick-lru": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", - "dev": true + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "randombytes": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", - "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "requires": { "safe-buffer": "^5.1.0" } @@ -9597,35 +4666,13 @@ "http-errors": "1.6.3", "iconv-lite": "0.4.23", "unpipe": "1.0.0" - }, - "dependencies": { - "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - } } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" - } - } + "react-is": { + "version": "16.8.3", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.3.tgz", + "integrity": "sha512-Y4rC1ZJmsxxkkPuMLwvKvlL1Zfpbcu+Bf4ZigkHup3v9EfdYhAlWAaVyA19olXq2o2mGn0w+dFKvk3pVVlYcIA==", + "dev": true }, "read": { "version": "1.0.7", @@ -9636,96 +4683,25 @@ "mute-stream": "~0.0.4" } }, - "read-cmd-shim": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz", - "integrity": "sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2" - } - }, - "read-package-json": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-2.0.13.tgz", - "integrity": "sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg==", - "dev": true, - "requires": { - "glob": "^7.1.1", - "graceful-fs": "^4.1.2", - "json-parse-better-errors": "^1.0.1", - "normalize-package-data": "^2.0.0", - "slash": "^1.0.0" - } - }, - "read-package-tree": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/read-package-tree/-/read-package-tree-5.2.1.tgz", - "integrity": "sha512-2CNoRoh95LxY47LvqrehIAfUVda2JbuFE/HaGYs42bNrGG+ojbw1h3zOcPcQ+1GQ3+rkzNndZn85u1XyZ3UsIA==", - "dev": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "once": "^1.3.0", - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0" - } - }, "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "^4.0.0", + "load-json-file": "^2.0.0", "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "path-type": "^2.0.0" } }, "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "readdir-scoped-modules": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz", - "integrity": "sha1-n6+jfShr5dksuuve4DDcm19AZ0c=", - "dev": true, - "requires": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, - "redent": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "indent-string": "^3.0.0", - "strip-indent": "^2.0.0" + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } }, "reduce-extract": { @@ -9805,103 +4781,20 @@ "resolved": "https://registry.npmjs.org/referrer-policy/-/referrer-policy-1.1.0.tgz", "integrity": "sha1-NXdOtzW/UPtsB46DM0tHI1AgfXk=" }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", "dev": true }, - "relative-url": { - "version": "1.0.2", - "resolved": "http://registry.npmjs.org/relative-url/-/relative-url-1.0.2.tgz", - "integrity": "sha1-0hxSpy1gYQGLzun5yfwQa/fWUoc=" - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, "require-uncached": { "version": "1.0.3", - "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", "dev": true, "requires": { "caller-path": "^0.1.0", "resolve-from": "^1.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true - } } }, "requizzle": { @@ -9922,41 +4815,18 @@ } }, "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - }, - "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz", + "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==", "dev": true, "requires": { - "resolve-from": "^3.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", - "dev": true - } + "path-parse": "^1.0.6" } }, "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", "dev": true }, "restore-cursor": { @@ -9969,18 +4839,6 @@ "signal-exit": "^3.0.2" } }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "retry": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", - "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", - "dev": true - }, "revalidator": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz", @@ -9988,11 +4846,12 @@ "dev": true }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, "requires": { - "glob": "^7.0.5" + "glob": "^7.1.3" } }, "ripemd160": { @@ -10004,40 +4863,6 @@ "inherits": "^2.0.1" } }, - "rsa-pem-to-jwk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/rsa-pem-to-jwk/-/rsa-pem-to-jwk-1.1.3.tgz", - "integrity": "sha1-JF52vbfnI0z+58oDLTG1TDj6uY4=", - "requires": { - "object-assign": "^2.0.0", - "rsa-unpack": "0.0.6" - }, - "dependencies": { - "object-assign": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", - "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=" - } - } - }, - "rsa-unpack": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/rsa-unpack/-/rsa-unpack-0.0.6.tgz", - "integrity": "sha1-9Q69VqYoN45jHylxYQJs6atO3bo=", - "requires": { - "optimist": "~0.3.5" - }, - "dependencies": { - "optimist": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", - "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=", - "requires": { - "wordwrap": "~0.0.2" - } - } - } - }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -10053,22 +4878,13 @@ "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==", "dev": true }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", + "version": "5.5.12", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.12.tgz", + "integrity": "sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==", "dev": true, "requires": { - "tslib": "^1.9.0" + "symbol-observable": "1.0.1" } }, "safe-buffer": { @@ -10076,44 +4892,16 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "safe-regex": { - "version": "1.1.0", - "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "secp256k1": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-3.5.2.tgz", - "integrity": "sha512-iin3kojdybY6NArd+UFsoTuapOF7bnJNf2UbcWXaY3z+E1sJDipl60vtzB5hbO/uquBu7z0fd4VC4Irp+xoFVQ==", - "requires": { - "bindings": "^1.2.1", - "bip66": "^1.1.3", - "bn.js": "^4.11.3", - "create-hash": "^1.1.2", - "drbg.js": "^1.0.1", - "elliptic": "^6.2.3", - "nan": "^2.2.1", - "safe-buffer": "^5.1.0" - } - }, "semver": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==" + "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", + "dev": true }, "send": { "version": "0.16.2", @@ -10146,34 +4934,6 @@ "send": "0.16.2" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "set-value": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", - "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } - }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", @@ -10181,7 +4941,7 @@ }, "sha.js": { "version": "2.4.11", - "resolved": "http://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "requires": { "inherits": "^2.0.1", @@ -10193,230 +4953,61 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" - }, - "signed-varint": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/signed-varint/-/signed-varint-2.0.1.tgz", - "integrity": "sha1-UKmYnafJjCxh2tEZvJdHDvhSgSk=", - "requires": { - "varint": "~5.0.0" - } - }, - "simple-concat": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" - }, - "simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", - "requires": { - "decompress-response": "^3.3.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "sinon": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.2.2.tgz", - "integrity": "sha512-WLagdMHiEsrRmee3jr6IIDntOF4kbI6N2pfbi8wkv50qaUQcBglkzkjtoOEbeJ2vf1EsrHhLI+5Ny8//WHdMoA==", - "requires": { - "@sinonjs/commons": "^1.2.0", - "@sinonjs/formatio": "^3.1.0", - "@sinonjs/samsam": "^3.0.2", - "diff": "^3.5.0", - "lolex": "^3.0.0", - "nise": "^1.4.7", - "supports-color": "^5.5.0" - } - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0" - }, - "dependencies": { - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - } - } - }, - "slide": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", - "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", - "dev": true - }, - "smart-buffer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.0.1.tgz", - "integrity": "sha512-RFqinRVJVcCAL9Uh1oVqE6FZkqsyLiVOYEZ20TqIOjuX7iFVJ+zsbs4RIghnw/pTs7mZvt8ZHhvm1ZUrR4fykg==", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "requires": { + "shebang-regex": "^1.0.0" } }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "sinon": { + "version": "7.2.7", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.2.7.tgz", + "integrity": "sha512-rlrre9F80pIQr3M36gOdoCEWzFAMDgHYD8+tocqOw+Zw9OZ8F84a80Ds69eZfcjnzDqqG88ulFld0oin/6rG/g==", "dev": true, "requires": { - "kind-of": "^3.2.0" + "@sinonjs/commons": "^1.3.1", + "@sinonjs/formatio": "^3.2.1", + "@sinonjs/samsam": "^3.2.0", + "diff": "^3.5.0", + "lolex": "^3.1.0", + "nise": "^1.4.10", + "supports-color": "^5.5.0" }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "has-flag": "^3.0.0" } } } }, - "socks": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.2.2.tgz", - "integrity": "sha512-g6wjBnnMOZpE0ym6e0uHSddz9p3a+WsBaaYQaBaSCJYvrC4IXykQR9MNGjLQf38e9iIIhp3b1/Zk8YZI3KGJ0Q==", - "dev": true, - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.0.1" - } - }, - "socks-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.1.tgz", - "integrity": "sha512-Kezx6/VBguXOsEe5oU3lXYyKMi4+gva72TwJ7pQY5JfqUx2nMk7NXA6z/mpNqIlfQjWYVfeuNvQjexiTaTn6Nw==", + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", "dev": true, "requires": { - "agent-base": "~4.2.0", - "socks": "~2.2.0" + "is-fullwidth-code-point": "^2.0.0" } }, "sodium-native": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-2.2.3.tgz", - "integrity": "sha512-0rQvKwlWW86YmmAhosnJ6/2PR3mdAtfuWW147L4x3/gwfL7XiJ7mf2BPvBwU16vsYQNY1yxOQg9YT/MN6qoZOA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/sodium-native/-/sodium-native-2.3.0.tgz", + "integrity": "sha512-TYId1m2iLXXot2Q3KA6u8Ti9pmL24T2cm8nb9OUGFFmTxdw4I+vnkjcPVA4LT1acw+A86iJkEn+8iV51jcTWUg==", "requires": { "ini": "^1.3.5", "nan": "^2.4.0", @@ -10445,44 +5036,16 @@ } } }, - "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", - "dev": true, - "requires": { - "is-plain-obj": "^1.0.0" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, "spdx-correct": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", - "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -10506,86 +5069,17 @@ } }, "spdx-license-ids": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz", - "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz", + "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==", "dev": true }, - "split": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", - "dev": true, - "requires": { - "through": "2" - } - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "split2": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-2.2.0.tgz", - "integrity": "sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw==", - "dev": true, - "requires": { - "through2": "^2.0.2" - } - }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sqlite3": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-4.0.4.tgz", - "integrity": "sha512-CO8vZMyUXBPC+E3iXOCc7Tz2pAdq5BWfLcQmOokCOZW5S5sZ/paijiPOCdvzpdP83RroWHYa5xYlVqCxSqpnQg==", - "requires": { - "nan": "~2.10.0", - "node-pre-gyp": "^0.10.3", - "request": "^2.87.0" - }, - "dependencies": { - "nan": { - "version": "2.10.0", - "resolved": "http://registry.npmjs.org/nan/-/nan-2.10.0.tgz", - "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==" - } - } - }, - "sshpk": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", - "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - } - }, - "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -10621,41 +5115,14 @@ "pkg-conf": "^2.0.0" }, "dependencies": { - "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true - }, "minimist": { "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", "dev": true } } }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", @@ -10681,30 +5148,6 @@ } } }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" - }, - "stream-to-pull-stream": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/stream-to-pull-stream/-/stream-to-pull-stream-1.7.2.tgz", - "integrity": "sha1-dXYJrhzr0zx0MtSvvjH/eGULnd4=", - "requires": { - "looper": "^3.0.0", - "pull-stream": "^3.2.3" - } - }, "stream-via": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/stream-via/-/stream-via-1.0.4.tgz", @@ -10712,29 +5155,30 @@ "dev": true }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" } }, "strip-ansi": { - "version": "3.0.1", - "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, "requires": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + } } }, "strip-bom": { @@ -10743,47 +5187,17 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, - "strip-eof": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", - "dev": true - }, - "strip-indent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", - "dev": true - }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" - }, - "strong-log-transformer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.0.0.tgz", - "integrity": "sha512-FQmNqAXJgOX8ygOcvPLlGWBNT41mvNJ9ALoYf0GTwVt9t30mGTqpmp/oJx5gLcu52DXK10kS7dVWhx8aPXDTlg==", - "dev": true, - "requires": { - "byline": "^5.0.0", - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -10796,7 +5210,7 @@ }, "table": { "version": "4.0.3", - "resolved": "http://registry.npmjs.org/table/-/table-4.0.3.tgz", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.3.tgz", "integrity": "sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==", "dev": true, "requires": { @@ -10806,39 +5220,6 @@ "lodash": "^4.17.4", "slice-ansi": "1.0.0", "string-width": "^2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } } }, "table-layout": { @@ -10860,266 +5241,55 @@ "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", "dev": true }, - "tar": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", - "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", - "dev": true, - "requires": { - "block-stream": "*", - "fstream": "^1.0.2", - "inherits": "2" - } - }, - "tar-fs": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", - "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", - "requires": { - "chownr": "^1.0.1", - "mkdirp": "^0.5.1", - "pump": "^1.0.0", - "tar-stream": "^1.1.2" - }, - "dependencies": { - "pump": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", - "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, - "tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", - "requires": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" - } - }, - "temp-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", - "integrity": "sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0=", - "dev": true - }, "temp-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/temp-path/-/temp-path-1.0.0.tgz", "integrity": "sha1-JLFUOXOrRCiW2a02fdnL2/r+kYs=", "dev": true }, - "temp-write": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-3.4.0.tgz", - "integrity": "sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "is-stream": "^1.1.0", - "make-dir": "^1.0.0", - "pify": "^3.0.0", - "temp-dir": "^1.0.0", - "uuid": "^3.0.1" - } - }, "test-value": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz", "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==", "dev": true, "requires": { - "array-back": "^2.0.0", - "typical": "^2.6.1" - } - }, - "text-encoding": { - "version": "0.6.4", - "resolved": "http://registry.npmjs.org/text-encoding/-/text-encoding-0.6.4.tgz", - "integrity": "sha1-45mpgiV6J22uQou5KEXLcb3CbRk=" - }, - "text-extensions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", - "dev": true - }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "time-cache": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/time-cache/-/time-cache-0.3.0.tgz", - "integrity": "sha1-7Q388P2kXNyV+9YB/agw6/G9XYs=", - "requires": { - "lodash.throttle": "^4.1.1" - } - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=" - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "array-back": "^2.0.0", + "typical": "^2.6.1" } }, - "topo": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.3.tgz", - "integrity": "sha512-IgpPtvD4kjrJ7CRA3ov2FhWQADwv+Tdqbsf1ZnPUSAtCJ9e1Z44MmoSGDXGk4IppoZA7jd/QRkNddlLJWlUZsQ==", - "requires": { - "hoek": "6.x.x" - }, - "dependencies": { - "hoek": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-6.1.2.tgz", - "integrity": "sha512-6qhh/wahGYZHFSFw12tBbJw5fsAhhwrrG/y3Cs0YMTv2WzMnL0oLPnQJjv1QJvEfylRSOFuP+xCu+tdx0tD16Q==" - } - } + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } - } + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true }, - "tr46": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", - "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "punycode": "^2.1.0" + "os-tmpdir": "~1.0.2" } }, - "trim-newlines": { + "to-fast-properties": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", - "dev": true - }, - "trim-off-newlines": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz", - "integrity": "sha1-n5up2e+odkw4dpi8v+sshI8RrbM=", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" - }, - "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -11132,7 +5302,8 @@ "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true }, "type-is": { "version": "1.6.16", @@ -11143,11 +5314,6 @@ "mime-types": "~2.1.18" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, "typical": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", @@ -11165,23 +5331,6 @@ "source-map": "~0.6.1" } }, - "uid-number": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz", - "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=", - "dev": true - }, - "ultron": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz", - "integrity": "sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=" - }, - "umask": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/umask/-/umask-1.1.0.tgz", - "integrity": "sha1-8pzr8B31F5ErtY/5xOUP3o4zMg0=", - "dev": true - }, "underscore": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", @@ -11205,155 +5354,31 @@ } } }, - "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } - } - }, "uniq": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", "dev": true }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.1.tgz", - "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, "unorm": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.4.1.tgz", - "integrity": "sha1-NkIA1fE2RsqLzURJAnEzVhR5IwA=" + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/unorm/-/unorm-1.5.0.tgz", + "integrity": "sha512-sMfSWoiRaXXeDZSXC+YRZ23H4xchQpwxjpw1tmfR+kgbBCaOgln4NI0LXejJIhnBuKINrB3WRn+ZI8IWssirVw==" }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, "requires": { "punycode": "^2.1.0" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "ursa-optional": { - "version": "0.9.10", - "resolved": "https://registry.npmjs.org/ursa-optional/-/ursa-optional-0.9.10.tgz", - "integrity": "sha512-RvEbhnxlggX4MXon7KQulTFiJQtLJZpSb9ZSa7ZTkOW0AzqiVTaLjI4vxaSzJBDH9dwZ3ltZadFiBaZslp6haA==", - "requires": { - "bindings": "^1.3.0", - "nan": "^2.11.1" - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, "utile": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/utile/-/utile-0.3.0.tgz", @@ -11370,7 +5395,7 @@ "dependencies": { "async": { "version": "0.9.2", - "resolved": "http://registry.npmjs.org/async/-/async-0.9.2.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", "dev": true } @@ -11381,11 +5406,6 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" - }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -11396,71 +5416,17 @@ "spdx-expression-parse": "^3.0.0" } }, - "validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", - "dev": true, - "requires": { - "builtins": "^1.0.3" - } - }, - "varint": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/varint/-/varint-5.0.0.tgz", - "integrity": "sha1-2Ca4n3SQcy+rwMDtaT7Uddyynr8=" - }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, "walk-back": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-3.0.0.tgz", - "integrity": "sha1-I1h4ejXakQMtrV6S+AsSNw2HlcU=", - "dev": true - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "webcrypto-shim": { - "version": "github:dignifiedquire/webcrypto-shim#190bc9ec341375df6025b17ae12ddb2428ea49c8", - "from": "github:dignifiedquire/webcrypto-shim#master" - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-3.0.1.tgz", + "integrity": "sha512-umiNB2qLO731Sxbp6cfZ9pwURJzTnftxE4Gc7hq8n/ehkuXC//s9F65IEIJA2ZytQZ1ZOsm/Fju4IWx0bivkUQ==", "dev": true }, - "whatwg-url": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz", - "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", - "dev": true, - "requires": { - "lodash.sortby": "^4.7.0", - "tr46": "^1.0.1", - "webidl-conversions": "^4.0.2" - } - }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", @@ -11470,28 +5436,9 @@ "isexe": "^2.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "which-pm-runs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "requires": { - "string-width": "^1.0.2 || 2" - } - }, "winston": { "version": "2.1.1", - "resolved": "http://registry.npmjs.org/winston/-/winston-2.1.1.tgz", + "resolved": "https://registry.npmjs.org/winston/-/winston-2.1.1.tgz", "integrity": "sha1-PJNJ0ZYgf9G9/51LxD73JRDjoS4=", "dev": true, "requires": { @@ -11506,7 +5453,7 @@ "dependencies": { "async": { "version": "1.0.0", - "resolved": "http://registry.npmjs.org/async/-/async-1.0.0.tgz", + "resolved": "https://registry.npmjs.org/async/-/async-1.0.0.tgz", "integrity": "sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=", "dev": true }, @@ -11527,7 +5474,8 @@ "wordwrap": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true }, "wordwrapjs": { "version": "3.0.0", @@ -11539,20 +5487,11 @@ "typical": "^2.6.1" } }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write": { "version": "0.2.1", @@ -11563,45 +5502,10 @@ "mkdirp": "^0.5.1" } }, - "write-file-atomic": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", - "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "write-json-file": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-2.3.0.tgz", - "integrity": "sha1-K2TIozAE1UuGmMdtWFp3zrYdoy8=", - "dev": true, - "requires": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.2", - "make-dir": "^1.0.0", - "pify": "^3.0.0", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.0.0" - } - }, - "write-pkg": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-3.2.0.tgz", - "integrity": "sha512-tX2ifZ0YqEFOF1wjRW2Pk93NLsj02+n1UP5RvO6rCs0K6R2g1padvf006cY74PQJKMGS2r42NK7FD0dG6Y6paw==", - "dev": true, - "requires": { - "sort-keys": "^2.0.0", - "write-json-file": "^2.2.0" - } - }, "ws": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.2.tgz", - "integrity": "sha512-rfUqzvz0WxmSXtJpPMX2EeASXabOrSMk1ruMOV3JBTBjo4ac2lDjGGsbQSyxj8Odhw5fBib8ZKEjDNvgouNKYw==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.1.4.tgz", + "integrity": "sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA==", "requires": { "async-limiter": "~1.0.0" } @@ -11617,150 +5521,11 @@ "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8=", "dev": true }, - "xor-distance": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/xor-distance/-/xor-distance-1.0.0.tgz", - "integrity": "sha1-2nNdmyT8yo282bN00W0qAe6VQcY=" - }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - }, - "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", - "dev": true, - "requires": { - "cliui": "^4.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^1.0.1", - "os-locale": "^3.0.0", - "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^2.0.0", - "which-module": "^2.0.0", - "y18n": "^3.2.1 || ^4.0.0", - "yargs-parser": "^11.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, - "requires": { - "ansi-regex": "^3.0.0" - } - } - } - }, - "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz", - "integrity": "sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==", - "dev": true - } - } - }, - "zeromq": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/zeromq/-/zeromq-5.1.0.tgz", - "integrity": "sha512-wBEwnWaC1BQgcVoC4ZcERuIf+F0LdW12rblcwFNQANUGjJqQB1Ty3D59+WhvBJU9EliQw9Qc6V914gYXMzO6jw==", - "requires": { - "nan": "^2.10.0", - "prebuild-install": "5.2.1" - } } } } diff --git a/package.json b/package.json index 73b483e..36b62d0 100644 --- a/package.json +++ b/package.json @@ -1,21 +1,59 @@ { "name": "n3h", "version": "0.0.1", - "description": "this top-level lerna project is just tools for helping manage the monorepo", + "description": "nodejs holochain networking library with swapable / configurable modules", "scripts": { - "tools-lint": "standard --fix 'tools/lib/**/*.js' 'tools/bin/**/*.js'", - "docs": "node tools/bin/monoman.js docs", - "new": "node tools/bin/monoman.js new", - "test": "npm run tools-lint && lerna run test && npm run docs", - "clean": "lerna clean", - "bootstrap": "lerna bootstrap --hoist --no-ci" + "lint": "standard --fix 'lib/**/*.js' 'bin/**/*.js'", + "mocha": "mocha lib/**/*.test.js bin/**/*.test.js", + "nyc": "nyc npm run mocha", + "test": "npm run lint && npm run nyc", + "show-coverage": "node -e \"require('opn')('coverage/lcov-report/index.html')\"" }, "license": "Apache-2.0", "devDependencies": { "handlebars": "^4.0.12", "jsdoc-to-markdown": "^4.0.1", - "lerna": "^3.5.1", "prompt": "^1.0.0", - "standard": "^12.0.1" + "standard": "^12.0.1", + "chai": "^4.2.0", + "mocha": "^5.2.0", + "nyc": "^12.0.2", + "opn": "^5.4.0", + "sinon": "^7.1.1", + "tmp": "0.0.33" + }, + "dependencies": { + "@holochain/n-bch-rs": "^0.0.4", + "bip39": "^2.5.0", + "bs58": "^4.0.1", + "sodium-native": "^2.2.3", + "express": "^4.16.4", + "express-ws": "^4.0.0", + "helmet": "^3.15.0", + "msgpack-lite": "^0.1.26", + "node-forge": "^0.7.6", + "ws": "^6.1.2" + }, + "standard": { + "env": { + "mocha": true + } + }, + "nyc": { + "/* TODO - Set check-coverage to true */": "", + "check-coverage": false, + "per-file": false, + "lines": 80, + "statements": 80, + "functions": 80, + "branches": 80, + "all": true, + "include": [ + "./lib/**/*.js" + ], + "reporter": [ + "lcov", + "text-summary" + ] } } diff --git a/packages/.gitignore b/packages/.gitignore deleted file mode 100644 index 9c34024..0000000 --- a/packages/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*/package-lock.json diff --git a/packages/hackmode/README.md b/packages/hackmode/README.md deleted file mode 100644 index d0eb85a..0000000 --- a/packages/hackmode/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# hackmode - -just need to get an mvp running diff --git a/packages/hackmode/package.json b/packages/hackmode/package.json deleted file mode 100644 index 562e8f3..0000000 --- a/packages/hackmode/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "@holochain/hackmode", - "version": "0.0.1", - "description": "just need to get an mvp running", - "main": "lib/index.js", - "scripts": { - "lint": "standard --fix 'lib/**/*.js' 'bin/**/*.js'", - "mocha": "mocha lib/**/*.test.js bin/**/*.test.js", - "nyc": "nyc npm run mocha", - "test": "npm run lint && npm run nyc", - "show-coverage": "node -e \"require('opn')('coverage/lcov-report/index.html')\"" - }, - "license": "Apache-2.0", - "devDependencies": { - "chai": "^4.2.0", - "mocha": "^5.2.0", - "nyc": "^12.0.2", - "opn": "^5.4.0", - "sinon": "^7.1.1", - "standard": "^12.0.1" - }, - "dependencies": { - "@holochain/hc-dpki": "^0.0.1", - "@holochain/mosodium": "^0.0.1", - "@holochain/n3h-common": "^0.0.1", - "@holochain/n3h-mod-connection-wss": "0.0.1", - "@holochain/n3h-mod-dht-fullsync": "0.0.1", - "@holochain/n3h-mod-spec": "0.0.1", - "@holochain/tweetlog": "^0.0.1", - "bs58": "^4.0.1", - "msgpack-lite": "^0.1.26" - }, - "standard": { - "env": { - "mocha": true - } - }, - "nyc": { - "check-coverage": false, - "per-file": false, - "lines": 80, - "statements": 80, - "functions": 80, - "branches": 80, - "all": true, - "include": [ - "./lib/**/*.js" - ], - "reporter": [ - "lcov", - "text-summary" - ] - }, - "generate-docs": { - "hackmode": "lib/index.js" - } -} diff --git a/packages/hc-dpki/README.md b/packages/hc-dpki/README.md deleted file mode 100644 index 9002a6a..0000000 --- a/packages/hc-dpki/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# hc-dpki - -holochain key management libraries and utilities - -## 1 - Holochain Application-Level Key Management & Cryptography - -Holochain crypto is based on [NACL](https://nacl.cr.yp.to/) / [libsodium](https://libsodium.org/). - -### 1.1 - Keypairs - -Keypair is a bit of a misnomer. It is more of a pair of keypairs. A holochain "keypair" is made up of both a signing keypair and a key exchange keypair for use in encryption. Both pairs are derived from a common seed. - -- signature keypair - `crypto_sign_seed_keypair` `Ed25519` -- encryption keypair - `crypto_kx_seed_keypair` `BLAKE2B-512` - -### 1.2 - Identity - -The identifier for an agent is derived from the public sides of the signing and encryption keypairs. A two byte checksum is appended, and a base64url transform is applied. - -- Identifier - `[32 byte signing pubkey][32 byte encryption pubkey][2 bytes checksum]` - -The checksum bytes are generated by taking the sha256 sum of both the signing and encryption pubkeys, then applying an xor to each successive 2 bytes of that resulting sum. - -Checksum psuedo code: - -``` -hash = sha256( concat( signPubkey, encPubkey ) ) -sum = (int16) hash[0] -loop i from 2 to 32 step 2 { - sum = sum ^ (int16) hash[i] -} -``` - -The [Base64url](https://tools.ietf.org/html/rfc4648#section-5) encoding variant (`-` and `_` instead of `+` and `/`) is used to make the identifier more compatible with urls and filenames. - -Example: - -- Signature Pubkey: `8c59ff8b384e13cb6e65ea29345e605e075b3bdd93f21fcaf2c132a460d5b0e0` -- Encryption Pubkey: `794ebb53296ce3362b780d9206f0e263b94e5f0e73c4a28fa62055196a7dad38` -- Checksum Bytes: `d592` -- Resulting ID: `jFn_izhOE8tuZeopNF5gXgdbO92T8h_K8sEypGDVsOB5TrtTKWzjNit4DZIG8OJjuU5fDnPEoo-mIFUZan2tONWS` - -## 2 - Holochain Hierarchical Seed Determinism - -Holochain makes use of 2 NACL methods for deriving keys - -- kdf - `crypto_kdf_derive_from_key` `BLAKE2B-256` -- pwhash - `crypto_pwhash` `argon2id13` ("sensitive" ops and mem limits) - -All seeds are 32 bytes. - -### 2.1 - Root Seed - -The holochain HD root seed is pure entropy. - -### 2.2 - Device Seed - -The device seed is derived through the kdf method for a given index with the ascii byte context `HCDEVICE`. - -### 2.3 - Device PIN Seed - -The device pin seed is derived through the pwhash method. This is an attempt to allow alternate input methods for a derivation to work around potential keylogging malware. For example, on a mobile device, a 3x3 grid of numbers 1-9 could be randomly assigned / randomly re-assigned after each input by the user. - -### 2.4 - Application Keypair Seed - -The application keypair seed is derived through the kdf method for a given index with the ascii byte context `HCAPPLIC`. diff --git a/packages/hc-dpki/bin/hc-dpki-util b/packages/hc-dpki/bin/hc-dpki-util deleted file mode 100755 index 96d0766..0000000 --- a/packages/hc-dpki/bin/hc-dpki-util +++ /dev/null @@ -1,195 +0,0 @@ -#!/usr/bin/env node -// vim: set syntax=javascript: - -const os = require('os') -const fs = require('fs') -const path = require('path') - -const { mkdirp } = require('@holochain/n3h-common') -const mosodium = require('@holochain/mosodium') -const prompt = require('prompt') - -const { RootSeed, Seed, work } = require('../lib/index') - -function getp (opt) { - if (typeof opt === 'string') { - opt = { description: opt } - } - return new Promise((resolve, reject) => { - prompt.message = '' - prompt.start() - prompt.get({ - properties: { - input: { - description: opt.description || '', - message: opt.message || 'invalid input', - pattern: opt.pattern || /^[^]+$/, - default: opt.default, - required: typeof opt.required === 'boolean' ? opt.required : true - } - } - }, (err, res) => { - if (err) { - return reject(err) - } - resolve(res) - }) - }) -} - -async function main () { - if (!(process.argv[2] in CMD)) { - return CMD.help() - } - - await CMD[process.argv[2]](...process.argv.slice(3)) -} - -async function init () { - const homeDir = 'HC_DPKI_HOME' in process.env - ? process.env.HC_DPKI_HOME - : path.join(os.homedir(), '.hc-dpki') - - await mkdirp(homeDir) - const passphrase = await mosodium.SecBuf.readPrompt('passphrase (no echo): ') - - let rsbundle = null - let hint = '' - try { - rsbundle = fs.readFileSync(path.join(homeDir, 'root-seed.json')) - } catch (e) { - console.error('\n') - console.error(e.stack || e.toString()) - console.error('could not load root seed') - console.error() - const answer = await getp('generate new root seed? [y/N]') - if ((answer.input[0] || '').toUpperCase() !== 'Y') { - throw new Error('aborting') - } - - const rs = await RootSeed.newRandom() - - hint = (await getp('root seed hint / info / description')).input - - console.log('\n### BEGIN ROOT SEED GENERATION ###\n') - - rsbundle = JSON.stringify(await rs.getBundle( - passphrase, hint), null, 2) - - await rs.destroy() - } - - rsbundle = JSON.parse(rsbundle) - const rootSeed = await Seed.fromBundle(rsbundle, passphrase) - - console.error(' -- root bundle -- ') - - console.log(JSON.stringify(rsbundle, null, 2)) - - console.error(' -- root mnemonic -- ') - - console.log(rootSeed.getMnemonic()) - - console.error('\n### END ROOT SEED GENERATION ##\n') - - return { - hint, - homeDir, - passphrase, - rootSeed - } -} - -const CMD = { - work: async (workTarget) => { - mosodium.SecBuf.setLockLevel(mosodium.SecBuf.LOCK_NONE) - const key = mosodium.random.bytes(32) - console.log('for key ' + key.toString('hex')) - console.log('searching for nonce...') - const nonce = await work.search({ - key, - progress: ops => { - if (ops % 10 === 0) { - console.log(ops) - } - }, - workTarget: Buffer.from(workTarget, 'hex') - }) - console.log('generated nonce: ' + nonce) - const tmp = mosodium.hash.sha256(Buffer.concat([ - key, - Buffer.from(nonce, 'hex') - ])) - console.log('tmp hash: ' + tmp.toString('hex')) - let tag = tmp.readInt32LE(0) - for (let i = 4; i < 32; i += 4) { - tag = tag ^ tmp.readInt32LE(i) - } - console.log('rrdht location: ' + tag) - }, - - device: async (index, pin) => { - if (typeof pin !== 'string' || pin.length < 4) { - throw new Error('pin must be a string >= 4 characters') - } - - index = parseInt(index, 10) - if (isNaN(index) || index < 0) { - throw new Error('invalid index: ' + index) - } - console.log('device', index) - - const z = await init() - - const device = await z.rootSeed.getDeviceSeed(index) - - console.error('\n### BEGIN DEVICE SEED ###\n') - console.error(' -- device mnemonic --') - console.log(device.getMnemonic()) - - const bundle = JSON.stringify(await device.getBundle( - z.passphrase, z.hint + ' : device index ' + index), null, 2) - - console.error(' -- device bundle --') - console.log(bundle) - - console.error('\n### END DEVICE SEED ###\n') - - console.error('\n### BEGIN DEVICE PIN SEED ###\n') - const devicePin = await device.getDevicePinSeed(pin) - - const pinBundle = JSON.stringify(await devicePin.getBundle( - z.passphrase, z.hint + ' : device index ' + index + ' (pin)'), null, 2) - - console.error(' -- device pin bundle --') - console.log(pinBundle) - - console.error('\n### END DEVICE PIN SEED ###\n') - - console.error('\n### BEGIN APPLICATION KEYPAIRS ###\n') - - for (let i = 1; i <= 5; ++i) { - const kp = await devicePin.getApplicationKeypair(i) - console.error(' -- APPLICATION KEYPAIR ' + i + ' --') - console.log(kp.getId()) - await kp.destroy() - } - - console.error('\n### END APPLICATION KEYPAIRS ###\n') - - await devicePin.destroy() - await device.destroy() - z.passphrase.free() - }, - - help: async () => { - console.log('hc-dpki-util [command] [args]') - console.log(' work /workTarget/ - demo work generation for RRDHT tag') - console.log(' device /index/ /pin/ - generate password encrypted device seed') - } -} - -main().then(() => {}, (err) => { - console.error(err.stack || err.toString()) - process.exit(1) -}) diff --git a/packages/hc-dpki/package.json b/packages/hc-dpki/package.json deleted file mode 100644 index cfb47ba..0000000 --- a/packages/hc-dpki/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "@holochain/hc-dpki", - "version": "0.0.1", - "description": "holochain key management libraries and utilities", - "main": "lib/index.js", - "scripts": { - "lint": "standard --fix 'lib/**/*.js' 'bin/**/*.js'", - "mocha": "mocha lib/**/*.test.js bin/**/*.test.js", - "nyc": "nyc npm run mocha", - "test": "npm run lint && npm run nyc", - "show-coverage": "node -e \"require('opn')('coverage/lcov-report/index.html')\"" - }, - "license": "Apache-2.0", - "devDependencies": { - "chai": "^4.2.0", - "mocha": "^5.2.0", - "nyc": "^12.0.2", - "opn": "^5.4.0", - "sinon": "^7.1.1", - "standard": "^12.0.1" - }, - "dependencies": { - "bip39": "^2.5.0", - "@holochain/mosodium": "^0.0.1", - "msgpack-lite": "^0.1.26", - "@holochain/n3h-common": "^0.0.1", - "@holochain/n-bch-rs": "^0.0.4", - "prompt": "^1.0.0" - }, - "standard": { - "env": { - "mocha": true - } - }, - "nyc": { - "check-coverage": true, - "per-file": false, - "lines": 80, - "statements": 80, - "functions": 80, - "branches": 80, - "all": true, - "include": [ - "./lib/**/*.js" - ], - "reporter": [ - "lcov", - "text-summary" - ] - }, - "generate-docs": { - "util": "lib/util.js", - "keypair": "lib/keypair.js", - "seed": "lib/seed.js" - } -} diff --git a/packages/mosocket/README.md b/packages/mosocket/README.md deleted file mode 100644 index 7c2f8fe..0000000 --- a/packages/mosocket/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# mosocket - -peer to peer networking protocol abstraction diff --git a/packages/mosocket/examples/test.js b/packages/mosocket/examples/test.js deleted file mode 100755 index d7ffd84..0000000 --- a/packages/mosocket/examples/test.js +++ /dev/null @@ -1,133 +0,0 @@ -#!/usr/bin/env node -'use strict' - -const msgpack = require('msgpack-lite') - -const { MoSocket, config } = require('../lib/index') - -class MyNode extends MoSocket { - constructor (config) { - super(config) - - this.on('bind', (addr) => { - console.log('node listening at', addr) - }) - - this.myproto = this.installProtocol({ - name: 'MyProto', - version: '0.0.1', - hooks: { - paperAirplane: { - pattern: MoSocket.PATTERN_NOTIFY_RELIABLE, - initiator: { - onNotifyReliable: (style, color) => { - return msgpack.encode({ - style, - color - }) - } - }, - responder: { - onNotifyReliable: (msg) => { - msg = msgpack.decode(msg.data) - console.log('[paperAirplane] ' + JSON.stringify(msg)) - } - } - }, - makeSandwich: { - pattern: MoSocket.PATTERN_FIRST, - initiator: { - onPreauthReq: (ctx, cheese, filler) => { - ctx._cheese = cheese - ctx._filler = filler - return msgpack.encode(!!cheese) - }, - onRequest: (ctx) => { - return msgpack.encode(ctx._filler.toString()) - }, - onResponse: (ctx, msg) => { - msg = msgpack.decode(msg.data) - return { - cheese: ctx._cheese, - filler: ctx._filler, - result: msg - } - } - }, - responder: { - onPreauthReq: (ctx, msg) => { - const cheese = msgpack.decode(msg.data) - ctx._cheese = cheese - if (cheese) { - throw new Error('we have no cheese') - } - }, - onRequest: (ctx, msg) => { - const filler = msgpack.decode(msg.data) - if (filler === 'salami') { - throw new Error('we have no salami') - } - return msgpack.encode( - 'sandwich(cheese:' + ctx._cheese + ',filler:' + filler + ')') - } - } - } - } - }) - } -} - -async function _main () { - const node1 = new MyNode(config()) - node1.on('bind', (addr) => { - console.log('node listening at', addr) - }) - node1.on('connection', (proxy) => { - console.log('got connection:', proxy.toString(), node1.getAddr(proxy)) - node1.myproto.paperAirplane([proxy], 'wide', 'green') - }) - - await node1.bind() - - const addr = node1.getListeningAddrs()[0] - console.log('attempting to connect to', addr) - - const node2 = new MyNode(config()) - - const remote = await node2.connect(addr) - console.log('connected:', remote.toString(), node2.getAddr(remote)) - - await node2.myproto.paperAirplane([remote], 'slim', 'yellow') - let sandwich = await node2.myproto.makeSandwich([remote], false, 'avacado') - console.log('makeSandwich:result1:', sandwich) - - let success = false - try { - sandwich = await node2.myproto.makeSandwich([remote], true, 'avacado') - } catch (e) { - console.log('makeSandwich:result2 success - server has no cheese') - success = true - } - if (!success) { - throw new Error('expected the server to have no cheese') - } - - success = false - try { - sandwich = await node2.myproto.makeSandwich([remote], false, 'salami') - } catch (e) { - console.log('makeSandwich:result3 success - server has no salami') - success = true - } - if (!success) { - throw new Error('expected the server to have no salami') - } - - node1.close() - node2.close() -} - -_main().then(() => {}, (err) => { - console.error(err.stack || err.toString()) - process.exit(1) -}) diff --git a/packages/mosocket/lib/config.js b/packages/mosocket/lib/config.js deleted file mode 100644 index 54cb34b..0000000 --- a/packages/mosocket/lib/config.js +++ /dev/null @@ -1,10 +0,0 @@ -const mosodium = require('@holochain/mosodium') - -module.exports = () => ({ - keys: { - kx: mosodium.kx.keypair() - }, - timeout: { - newConnection: 1000 - } -}) diff --git a/packages/mosocket/lib/config.test.js b/packages/mosocket/lib/config.test.js deleted file mode 100644 index 668b8ad..0000000 --- a/packages/mosocket/lib/config.test.js +++ /dev/null @@ -1,30 +0,0 @@ -const expect = require('chai').expect - -const config = require('./config') -const { SecBuf } = require('@holochain/mosodium') - -describe('config Suite', () => { - it('should be a function', () => { - expect(typeof config).equals('function') - }) - - describe('default', () => { - let c - - beforeEach(() => { - c = config() - }) - - it('timeout.newConnection', () => { - expect(typeof c.timeout.newConnection).equals('number') - }) - - it('keys.kx.publicKey', () => { - expect(c.keys.kx.publicKey instanceof Buffer).equals(true) - }) - - it('keys.kx.secretKey', () => { - expect(c.keys.kx.secretKey instanceof SecBuf).equals(true) - }) - }) -}) diff --git a/packages/mosocket/lib/index.js b/packages/mosocket/lib/index.js deleted file mode 100644 index 797af34..0000000 --- a/packages/mosocket/lib/index.js +++ /dev/null @@ -1,4 +0,0 @@ -exports.MoSocket = require('./mosocket').MoSocket -exports.config = require('./config') -exports.logger = require('./tweetlog') -exports.MultiAddr = require('./multiaddr').MultiAddr diff --git a/packages/mosocket/lib/message.js b/packages/mosocket/lib/message.js deleted file mode 100644 index 7cb07e0..0000000 --- a/packages/mosocket/lib/message.js +++ /dev/null @@ -1,145 +0,0 @@ -const msgpack = require('msgpack-lite') - -const MsgType = exports.MsgType = { - keepAlive: 0x00, - - noticeReliable: 0x10, - noticeUnreliable: 0x11, - - preauthReq: 0x20, - preauthAck: 0x21, - preauthAccept: 0x22, - preauthStop: 0x23, - - reqData: 0x30, - reqDataCont: 0x31, - - resData: 0x40, - resDataCont: 0x41 -} - -exports.newNoticeReliable = function newNoticeReliable (protoHash, hookName, data) { - return Buffer.concat([ - Buffer.from([MsgType.noticeReliable]), - msgpack.encode([protoHash, hookName, data]) - ]) -} - -exports.newPreauthReq = function newPreauthReq (protoHash, msgId, hookName, data) { - return Buffer.concat([ - Buffer.from([MsgType.preauthReq]), - msgpack.encode([protoHash, msgId, hookName, data]) - ]) -} - -exports.newPreauthAck = function newPreauthAck (msgId) { - return Buffer.concat([ - Buffer.from([MsgType.preauthAck]), - msgpack.encode([msgId]) - ]) -} - -exports.newPreauthAccept = function newPreauthAccept (msgId) { - return Buffer.concat([ - Buffer.from([MsgType.preauthAccept]), - msgpack.encode([msgId]) - ]) -} - -exports.newPreauthStop = function newPreauthStop (msgId, text) { - return Buffer.concat([ - Buffer.from([MsgType.preauthStop]), - msgpack.encode([msgId, text.toString()]) - ]) -} - -exports.newRequest = function newRequest (msgId, data) { - const out = [] - out.push(Buffer.concat([ - Buffer.from([MsgType.reqData]), - msgpack.encode([msgId, data.byteLength, data.slice(0, 4096)]) - ])) - for (let i = 4096; i < data.byteLength; i += 4096) { - out.push(Buffer.concat([ - Buffer.from([MsgType.reqDataCont]), - msgpack.encode([msgId, data.slice(i, i + 4096)]) - ])) - } - return out -} - -exports.newResponse = function newResponse (msgId, data) { - const out = [] - out.push(Buffer.concat([ - Buffer.from([MsgType.resData]), - msgpack.encode([msgId, data.byteLength, data.slice(0, 4096)]) - ])) - for (let i = 4096; i < data.byteLength; i += 4096) { - out.push(Buffer.concat([ - Buffer.from([MsgType.resDataCont]), - msgpack.encode([msgId, data.slice(i, i + 4096)]) - ])) - } - return out -} - -exports.parse = function parse (buffer) { - const msgType = buffer.readUInt8(0) - let data = null - switch (msgType) { - case MsgType.noticeReliable: - data = msgpack.decode(buffer.slice(1)) - return { - type: msgType, - protoHash: data[0], - hookName: data[1], - data: data[2] - } - case MsgType.preauthReq: - data = msgpack.decode(buffer.slice(1)) - return { - type: msgType, - protoHash: data[0], - msgId: data[1], - hookName: data[2], - data: data[3] - } - case MsgType.preauthAck: - data = msgpack.decode(buffer.slice(1)) - return { - type: msgType, - msgId: data[0] - } - case MsgType.preauthAccept: - data = msgpack.decode(buffer.slice(1)) - return { - type: msgType, - msgId: data[0] - } - case MsgType.preauthStop: - data = msgpack.decode(buffer.slice(1)) - return { - type: msgType, - msgId: data[0], - text: data[1] - } - case MsgType.reqData: - data = msgpack.decode(buffer.slice(1)) - return { - type: msgType, - msgId: data[0], - length: data[1], - data: data[2] - } - case MsgType.resData: - data = msgpack.decode(buffer.slice(1)) - return { - type: msgType, - msgId: data[0], - length: data[1], - data: data[2] - } - default: - throw new Error('unhandled msgtype: 0x' + msgType.toString(16)) - } -} diff --git a/packages/mosocket/lib/message.test.js b/packages/mosocket/lib/message.test.js deleted file mode 100644 index 320a9e9..0000000 --- a/packages/mosocket/lib/message.test.js +++ /dev/null @@ -1,18 +0,0 @@ -const expect = require('chai').expect - -const message = require('./message') - -describe('message Suite', () => { - it('should be an object', () => { - expect(typeof message).equals('object') - }) - - it('gen/parse noticeReliable', () => { - const result = message.parse(message.newNoticeReliable( - 1, 'test', Buffer.from([1]))) - expect(result.type).equals(message.MsgType.noticeReliable) - expect(result.protoHash).equals(1) - expect(result.hookName).equals('test') - expect(result.data.toString('base64')).equals('AQ==') - }) -}) diff --git a/packages/mosocket/lib/mosocket.js b/packages/mosocket/lib/mosocket.js deleted file mode 100644 index 3777113..0000000 --- a/packages/mosocket/lib/mosocket.js +++ /dev/null @@ -1,205 +0,0 @@ -const EventEmitter = require('events') - -const { Connection: TcpCon, Listener: TcpListener } = require('./tcp') -const { MultiAddr } = require('./multiaddr') -const { Session } = require('./session') -const protocol = require('./protocol') - -/** - */ -class MoSocket extends EventEmitter { - /** - */ - constructor (config) { - super() - this._config = config - this._listeners = [] - this._outgoing = [] - this._incoming = [] - this._sessions = new Map() - this._protocols = new Map() - this._nextMessageId = 0 - } - - /** - */ - async bind (ma) { - if (!ma) { - ma = new MultiAddr() - } else if (!(ma instanceof MultiAddr)) { - ma = new MultiAddr(ma) - } - - const tcpPort = ma.tcpPort || 0 - const udpPort = ma.udpPort || 0 - - const hosts = ma.ipAddress ? [ma.ipAddress] : ['0.0.0.0', '::'] - - await Promise.all(hosts.map((h) => { - return this._bind(h, tcpPort, udpPort) - })) - } - - /** - */ - async connect (ma) { - if (!(ma instanceof MultiAddr)) { - ma = new MultiAddr(ma) - } - - if (!ma.ipAddress || !ma.tcpPort) { - throw new Error('invalid multiaddr: ' + ma.toString()) - } - - const con = await TcpCon.create(this._config, ma) - this._outgoing.push(con) - const session = new Session(this, con._sessionId) - session.assumeTcpConnection(con) - this._trackSession(session) - return session.getProxy() - } - - /** - */ - close () { - for (let l of this._listeners) { - l.close() - } - this._listeners = [] - for (let c of this._outgoing) { - c.close() - } - this._outgoing = [] - for (let c of this._incoming) { - c.close() - } - this._incoming = [] - } - - /** - */ - getListeningAddrs () { - const out = [] - for (let l of this._listeners) { - for (let addr of l.getAddrs()) { - out.push(addr) - } - } - out.sort((a, b) => { - a = a.rank({ needTcp: true }) - b = b.rank({ needTcp: true }) - if (a === b) { - return 0 - } else if (a > b) { - return 1 - } - return -1 - }) - return out.map(o => o.toString()) - } - - /** - */ - getAddr (proxy) { - return this._sessions.get(proxy.toString()).getAddr() - } - - /** - */ - installProtocol (def) { - const proto = protocol.create(this, def) - if (this._protocols.has(proto._intTag)) { - throw new Error('protocol intTag conflict: ' + proto._intTag) - } - this._protocols.set(proto._intTag, proto) - return proto - } - - // -- protected -- // - - /** - */ - $nextMessageId () { - return this._nextMessageId++ - } - - /** - */ - $resolveProxy (proxy) { - if (typeof proxy !== 'string') { - proxy = proxy.toString() - } - const out = this._sessions.get(proxy) - if (!(out instanceof Session)) { - throw new Error('invalid session proxy reference: ' + proxy) - } - return out - } - - /** - */ - $triggerInProtocolMessage (msg) { - if (msg.protoHash) { - const proto = this._protocols.get(msg.protoHash) - if (!(proto instanceof protocol.Protocol)) { - throw new Error('bad protohash: ' + msg.protoHash) - } - proto.$triggerProtocolMessage(msg) - } else if (typeof msg.msgId === 'number') { - const session = this.$resolveProxy(msg.proxy) - session.$triggerInProtocolMessage(msg) - } else { - throw new Error('unhandleable message: ' + JSON.stringify(msg)) - } - } - - /** - */ - $triggerOutProtocolMessage (msg) { - if (typeof msg.msgId === 'number') { - const session = this.$resolveProxy(msg.proxy) - session.$triggerOutProtocolMessage(msg) - } else { - throw new Error('unhandleable message: ' + JSON.stringify(msg)) - } - } - - // -- private -- // - - /** - */ - async _bind (host, tcpPort, udpPort) { - const ma = MultiAddr.fromParts(host, tcpPort, udpPort) - const listener = await TcpListener.create(this._config, ma) - listener.on('connection', (con) => { - this._incoming.push(con) - const session = new Session(this, con._sessionId) - session.assumeTcpConnection(con) - this._trackSession(session) - }) - this._listeners.push(listener) - - for (let addr of listener.getAddrs()) { - this.emit('bind', addr.toString()) - } - } - - /** - */ - _trackSession (session) { - this._sessions.set(session.getProxy(), session) - this.emit('connection', session.getProxy()) - session.on('error', e => { - this.emit('sessionError', session.getProxy(), e) - }) - session.on('close', () => { - this.emit('sessionClose', session.getProxy()) - }) - } -} - -for (let pname in protocol.Patterns) { - MoSocket[pname] = protocol.Patterns[pname] -} - -exports.MoSocket = MoSocket diff --git a/packages/mosocket/lib/multiaddr.js b/packages/mosocket/lib/multiaddr.js deleted file mode 100644 index 3bb69d5..0000000 --- a/packages/mosocket/lib/multiaddr.js +++ /dev/null @@ -1,121 +0,0 @@ -const net = require('net') - -/** - */ -class MultiAddr { - /** - */ - static fromParts (ip, tcpPort, udpPort) { - const ma = new MultiAddr() - ma.ipFamily = net.isIP(ip) - ma.ipAddress = ip - ma.tcpPort = tcpPort - ma.udpPort = udpPort - return ma - } - - /** - */ - constructor (str) { - this.parse(str || '') - } - - /** - */ - clear () { - this.ipFamily = null // 4 or 6 - this.ipAddress = null - this.tcpPort = null - this.udpPort = null - } - - /** - */ - rank (opt) { - opt || (opt = {}) - typeof opt.needTcp === 'boolean' || (opt.needTcp = false) - typeof opt.needUdp === 'boolean' || (opt.needUdp = false) - if ( - (opt.needTcp && !this.tcpPort) || - (opt.needUdp && !this.udpPort) - ) { - if (this.ipAddress) { - return 'z:' + this.ipAddress - } else { - return 'z' - } - } - switch (this.ipFamily) { - case 4: - if (this.ipAddress === '127.0.0.1') { - return 'c:' + this.ipAddress - } else if (this.ipAddress) { - return 'a:' + this.ipAddress - } else { - return 'z' - } - case 6: - if (this.ipAddress === '::1') { - return 'd:' + this.ipAddress - } else if (this.ipAddress) { - return 'b:' + this.ipAddress - } else { - return 'z' - } - default: - return 'z' - } - } - - /** - */ - parse (str) { - this.clear() - const parts = str.split('/') - for (let i = 1; i < parts.length; ++i) { - switch (parts[i]) { - case 'ip4': - this.ipFamily = 4 - this.ipAddress = parts[++i] - break - case 'ip6': - this.ipFamily = 6 - this.ipAddress = parts[++i] - break - case 'tcp': - this.tcpPort = parseInt(parts[++i], 10) - break - case 'udp': - this.udpPort = parseInt(parts[++i], 10) - break - default: - throw new Error('unhandled multiaddr type: ' + parts[i]) - } - } - } - - /** - */ - toString () { - let out = '' - if (this.ipFamily && this.ipAddress) { - out += '/' + (this.ipFamily === 6 ? 'ip6' : 'ip4') + - '/' + this.ipAddress - } - if (typeof this.tcpPort === 'number') { - out += '/tcp/' + this.tcpPort - } - if (typeof this.udpPort === 'number') { - out += '/udp/' + this.udpPort - } - return out - } - - /** - */ - toJSON () { - return this.toString() - } -} - -exports.MultiAddr = MultiAddr diff --git a/packages/mosocket/lib/multiaddr.test.js b/packages/mosocket/lib/multiaddr.test.js deleted file mode 100644 index 3ee3e5e..0000000 --- a/packages/mosocket/lib/multiaddr.test.js +++ /dev/null @@ -1,95 +0,0 @@ -const expect = require('chai').expect -const { MultiAddr } = require('./multiaddr') - -describe('multi-address Suite', () => { - it('should be a function', () => { - expect(typeof MultiAddr).equals('function') - }) - - it('fromParts', () => { - expect(MultiAddr.fromParts('::1', 1, 2).toString()) - .equals('/ip6/::1/tcp/1/udp/2') - }) - - it('full loop blank', () => { - const ma = new MultiAddr('') - expect(ma.toString()).equals('') - }) - - it('full loop blank (toJSON)', () => { - const ma = new MultiAddr('') - expect(ma.toJSON()).equals('') - }) - - it('full loop', () => { - const ma = new MultiAddr('/ip4/0.0.0.0/tcp/0/udp/0') - expect(ma.toString()).equals('/ip4/0.0.0.0/tcp/0/udp/0') - }) - - it('full loop v6', () => { - const ma = new MultiAddr('/ip6/::/tcp/0/udp/0') - expect(ma.toString()).equals('/ip6/::/tcp/0/udp/0') - }) - - it('should throw on bad type', () => { - expect(() => { return new MultiAddr('/bad/0.0.0.0') }).throws() - }) - - it('rank should sort multiaddr ips by usefullness', () => { - expect([ - '/tcp/1', - '/udp/1', - '/ip6/', - '/ip4/', - '/ip6/::1', - '/ip6/fe::fe', - '/ip4/127.0.0.1', - '/ip4/1.2.3.4' - ].map(a => new MultiAddr(a)).sort((a, b) => { - a = a.rank() - b = b.rank() - if (a === b) { - return 0 - } else if (a > b) { - return 1 - } - return -1 - }).map(a => a.toString())).deep.equals([ - '/ip4/1.2.3.4', - '/ip6/fe::fe', - '/ip4/127.0.0.1', - '/ip6/::1', - '/tcp/1', - '/udp/1', - '', - '' - ]) - }) - - it('rank should handle need tcp / udp', () => { - expect([ - '/ip6//tcp/1/udp/1', - '/ip6//udp/1', - '/ip6/::1/tcp/1', - '/ip6/::2/udp/1', - '/ip6/::3', - '/ip6/::4/tcp/1/udp/1' - ].map(a => new MultiAddr(a)).sort((a, b) => { - a = a.rank({ needTcp: true, needUdp: true }) - b = b.rank({ needTcp: true, needUdp: true }) - if (a === b) { - return 0 - } else if (a > b) { - return 1 - } - return -1 - }).map(a => a.toString())).deep.equals([ - '/ip6/::4/tcp/1/udp/1', - '/tcp/1/udp/1', - '/udp/1', - '/ip6/::1/tcp/1', - '/ip6/::2/udp/1', - '/ip6/::3' - ]) - }) -}) diff --git a/packages/mosocket/lib/protocol.js b/packages/mosocket/lib/protocol.js deleted file mode 100644 index 9e81a41..0000000 --- a/packages/mosocket/lib/protocol.js +++ /dev/null @@ -1,407 +0,0 @@ -const EventEmitter = require('events') - -const mosodium = require('mosodium') - -const message = require('./message') - -const Patterns = exports.Patterns = { - PATTERN_FIRST: 'first', - PATTERN_NOTIFY_RELIABLE: 'notify-reliable' -} - -/** - * Protocol Stub Class - */ -class Protocol extends EventEmitter { - /** - */ - constructor (mosocket, name, version, protoName, intTag) { - super() - this._mosocket = mosocket - this._name = name - this._version = version - this._protoName = protoName - this._intTag = intTag - this._handlerEntrypoints = new Map() - } - - // -- marking all functions with $ so they don't clobber hooks -- // - - $getName () { - return this._name - } - - $getVersion () { - return this._version - } - - $getProtoName () { - return this._protoName - } - - $getIntTag () { - return this._intTag - } - - async $triggerProtocolMessage (msg) { - const cb = this._handlerEntrypoints.get(msg.hookName) - if (!cb) { - throw new Error('bad entrypoint hook: ' + msg.hookName) - } - await cb(msg) - } -} - -exports.Protocol = Protocol - -/** - */ -class Handler { - /** - */ - constructor (protoStub, hookName, hook, isOut, onClean) { - this.$protoStub = protoStub - this.$hookName = hookName - this.$hook = hook - this.$isOut = isOut - this.$messageId = protoStub._mosocket.$nextMessageId() - this.$registeredProxies = new Set() - if (onClean) { - this.$onClean = Array.isArray(onClean) ? onClean : [onClean] - } else { - this.$onClean = [] - } - this.$onClean.push(() => { - for (let p of this.$registeredProxies) { - this.$unregisterMessageHandler(p) - } - this.$registeredProxies = null - this.$protoStub = null - this.$hookName = null - this.$hook = null - this.$messageId = null - this.$onClean = null - }) - } - - /** - */ - clean () { - for (let c of this.$onClean) { - c() - } - } - - // -- protected -- // - - /** - */ - $registerMessageHandler (proxies) { - proxies = Array.isArray(proxies) ? proxies : [proxies] - for (let proxy of proxies) { - const session = this.$protoStub._mosocket.$resolveProxy(proxy) - if (this.$isOut) { - session.$registerOutMessageHandler(this.$messageId, this) - } else { - session.$registerInMessageHandler(this.$messageId, this) - } - this.$registeredProxies.add(proxy.toString()) - } - } - - /** - */ - $sendAll (data) { - for (let p of this.$registeredProxies) { - const session = this.$protoStub._mosocket.$resolveProxy(p) - session.send(data) - } - } - - /** - */ - $unregisterMessageHandler (proxy) { - const session = this.$protoStub._mosocket.$resolveProxy(proxy) - if (this.$isOut) { - session.$unregisterOutMessageHandler(this.$messageId) - } else { - session.$unregisterInMessageHandler(this.$messageId) - } - this.$registeredProxies.delete(proxy) - } -} - -/** - */ -class HandlerFirstInitiator extends Handler { - /** - */ - constructor (protoStub, hookName, hook, resolve, reject) { - super(protoStub, hookName, hook, true, () => { - this.$resolve = null - this.$reject = null - this.$state = null - this.$context = null - }) - - this.$context = {} - - this.$resolve = resolve - this.$reject = reject - - this.$state = 'init' - } - - /** - */ - async initiate (proxies, args) { - this.$registerMessageHandler(proxies) - - const data = await this.$hook.initiator.onPreauthReq( - this.$context, ...args) - - const msg = message.newPreauthReq( - this.$protoStub._intTag, this.$messageId, this.$hookName, - data) - - this.$sendAll(msg) - - this.$state = 'await-ack' - } - - /** - */ - async onMessage (msg) { - try { - switch (this.$state) { - case 'await-ack': - // TODO - actually pay attention to acks... - // for now wait for Accept / Stop - if (msg.type === message.MsgType.preauthAck) { - console.log('got ack') - // ignore - } else if (msg.type === message.MsgType.preauthAccept) { - await this._doAccept(msg) - } else if (msg.type === message.MsgType.preauthStop) { - return this._fail(msg.text) - } else { - throw new Error('bad message type: 0x' + msg.type.toString(16)) - } - break - case 'await-resp': - if (msg.type === message.MsgType.resData) { - this._handleResp(msg) - } else if (msg.type === message.MsgType.preauthStop) { - return this._fail(msg.text) - } else { - throw new Error('bad message type: 0x' + msg.type.toString(16)) - } - break - default: - throw new Error('unhandled state: ' + this.$state) - } - } catch (e) { - this._fail(e) - } - } - - // -- private -- // - - async _doAccept (msg) { - for (let p of this.$registeredProxies) { - if (msg.proxy.toString() !== p) { - this.$unregisterMessageHandler(p) - } - } - - const data = await this.$hook.initiator.onRequest(this.$context) - - const msgs = message.newRequest(this.$messageId, data) - msgs.map((msg) => { - this.$sendAll(msg) - }) - - this.$state = 'await-resp' - } - - async _handleResp (msg) { - const result = await this.$hook.initiator.onResponse(this.$context, msg) - this.$resolve(result) - this.clean() - } - - _fail (e) { - this.$reject(e) - this.clean() - } -} - -/** - */ -class HandlerFirstResponder extends Handler { - /** - */ - constructor (protoStub, hookName, hook) { - super(protoStub, hookName, hook, false, () => { - this._preauthMsg = null - this.$context = null - }) - - this.$context = {} - this.$state = 'init' - } - - /** - */ - async initiate (msg) { - this.$messageId = msg.msgId - this.$registerMessageHandler(msg.proxy) - - try { - await this.$hook.responder.onPreauthReq(this.$context, msg) - } catch (e) { - const stop = message.newPreauthStop( - this.$messageId, e.stack || e.toString()) - this.$sendAll(stop) - this.clean() - return - } - - const accept = message.newPreauthAccept(this.$messageId) - this.$sendAll(accept) - - this.$state = 'await-req' - } - - /** - */ - onMessage (msg) { - try { - switch (this.$state) { - case 'await-req': - if (msg.type === message.MsgType.reqData) { - if (msg.length !== msg.data.byteLength) { - throw new Error('unimplemented reqDataCont') - } - this._handleRequest(msg) - } - break - default: - throw new Error('unhandled state: ' + this.$state) - } - } catch (e) { - this._fail(e) - } - } - - // -- private -- // - - async _handleRequest (msg) { - let result = null - try { - result = await this.$hook.responder.onRequest( - this.$context, msg) - } catch (e) { - const stop = message.newPreauthStop( - this.$messageId, e.stack || e.toString()) - this.$sendAll(stop) - this.clean() - return - } - - const msgs = message.newResponse(this.$messageId, result) - msgs.map((msg) => { - this.$sendAll(msg) - }) - - this.clean() - } - - _fail (e) { - this.clean() - throw e - } -} - -/** - */ -function _validateProxyParam (p) { - if (Array.isArray(p)) { - if (!p.length) { - throw new Error('first parameter must be array of remote proxies') - } - return p.map((_p) => { - if (!_p) throw new Error('bad proxy type ' + typeof _p) - return _p.toString() - }) - } - if (p) { - return [p.toString()] - } - throw new Error('first parameter must be array of remote proxies') -} - -/** - */ -function _installPatternFirst (protoStub, hookName, hook) { - protoStub[hookName] = (proxies, ...args) => { - proxies = _validateProxyParam(proxies) - return new Promise((resolve, reject) => { - try { - const handler = new HandlerFirstInitiator( - protoStub, hookName, hook, resolve, reject) - handler.initiate(proxies, args) - } catch (e) { - reject(e) - } - }) - } - protoStub._handlerEntrypoints.set(hookName, async (msg) => { - const handler = new HandlerFirstResponder( - protoStub, hookName, hook) - handler.initiate(msg) - }) -} - -/** - */ -function _installPatternNotifyReliable (protoStub, hookName, hook) { - protoStub[hookName] = async (proxies, ...args) => { - proxies = _validateProxyParam(proxies) - const data = await hook.initiator.onNotifyReliable(...args) - const msg = message.newNoticeReliable( - protoStub._intTag, hookName, data) - for (let con of proxies) { - const session = protoStub._mosocket.$resolveProxy(con) - await session.send(msg) - } - } - protoStub._handlerEntrypoints.set(hookName, hook.responder.onNotifyReliable) -} - -/** - */ -exports.create = function protocolCreate (mosocket, def) { - const protoName = def.name + '/' + def.version - const intTag = mosodium.hash.toInt(mosodium.hash.sha256( - Buffer.from(protoName, 'utf8'))) - - const protoStub = new Protocol( - mosocket, def.name, def.version, protoName, intTag) - - for (let hookName in def.hooks) { - const hook = def.hooks[hookName] - switch (hook.pattern) { - case Patterns.PATTERN_FIRST: - _installPatternFirst(protoStub, hookName, hook) - break - case Patterns.PATTERN_NOTIFY_RELIABLE: - _installPatternNotifyReliable(protoStub, hookName, hook) - break - default: - throw new Error('unrecognized pattern: ' + hook.pattern) - } - } - - return protoStub -} diff --git a/packages/mosocket/lib/queue.js b/packages/mosocket/lib/queue.js deleted file mode 100644 index 539de74..0000000 --- a/packages/mosocket/lib/queue.js +++ /dev/null @@ -1,124 +0,0 @@ -/** - * Naive priority queue implementation. Should still be pretty performant. - */ -class Queue { - /** - * initialize our priority buckets by calling `clear()` - */ - constructor () { - this.clear() - } - - /** - * reset everything - */ - clear () { - this._buckets = new Map() - this._ids = new Map() - } - - /** - * remove the item if any filed under `id` - * @param {string} id - the id to remove - * @return {*|null} - the item, if found - */ - removeId (id) { - if (!this.has(id)) { - return null - } - const prio = this._ids.get(id) - const bucketRef = this._buckets.get(prio) - for (let i = 0; i < bucketRef.length; ++i) { - const itemRef = bucketRef[i] - if (itemRef.id === id) { - bucketRef.splice(i, 1) - if (bucketRef.length === 0) { - this._buckets.delete(prio) - } - this._ids.delete(id) - return itemRef.item - } - } - } - - /** - * do we have this id currently in our queue? - * @param {string} id - the id to check for - * @return {boolean} - true if the id is queued - */ - has (id) { - return this._ids.has(id) - } - - /** - * how many items are we tracking? - * @return {number} - item count in queue - */ - count () { - return this._ids.size - } - - /** - * is our queue empty? - * @return {boolean} - true if the queue is empty - */ - isEmpty () { - return this._ids.size === 0 - } - - /** - * add an item to the queue - * @param {number} priority - integer priority - * @param {string} id - the id to associate with `item` - * @param {*} item - the item to store in the queue - */ - enqueue (priority, id, item) { - if (this._ids.has(id)) { - throw new Error('duplicate id: ' + id) - } - priority = (priority | 0).toString() - if (!this._buckets.has(priority)) { - this._buckets.set(priority, []) - } - this._buckets.get(priority).push({ - id, - item - }) - this._ids.set(id, priority) - } - - /** - * get the next item off the queue - * @return {*} the next item, throws if empty - */ - dequeue () { - if (this.isEmpty()) { - throw new Error('queue is empty') - } - const firstPrio = Array.from(this._buckets.keys()).sort(_sort)[0] - const bucketRef = this._buckets.get(firstPrio) - const itemRef = bucketRef.shift() - if (bucketRef.length === 0) { - this._buckets.delete(firstPrio) - } - this._ids.delete(itemRef.id) - return itemRef.item - } -} - -/** - * priorities are stringified integers. - * we need to convert them back to actual ints to sort. - * @private - */ -function _sort (a, b) { - if (a === b) { - return 0 - } else if ((a | 0) < (b | 0)) { - return -1 - } - return 1 -} - -// export -exports.Queue = Queue diff --git a/packages/mosocket/lib/queue.test.js b/packages/mosocket/lib/queue.test.js deleted file mode 100644 index 75c8be5..0000000 --- a/packages/mosocket/lib/queue.test.js +++ /dev/null @@ -1,71 +0,0 @@ -const expect = require('chai').expect -const { Queue } = require('./queue') - -describe('priority queue Suite', () => { - let q = null - - beforeEach(() => { - q = new Queue() - q.enqueue(2, 'd', 'd') - q.enqueue(4, 'f', 'f') - q.enqueue(3, 'e', 'e') - q.enqueue(1, 'b', 'b') - q.enqueue(1, 'c', 'c') - q.enqueue(-1, 'a', 'a') - }) - - it('should be a function', () => { - expect(typeof Queue).equals('function') - }) - - it('should return in order', () => { - expect(q.dequeue()).equals('a') - expect(q.dequeue()).equals('b') - expect(q.dequeue()).equals('c') - expect(q.dequeue()).equals('d') - expect(q.dequeue()).equals('e') - expect(q.dequeue()).equals('f') - }) - - it('should throw if queueing empty queue', () => { - q.clear() - expect(() => q.dequeue()).throws() - }) - - it('should use count properly', () => { - expect(q.count()).equals(6) - q.clear() - expect(q.count()).equals(0) - }) - - it('should use has properly', () => { - expect(q.has('a')).equals(true) - q.clear() - expect(q.has('a')).equals(false) - }) - - it('should use isEmpty properly', () => { - expect(q.isEmpty()).equals(false) - q.clear() - expect(q.isEmpty()).equals(true) - }) - - it('bad removeId should return null', () => { - expect(q.removeId('z')).equals(null) - expect(q.count()).equals(6) - }) - - it('good removeId should return item', () => { - expect(q.removeId('a')).equals('a') - expect(q.count()).equals(5) - }) - - it('good removeId should return item #2', () => { - expect(q.removeId('c')).equals('c') - expect(q.count()).equals(5) - }) - - it('should throw on same id', () => { - expect(() => q.enqueue(1, 'a', 'a')).throws() - }) -}) diff --git a/packages/mosocket/lib/session.js b/packages/mosocket/lib/session.js deleted file mode 100644 index 8a0306b..0000000 --- a/packages/mosocket/lib/session.js +++ /dev/null @@ -1,146 +0,0 @@ -const EventEmitter = require('events') - -const { Connection: TcpCon } = require('./tcp') -const message = require('./message') - -/** - */ -class Session extends EventEmitter { - /** - */ - constructor (mosocket, sessionId) { - super() - - this._mosocket = mosocket - this._sessionId = sessionId - this._tcp = null - - this._inMessageHandlers = new Map() - this._outMessageHandlers = new Map() - } - - /** - */ - getProxy () { - return this._sessionId.toString('base64') - } - - /** - */ - close () { - if (this._tcp) { - this._tcp.close() - } - this._inMessageHandlers = null - this._outMessageHandlers = null - this._tcp = null - this._sessionId = null - this.removeAllListeners() - this.setMaxListeners(0) - } - - /** - */ - getAddr () { - const addr = this._tcp.getAddr() - // TODO - add udp component - return addr.toString() - } - - /** - */ - send (msg) { - this._tcp.send(msg) - } - - /** - */ - assumeTcpConnection (con) { - if (!(con instanceof TcpCon)) { - throw new Error('session can only assume tcp connections') - } - if (this._sessionId !== con._sessionId) { - throw new Error('session id mismatch') - } - if (this._tcp) { - this._tcp.close() - } - this._tcp = con - con.on('error', (err) => { - this.emit('error', err) - this.close() - }) - con.on('close', () => { - this.emit('close') - this.close() - }) - con.on('message', (msg) => { - this._handleMessage(msg) - }) - } - - // -- protected -- // - - $registerInMessageHandler (msgId, handler) { - if (this._inMessageHandlers.has(msgId)) { - throw new Error('messageid already in use: ' + msgId) - } - this._inMessageHandlers.set(msgId, handler) - } - - $unregisterInMessageHandler (msgId) { - this._inMessageHandlers.delete(msgId) - } - - async $triggerInProtocolMessage (msg) { - const handler = this._inMessageHandlers.get(msg.msgId) - if (!handler) { - throw new Error('no handler found for msgId ' + msg.msgId) - } - await handler.onMessage(msg) - } - - $registerOutMessageHandler (msgId, handler) { - if (this._outMessageHandlers.has(msgId)) { - throw new Error('messageid already in use: ' + msgId) - } - this._outMessageHandlers.set(msgId, handler) - } - - $unregisterOutMessageHandler (msgId) { - this._outMessageHandlers.delete(msgId) - } - - async $triggerOutProtocolMessage (msg) { - const handler = this._outMessageHandlers.get(msg.msgId) - if (!handler) { - throw new Error('no handler found for msgId ' + msg.msgId) - } - await handler.onMessage(msg) - } - - // -- private -- // - - _handleMessage (msg) { - const parsed = message.parse(msg) - switch (parsed.type) { - case message.MsgType.noticeReliable: - case message.MsgType.preauthReq: - case message.MsgType.reqData: - parsed.proxy = this.getProxy() - this._mosocket.$triggerInProtocolMessage(parsed) - break - case message.MsgType.preauthAck: - case message.MsgType.preauthAccept: - case message.MsgType.preauthStop: - case message.MsgType.resData: - parsed.proxy = this.getProxy() - this._mosocket.$triggerOutProtocolMessage(parsed) - break - default: - throw new Error('unhandled msgtype: 0x' + parsed.type.toString(16)) - } - } -} - -exports.Session = Session diff --git a/packages/mosocket/lib/tcp.js b/packages/mosocket/lib/tcp.js deleted file mode 100644 index ed32fc9..0000000 --- a/packages/mosocket/lib/tcp.js +++ /dev/null @@ -1,386 +0,0 @@ -const EventEmitter = require('events') -const net = require('net') -const os = require('os') - -const mosodium = require('mosodium') - -const { MultiAddr } = require('../lib/multiaddr') - -/** - */ -function createTcpConnection (ma, timeout) { - return new Promise((resolve, reject) => { - try { - const stack = (new Error('timeout')).stack - const timer = setTimeout(() => { - reject(new Error(stack)) - }, timeout) - const con = new net.Socket() - con.on('close', reject) - con.on('error', reject) - con.connect(ma.tcpPort, ma.ipAddress, () => { - try { - clearTimeout(timer) - con.removeListener('close', reject) - con.removeListener('error', reject) - resolve(con) - } catch (e) { - reject(e) - } - }) - } catch (e) { - reject(e) - } - }) -} - -/** - */ -function handleClientHandshake (con, timeout, kx) { - return new Promise((resolve, reject) => { - try { - // use raw socket - con._socket.on('close', reject) - con._socket.on('error', reject) - - const stack = (new Error('timeout')).stack - const timer = setTimeout(() => { - reject(new Error(stack)) - }, timeout) - - let buffer = Buffer.alloc(0) - const handler = (data) => { - try { - buffer = Buffer.concat([buffer, data]) - - if (buffer.byteLength >= 68) { - clearTimeout(timer) - con._socket.removeListener('close', reject) - con._socket.removeListener('error', reject) - con._socket.removeListener('data', handler) - - if ( - buffer.readUInt8(0) !== 42 || - buffer.readUInt8(1) !== 42 || - buffer.readUInt8(2) !== 42 || - buffer.readUInt8(3) !== 0 - ) { - throw new Error('invalid magic or protocol version') - } - - buffer = buffer.slice(4) - - const srvSessionId = buffer.slice(0, 32) - const srvPublicKey = buffer.slice(32, 64) - con._buffer = buffer.slice(64) - - const { rx, tx } = mosodium.kx.clientSession( - kx.publicKey, - kx.secretKey, - srvPublicKey, - kx.secretKey.lockLevel() - ) - - con._sessionId = srvSessionId - con._rx = rx - con._tx = tx - - con._socket.write(con._sessionId) - con._socket.write(kx.publicKey) - - resolve() - } - } catch (e) { - reject(e) - } - } - con._socket.on('data', handler) - } catch (e) { - reject(e) - } - }) -} - -/** - */ -class Connection extends EventEmitter { - /** - */ - static async create (config, ma) { - const socket = await createTcpConnection(ma, config.timeout.newConnection) - const con = Connection.fromSocket(config, socket) - await handleClientHandshake( - con, - config.timeout.newConnection, - config.keys.kx) - con.$trackData() - return con - } - - /** - */ - static fromSocket (config, socket) { - const con = new Connection() - con._config = config - con._socket = socket - socket.on('error', (err) => { - con.emit('error', err) - con.close() - }) - socket.on('close', () => { - con.emit('close') - con.close() - }) - return con - } - - /** - */ - close () { - if (this._socket) { - this._socket.destroy() - } - this._config = null - this._socket = null - this.removeAllListeners() - this.setMaxListeners(0) - } - - /** - */ - send (message) { - const { nonce, cipher } = mosodium.aead.enc(message, this._tx) - const frameSize = Buffer.alloc(2) - frameSize.writeUInt16LE(nonce.byteLength + cipher.byteLength, 0) - this._socket.write(Buffer.concat([frameSize, nonce, cipher])) - } - - /** - */ - getAddr () { - const addr = this._socket.address() - return MultiAddr.fromParts(addr.address, addr.port, null) - } - - // -- protected -- // - - /** - */ - $trackData () { - this._socket.on('data', (chunk) => { - if (chunk.byteLength > 0) { - this._buffer = Buffer.concat([this._buffer, chunk]) - } - this._handleData() - }) - setImmediate(() => { - this._handleData() - }) - } - - // -- private -- // - - /** - */ - _trim (bytes) { - if (this._buffer.byteLength - bytes <= 0) { - this._buffer = Buffer.alloc(0) - } else { - this._buffer = this._buffer.slice(bytes) - } - } - - /** - */ - _handleData () { - if (this._buffer.byteLength < 2) { - return - } - - // TODO - store frame size, don't parse it every time - const frameSize = this._buffer.readUInt16LE(0) - - if (this._buffer.byteLength < frameSize + 2) { - return - } - - const nonce = this._buffer.slice(2, 26) - const cipher = this._buffer.slice(26, frameSize + 2) - this._trim(frameSize + 2) - - const message = mosodium.aead.dec(nonce, cipher, this._rx) - this._handleMessage(message) - - setImmediate(() => { - this._handleData() - }) - } - - /** - */ - _handleMessage (message) { - this.emit('message', message) - } -} - -exports.Connection = Connection - -/** - */ -function createTcpListener (ma, timeout) { - return new Promise((resolve, reject) => { - try { - const stack = (new Error('timeout')).stack - const timer = setTimeout(() => { - reject(new Error(stack)) - }, timeout) - const srv = net.createServer() - srv.on('close', reject) - srv.on('error', reject) - srv.listen(ma.tcpPort, ma.ipAddress, () => { - try { - clearTimeout(timer) - srv.removeListener('close', reject) - srv.removeListener('error', reject) - resolve(srv) - } catch (e) { - reject(e) - } - }) - } catch (e) { - reject(e) - } - }) -} - -/** - */ -function handleServerHandshake (con, timeout, kx) { - return new Promise((resolve, reject) => { - try { - // use raw socket - con._socket.on('close', reject) - con._socket.on('error', reject) - - // server side generates session - con._sessionId = mosodium.random.bytes(32) - - con._socket.write(Buffer.from([42, 42, 42, 0])) - con._socket.write(con._sessionId) - con._socket.write(kx.publicKey) - - const stack = (new Error('timeout')).stack - const timer = setTimeout(() => { - reject(new Error(stack)) - }, timeout) - - let buffer = Buffer.alloc(0) - const handler = (data) => { - try { - buffer = Buffer.concat([buffer, data]) - - if (buffer.byteLength >= 64) { - clearTimeout(timer) - con._socket.removeListener('close', reject) - con._socket.removeListener('error', reject) - con._socket.removeListener('data', handler) - - const cliSessionId = buffer.slice(0, 32) - const cliPublicKey = buffer.slice(32, 64) - con._buffer = buffer.slice(64) - - const { rx, tx } = mosodium.kx.serverSession( - kx.publicKey, - kx.secretKey, - cliPublicKey, - kx.secretKey.lockLevel() - ) - - con._sessionId = cliSessionId - con._rx = rx - con._tx = tx - - resolve() - } - } catch (e) { - reject(e) - } - } - con._socket.on('data', handler) - } catch (e) { - reject(e) - } - }) -} - -/** - */ -class Listener extends EventEmitter { - /** - */ - static async create (config, ma) { - const l = new Listener() - l._config = config - const s = l._socket = await createTcpListener(ma, config.timeout.newConnection) - s.on('error', (err) => { - l.emit('error', err) - l.close() - }) - s.on('close', () => { - l.emit('close') - l.close() - }) - s.on('connection', async (socket) => { - const con = Connection.fromSocket(config, socket) - try { - await handleServerHandshake( - con, - config.timeout.newConnection, - config.keys.kx) - con.$trackData() - l.emit('connection', con) - } catch (e) { - console.error(e) - l.emit('error', e) - } - }) - return l - } - - /** - */ - close () { - if (this._socket) { - this._socket.close() - } - this._config = null - this._socket = null - this.removeAllListeners() - this.setMaxListeners(0) - } - - /** - */ - getAddrs () { - const out = [] - - const addr = this._socket.address() - if (addr.address === '0.0.0.0' || addr.address === '::') { - const ifaces = os.networkInterfaces() - for (let key in ifaces) { - const iface = ifaces[key] - for (let f of iface) { - if (f.family === addr.family) { - out.push(MultiAddr.fromParts(f.address, addr.port, null)) - } - } - } - } else { - out.push(MultiAddr.fromParts(addr.address, addr.port, null)) - } - - return out - } -} - -exports.Listener = Listener diff --git a/packages/mosocket/lib/tweetlog.js b/packages/mosocket/lib/tweetlog.js deleted file mode 100644 index d9bb471..0000000 --- a/packages/mosocket/lib/tweetlog.js +++ /dev/null @@ -1,37 +0,0 @@ -const _ = { t: 1, d: 2, i: 3, w: 4, e: 5 } -const $ = [] -let c = { _: 'i' } -const e = (...a) => { - for (let l of $) { - try { l(...a) } catch (e) {} - } -} -const f = module.exports = (t) => { - const o = {} - ;['t', 'd', 'i', 'w', 'e'].forEach((l) => { - o[l] = (...a) => { - if (!f.should(l, t)) return - e(l, t, ...a) - } - }) - return o -} -f.gte = (a, b) => { - return _[a] >= _[b] -} -f.should = (l, t) => { - return f.gte(l, c.t || c._) -} -f.set = (l, t) => { - c[t || '_'] = l -} -f.listen = $.push.bind($) -f.clear = () => { - $.splice(0) - c = { _: 'i' } -} -const $l = console.log.bind(console) -const $e = console.error ? console.error.bind(console) : $l -f.console = (l, t, ...a) => { - (f.gte(l, 'w') ? $e : $l)(`(${t}) [${l}] ${a.map((a) => a.stack || a.toString()).join(' ')}`) -} diff --git a/packages/mosocket/lib/tweetlog.test.js b/packages/mosocket/lib/tweetlog.test.js deleted file mode 100644 index 276ff14..0000000 --- a/packages/mosocket/lib/tweetlog.test.js +++ /dev/null @@ -1,105 +0,0 @@ -const expect = require('chai').expect -const sinon = require('sinon') - -sinon.spy(console, 'log') -sinon.spy(console, 'error') - -const logger = require('./tweetlog') - -describe('tweetlog Suite', () => { - beforeEach(() => { - logger.clear() - }) - - afterEach(() => { - sinon.reset() - }) - - after(() => { - sinon.restore() - }) - - it('should log error', () => { - logger.set('e') - const s = sinon.stub() - logger.listen(s) - logger('test').e('test') - expect(s.calledWith('e', 'test', 'test')).equals(true) - }) - - it('should not log warn', () => { - logger.set('e') - const s = sinon.stub() - logger.listen(s) - logger('test').w('test') - expect(s.callCount).equals(0) - }) - - it('should log warn', () => { - logger.set('w') - const s = sinon.stub() - logger.listen(s) - logger('test').w('test') - expect(s.calledWith('w', 'test', 'test')).equals(true) - }) - - it('should not log info', () => { - logger.set('w') - const s = sinon.stub() - logger.listen(s) - logger('test').i('test') - expect(s.callCount).equals(0) - }) - - it('should log info', () => { - logger.set('i') - const s = sinon.stub() - logger.listen(s) - logger('test').i('test') - expect(s.calledWith('i', 'test', 'test')).equals(true) - }) - - it('should not log debug', () => { - logger.set('i') - const s = sinon.stub() - logger.listen(s) - logger('test').d('test') - expect(s.callCount).equals(0) - }) - - it('should log debug', () => { - logger.set('d') - const s = sinon.stub() - logger.listen(s) - logger('test').d('test') - expect(s.calledWith('d', 'test', 'test')).equals(true) - }) - - it('should not log trace', () => { - logger.set('d') - const s = sinon.stub() - logger.listen(s) - logger('test').t('test') - expect(s.callCount).equals(0) - }) - - it('should log trace', () => { - logger.set('t') - const s = sinon.stub() - logger.listen(s) - logger('test').t('test') - expect(s.calledWith('t', 'test', 'test')).equals(true) - }) - - it('should output to console.error', () => { - logger.listen(logger.console) - logger('test').e('test') - expect(console.error.calledWith('(test) [e] test')).equals(true) - }) - - it('should output to console.log', () => { - logger.listen(logger.console) - logger('test').i('test') - expect(console.log.calledWith('(test) [i] test')).equals(true) - }) -}) diff --git a/packages/mosocket/package.json b/packages/mosocket/package.json deleted file mode 100644 index 2e7b25f..0000000 --- a/packages/mosocket/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "@holochain/mosocket", - "version": "0.0.1", - "description": "peer to peer networking protocol abstraction", - "main": "lib/index.js", - "scripts": { - "lint": "standard --fix 'lib/**/*.js' 'bin/**/*.js'", - "mocha": "mocha lib/**/*.test.js bin/**/*.test.js", - "nyc": "nyc npm run mocha", - "test": "npm run lint && npm run nyc", - "show-coverage": "node -e \"require('opn')('coverage/lcov-report/index.html')\"" - }, - "license": "Apache-2.0", - "devDependencies": { - "chai": "^4.2.0", - "mocha": "^5.2.0", - "nyc": "^12.0.2", - "opn": "^5.4.0", - "sinon": "^7.1.1", - "standard": "^12.0.1" - }, - "dependencies": { - "msgpack-lite": "^0.1.26", - "@holochain/mosodium": "^0.0.1" - }, - "standard": { - "env": { - "mocha": true - } - }, - "nyc": { - "check-coverage": false, - "per-file": false, - "lines": 80, - "statements": 80, - "functions": 80, - "branches": 80, - "all": true, - "include": [ - "./lib/**/*.js" - ], - "reporter": [ - "lcov", - "text-summary" - ] - } -} diff --git a/packages/mosodium/README.md b/packages/mosodium/README.md deleted file mode 100644 index dff31ad..0000000 --- a/packages/mosodium/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# mosodium - -light wrapper around sodium-native diff --git a/packages/mosodium/example/mopg/mopg b/packages/mosodium/example/mopg/mopg deleted file mode 100755 index 840841b..0000000 --- a/packages/mosodium/example/mopg/mopg +++ /dev/null @@ -1,128 +0,0 @@ -#!/usr/bin/env node - -const os = require('os') -const fs = require('fs') -const path = require('path') -const mosodium = require('../../lib/index') - -switch ((process.argv[2] || '').toLowerCase()[0]) { - case 's': - _sign() - break - case 'v': - _verify() - break - default: - _usage() - process.exit(1) - break -} - -function _usage () { - console.error('mopg [subcommand] [params]') - console.error(' sign _filename_') - console.error(' verify _sigfile_ _datafile_') -} - -function _fail (e) { - console.error(e.stack || e.toString()) - process.exit(1) -} - -async function _init () { - const wd = path.resolve(path.join(os.homedir(), '.mopg')) - try { - fs.mkdirSync(wd) - } catch (e) { /* pass */ } - - let salt = null - try { - salt = fs.readFileSync(path.join(wd, 'salt')) - } catch (e) { - try { - salt = mosodium.random.bytes(32) - fs.writeFileSync(path.join(wd, 'salt'), salt) - } catch (e) { - _fail(e) - } - } - - const secPassphrase = await mosodium.SecBuf.readPrompt( - 'mopg passphrase (no echo): ') - - console.error('calculating master seed...') - const secMasterSeed = (await mosodium.pwhash.hash(secPassphrase, { - salt - })).hash - - secPassphrase.free() - - const secDiskCrypt = mosodium.kdf.derive( - 1, Buffer.from('dskcrypt'), secMasterSeed) - const secSignSeed = mosodium.kdf.derive( - 2, Buffer.from('sigcrypt'), secMasterSeed) - - secMasterSeed.free() - - const { publicKey: signPublicKey, secretKey: secSignSecretKey } = - mosodium.sign.seedKeypair(secSignSeed) - - secSignSeed.free() - - console.error('Public Key: ' + signPublicKey.toString('base64')) - - return { - secDiskCrypt, - signPublicKey, - secSignSecretKey - } -} - -async function _sign () { - if (process.argv.length !== 4) { - _usage() - process.exit(1) - } - - let keys = null - try { - keys = await _init() - const data = fs.readFileSync(process.argv[3]) - const sig = mosodium.sign.sign(data, keys.secSignSecretKey) - fs.writeFileSync(process.argv[3] + '.sig', JSON.stringify({ - publicKey: keys.signPublicKey.toString('base64'), - signature: sig.toString('base64') - }, null, 2)) - } catch (e) { - _fail(e) - } - - keys.secDiskCrypt.free() - keys.secSignSecretKey.free() -} - -function _verify () { - if (process.argv.length !== 5) { - _usage() - process.exit(1) - } - - try { - const { publicKey, signature } = JSON.parse(fs.readFileSync( - process.argv[3])) - const data = fs.readFileSync(process.argv[4]) - if (mosodium.sign.verify( - Buffer.from(signature, 'base64'), - data, - Buffer.from(publicKey, 'base64') - )) { - console.error('Signature is Good : )') - process.exit(0) - } else { - console.error('Invalid Signature') - process.exit(2) - } - } catch (e) { - _fail(e) - } -} diff --git a/packages/mosodium/package.json b/packages/mosodium/package.json deleted file mode 100644 index 74239a5..0000000 --- a/packages/mosodium/package.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "name": "@holochain/mosodium", - "version": "0.0.1", - "description": "light wrapper around sodium-native", - "main": "lib/index.js", - "scripts": { - "lint": "standard --fix 'lib/**/*.js' 'bin/**/*.js'", - "mocha": "mocha lib/**/*.test.js bin/**/*.test.js", - "nyc": "nyc npm run mocha", - "test": "npm run lint && npm run nyc", - "show-coverage": "node -e \"require('opn')('coverage/lcov-report/index.html')\"" - }, - "license": "Apache-2.0", - "devDependencies": { - "chai": "^4.2.0", - "mocha": "^5.2.0", - "nyc": "^12.0.2", - "opn": "^5.4.0", - "sinon": "^7.1.1", - "standard": "^12.0.1" - }, - "dependencies": { - "sodium-native": "^2.2.3" - }, - "standard": { - "env": { - "mocha": true - } - }, - "nyc": { - "check-coverage": true, - "per-file": false, - "lines": 80, - "statements": 80, - "functions": 80, - "branches": 80, - "all": true, - "include": [ - "./lib/**/*.js" - ], - "reporter": [ - "lcov", - "text-summary" - ] - }, - "generate-docs": { - "random": "lib/random.js", - "secbuf": "lib/secbuf.js", - "hash": "lib/hash.js", - "pwhash": "lib/pwhash.js", - "kx": "lib/kx.js", - "kdf": "lib/kdf.js", - "sign": "lib/sign.js", - "aead": "lib/aead.js" - } -} diff --git a/packages/n3h-common/README.md b/packages/n3h-common/README.md deleted file mode 100644 index 4180d74..0000000 --- a/packages/n3h-common/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# n3h-common - -some utilities to share among n3h subprojects diff --git a/packages/n3h-common/package.json b/packages/n3h-common/package.json deleted file mode 100644 index 1c41c47..0000000 --- a/packages/n3h-common/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "@holochain/n3h-common", - "version": "0.0.1", - "description": "some utilities to share among n3h subprojects", - "main": "lib/index.js", - "scripts": { - "lint": "standard --fix 'lib/**/*.js' 'bin/**/*.js'", - "mocha": "mocha lib/**/*.test.js bin/**/*.test.js", - "nyc": "nyc npm run mocha", - "test": "npm run lint && npm run nyc", - "show-coverage": "node -e \"require('opn')('coverage/lcov-report/index.html')\"" - }, - "license": "Apache-2.0", - "devDependencies": { - "chai": "^4.2.0", - "mocha": "^5.2.0", - "nyc": "^12.0.2", - "opn": "^5.4.0", - "sinon": "^7.1.1", - "standard": "^12.0.1" - }, - "dependencies": {}, - "standard": { - "env": { - "mocha": true - } - }, - "nyc": { - "check-coverage": true, - "per-file": false, - "lines": 80, - "statements": 80, - "functions": 80, - "branches": 80, - "include": [ - "./lib/**/*.js" - ], - "reporter": [ - "lcov", - "text-summary" - ] - }, - "generate-docs": { - "type": "lib/type.js" - } -} diff --git a/packages/n3h-ipc/README.md b/packages/n3h-ipc/README.md deleted file mode 100644 index 1d97bee..0000000 --- a/packages/n3h-ipc/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# ipc -IPC connector socket abstraction for holochain p2p messaging diff --git a/packages/n3h-ipc/lib/client.js b/packages/n3h-ipc/lib/client.js deleted file mode 100644 index 0d5911d..0000000 --- a/packages/n3h-ipc/lib/client.js +++ /dev/null @@ -1,164 +0,0 @@ -/*! -IPC Client represents an ipc listening socket designed to connect to a running p2p connection process. -*/ - -const zmq = require('zeromq') - -const msg = require('./msg-types') -const { AsyncClass } = require('@holochain/n3h-common') - -/** - * IPC connection client helper - * @example - * const cli = new IpcClient('ipc://my-socket.ipc') - * await cli.connect('ipc://my-socket.ipc') - * // or - * await cli.connect('tcp://127.0.0.1:12345') - */ -class IpcClient extends AsyncClass { - /** - * create a new IpcClient instance - */ - async init () { - await super.init() - this.$pushDestructor(() => { - if (typeof this._stopHeartbeatTimers === 'function') { - this._stopHeartbeatTimers() - this._stopHeartbeatTimers = null - } - this._gotServerMessage = null - this._socket.close() - this._socket = null - }) - - this._connected = false - this._socket = zmq.socket('router') - this._socket.on('message', (...args) => { - if (typeof this._gotServerMessage === 'function') { - this._gotServerMessage() - } - this._handleMessage(...args) - }) - this._socket.on('error', (...args) => { - console.error(args) - process.exit(1) - }) - - this._gotServerMessage = null - this._stopHeartbeatTimers = null - } - - /** - * Connect this instance to a server socket - * @param {string} endpoint - the zmq socket to connect to - * @return {Promise} - resolved if connection is a success - */ - connect (endpoint) { - this.$checkDestroyed() - if (this._connected) { - throw new Error('ipc client can only connect to one endpoint') - } - this._connected = true - - this._socket.connect(endpoint) - - return new Promise((resolve, reject) => { - let continueRunning = true - let connectTimeout = null - let heartbeatTimer = null - let pollInterval = 1 - - const setConnectTimeout = () => { - if (continueRunning && !connectTimeout) { - const timeoutStack = (new Error('timeout')).stack - connectTimeout = setTimeout(() => { - throw new Error('timeout, inner-stack: ' + timeoutStack) - }, 10000) - } - } - - const clearConnectTimeout = () => { - clearTimeout(connectTimeout) - connectTimeout = null - } - - const nextPoll = () => { - if (!continueRunning) { - return - } - - setConnectTimeout() - - this._send('ping', { - sent: Date.now() - }) - - heartbeatTimer = setTimeout(() => { - nextPoll() - }, pollInterval) - pollInterval *= 2 - } - nextPoll() - - this._gotServerMessage = () => { - pollInterval = 1000 - clearConnectTimeout() - setConnectTimeout() - resolve() - } - - this._stopHeartbeatTimers = () => { - continueRunning = false - clearConnectTimeout() - clearTimeout(heartbeatTimer) - } - }) - } - - send (name, data) { - this.$checkDestroyed() - this._send(name, data) - } - - // -- private -- // - - /** - * we recieved a message from the server, dispatch it - * @private - */ - _handleMessage (...args) { - if (this.$isDestroyed()) return - if (args.length !== 4) { - throw new Error('wrong msg size: ' + args.length) - } - const { name, data } = msg.decode(args[2], args[3]) - if (name === 'ping') { - this._send('pong', { - orig: data.sent, - recv: Date.now() - }) - } - this.emit('message', { - name, - data - }) - } - - /** - * Actually send data out to the server - * @private - */ - _send (name, data) { - if (this.$isDestroyed()) return - const enc = msg.encode(name, data) - this._socket.send([ - msg.SRV_ID, - Buffer.alloc(0), - enc.name, - enc.data - ]) - } -} - -// export -exports.IpcClient = IpcClient diff --git a/packages/n3h-ipc/lib/client.test.js b/packages/n3h-ipc/lib/client.test.js deleted file mode 100644 index 4a89d7d..0000000 --- a/packages/n3h-ipc/lib/client.test.js +++ /dev/null @@ -1,9 +0,0 @@ -const expect = require('chai').expect - -const { IpcClient } = require('./index') - -describe('IpcClient Suite', () => { - it('should be a class', () => { - expect(typeof IpcClient).equals('function') - }) -}) diff --git a/packages/n3h-ipc/lib/index.js b/packages/n3h-ipc/lib/index.js deleted file mode 100644 index 31a512f..0000000 --- a/packages/n3h-ipc/lib/index.js +++ /dev/null @@ -1,2 +0,0 @@ -exports.IpcServer = require('./server').IpcServer -exports.IpcClient = require('./client').IpcClient diff --git a/packages/n3h-ipc/lib/server.js b/packages/n3h-ipc/lib/server.js deleted file mode 100644 index c240166..0000000 --- a/packages/n3h-ipc/lib/server.js +++ /dev/null @@ -1,208 +0,0 @@ -/*! -IPC Server represents an ipc listening socket designed to expose the functionality of a running p2p connection process. - -Clients should connect to this._socket to send / receive messages from the p2p network. -*/ - -const zmq = require('zeromq') - -const msg = require('./msg-types') -const { AsyncClass } = require('@holochain/n3h-common') - -/** - * IPC control api server - * @example - * const srv = new IpcServer() - * await srv.bind(['ipc://my-socket.ipc', 'tcp://*:12345']) - */ -class IpcServer extends AsyncClass { - /** - * create a new ipc server instance - */ - async init () { - await super.init() - - super.$pushDestructor(() => { - this._clients = null - this._awaitBind = null - this._socket.close() - this._socket = null - clearInterval(this._pruneClientsTimer) - }) - - this._awaitBind = new Map() - this._clients = new Map() - - this._socket = zmq.socket('router') - this._socket.setsockopt(zmq.options.identity, msg.SRV_ID) - this._socket.on('message', (...args) => { - this._handleMessage(...args) - }) - this._socket.on('error', (...args) => { - console.error(args) - process.exit(1) - }) - this._socket.on('bind', b => { - this._handleBind(b, this._socket.last_endpoint) - }) - - this._pruneClientsTimer = setInterval(() => { - this._pruneClients() - }, 1500) - } - - /** - * Bind / create a listening socket for clients to connect to - * @param {array|string} bindArray - list of zmq endpoints to bind - * @return {Promise} resolved if all connections bind successfully - */ - bind (bindArray) { - this.$checkDestroyed() - if (!Array.isArray(bindArray)) { - if (bindArray) { - bindArray = [bindArray] - } else { - bindArray = [] - } - } - return Promise.all(bindArray.map(b => { - return this._bind(b) - })) - } - - /** - * broadcast an event to all clients - */ - send (name, data) { - this.$checkDestroyed() - for (let zmqid of this._clients.keys()) { - this._send(zmqid, name, data) - } - } - - sendOne (zmqid, name, data) { - this.$checkDestroyed() - this._send(zmqid, name, data) - } - - // -- private -- // - - /** - * private helper for binding a single string zmq listening socket - * @private - */ - _bind (bind) { - this.$checkDestroyed() - return new Promise((resolve, reject) => { - let timeout = null - try { - if (this._awaitBind.has(bind)) { - throw new Error('already bound to: ' + bind) - } - - this._socket.bind(bind) - - timeout = setTimeout(() => { - reject(new Error('timeout binding to: ' + bind)) - }, 1000) - - this._awaitBind.set(bind, { timeout, resolve, reject }) - } catch (e) { - clearTimeout(timeout) - reject(e) - } - }) - } - - /** - * handle the zmq `bind` event - * @param {string} the bind endpoint that was bound - * @private - */ - _handleBind (bind, endpoint) { - if (this.$isDestroyed()) return - const ref = this._awaitBind.get(bind) - if (!ref) return - clearTimeout(ref.timeout) - ref.resolve(endpoint) - } - - /** - * run periodically to free up memory from disconnected sockets - * @private - */ - _pruneClients () { - if (this.$isDestroyed()) return - const now = Date.now() - for (let [zmqid, ref] of this._clients.entries()) { - if (now - ref.last > 3000) { - this.emit('clientRemove', zmqid) - this._clients.delete(zmqid) - } - } - } - - /** - * when we get a new client connection, start tracking some data - * @private - */ - _tickle (zmqid) { - if (this.$isDestroyed()) return - if (this._clients.has(zmqid)) { - this._clients.get(zmqid).last = Date.now() - } else { - this._clients.set(zmqid, { - last: Date.now() - }) - this.emit('clientAdd', zmqid) - } - } - - /** - * we have received a message from a client socket, identify / distribute - * @private - */ - _handleMessage (...args) { - if (this.$isDestroyed()) return - try { - if (args.length !== 4) { - throw new Error('wrong msg size: ' + args.length) - } - const fromZmqId = args[0].toString('hex') - this._tickle(fromZmqId) - const { name, data } = msg.decode(args[2], args[3]) - if (name === 'ping') { - this._send(fromZmqId, 'pong', { - orig: data.sent, - recv: Date.now() - }) - } - this.emit('message', { - name, - data, - fromZmqId - }) - } catch (e) { - console.error(e) - process.exit(1) - } - } - - /** - * Actually send data out on the socket - * @private - */ - _send (zmqid, name, data) { - if (this.$isDestroyed()) return - const enc = msg.encode(name, data) - this._socket.send([ - Buffer.from(zmqid, 'hex'), - Buffer.alloc(0), - enc.name, - enc.data - ]) - } -} - -// export -exports.IpcServer = IpcServer diff --git a/packages/n3h-ipc/lib/server.test.js b/packages/n3h-ipc/lib/server.test.js deleted file mode 100644 index 7cab0ec..0000000 --- a/packages/n3h-ipc/lib/server.test.js +++ /dev/null @@ -1,57 +0,0 @@ -const expect = require('chai').expect -const sinon = require('sinon') - -const zeromq = require('zeromq') - -const { IpcServer } = require('./index') - -const msg = require('./msg-types') - -const MockZmq = require('../test/mock-zmq').MockZmq - -describe('IpcServer Suite', () => { - let stubSocket - - beforeEach(() => { - stubSocket = sinon.stub(zeromq, 'socket').callsFake(() => new MockZmq()) - }) - - afterEach(() => { - stubSocket.restore() - }) - - it('should be a class', () => { - expect(typeof IpcServer).equals('function') - }) - - it('should bind and close without errors', async () => { - const srv = await new IpcServer() - await srv.bind(['bla']) - await srv.destroy() - }) - - it('should send pong on ping', (done) => { - (async () => { - const srv = await new IpcServer() - await srv.bind(['bla']) - const myDone = async (msg) => { - await srv.destroy() - done(msg) - } - srv._socket.on('_test_send', (data) => { - try { - const dec = msg.decode(data[2], data[3]) - expect(dec.name).equals('pong') - expect(dec.data.orig).equals(42) - myDone() - } catch (e) { - myDone(e) - } - }) - const { name, data } = msg.encode('ping', { - sent: 42 - }) - srv._socket.emit('message', Buffer.alloc(0), Buffer.alloc(0), name, data) - })().then(() => {}, done) - }) -}) diff --git a/packages/n3h-ipc/package.json b/packages/n3h-ipc/package.json deleted file mode 100644 index 94a28db..0000000 --- a/packages/n3h-ipc/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "@holochain/n3h-ipc", - "version": "0.0.1", - "description": "IPC connector socket abstraction for holochain p2p messaging", - "main": "lib/index.js", - "scripts": { - "lint": "standard --fix 'lib/**/*.js' 'bin/**/*.js'", - "mocha": "mocha lib/**/*.test.js bin/**/*.test.js", - "nyc": "nyc npm run mocha", - "test": "npm run lint && npm run nyc", - "show-coverage": "node -e \"require('opn')('coverage/lcov-report/index.html')\"" - }, - "license": "Apache-2.0", - "devDependencies": { - "chai": "^4.2.0", - "mocha": "^5.2.0", - "nyc": "^12.0.2", - "opn": "^5.4.0", - "sinon": "^7.1.1", - "standard": "^12.0.1" - }, - "dependencies": { - "msgpack-lite": "^0.1.26", - "@holochain/n3h-common": "^0.0.1", - "@holochain/n3h-mod-spec": "0.0.1", - "@holochain/n3h-mod-connection-wss": "0.0.1", - "zeromq": "^5.1.0" - }, - "standard": { - "env": { - "mocha": true - } - }, - "nyc": { - "check-coverage": false, - "per-file": false, - "lines": 80, - "statements": 80, - "functions": 80, - "branches": 80, - "all": true, - "include": [ - "./lib/**/*.js" - ], - "reporter": [ - "lcov", - "text-summary" - ] - }, - "generate-docs": { - "server": "lib/server.js", - "client": "lib/client.js" - } -} diff --git a/packages/n3h-ipc/test/mock-zmq.js b/packages/n3h-ipc/test/mock-zmq.js deleted file mode 100644 index 93609a9..0000000 --- a/packages/n3h-ipc/test/mock-zmq.js +++ /dev/null @@ -1,27 +0,0 @@ -const EventEmitter = require('events') - -class MockZmq extends EventEmitter { - /* - constructor () { - super() - } - */ - - setsockopt () { - } - - bind (addr) { - setImmediate(() => { - this.emit('bind', addr) - }) - } - - close () { - } - - send (...args) { - this.emit('_test_send', ...args) - } -} - -exports.MockZmq = MockZmq diff --git a/packages/n3h-mock/README.md b/packages/n3h-mock/README.md deleted file mode 100644 index 05b60b2..0000000 --- a/packages/n3h-mock/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# n3h-mock - -Centralized local mock of n3h diff --git a/packages/n3h-mock/package.json b/packages/n3h-mock/package.json deleted file mode 100644 index f9429c9..0000000 --- a/packages/n3h-mock/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "@holochain/n3h-mock", - "version": "0.0.1", - "description": "Centralized local mock of n3h", - "main": "lib/index.js", - "scripts": { - "lint": "standard --fix 'lib/**/*.js' 'bin/**/*.js'", - "mocha": "mocha lib/**/*.test.js bin/**/*.test.js", - "nyc": "nyc npm run mocha", - "test": "npm run lint && npm run nyc", - "show-coverage": "node -e \"require('opn')('coverage/lcov-report/index.html')\"" - }, - "license": "Apache-2.0", - "devDependencies": { - "chai": "^4.2.0", - "mocha": "^5.2.0", - "nyc": "^12.0.2", - "opn": "^5.4.0", - "sinon": "^7.1.1", - "standard": "^12.0.1" - }, - "dependencies": { - "@holochain/n3h-common": "^0.0.1", - "@holochain/tweetlog": "^0.0.1" - }, - "standard": { - "env": { - "mocha": true - } - }, - "nyc": { - "check-coverage": false, - "per-file": false, - "lines": 80, - "statements": 80, - "functions": 80, - "branches": 80, - "all": true, - "include": [ - "./lib/**/*.js" - ], - "reporter": [ - "lcov", - "text-summary" - ] - } -} diff --git a/packages/n3h-mod-connection-wss/.gitignore b/packages/n3h-mod-connection-wss/.gitignore deleted file mode 100644 index 992529f..0000000 --- a/packages/n3h-mod-connection-wss/.gitignore +++ /dev/null @@ -1 +0,0 @@ -tls-data.json diff --git a/packages/n3h-mod-connection-wss/README.md b/packages/n3h-mod-connection-wss/README.md deleted file mode 100644 index 4c6f87e..0000000 --- a/packages/n3h-mod-connection-wss/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# n3h-mod-connection-wss - -n3h connection spec implementation - tls secure web sockets diff --git a/packages/n3h-mod-connection-wss/package.json b/packages/n3h-mod-connection-wss/package.json deleted file mode 100644 index bed76c8..0000000 --- a/packages/n3h-mod-connection-wss/package.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "name": "@holochain/n3h-mod-connection-wss", - "version": "0.0.1", - "description": "n3h connection spec implementation - tls secure web sockets", - "main": "lib/index.js", - "scripts": { - "lint": "standard --fix 'lib/**/*.js' 'bin/**/*.js'", - "mocha": "mocha lib/**/*.test.js bin/**/*.test.js", - "nyc": "nyc npm run mocha", - "test": "npm run lint && npm run nyc", - "show-coverage": "node -e \"require('opn')('coverage/lcov-report/index.html')\"" - }, - "license": "Apache-2.0", - "devDependencies": { - "chai": "^4.2.0", - "mocha": "^5.2.0", - "nyc": "^12.0.2", - "opn": "^5.4.0", - "sinon": "^7.1.1", - "standard": "^12.0.1" - }, - "dependencies": { - "@holochain/n3h-common": "0.0.1", - "@holochain/n3h-mod-spec": "0.0.1", - "@holochain/tweetlog": "0.0.1", - "express": "^4.16.4", - "express-ws": "^4.0.0", - "helmet": "^3.15.0", - "node-forge": "^0.7.6", - "ws": "^6.1.2" - }, - "standard": { - "env": { - "mocha": true - } - }, - "nyc": { - "check-coverage": false, - "per-file": false, - "lines": 80, - "statements": 80, - "functions": 80, - "branches": 80, - "all": true, - "include": [ - "./lib/**/*.js" - ], - "reporter": [ - "lcov", - "text-summary" - ] - } -} diff --git a/packages/n3h-mod-dht-fullsync/README.md b/packages/n3h-mod-dht-fullsync/README.md deleted file mode 100644 index 54db068..0000000 --- a/packages/n3h-mod-dht-fullsync/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# n3h-mod-dht-fullsync - -n3h module implementing a backend for dht spec - full sync (non-sharded) diff --git a/packages/n3h-mod-dht-fullsync/package.json b/packages/n3h-mod-dht-fullsync/package.json deleted file mode 100644 index 0b3778c..0000000 --- a/packages/n3h-mod-dht-fullsync/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "@holochain/n3h-mod-dht-fullsync", - "version": "0.0.1", - "description": "n3h module implementing a backend for dht spec - full sync (non-sharded)", - "main": "lib/index.js", - "scripts": { - "lint": "standard --fix 'lib/**/*.js' 'bin/**/*.js'", - "mocha": "mocha lib/**/*.test.js bin/**/*.test.js", - "nyc": "nyc npm run mocha", - "test": "npm run lint && npm run nyc", - "show-coverage": "node -e \"require('opn')('coverage/lcov-report/index.html')\"" - }, - "license": "Apache-2.0", - "devDependencies": { - "chai": "^4.2.0", - "mocha": "^5.2.0", - "nyc": "^12.0.2", - "opn": "^5.4.0", - "sinon": "^7.1.1", - "standard": "^12.0.1" - }, - "dependencies": { - "@holochain/n3h-common": "0.0.1", - "@holochain/n3h-mod-spec": "0.0.1", - "@holochain/hc-dpki": "0.0.1", - "msgpack-lite": "^0.1.26" - }, - "standard": { - "env": { - "mocha": true - } - }, - "nyc": { - "check-coverage": false, - "per-file": false, - "lines": 80, - "statements": 80, - "functions": 80, - "branches": 80, - "all": true, - "include": [ - "./lib/**/*.js" - ], - "reporter": [ - "lcov", - "text-summary" - ] - } -} diff --git a/packages/n3h-mod-message-libp2p/README.md b/packages/n3h-mod-message-libp2p/README.md deleted file mode 100644 index 0fca83f..0000000 --- a/packages/n3h-mod-message-libp2p/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# n3h-mod-message-libp2p - -libp2p n3h message prototype module diff --git a/packages/n3h-mod-message-libp2p/lib/index.js b/packages/n3h-mod-message-libp2p/lib/index.js deleted file mode 100644 index 00e4239..0000000 --- a/packages/n3h-mod-message-libp2p/lib/index.js +++ /dev/null @@ -1,2 +0,0 @@ -exports.MessageLibP2p = require('./wrapper').Wrapper -exports.LibP2pBundle = require('./libp2p-bundle').LibP2pBundle diff --git a/packages/n3h-mod-message-libp2p/lib/index.test.js b/packages/n3h-mod-message-libp2p/lib/index.test.js deleted file mode 100644 index 74c8197..0000000 --- a/packages/n3h-mod-message-libp2p/lib/index.test.js +++ /dev/null @@ -1,9 +0,0 @@ -const { expect } = require('chai') - -const lib = require('./index') - -describe('message libp2p Suite', () => { - it('should be a function', () => { - expect(typeof lib.MessageLibP2p).equals('function') - }) -}) diff --git a/packages/n3h-mod-message-libp2p/lib/libp2p-bundle.js b/packages/n3h-mod-message-libp2p/lib/libp2p-bundle.js deleted file mode 100644 index e47e11d..0000000 --- a/packages/n3h-mod-message-libp2p/lib/libp2p-bundle.js +++ /dev/null @@ -1,277 +0,0 @@ -const libp2p = require('libp2p') -const Tcp = require('libp2p-tcp') -const Mplex = require('libp2p-mplex') -const KadDht = require('libp2p-kad-dht') -const defaultsDeep = require('@nodeutils/defaults-deep') -const pull = require('pull-stream/pull') -const msgpack = require('msgpack-lite') -const PeerId = require('peer-id') -const log = require('@holochain/tweetlog')('libp2p') - -const { $p, $sleep, AsyncClass } = require('@holochain/n3h-common') - -class RawLibP2p extends libp2p { - constructor (_options) { - const defaults = { - modules: { - transport: [ Tcp ], - streamMuxer: [ Mplex ], - dht: KadDht - }, - config: { - dht: { - kBucketSize: 20 - }, - EXPERIMENTAL: { - dht: true - } - } - } - - super(defaultsDeep(_options, defaults)) - } -} - -/** - */ -class LibP2pBundle extends AsyncClass { - /** - */ - async init (opts) { - await super.init() - - this._node = new RawLibP2p(opts) - - const tmp = this._node.peerInfo.id.toB58String() - this._shortId = tmp.substr(0, 6) + '..' + tmp.substr(tmp.length - 4, 4) - - this._peerCache = new Map() - - this.$pushDestructor(async () => { - this._peerCache.clear() - this._peerCache = null - this._node._dht.randomWalk.stop() - await $p(this._node.stop.bind(this._node)) - this._node = null - }) - - this._node.handle('/holomsg/0.0.1', async (protocol, conn) => { - const remotePeerId = await this._cachePeerFromConn(conn) - pull(conn, makeSink(async (data) => { - const query = msgpack.decode(data) - switch (query.type) { - case 'ping': - log.i(this.shortId(), 'got ping, sending pong') - pull(makeGen(msgpack.encode({ - type: 'pong', - originTime: query.now, - srvTime: Date.now() - })), conn) - break - case 'send': - const result = await new Promise((resolve, reject) => { - this.emit('handleSend', { - from: remotePeerId, - data: query.data, - resolve, - reject - }) - }) - pull(makeGen(msgpack.encode(result)), conn) - break - default: - log.e('bad msg type', query.type) - process.exit(1) - } - })) - }) - - this._node.on('peer:connect', async (peer) => { - peer = peer.id.toB58String() - - log.i(this.shortId(), 'new peer', peer) - - // side effect: adds this to our peer cache - const result = msgpack.decode(await this._p2pSend( - peer, msgpack.encode({ - type: 'ping', - now: Date.now() - }))) - - log.i(this.shortId(), 'ping round trip', - (Date.now() - result.originTime) + ' ms') - - this.emit('peerConnected', peer) - }) - - this._node.on('peer:disconnect', (peer) => { - peer = peer.id.toB58String() - this.emit('peerDisconnected', peer) - log.i(this.shortId(), 'lost peer', peer) - this._peerCache.delete(peer) - }) - - await $p(this._node.start.bind(this._node)) - - this._node._dht.randomWalk.start(1, 5000, 10000) - } - - /** - */ - getId () { - return this._node.peerInfo.id.toB58String() - } - - /** - */ - shortId () { - return this._shortId - } - - /** - */ - getBindings () { - return this._node.peerInfo.multiaddrs.toArray().map( - a => a.toString()) - } - - /** - */ - async connect (multiaddr) { - if (multiaddr.indexOf(this.getId()) > -1) { - // XXX Hack for debugging connect workflow - // libp2p doesn't like us connecting to ourselves - // let's send back a fake `peerConnected` message - this.emit('peerConnected', this.getId()) - return - } - - await $p(this._node.dial.bind(this._node, multiaddr)) - } - - /** - */ - async send (id, message) { - if (id === this.getId()) { - // XXX Hack - another short circuit... - // pass the handle back to ourselves, then pass back the response too - const result = await new Promise((resolve, reject) => { - this.emit('handleSend', { - from: this.getId(), - data: message, - resolve, - reject - }) - }) - - return result - } - - return msgpack.decode(await this._p2pSend(id, msgpack.encode({ - type: 'send', - data: message - }))) - } - - // -- private -- // - - /** - */ - async _cachePeerFromConn (conn) { - const peer = await $p(conn.getPeerInfo.bind(conn)) - this._peerCache.set(peer.id.toB58String(), peer) - return peer.id.toB58String() - } - - /** - */ - async _fetchPeer (peerId) { - const pr = this._node.peerRouting - const lookFor = PeerId.createFromB58String(peerId) - const start = Date.now() - let peer = null - let waitTime = 1 - while (!peer && Date.now() - start < 5000) { - try { - if (this._peerCache.has(peerId)) { - return this._peerCache.get(peerId) - } - peer = await $p(pr.findPeer.bind(pr, lookFor)) - } catch (e) { - peer = null - await $sleep(waitTime) - waitTime *= 2 - if (waitTime > 200) { - waitTime = 200 - } - } - } - if (!peer) { - log.e(this.shortId(), 'giving up finding peer', peerId) - throw new Error('could not find peer') - } - log.i(this.shortId(), 'found', peerId, 'in', Date.now() - start, 'ms') - if (peer.id.toB58String() !== peerId) { - throw new Error('wtf') - } - this._peerCache.set(peerId, peer) - return peer - } - - /** - */ - async _p2pSend (toAddress, data) { - try { - const peer = await this._fetchPeer(toAddress) - - const result = await new Promise(async (resolve, reject) => { - const conn = await $p(this._node.dialProtocol.bind(this._node, peer, '/holomsg/0.0.1')) - pull(makeGen(data), conn) - pull(conn, makeSink((data) => { - resolve(data) - })) - }) - return result - } catch (e) { - log.e(e) - process.exit(1) - } - } -} - -exports.LibP2pBundle = LibP2pBundle - -/** - */ -function makeGen (data) { - let sent = false - return (end, fn) => { - if (end) return fn(end) - if (sent) { - fn(true) - } else { - sent = true - fn(null, data) - } - } -} - -/** - */ -function makeSink (fn) { - return (read) => { - let data = Buffer.alloc(0) - const next = (end, chunk) => { - if (end === true) { - fn(data) - return - } - if (end) throw end - data = Buffer.concat([data, chunk]) - setImmediate(() => { - read(null, next) - }) - } - read(null, next) - } -} diff --git a/packages/n3h-mod-message-libp2p/lib/wrapper.js b/packages/n3h-mod-message-libp2p/lib/wrapper.js deleted file mode 100644 index efb7313..0000000 --- a/packages/n3h-mod-message-libp2p/lib/wrapper.js +++ /dev/null @@ -1,148 +0,0 @@ -const { $p, AsyncClass } = require('@holochain/n3h-common') - -const PeerInfo = require('peer-info') -const PeerId = require('peer-id') - -const { LibP2pBundle } = require('./libp2p-bundle') - -/** - */ -class Wrapper extends AsyncClass { - static getDefinition () { - return { - type: 'message', - name: 'libp2p', - defaultConfig: { - '#bindList': 'array of multiaddr network interfaces to listen on (can be empty)', - bindList: [ - '/ip4/0.0.0.0/tcp/0' - ], - '#connectList': 'array of initial outgoing bootstrap connections to make (can be empty)', - connectList: [ - ] - } - } - } - - /** - */ - async init (config, system) { - await super.init() - - this._system = system - this._config = config - } - - /** - */ - async ready () { - this.persistCache = this._system.persistCache - .getNsAsStringJson('libp2p') - - let nodeInfo = await this.persistCache.get('nodeInfo') - if (!nodeInfo) { - console.error('no PeerInfo found! generating (this may take a while)') - - const thisPeerId = await $p(PeerId.create.bind( - PeerId, { bits: 512 })) - - await this.persistCache.set('nodeInfo', { - id: thisPeerId.toJSON() - }) - nodeInfo = await this.persistCache.get('nodeInfo') - } - - const thisPeerInfo = new PeerInfo(await $p( - PeerId.createFromJSON.bind(PeerId, nodeInfo.id))) - - for (let bind of this._config.bindList) { - thisPeerInfo.multiaddrs.add(bind) - } - - this._node = await new LibP2pBundle({ - peerInfo: thisPeerInfo - }) - - this._node.on('handleSend', async opt => { - console.log('@@ handleSend @@', opt.from, opt.data) - await this._system.ipc.handleSend({ - toAddress: this.getId(), - fromAddress: opt.from, - data: opt.data, - resolve: opt.resolve, - reject: opt.reject - }) - }) - - this._node.on('peerConnected', async id => { - this._system.ipc.send('json', { - method: 'peerConnected', - id - }) - }) - - this._node.on('peerDisconnected', async id => { - this._system.ipc.send('json', { - method: 'peerDisconnected', - id - }) - }) - - for (let connect of this._config.connectList) { - console.error('connectlist not yet implemented', connect) - process.exit(1) - } - - this._system.ipc.registerHandler(async (data, send) => { - console.log('@@ libp2p check', data) - switch (data.method) { - case 'requestState': - send('json', { - method: 'state', - state: 'ready', - id: this.getId(), - bindings: this.getBindings() - }) - return true - case 'connect': - await this.connect(data.address) - return true - case 'send': - const result = await this.send(data.toAddress, data.data) - send('json', { - method: 'sendResult', - _id: data._id, - data: result - }) - return true - } - return false - }) - } - - /** - */ - getId () { - return this._node.getId() - } - - /** - */ - getBindings () { - return this._node.getBindings() - } - - /** - */ - async connect (multiaddr) { - return this._node.connect(multiaddr) - } - - /** - */ - async send (toAddress, data) { - return this._node.send(toAddress, data) - } -} - -exports.Wrapper = Wrapper diff --git a/packages/n3h-mod-message-libp2p/package.json b/packages/n3h-mod-message-libp2p/package.json deleted file mode 100644 index b7ccce2..0000000 --- a/packages/n3h-mod-message-libp2p/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "@holochain/n3h-mod-message-libp2p", - "version": "0.0.1", - "description": "libp2p n3h message prototype module", - "main": "lib/index.js", - "scripts": { - "lint": "standard --fix 'lib/**/*.js' 'bin/**/*.js'", - "mocha": "mocha lib/**/*.test.js bin/**/*.test.js", - "nyc": "nyc npm run mocha", - "test": "npm run lint && npm run nyc", - "show-coverage": "node -e \"require('opn')('coverage/lcov-report/index.html')\"" - }, - "license": "Apache-2.0", - "devDependencies": { - "chai": "^4.2.0", - "mocha": "^5.2.0", - "nyc": "^12.0.2", - "opn": "^5.4.0", - "sinon": "^7.1.1", - "standard": "^12.0.1" - }, - "dependencies": { - "@nodeutils/defaults-deep": "^1.1.0", - "libp2p": "^0.23.1", - "libp2p-kad-dht": "^0.10.5", - "libp2p-mplex": "^0.8.2", - "libp2p-tcp": "^0.13.0", - "msgpack-lite": "^0.1.26", - "@holochain/n3h-common": "^0.0.1", - "@holochain/tweetlog": "^0.0.1", - "pull-stream": "^3.6.9" - }, - "standard": { - "env": { - "mocha": true - } - }, - "nyc": { - "check-coverage": false, - "per-file": false, - "lines": 80, - "statements": 80, - "functions": 80, - "branches": 80, - "all": true, - "include": [ - "./lib/**/*.js" - ], - "reporter": [ - "lcov", - "text-summary" - ] - } -} diff --git a/packages/n3h-mod-message-mosocket/README.md b/packages/n3h-mod-message-mosocket/README.md deleted file mode 100644 index 89e822d..0000000 --- a/packages/n3h-mod-message-mosocket/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# n3h - -nodejs implementation of the lib3h p2p protocol - -## Docs - -### IPC - -- [Server](docs/ipc/server.md) -- [Client](docs/ipc/client.md) diff --git a/packages/n3h-mod-message-mosocket/bin/test.js b/packages/n3h-mod-message-mosocket/bin/test.js deleted file mode 100755 index 32e246f..0000000 --- a/packages/n3h-mod-message-mosocket/bin/test.js +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env node - -const { Node, config } = require('../lib/index') - -async function _newNode () { - const c = config() - c.ipc.socket = 'ipc://./' + Node._friend(c.nodeId.id) + '.ipc.socket' - console.log(Node._friend(c.nodeId.id)) - const node = new Node(c) - await node.init() - await node.bind() - /* - console.log('-- < node endpoints --') - for (let e of node.getListeningAddrs()) { - console.log(e) - } - console.log('-- node endpoints > --') - */ - return node -} - -function _sleep (ms) { - return new Promise((resolve, reject) => { - setTimeout(resolve, ms) - }) -} - -async function _main () { - console.log('-- node1 --') - const node1 = await _newNode('n1') - const node1addr = node1.getListeningAddrs()[0] - - console.log('-- node2 --') - const node2 = await _newNode('n2') - - console.log('connecting node2 to node1:', node1addr) - await node2.connect(node1addr) - - console.log('-- node3 --') - const node3 = await _newNode('n3') - - console.log('connecting node3 to node1:', node1addr) - await node3.connect(node1addr) - - await _sleep(1000) - - node1.close() - node2.close() - node3.close() -} - -_main().then(() => {}, (err) => { - console.log(err) - process.exit(1) -}) diff --git a/packages/n3h-mod-message-mosocket/examples/c3hat/_c3hat_p2p.js b/packages/n3h-mod-message-mosocket/examples/c3hat/_c3hat_p2p.js deleted file mode 100755 index 64ebd39..0000000 --- a/packages/n3h-mod-message-mosocket/examples/c3hat/_c3hat_p2p.js +++ /dev/null @@ -1,123 +0,0 @@ -#!/usr/bin/env node - -const msgpack = require('msgpack-lite') - -const { MoSocket } = require('mosocket') - -const { Node, config } = require('../../lib/index') - -async function _main () { - if (process.argv.length < 3 || process.argv.length > 4) { - throw new Error('expecting ipc / node name, and optional connect addr') - } - - const c = config() - c.ipc.socket = 'ipc://./' + process.argv[2] + '.ipc.sock' - - console.log('ipc socket: ' + c.ipc.socket) - - const node = new Node(c) - - const protoChat = node.installProtocol({ - name: 'c3hat', - version: '0.0.1', - hooks: { - /** - */ - m: { - pattern: MoSocket.PATTERN_NOTIFY_RELIABLE, - initiator: { - onNotifyReliable: (message) => { - return msgpack.encode({ - from: Node._friend(node._config.nodeId.id), - msg: message - }) - } - }, - responder: { - onNotifyReliable: (msg) => { - msg = msgpack.decode(msg.data) - node.ipcSendMessage(msgpack.encode({ - type: 'message', - data: msg - })) - } - } - } - } - }) - - node.on('connection', remoteId => { - console.log('connected to', Node._friend(remoteId)) - }) - - node.on('connectionClosed', remoteId => { - console.log('lost connection to', Node._friend(remoteId)) - }) - - node.on('ipcMessage', opt => { - try { - const msg = msgpack.decode(opt.data) - switch (msg.type) { - case 'getName': - opt.resolve(msgpack.encode(Node._friend(node._config.nodeId.id))) - break - case 'message': - const proxies = [] - for (let n of node._allNodes.values()) { - if (n && n.proxy) { - proxies.push(n.proxy) - } - } - if (!proxies.length) { - opt.resolve(Buffer.alloc(0)) - break - } - protoChat.m(proxies, msg.data) - opt.resolve(Buffer.alloc(0)) - break - default: - opt.reject(new Error('unhandled message: ' + msg.type)) - break - } - } catch (e) { - opt.reject(e) - } - }) - - await node.init() - await node.bind() - - if (process.argv.length > 3) { - await node.connect(process.argv[3]) - } - - for (let e of node.getListeningAddrs()) { - console.log(e) - } - - _log('start') - const handleTerm = () => { - _log('end') - node.close() - process.exit(0) - } - - process.on('SIGINT', handleTerm) - process.on('SIGTERM', handleTerm) - process.on('exit', handleTerm) - process.on('uncaughtException', e => { - console.error(e.stack || e.toString()) - handleTerm() - }) -} - -function _log (...args) { - // args.unshift((new Date()).toISOString()) - // fs.appendFileSync('_clog.txt', JSON.stringify(args) + '\n') -} - -_main().then(() => {}, (err) => { - console.error(err) - process.exit(1) -}) diff --git a/packages/n3h-mod-message-mosocket/examples/c3hat/c3hat.js b/packages/n3h-mod-message-mosocket/examples/c3hat/c3hat.js deleted file mode 100755 index 5d39cf6..0000000 --- a/packages/n3h-mod-message-mosocket/examples/c3hat/c3hat.js +++ /dev/null @@ -1,155 +0,0 @@ -#!/usr/bin/env node - -const crypto = require('crypto') -const fs = require('fs') -const path = require('path') -const childProcess = require('child_process') - -const msgpack = require('msgpack-lite') - -const { IpcClient } = require('ipc') - -const { Node } = require('../../lib/node') - -function _spawnP2p (sockName, connectTo, disp) { - const fn = path.resolve(path.join(__dirname, '_c3hat_p2p.js')) - disp('spawn ' + fn) - - const args = [fn, sockName] - connectTo && args.push(connectTo) - const proc = childProcess.spawn('node', args) - - proc.stdout.on('data', (data) => { - data.toString().split('\n').forEach(e => { - e && disp(e) - }) - }) - - proc.stderr.on('data', (data) => { - data.toString().split('\n').forEach(e => { - e && disp(e) - }) - }) - - proc.on('close', (code) => { - disp('exited ' + code) - process.exit(1) - }) - - return proc -} - -async function _main () { - let connectTo = null - if (process.argv.length > 2) { - connectTo = process.argv[2] - } - - process.stdin.setEncoding('utf8') - process.stdin.resume() - process.stdin.setRawMode(true) - - const sockName = Node._friend(crypto.randomBytes(4)) - const ipcSocket = './' + sockName + '.ipc.sock' - - let line = '' - - const disp = (...args) => { - process.stdout.write('\u001B[2K\r') - args.length && console.log(...args) - process.stdout.write('c3hat> ' + line) - } - - const clean = () => { - process.stdin.removeListener('data', getc) - process.stdin.setRawMode(false) - process.stdin.pause() - } - - const handleTerm = () => { - clean() - try { - p2pProc.kill() - } catch (e) { /* pass */ } - try { - client.close() - } catch (e) { /* pass */ } - try { - fs.unlinkSync(ipcSocket) - } catch (e) { /* pass */ } - console.log('\nc3hat done') - - process.exit(0) - } - - process.on('SIGINT', handleTerm) - process.on('SIGTERM', handleTerm) - process.on('exit', handleTerm) - process.on('uncaughtException', e => { - console.error(e.stack || e.toString()) - handleTerm() - }) - - const getc = (c) => { - switch (c) { - case '\r': - case '\n': - const tmp = line - line = '' - disp('\n' + name + ': ' + tmp) - ipcMsg('message', tmp).then(() => {}, (err) => { - console.error(err) - process.exit(1) - }) - break - case '\u0004': - case '\u0003': - handleTerm() - break - default: - if (c.charCodeAt(0) === 127) { - line = line.substr(0, line.length - 1) - disp() - } else { - line += c - disp() - } - break - } - } - - const p2pProc = _spawnP2p(sockName, connectTo, (txt) => { - disp('@p2p@ ' + txt) - }) - - const client = new IpcClient() - await client.connect('ipc://' + ipcSocket) - - const ipcMsg = async (type, data) => { - const resp = await client.call( - msgpack.encode({ type, data })) - if (!resp) { - console.error('bad ipc response', resp) - process.exit(1) - } - if (resp.byteLength) { - return msgpack.decode(resp) - } - } - - const name = await ipcMsg('getName') - disp('\nTHIS NAME:', name) - - client.on('call', (opt) => { - const msg = msgpack.decode(opt.data) - disp('\n' + msg.data.from + ': ' + msg.data.msg) - opt.resolve(Buffer.alloc(0)) - }) - - process.stdin.on('data', getc) -} - -_main().then(() => {}, (err) => { - console.error(err) - process.exit(1) -}) diff --git a/packages/n3h-mod-message-mosocket/lib/config.js b/packages/n3h-mod-message-mosocket/lib/config.js deleted file mode 100644 index 5cb4a77..0000000 --- a/packages/n3h-mod-message-mosocket/lib/config.js +++ /dev/null @@ -1,27 +0,0 @@ -const os = require('os') -const path = require('path') - -const mosodium = require('@holochain/mosodium') - -const mosocketConfig = require('@holochain/mosocket').config - -class EphemeralNode { - constructor () { - const seed = new mosodium.SecBuf(32, mosodium.SecBuf.LOCK_ALL) - seed.randomize() - const { publicKey, secretKey } = mosodium.sign.seedKeypair(seed, mosodium.SecBuf.LOCK_ALL) - seed.free() - - this.publicKey = publicKey - this.secretKey = secretKey - this.id = this.publicKey.toString('base64') - } -} - -module.exports = () => ({ - mosocket: mosocketConfig(), - nodeId: new EphemeralNode(), - ipc: { - socket: 'ipc://' + path.resolve(path.join(os.homedir(), 'n3h.ipc.socket')) - } -}) diff --git a/packages/n3h-mod-message-mosocket/lib/index.js b/packages/n3h-mod-message-mosocket/lib/index.js deleted file mode 100644 index 71969de..0000000 --- a/packages/n3h-mod-message-mosocket/lib/index.js +++ /dev/null @@ -1,2 +0,0 @@ -exports.Node = require('./node').Node -exports.config = require('./config') diff --git a/packages/n3h-mod-message-mosocket/lib/mnemonic/mnemonic.js b/packages/n3h-mod-message-mosocket/lib/mnemonic/mnemonic.js deleted file mode 100644 index 36ad68a..0000000 --- a/packages/n3h-mod-message-mosocket/lib/mnemonic/mnemonic.js +++ /dev/null @@ -1,71 +0,0 @@ -const mosodium = require('@holochain/mosodium') - -const words = require('./words') - -/** - */ -exports.toMnemonic = function toMnemonic (input) { - if ( - !(input instanceof Buffer) || - (input.byteLength) < 4 || - (parseInt(input.byteLength / 4) * 4 !== input.byteLength) - ) { - throw new Error('required buffer of length divisible by 4') - } - - const csLen = input.byteLength * 8 / 32 - const cs = mosodium.hash.sha256(input).slice(0, Math.ceil(csLen / 8)) - const bin = _bufToBin(input) + _bufToBin(cs).slice(0, csLen) - return bin - .match(/(.{1,11})/g) - .map(b => { - return words[parseInt(b, 2)] - }) -} - -/** - */ -exports.fromMnemonic = function fromMnemonic (wordList) { - let bin = [] - wordList.map(w => { - _bin(bin, words.indexOf(w), 11) - }) - bin = bin.join('') - const idx = Math.floor(bin.length / 33) * 32 - const cs = bin.slice(idx) - bin = bin.slice(0, idx) - const out = Buffer.alloc(bin.length / 8) - for (let i = 0; i < out.byteLength; ++i) { - const s = bin.slice(i * 8, i * 8 + 8) - out.writeUInt8(parseInt(s, 2), i) - } - - const csLen = out.byteLength * 8 / 32 - const csNew = mosodium.hash.sha256(out).slice(0, Math.ceil(csLen / 8)) - if (cs !== _bufToBin(csNew).slice(0, csLen)) { - throw new Error('checksum mismatch') - } - - return out -} - -/** - */ -function _bin (a, n, c) { - n = n.toString(2).split('') - if (n.length < c) { - const f = (new Array(c - n.length)).fill('0') - a.splice(a.length, 0, ...f) - } - a.splice(a.length, 0, ...n) -} - -/** - */ -function _bufToBin (b, c) { - const out = [] - for (let i = 0; i < b.byteLength; ++i) { - _bin(out, b.readUInt8(i), 8) - } - return out.join('') -} diff --git a/packages/n3h-mod-message-mosocket/lib/mnemonic/mnemonic.test.js b/packages/n3h-mod-message-mosocket/lib/mnemonic/mnemonic.test.js deleted file mode 100644 index 0e3cb34..0000000 --- a/packages/n3h-mod-message-mosocket/lib/mnemonic/mnemonic.test.js +++ /dev/null @@ -1,28 +0,0 @@ -const expect = require('chai').expect - -const mnemonic = require('./mnemonic') - -describe('mnemonic Suite', () => { - it('should generate consistantly', () => { - expect(mnemonic.toMnemonic(Buffer.from([0, 256, 128, 33]))) - .deep.equals(['abandon', 'advice', 'analyst']) - }) - - it('should parse consistantly', () => { - expect( - mnemonic.fromMnemonic(['abandon', 'advice', 'analyst']).toString('base64') - ).equals('AACAIQ==') - }) - - it('should throw on bad buffer len', () => { - expect(() => { - mnemonic.toMnemonic(Buffer.alloc(3)) - }).throws() - }) - - it('should throw on bad checksum', () => { - expect(() => { - mnemonic.fromMnemonic(['iron', 'advice', 'analyst']) - }).throws() - }) -}) diff --git a/packages/n3h-mod-message-mosocket/lib/mnemonic/words.js b/packages/n3h-mod-message-mosocket/lib/mnemonic/words.js deleted file mode 100644 index 601c09f..0000000 --- a/packages/n3h-mod-message-mosocket/lib/mnemonic/words.js +++ /dev/null @@ -1 +0,0 @@ -module.exports = ['abandon', 'ability', 'able', 'about', 'above', 'absent', 'absorb', 'abstract', 'absurd', 'abuse', 'access', 'accident', 'account', 'accuse', 'achieve', 'acid', 'acoustic', 'acquire', 'across', 'act', 'action', 'actor', 'actress', 'actual', 'adapt', 'add', 'addict', 'address', 'adjust', 'admit', 'adult', 'advance', 'advice', 'aerobic', 'affair', 'afford', 'afraid', 'again', 'age', 'agent', 'agree', 'ahead', 'aim', 'air', 'airport', 'aisle', 'alarm', 'album', 'alcohol', 'alert', 'alien', 'all', 'alley', 'allow', 'almost', 'alone', 'alpha', 'already', 'also', 'alter', 'always', 'amateur', 'amazing', 'among', 'amount', 'amused', 'analyst', 'anchor', 'ancient', 'anger', 'angle', 'angry', 'animal', 'ankle', 'announce', 'annual', 'another', 'answer', 'antenna', 'antique', 'anxiety', 'any', 'apart', 'apology', 'appear', 'apple', 'approve', 'april', 'arch', 'arctic', 'area', 'arena', 'argue', 'arm', 'armed', 'armor', 'army', 'around', 'arrange', 'arrest', 'arrive', 'arrow', 'art', 'artefact', 'artist', 'artwork', 'ask', 'aspect', 'assault', 'asset', 'assist', 'assume', 'asthma', 'athlete', 'atom', 'attack', 'attend', 'attitude', 'attract', 'auction', 'audit', 'august', 'aunt', 'author', 'auto', 'autumn', 'average', 'avocado', 'avoid', 'awake', 'aware', 'away', 'awesome', 'awful', 'awkward', 'axis', 'baby', 'bachelor', 'bacon', 'badge', 'bag', 'balance', 'balcony', 'ball', 'bamboo', 'banana', 'banner', 'bar', 'barely', 'bargain', 'barrel', 'base', 'basic', 'basket', 'battle', 'beach', 'bean', 'beauty', 'because', 'become', 'beef', 'before', 'begin', 'behave', 'behind', 'believe', 'below', 'belt', 'bench', 'benefit', 'best', 'betray', 'better', 'between', 'beyond', 'bicycle', 'bid', 'bike', 'bind', 'biology', 'bird', 'birth', 'bitter', 'black', 'blade', 'blame', 'blanket', 'blast', 'bleak', 'bless', 'blind', 'blood', 'blossom', 'blouse', 'blue', 'blur', 'blush', 'board', 'boat', 'body', 'boil', 'bomb', 'bone', 'bonus', 'book', 'boost', 'border', 'boring', 'borrow', 'boss', 'bottom', 'bounce', 'box', 'boy', 'bracket', 'brain', 'brand', 'brass', 'brave', 'bread', 'breeze', 'brick', 'bridge', 'brief', 'bright', 'bring', 'brisk', 'broccoli', 'broken', 'bronze', 'broom', 'brother', 'brown', 'brush', 'bubble', 'buddy', 'budget', 'buffalo', 'build', 'bulb', 'bulk', 'bullet', 'bundle', 'bunker', 'burden', 'burger', 'burst', 'bus', 'business', 'busy', 'butter', 'buyer', 'buzz', 'cabbage', 'cabin', 'cable', 'cactus', 'cage', 'cake', 'call', 'calm', 'camera', 'camp', 'can', 'canal', 'cancel', 'candy', 'cannon', 'canoe', 'canvas', 'canyon', 'capable', 'capital', 'captain', 'car', 'carbon', 'card', 'cargo', 'carpet', 'carry', 'cart', 'case', 'cash', 'casino', 'castle', 'casual', 'cat', 'catalog', 'catch', 'category', 'cattle', 'caught', 'cause', 'caution', 'cave', 'ceiling', 'celery', 'cement', 'census', 'century', 'cereal', 'certain', 'chair', 'chalk', 'champion', 'change', 'chaos', 'chapter', 'charge', 'chase', 'chat', 'cheap', 'check', 'cheese', 'chef', 'cherry', 'chest', 'chicken', 'chief', 'child', 'chimney', 'choice', 'choose', 'chronic', 'chuckle', 'chunk', 'churn', 'cigar', 'cinnamon', 'circle', 'citizen', 'city', 'civil', 'claim', 'clap', 'clarify', 'claw', 'clay', 'clean', 'clerk', 'clever', 'click', 'client', 'cliff', 'climb', 'clinic', 'clip', 'clock', 'clog', 'close', 'cloth', 'cloud', 'clown', 'club', 'clump', 'cluster', 'clutch', 'coach', 'coast', 'coconut', 'code', 'coffee', 'coil', 'coin', 'collect', 'color', 'column', 'combine', 'come', 'comfort', 'comic', 'common', 'company', 'concert', 'conduct', 'confirm', 'congress', 'connect', 'consider', 'control', 'convince', 'cook', 'cool', 'copper', 'copy', 'coral', 'core', 'corn', 'correct', 'cost', 'cotton', 'couch', 'country', 'couple', 'course', 'cousin', 'cover', 'coyote', 'crack', 'cradle', 'craft', 'cram', 'crane', 'crash', 'crater', 'crawl', 'crazy', 'cream', 'credit', 'creek', 'crew', 'cricket', 'crime', 'crisp', 'critic', 'crop', 'cross', 'crouch', 'crowd', 'crucial', 'cruel', 'cruise', 'crumble', 'crunch', 'crush', 'cry', 'crystal', 'cube', 'culture', 'cup', 'cupboard', 'curious', 'current', 'curtain', 'curve', 'cushion', 'custom', 'cute', 'cycle', 'dad', 'damage', 'damp', 'dance', 'danger', 'daring', 'dash', 'daughter', 'dawn', 'day', 'deal', 'debate', 'debris', 'decade', 'december', 'decide', 'decline', 'decorate', 'decrease', 'deer', 'defense', 'define', 'defy', 'degree', 'delay', 'deliver', 'demand', 'demise', 'denial', 'dentist', 'deny', 'depart', 'depend', 'deposit', 'depth', 'deputy', 'derive', 'describe', 'desert', 'design', 'desk', 'despair', 'destroy', 'detail', 'detect', 'develop', 'device', 'devote', 'diagram', 'dial', 'diamond', 'diary', 'dice', 'diesel', 'diet', 'differ', 'digital', 'dignity', 'dilemma', 'dinner', 'dinosaur', 'direct', 'dirt', 'disagree', 'discover', 'disease', 'dish', 'dismiss', 'disorder', 'display', 'distance', 'divert', 'divide', 'divorce', 'dizzy', 'doctor', 'document', 'dog', 'doll', 'dolphin', 'domain', 'donate', 'donkey', 'donor', 'door', 'dose', 'double', 'dove', 'draft', 'dragon', 'drama', 'drastic', 'draw', 'dream', 'dress', 'drift', 'drill', 'drink', 'drip', 'drive', 'drop', 'drum', 'dry', 'duck', 'dumb', 'dune', 'during', 'dust', 'dutch', 'duty', 'dwarf', 'dynamic', 'eager', 'eagle', 'early', 'earn', 'earth', 'easily', 'east', 'easy', 'echo', 'ecology', 'economy', 'edge', 'edit', 'educate', 'effort', 'egg', 'eight', 'either', 'elbow', 'elder', 'electric', 'elegant', 'element', 'elephant', 'elevator', 'elite', 'else', 'embark', 'embody', 'embrace', 'emerge', 'emotion', 'employ', 'empower', 'empty', 'enable', 'enact', 'end', 'endless', 'endorse', 'enemy', 'energy', 'enforce', 'engage', 'engine', 'enhance', 'enjoy', 'enlist', 'enough', 'enrich', 'enroll', 'ensure', 'enter', 'entire', 'entry', 'envelope', 'episode', 'equal', 'equip', 'era', 'erase', 'erode', 'erosion', 'error', 'erupt', 'escape', 'essay', 'essence', 'estate', 'eternal', 'ethics', 'evidence', 'evil', 'evoke', 'evolve', 'exact', 'example', 'excess', 'exchange', 'excite', 'exclude', 'excuse', 'execute', 'exercise', 'exhaust', 'exhibit', 'exile', 'exist', 'exit', 'exotic', 'expand', 'expect', 'expire', 'explain', 'expose', 'express', 'extend', 'extra', 'eye', 'eyebrow', 'fabric', 'face', 'faculty', 'fade', 'faint', 'faith', 'fall', 'false', 'fame', 'family', 'famous', 'fan', 'fancy', 'fantasy', 'farm', 'fashion', 'fat', 'fatal', 'father', 'fatigue', 'fault', 'favorite', 'feature', 'february', 'federal', 'fee', 'feed', 'feel', 'female', 'fence', 'festival', 'fetch', 'fever', 'few', 'fiber', 'fiction', 'field', 'figure', 'file', 'film', 'filter', 'final', 'find', 'fine', 'finger', 'finish', 'fire', 'firm', 'first', 'fiscal', 'fish', 'fit', 'fitness', 'fix', 'flag', 'flame', 'flash', 'flat', 'flavor', 'flee', 'flight', 'flip', 'float', 'flock', 'floor', 'flower', 'fluid', 'flush', 'fly', 'foam', 'focus', 'fog', 'foil', 'fold', 'follow', 'food', 'foot', 'force', 'forest', 'forget', 'fork', 'fortune', 'forum', 'forward', 'fossil', 'foster', 'found', 'fox', 'fragile', 'frame', 'frequent', 'fresh', 'friend', 'fringe', 'frog', 'front', 'frost', 'frown', 'frozen', 'fruit', 'fuel', 'fun', 'funny', 'furnace', 'fury', 'future', 'gadget', 'gain', 'galaxy', 'gallery', 'game', 'gap', 'garage', 'garbage', 'garden', 'garlic', 'garment', 'gas', 'gasp', 'gate', 'gather', 'gauge', 'gaze', 'general', 'genius', 'genre', 'gentle', 'genuine', 'gesture', 'ghost', 'giant', 'gift', 'giggle', 'ginger', 'giraffe', 'girl', 'give', 'glad', 'glance', 'glare', 'glass', 'glide', 'glimpse', 'globe', 'gloom', 'glory', 'glove', 'glow', 'glue', 'goat', 'goddess', 'gold', 'good', 'goose', 'gorilla', 'gospel', 'gossip', 'govern', 'gown', 'grab', 'grace', 'grain', 'grant', 'grape', 'grass', 'gravity', 'great', 'green', 'grid', 'grief', 'grit', 'grocery', 'group', 'grow', 'grunt', 'guard', 'guess', 'guide', 'guilt', 'guitar', 'gun', 'gym', 'habit', 'hair', 'half', 'hammer', 'hamster', 'hand', 'happy', 'harbor', 'hard', 'harsh', 'harvest', 'hat', 'have', 'hawk', 'hazard', 'head', 'health', 'heart', 'heavy', 'hedgehog', 'height', 'hello', 'helmet', 'help', 'hen', 'hero', 'hidden', 'high', 'hill', 'hint', 'hip', 'hire', 'history', 'hobby', 'hockey', 'hold', 'hole', 'holiday', 'hollow', 'home', 'honey', 'hood', 'hope', 'horn', 'horror', 'horse', 'hospital', 'host', 'hotel', 'hour', 'hover', 'hub', 'huge', 'human', 'humble', 'humor', 'hundred', 'hungry', 'hunt', 'hurdle', 'hurry', 'hurt', 'husband', 'hybrid', 'ice', 'icon', 'idea', 'identify', 'idle', 'ignore', 'ill', 'illegal', 'illness', 'image', 'imitate', 'immense', 'immune', 'impact', 'impose', 'improve', 'impulse', 'inch', 'include', 'income', 'increase', 'index', 'indicate', 'indoor', 'industry', 'infant', 'inflict', 'inform', 'inhale', 'inherit', 'initial', 'inject', 'injury', 'inmate', 'inner', 'innocent', 'input', 'inquiry', 'insane', 'insect', 'inside', 'inspire', 'install', 'intact', 'interest', 'into', 'invest', 'invite', 'involve', 'iron', 'island', 'isolate', 'issue', 'item', 'ivory', 'jacket', 'jaguar', 'jar', 'jazz', 'jealous', 'jeans', 'jelly', 'jewel', 'job', 'join', 'joke', 'journey', 'joy', 'judge', 'juice', 'jump', 'jungle', 'junior', 'junk', 'just', 'kangaroo', 'keen', 'keep', 'ketchup', 'key', 'kick', 'kid', 'kidney', 'kind', 'kingdom', 'kiss', 'kit', 'kitchen', 'kite', 'kitten', 'kiwi', 'knee', 'knife', 'knock', 'know', 'lab', 'label', 'labor', 'ladder', 'lady', 'lake', 'lamp', 'language', 'laptop', 'large', 'later', 'latin', 'laugh', 'laundry', 'lava', 'law', 'lawn', 'lawsuit', 'layer', 'lazy', 'leader', 'leaf', 'learn', 'leave', 'lecture', 'left', 'leg', 'legal', 'legend', 'leisure', 'lemon', 'lend', 'length', 'lens', 'leopard', 'lesson', 'letter', 'level', 'liar', 'liberty', 'library', 'license', 'life', 'lift', 'light', 'like', 'limb', 'limit', 'link', 'lion', 'liquid', 'list', 'little', 'live', 'lizard', 'load', 'loan', 'lobster', 'local', 'lock', 'logic', 'lonely', 'long', 'loop', 'lottery', 'loud', 'lounge', 'love', 'loyal', 'lucky', 'luggage', 'lumber', 'lunar', 'lunch', 'luxury', 'lyrics', 'machine', 'mad', 'magic', 'magnet', 'maid', 'mail', 'main', 'major', 'make', 'mammal', 'man', 'manage', 'mandate', 'mango', 'mansion', 'manual', 'maple', 'marble', 'march', 'margin', 'marine', 'market', 'marriage', 'mask', 'mass', 'master', 'match', 'material', 'math', 'matrix', 'matter', 'maximum', 'maze', 'meadow', 'mean', 'measure', 'meat', 'mechanic', 'medal', 'media', 'melody', 'melt', 'member', 'memory', 'mention', 'menu', 'mercy', 'merge', 'merit', 'merry', 'mesh', 'message', 'metal', 'method', 'middle', 'midnight', 'milk', 'million', 'mimic', 'mind', 'minimum', 'minor', 'minute', 'miracle', 'mirror', 'misery', 'miss', 'mistake', 'mix', 'mixed', 'mixture', 'mobile', 'model', 'modify', 'mom', 'moment', 'monitor', 'monkey', 'monster', 'month', 'moon', 'moral', 'more', 'morning', 'mosquito', 'mother', 'motion', 'motor', 'mountain', 'mouse', 'move', 'movie', 'much', 'muffin', 'mule', 'multiply', 'muscle', 'museum', 'mushroom', 'music', 'must', 'mutual', 'myself', 'mystery', 'myth', 'naive', 'name', 'napkin', 'narrow', 'nasty', 'nation', 'nature', 'near', 'neck', 'need', 'negative', 'neglect', 'neither', 'nephew', 'nerve', 'nest', 'net', 'network', 'neutral', 'never', 'news', 'next', 'nice', 'night', 'noble', 'noise', 'nominee', 'noodle', 'normal', 'north', 'nose', 'notable', 'note', 'nothing', 'notice', 'novel', 'now', 'nuclear', 'number', 'nurse', 'nut', 'oak', 'obey', 'object', 'oblige', 'obscure', 'observe', 'obtain', 'obvious', 'occur', 'ocean', 'october', 'odor', 'off', 'offer', 'office', 'often', 'oil', 'okay', 'old', 'olive', 'olympic', 'omit', 'once', 'one', 'onion', 'online', 'only', 'open', 'opera', 'opinion', 'oppose', 'option', 'orange', 'orbit', 'orchard', 'order', 'ordinary', 'organ', 'orient', 'original', 'orphan', 'ostrich', 'other', 'outdoor', 'outer', 'output', 'outside', 'oval', 'oven', 'over', 'own', 'owner', 'oxygen', 'oyster', 'ozone', 'pact', 'paddle', 'page', 'pair', 'palace', 'palm', 'panda', 'panel', 'panic', 'panther', 'paper', 'parade', 'parent', 'park', 'parrot', 'party', 'pass', 'patch', 'path', 'patient', 'patrol', 'pattern', 'pause', 'pave', 'payment', 'peace', 'peanut', 'pear', 'peasant', 'pelican', 'pen', 'penalty', 'pencil', 'people', 'pepper', 'perfect', 'permit', 'person', 'pet', 'phone', 'photo', 'phrase', 'physical', 'piano', 'picnic', 'picture', 'piece', 'pig', 'pigeon', 'pill', 'pilot', 'pink', 'pioneer', 'pipe', 'pistol', 'pitch', 'pizza', 'place', 'planet', 'plastic', 'plate', 'play', 'please', 'pledge', 'pluck', 'plug', 'plunge', 'poem', 'poet', 'point', 'polar', 'pole', 'police', 'pond', 'pony', 'pool', 'popular', 'portion', 'position', 'possible', 'post', 'potato', 'pottery', 'poverty', 'powder', 'power', 'practice', 'praise', 'predict', 'prefer', 'prepare', 'present', 'pretty', 'prevent', 'price', 'pride', 'primary', 'print', 'priority', 'prison', 'private', 'prize', 'problem', 'process', 'produce', 'profit', 'program', 'project', 'promote', 'proof', 'property', 'prosper', 'protect', 'proud', 'provide', 'public', 'pudding', 'pull', 'pulp', 'pulse', 'pumpkin', 'punch', 'pupil', 'puppy', 'purchase', 'purity', 'purpose', 'purse', 'push', 'put', 'puzzle', 'pyramid', 'quality', 'quantum', 'quarter', 'question', 'quick', 'quit', 'quiz', 'quote', 'rabbit', 'raccoon', 'race', 'rack', 'radar', 'radio', 'rail', 'rain', 'raise', 'rally', 'ramp', 'ranch', 'random', 'range', 'rapid', 'rare', 'rate', 'rather', 'raven', 'raw', 'razor', 'ready', 'real', 'reason', 'rebel', 'rebuild', 'recall', 'receive', 'recipe', 'record', 'recycle', 'reduce', 'reflect', 'reform', 'refuse', 'region', 'regret', 'regular', 'reject', 'relax', 'release', 'relief', 'rely', 'remain', 'remember', 'remind', 'remove', 'render', 'renew', 'rent', 'reopen', 'repair', 'repeat', 'replace', 'report', 'require', 'rescue', 'resemble', 'resist', 'resource', 'response', 'result', 'retire', 'retreat', 'return', 'reunion', 'reveal', 'review', 'reward', 'rhythm', 'rib', 'ribbon', 'rice', 'rich', 'ride', 'ridge', 'rifle', 'right', 'rigid', 'ring', 'riot', 'ripple', 'risk', 'ritual', 'rival', 'river', 'road', 'roast', 'robot', 'robust', 'rocket', 'romance', 'roof', 'rookie', 'room', 'rose', 'rotate', 'rough', 'round', 'route', 'royal', 'rubber', 'rude', 'rug', 'rule', 'run', 'runway', 'rural', 'sad', 'saddle', 'sadness', 'safe', 'sail', 'salad', 'salmon', 'salon', 'salt', 'salute', 'same', 'sample', 'sand', 'satisfy', 'satoshi', 'sauce', 'sausage', 'save', 'say', 'scale', 'scan', 'scare', 'scatter', 'scene', 'scheme', 'school', 'science', 'scissors', 'scorpion', 'scout', 'scrap', 'screen', 'script', 'scrub', 'sea', 'search', 'season', 'seat', 'second', 'secret', 'section', 'security', 'seed', 'seek', 'segment', 'select', 'sell', 'seminar', 'senior', 'sense', 'sentence', 'series', 'service', 'session', 'settle', 'setup', 'seven', 'shadow', 'shaft', 'shallow', 'share', 'shed', 'shell', 'sheriff', 'shield', 'shift', 'shine', 'ship', 'shiver', 'shock', 'shoe', 'shoot', 'shop', 'short', 'shoulder', 'shove', 'shrimp', 'shrug', 'shuffle', 'shy', 'sibling', 'sick', 'side', 'siege', 'sight', 'sign', 'silent', 'silk', 'silly', 'silver', 'similar', 'simple', 'since', 'sing', 'siren', 'sister', 'situate', 'six', 'size', 'skate', 'sketch', 'ski', 'skill', 'skin', 'skirt', 'skull', 'slab', 'slam', 'sleep', 'slender', 'slice', 'slide', 'slight', 'slim', 'slogan', 'slot', 'slow', 'slush', 'small', 'smart', 'smile', 'smoke', 'smooth', 'snack', 'snake', 'snap', 'sniff', 'snow', 'soap', 'soccer', 'social', 'sock', 'soda', 'soft', 'solar', 'soldier', 'solid', 'solution', 'solve', 'someone', 'song', 'soon', 'sorry', 'sort', 'soul', 'sound', 'soup', 'source', 'south', 'space', 'spare', 'spatial', 'spawn', 'speak', 'special', 'speed', 'spell', 'spend', 'sphere', 'spice', 'spider', 'spike', 'spin', 'spirit', 'split', 'spoil', 'sponsor', 'spoon', 'sport', 'spot', 'spray', 'spread', 'spring', 'spy', 'square', 'squeeze', 'squirrel', 'stable', 'stadium', 'staff', 'stage', 'stairs', 'stamp', 'stand', 'start', 'state', 'stay', 'steak', 'steel', 'stem', 'step', 'stereo', 'stick', 'still', 'sting', 'stock', 'stomach', 'stone', 'stool', 'story', 'stove', 'strategy', 'street', 'strike', 'strong', 'struggle', 'student', 'stuff', 'stumble', 'style', 'subject', 'submit', 'subway', 'success', 'such', 'sudden', 'suffer', 'sugar', 'suggest', 'suit', 'summer', 'sun', 'sunny', 'sunset', 'super', 'supply', 'supreme', 'sure', 'surface', 'surge', 'surprise', 'surround', 'survey', 'suspect', 'sustain', 'swallow', 'swamp', 'swap', 'swarm', 'swear', 'sweet', 'swift', 'swim', 'swing', 'switch', 'sword', 'symbol', 'symptom', 'syrup', 'system', 'table', 'tackle', 'tag', 'tail', 'talent', 'talk', 'tank', 'tape', 'target', 'task', 'taste', 'tattoo', 'taxi', 'teach', 'team', 'tell', 'ten', 'tenant', 'tennis', 'tent', 'term', 'test', 'text', 'thank', 'that', 'theme', 'then', 'theory', 'there', 'they', 'thing', 'this', 'thought', 'three', 'thrive', 'throw', 'thumb', 'thunder', 'ticket', 'tide', 'tiger', 'tilt', 'timber', 'time', 'tiny', 'tip', 'tired', 'tissue', 'title', 'toast', 'tobacco', 'today', 'toddler', 'toe', 'together', 'toilet', 'token', 'tomato', 'tomorrow', 'tone', 'tongue', 'tonight', 'tool', 'tooth', 'top', 'topic', 'topple', 'torch', 'tornado', 'tortoise', 'toss', 'total', 'tourist', 'toward', 'tower', 'town', 'toy', 'track', 'trade', 'traffic', 'tragic', 'train', 'transfer', 'trap', 'trash', 'travel', 'tray', 'treat', 'tree', 'trend', 'trial', 'tribe', 'trick', 'trigger', 'trim', 'trip', 'trophy', 'trouble', 'truck', 'true', 'truly', 'trumpet', 'trust', 'truth', 'try', 'tube', 'tuition', 'tumble', 'tuna', 'tunnel', 'turkey', 'turn', 'turtle', 'twelve', 'twenty', 'twice', 'twin', 'twist', 'two', 'type', 'typical', 'ugly', 'umbrella', 'unable', 'unaware', 'uncle', 'uncover', 'under', 'undo', 'unfair', 'unfold', 'unhappy', 'uniform', 'unique', 'unit', 'universe', 'unknown', 'unlock', 'until', 'unusual', 'unveil', 'update', 'upgrade', 'uphold', 'upon', 'upper', 'upset', 'urban', 'urge', 'usage', 'use', 'used', 'useful', 'useless', 'usual', 'utility', 'vacant', 'vacuum', 'vague', 'valid', 'valley', 'valve', 'van', 'vanish', 'vapor', 'various', 'vast', 'vault', 'vehicle', 'velvet', 'vendor', 'venture', 'venue', 'verb', 'verify', 'version', 'very', 'vessel', 'veteran', 'viable', 'vibrant', 'vicious', 'victory', 'video', 'view', 'village', 'vintage', 'violin', 'virtual', 'virus', 'visa', 'visit', 'visual', 'vital', 'vivid', 'vocal', 'voice', 'void', 'volcano', 'volume', 'vote', 'voyage', 'wage', 'wagon', 'wait', 'walk', 'wall', 'walnut', 'want', 'warfare', 'warm', 'warrior', 'wash', 'wasp', 'waste', 'water', 'wave', 'way', 'wealth', 'weapon', 'wear', 'weasel', 'weather', 'web', 'wedding', 'weekend', 'weird', 'welcome', 'west', 'wet', 'whale', 'what', 'wheat', 'wheel', 'when', 'where', 'whip', 'whisper', 'wide', 'width', 'wife', 'wild', 'will', 'win', 'window', 'wine', 'wing', 'wink', 'winner', 'winter', 'wire', 'wisdom', 'wise', 'wish', 'witness', 'wolf', 'woman', 'wonder', 'wood', 'wool', 'word', 'work', 'world', 'worry', 'worth', 'wrap', 'wreck', 'wrestle', 'wrist', 'write', 'wrong', 'yard', 'year', 'yellow', 'you', 'young', 'youth', 'zebra', 'zero', 'zone', 'zoo'] diff --git a/packages/n3h-mod-message-mosocket/lib/node.js b/packages/n3h-mod-message-mosocket/lib/node.js deleted file mode 100644 index cb0d02b..0000000 --- a/packages/n3h-mod-message-mosocket/lib/node.js +++ /dev/null @@ -1,168 +0,0 @@ -const EventEmitter = require('events') -// const crypto = require('crypto') - -// const msgpack = require('msgpack-lite') -const { MoSocket } = require('@holochain/mosocket') -const { IpcServer } = require('@holochain/n3h-ipc') - -const mnemonic = require('./mnemonic/mnemonic') - -const protocol = { - l3h: require('./protocol/l3h') -} - -/** - */ -function _friend (b) { - if (!(b instanceof Buffer)) { - b = Buffer.from(b, 'base64') - } - return mnemonic.toMnemonic(b.slice(0, 4)).join('-') -} - -/** - */ -class Node extends EventEmitter { - /** - */ - constructor (config) { - super() - this._config = config - this._socket = new MoSocket(config.mosocket) - this._allNodes = new Map() - this._allNodesBySession = new Map() - - this._protocol = protocol.l3h.install(this) - - this._socket.on('connection', proxy => { - this._initRemote(proxy) - }) - const removeSession = (proxy) => { - const ref = this._allNodesBySession.get(proxy) - if (!ref) return - this._allNodesBySession.delete(proxy) - this._allNodes.delete(ref.remoteId) - this.emit('connectionClosed', ref.remoteId) - } - this._socket.on('sessionError', (proxy, err) => { - console.error('session error', - _friend(proxy), err.stack || err.toString()) - removeSession(proxy) - }) - this._socket.on('sessionClose', proxy => { - removeSession(proxy) - }) - } - - /** - */ - installProtocol (...args) { - return this._socket.installProtocol(...args) - } - - /** - */ - async init () { - console.log('initializing node, ipc socket: ' + this._config.ipc.socket) - this._ipc = new IpcServer() - this._ipc.on('call', opt => { - this.emit('ipcMessage', { - data: opt.data, - resolve: opt.resolve, - reject: opt.reject - }) - }) - await this._ipc.bind(this._config.ipc.socket) - } - - /** - */ - ipcSendMessage (data) { - this._ipc.call(data || Buffer.alloc(0)) - } - - /** - */ - bind (ma) { - this._checkGossip() - return this._socket.bind(ma) - } - - /** - */ - async connect (ma) { - this._checkGossip() - await this._socket.connect(ma) - } - - /** - */ - close () { - clearInterval(this._gossipTimer) - this._gossipTimer = null - this._socket.close() - this._socket = null - this._ipc.destroy() - this._ipc = null - } - - /** - */ - getListeningAddrs () { - return this._socket.getListeningAddrs() - } - - // -- protected -- // - - $checkGossip (endpoints) { - for (let ep of endpoints) { - if (ep[0] !== this._config.nodeId.id && !this._allNodes.has(ep[0])) { - console.log('new endpoint found:', _friend(ep[0]), ep[1]) - this._allNodes.set(ep[0], {}) // dummy - this.connect(ep[1]) - } - } - } - - // -- private -- // - - async _initRemote (proxy) { - const result = await this._protocol.v([proxy]) - result.proxy = proxy - this._allNodes.set(result.remoteId, result) - this._allNodesBySession.set(result.proxy, result) - console.log(_friend(this._config.nodeId.id), 'found node', _friend(result.remoteId), result.remoteEndpoint) - this._checkGossip() - this._gossip() - this.emit('connection', result.remoteId) - } - - _checkGossip () { - if (this._gossipTimer) { - return - } - this._gossipTimer = setInterval(() => { - this._gossip() - }, 1000) - } - - async _gossip () { - if (typeof this._lastGossipIndex !== 'number') { - this._lastGossipIndex = -1 - } - this._lastGossipIndex++ - if (this._lastGossipIndex >= this._allNodes.size) { - this._lastGossipIndex = 0 - } - const rem = Array.from(this._allNodes.values())[this._lastGossipIndex] - - if (!rem || !rem.proxy) { - return - } - this._protocol.w([rem.proxy]) - } -} - -Node._friend = _friend - -exports.Node = Node diff --git a/packages/n3h-mod-message-mosocket/lib/protocol/l3h.js b/packages/n3h-mod-message-mosocket/lib/protocol/l3h.js deleted file mode 100644 index bf2225a..0000000 --- a/packages/n3h-mod-message-mosocket/lib/protocol/l3h.js +++ /dev/null @@ -1,72 +0,0 @@ -const crypto = require('crypto') -const msgpack = require('msgpack-lite') - -const mosodium = require('@holochain/mosodium') - -const { MoSocket } = require('@holochain/mosocket') - -exports.install = function installProtocolValidate (node) { - return node._socket.installProtocol({ - name: 'l3h', - version: '0.0.1', - hooks: { - /** - */ - w: { - pattern: MoSocket.PATTERN_NOTIFY_RELIABLE, - initiator: { - onNotifyReliable: () => { - return msgpack.encode(Array.from(node._allNodes.values()).map(e => { - // console.log('sending node', e) - return [ e.remoteId, e.remoteEndpoint ] - })) - } - }, - responder: { - onNotifyReliable: (msg) => { - node.$checkGossip(msgpack.decode(msg.data)) - } - } - }, - - /** - */ - v: { - pattern: MoSocket.PATTERN_FIRST, - initiator: { - onPreauthReq: (ctx) => { - ctx._r = crypto.randomBytes(32) - return ctx._r - }, - onRequest: (ctx) => { - return Buffer.alloc(0) - }, - onResponse: (ctx, msg) => { - msg = msgpack.decode(msg.data) - - return { - remoteId: msg.id, - remoteEndpoint: msg.ep, - signatureValid: mosodium.sign.verify( - msg.sig, ctx._r, Buffer.from(msg.id, 'base64')) - } - } - }, - responder: { - onPreauthReq: (ctx, msg) => { - ctx._r = msg.data - }, - onRequest: (ctx, msg) => { - const sig = mosodium.sign.sign( - ctx._r, node._config.nodeId.secretKey) - return msgpack.encode({ - id: node._config.nodeId.id, - ep: node._socket.getListeningAddrs()[0], - sig - }) - } - } - } - } - }) -} diff --git a/packages/n3h-mod-message-mosocket/package.json b/packages/n3h-mod-message-mosocket/package.json deleted file mode 100644 index 3961045..0000000 --- a/packages/n3h-mod-message-mosocket/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "@holochain/n3h-mod-message-mosocket", - "version": "0.0.1", - "description": "nodejs implementation of the lib3h p2p protocol", - "main": "lib/index.js", - "scripts": { - "lint": "standard --fix 'lib/**/*.js' 'bin/**/*.js'", - "mocha": "mocha lib/**/*.test.js bin/**/*.test.js", - "nyc": "nyc npm run mocha", - "test": "npm run lint && npm run nyc", - "show-coverage": "node -e \"require('opn')('coverage/lcov-report/index.html')\"" - }, - "license": "Apache-2.0", - "devDependencies": { - "chai": "^4.2.0", - "mocha": "^5.2.0", - "nyc": "^12.0.2", - "opn": "^5.4.0", - "sinon": "^7.1.1", - "standard": "^12.0.1" - }, - "dependencies": { - "@holochain/mosodium": "^0.0.1", - "@holochain/mosocket": "^0.0.1", - "msgpack-lite": "^0.1.26", - "@holochain/n3h-ipc": "^0.0.1" - }, - "standard": { - "env": { - "mocha": true - } - }, - "nyc": { - "check-coverage": false, - "per-file": false, - "lines": 80, - "statements": 80, - "functions": 80, - "branches": 80, - "all": true, - "include": [ - "./lib/**/*.js" - ], - "reporter": [ - "lcov", - "text-summary" - ] - } -} diff --git a/packages/n3h-mod-nv-persist-sqlite3/README.md b/packages/n3h-mod-nv-persist-sqlite3/README.md deleted file mode 100644 index 29c55cb..0000000 --- a/packages/n3h-mod-nv-persist-sqlite3/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# n3h-mod-nv-persist-sqlite3 - -n3h sqlite3 nv-persist module diff --git a/packages/n3h-mod-nv-persist-sqlite3/lib/index.js b/packages/n3h-mod-nv-persist-sqlite3/lib/index.js deleted file mode 100644 index 656df14..0000000 --- a/packages/n3h-mod-nv-persist-sqlite3/lib/index.js +++ /dev/null @@ -1,120 +0,0 @@ -const sqlite3 = require('./sqlite3') -const { AsyncClass } = require('@holochain/n3h-common') - -/** - * sqlite3 persistence engine for hashcache - */ -class NvPersistSqlite3 extends AsyncClass { - static getDefinition () { - return { - type: 'nvPersist', - name: 'sqlite3', - defaultConfig: { - '#file': 'what sqlite3 file should we use for persistence? (don\'t use \':memory:\' except for testing/debugging', - file: 'n3h-persist.sqlite3' - } - } - } - - /** - */ - async init (config, system) { - await super.init() - - this._config = config - - this._db = await new sqlite3.Db(this._config.file) - this._ns = new Map() - this.$pushDestructor(async () => { - const wait = [] - for (let v of this._ns.values()) { - wait.push(v.getter.destroy()) - wait.push(v.setter.destroy()) - } - await Promise.all(wait) - this._ns = null - await this._db.destroy() - this._db = null - }) - } - - /** - */ - async ready () { - /* pass - we just initialize in init (no dependencies) */ - } - - /** - * get a value from the database - * @param {string} ns - the namespace - * @param {Buffer} key - the binary key - */ - async get (ns, key) { - if (!(key instanceof Buffer)) { - throw new Error('key must be a Buffer') - } - ns = await this._assertTable(ns) - const res = await ns.getter.get(key) - if (!res) { - return null - } - return res.data - } - - /** - * set a value in the database - * @param {string} ns - the namespace - * @param {Buffer} hash - the binary key - * @param {Buffer} data - the data to store - */ - async set (ns, key, data) { - if (!(key instanceof Buffer)) { - throw new Error('key must be a Buffer') - } - if (!(data instanceof Buffer)) { - throw new Error('data must be a Buffer') - } - ns = await this._assertTable(ns) - await ns.setter.run( - key, - data) - } - - // -- private -- // - - /** - * prepare a table and associated getter/setters - * @private - */ - async _assertTable (ns) { - if (this._ns.has(ns)) { - return this._ns.get(ns) - } - - await this._db.run(` - CREATE TABLE IF NOT EXISTS data_${ns} ( - hash BLOB PRIMARY KEY NOT NULL, - data BLOB NOT NULL - ); - `) - - this._ns.set(ns, { - getter: await this._db.prepare(` - SELECT hash, data - FROM data_${ns} - WHERE hash = ?1; - `), - setter: await this._db.prepare(` - INSERT - INTO data_${ns} (hash, data) - VALUES (?1, ?2) - ON CONFLICT (hash) DO UPDATE - SET data = ?2; - `) - }) - - return this._ns.get(ns) - } -} - -exports.NvPersistSqlite3 = NvPersistSqlite3 diff --git a/packages/n3h-mod-nv-persist-sqlite3/lib/index.test.js b/packages/n3h-mod-nv-persist-sqlite3/lib/index.test.js deleted file mode 100644 index 85b0967..0000000 --- a/packages/n3h-mod-nv-persist-sqlite3/lib/index.test.js +++ /dev/null @@ -1,95 +0,0 @@ -const NvPersistSqlite3 = require('./index').NvPersistSqlite3 -const { ModMod } = require('@holochain/n3h-common') -const { expect } = require('chai') -const crypto = require('crypto') - -const NS = 'test' - -async function construct (config) { - const m = await new ModMod({ - nvPersist: ['get', 'set'] - }) - m.register(NvPersistSqlite3) - const defaultConfig = JSON.parse(m.getDefaultConfig()) - defaultConfig.nvPersist.sqlite3.config = config - return m.launch(defaultConfig) -} - -describe('NvPersistSqlite3 Suite', () => { - it('should error with no config', async () => { - try { - await construct() - } catch (e) { - return - } - throw new Error('expected exception, got success') - }) - - it('should error with empty config', async () => { - try { - await construct() - } catch (e) { - return - } - throw new Error('expected exception, got success') - }) - - it('should error if bad get key', async () => { - const i = await construct({ file: ':memory:' }) - const p = i.nvPersist - try { - await p.get('hello') - } catch (e) { - return - } - throw new Error('expected exception, got success') - }) - - it('should error if bad set key', async () => { - const i = await construct({ file: ':memory:' }) - const p = i.nvPersist - try { - await p.set('hello', Buffer.from('hello')) - } catch (e) { - return - } - throw new Error('expected exception, got success') - }) - - it('should error if bad set data', async () => { - const i = await construct({ file: ':memory:' }) - const p = i.nvPersist - try { - await p.set(Buffer.from('hello'), 'hello') - } catch (e) { - return - } - throw new Error('expected exception, got success') - }) - - it('should save and get', async () => { - const hash = crypto.randomBytes(32) - const i = await construct({ file: ':memory:' }) - const p = i.nvPersist - await p.set(NS, hash, Buffer.from('this is a test')) - expect((await p.get(NS, hash)).toString()).equals('this is a test') - i.destroy() - }) - - it('should get null', async () => { - const i = await construct({ file: ':memory:' }) - const p = i.nvPersist - expect((await p.get(NS, Buffer.from('hello')))).equals(null) - i.destroy() - }) - - it('should save multi and get', async () => { - const hash = crypto.randomBytes(32) - const i = await construct({ file: ':memory:' }) - const p = i.nvPersist - await p.set(NS, hash, Buffer.from('this is a test')) - await p.set(NS, hash, Buffer.from('this is a test2')) - expect((await p.get(NS, hash)).toString()).equals('this is a test2') - i.destroy() - }) -}) diff --git a/packages/n3h-mod-nv-persist-sqlite3/lib/sqlite3.js b/packages/n3h-mod-nv-persist-sqlite3/lib/sqlite3.js deleted file mode 100644 index de63e43..0000000 --- a/packages/n3h-mod-nv-persist-sqlite3/lib/sqlite3.js +++ /dev/null @@ -1,132 +0,0 @@ -const sqlite3 = require('sqlite3') - -const { - AsyncClass, - $p -} = require('@holochain/n3h-common') - -/** - * Represents a prepared sqlite3 statement - */ -class Statement extends AsyncClass { - /** - * accepts the low-level statement instance - */ - async init (stmt) { - await super.init() - - this._stmt = stmt - this.$pushDestructor(async () => { - await this._stmt.finalize() - this._stmt = null - }) - } - - /** - * clean up the prepared statement - */ - finalize () { - this.$checkDestroyed() - return $p(cb => { - this._stmt.finalize(cb) - }) - } - - /** - * run the prepared statement with parameters - */ - run (...params) { - this.$checkDestroyed() - return $p(cb => { - this._stmt.run(...params, cb) - }) - } - - /** - * get a single row result of the prepared statement with parameters - */ - get (...params) { - this.$checkDestroyed() - return $p(cb => { - this._stmt.get(...params, cb) - }) - } - - /** - * get multiple row results of the prepared statement with parameters - */ - all (...params) { - this.$checkDestroyed() - return $p(cb => { - this._stmt.all(...params, cb) - }) - } -} - -/** - * represents a sqlite3 database connection - */ -class Db extends AsyncClass { - /** - * create a new sqlite3 database connection - */ - async init (filename) { - await super.init() - - this._db = null - await $p(cb => { - this._db = new sqlite3.Database(filename, cb) - }) - this._db.serialize() - - this.$pushDestructor(async () => { - await $p(cb => { - this._db.close(cb) - }) - this._db = null - }) - } - - /** - * prepare a sqlite3 database query - */ - async prepare (sql, ...params) { - this.$checkDestroyed() - let s = null - await $p(cb => { - s = this._db.prepare(sql, ...params, cb) - }) - return new Statement(s) - } - - /** - * prepare, execute, and cleanup a sqlite3 database query (no results) - */ - async run (sql, ...params) { - const s = await this.prepare(sql) - await s.run(...params) - await s.finalize() - } - - /** - * prepare, execute, and cleanup a sqlite3 database query (one row result) - */ - async get (sql, ...params) { - const s = await this.prepare(sql) - const out = await s.get(...params) - await s.finalize() - return out - } - - /** - * prepare, execute, and cleanup a sqlite3 database query (all row results) - */ - async all (sql, ...params) { - const s = await this.prepare(sql) - const out = await s.all(...params) - await s.finalize() - return out - } -} - -exports.Db = Db diff --git a/packages/n3h-mod-nv-persist-sqlite3/lib/sqlite3.test.js b/packages/n3h-mod-nv-persist-sqlite3/lib/sqlite3.test.js deleted file mode 100644 index b7015f6..0000000 --- a/packages/n3h-mod-nv-persist-sqlite3/lib/sqlite3.test.js +++ /dev/null @@ -1,75 +0,0 @@ -const sqlite3 = require('./sqlite3') -const { expect } = require('chai') -const tmp = require('tmp') - -describe('Sqlite3 promise wrapper Suite', () => { - it('should be a function', () => { - expect(typeof sqlite3.Db).equals('function') - }) - - it('should connect and close', async () => { - const i = await new sqlite3.Db(':memory:') - await i.destroy() - }) - - it('should connect and close, twice ok', async () => { - const i = await new sqlite3.Db(':memory:') - await i.destroy() - await i.destroy() - }) - - it('should also destroy with file backend', async () => { - const file = tmp.fileSync() - const i = await new sqlite3.Db(file.name) - await i.destroy() - file.removeCallback() - }) - - it('should error on destroyed usage', async () => { - const i = await new sqlite3.Db(':memory:') - await i.destroy() - try { - await i.prepare('SELECT * FROM life;') - } catch (e) { - return - } - throw new Error('expected exception, but got success') - }) - - it('should run and get', async () => { - const i = await new sqlite3.Db(':memory:') - await i.run('CREATE TABLE test (data TEXT)') - await i.run('INSERT INTO test VALUES (?)', 'hello') - const res = await i.get('SELECT data FROM test LIMIT 1') - expect(res.data).equals('hello') - await i.destroy() - }) - - it('should all', async () => { - const i = await new sqlite3.Db(':memory:') - await i.run('CREATE TABLE test (data TEXT)') - await i.run('INSERT INTO test VALUES (?)', 'hello1') - await i.run('INSERT INTO test VALUES (?)', 'hello2') - const res = await i.all('SELECT data FROM test') - expect(res).deep.equals([ - { 'data': 'hello1' }, - { 'data': 'hello2' } - ]) - await i.destroy() - }) - - it('should prepare', async () => { - const i = await new sqlite3.Db(':memory:') - await i.run('CREATE TABLE test (data TEXT)') - const s = await i.prepare('INSERT INTO test VALUES (?)') - await s.run('hello1') - await s.run('hello2') - await s.finalize() - const res = await i.all('SELECT data FROM test') - expect(res).deep.equals([ - { 'data': 'hello1' }, - { 'data': 'hello2' } - ]) - await i.destroy() - }) -}) diff --git a/packages/n3h-mod-nv-persist-sqlite3/package.json b/packages/n3h-mod-nv-persist-sqlite3/package.json deleted file mode 100644 index 1c21666..0000000 --- a/packages/n3h-mod-nv-persist-sqlite3/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "@holochain/n3h-mod-nv-persist-sqlite3", - "version": "0.0.1", - "description": "n3h sqlite3 nv-persist module", - "main": "lib/index.js", - "scripts": { - "lint": "standard --fix 'lib/**/*.js' 'bin/**/*.js'", - "mocha": "mocha lib/**/*.test.js bin/**/*.test.js", - "nyc": "nyc npm run mocha", - "test": "npm run lint && npm run nyc", - "show-coverage": "node -e \"require('opn')('coverage/lcov-report/index.html')\"" - }, - "license": "Apache-2.0", - "devDependencies": { - "chai": "^4.2.0", - "mocha": "^5.2.0", - "nyc": "^12.0.2", - "opn": "^5.4.0", - "sinon": "^7.1.1", - "standard": "^12.0.1" - }, - "dependencies": { - "@holochain/n3h-common": "^0.0.1", - "sqlite3": "^4.0.4" - }, - "standard": { - "env": { - "mocha": true - } - }, - "nyc": { - "check-coverage": true, - "per-file": false, - "lines": 80, - "statements": 80, - "functions": 80, - "branches": 80, - "all": true, - "include": [ - "./lib/**/*.js" - ], - "reporter": [ - "lcov", - "text-summary" - ] - } -} diff --git a/packages/n3h-mod-persist-cache-lru/README.md b/packages/n3h-mod-persist-cache-lru/README.md deleted file mode 100644 index a11e73d..0000000 --- a/packages/n3h-mod-persist-cache-lru/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# n3h-mod-persist-cache-lru - -n3h lru persist-cache module diff --git a/packages/n3h-mod-persist-cache-lru/lib/index.js b/packages/n3h-mod-persist-cache-lru/lib/index.js deleted file mode 100644 index 1d9ecdf..0000000 --- a/packages/n3h-mod-persist-cache-lru/lib/index.js +++ /dev/null @@ -1,151 +0,0 @@ -const { AsyncClass } = require('@holochain/n3h-common') - -/** - * used to sort LRU items - */ -function _timeSort (a, b) { - if (a[0] < b[0]) { - return 1 - } else if (a[0] > b[0]) { - return -1 - } - return 0 -} - -/** - */ -class PersistCacheLru extends AsyncClass { - static getDefinition () { - return { - type: 'persistCache', - name: 'lru', - defaultConfig: { - '#cacheSize': 'size in bytes to limit contents in memory (e.g. 1024 * 1024 * 20 === 20 MiB)', - cacheSize: 1024 * 1024 * 20 - } - } - } - - /** - */ - getNsAsStringJson (ns) { - return { - set: async (key, value) => { - return this.set( - ns, - Buffer.from(key, 'utf8'), - Buffer.from(JSON.stringify(value), 'utf8')) - }, - get: async (key) => { - let out = await this.get( - ns, - Buffer.from(key, 'utf8')) - if (out) { - out = JSON.parse(out.toString('utf8')) - } - return out - } - } - } - - /** - */ - async init (config, system) { - await super.init() - - this._currentSize = 0 - - this._config = config - this._system = system - - this._data = new Map() - } - - /** - */ - async ready () { - this._persist = this._system.nvPersist - } - - /** - * get a value from the cache - */ - async get (ns, key) { - const key64 = key.toString('base64') - - const nsMap = this._getNsRef(ns) - if (!nsMap.has(key64)) { - const data = await this._persist.get(ns, key) - if (!data) { - return null - } - nsMap.set(key64, [Date.now(), data]) - this._currentSize += data.byteLength - } - const ref = nsMap.get(key64) - ref[0] = Date.now() - const out = ref[1] - await this.prune() - return out - } - - /** - * set a value in the cache - */ - async set (ns, key, data) { - const key64 = key.toString('base64') - - const nsMap = this._getNsRef(ns) - - await this._persist.set(ns, key, data) - - if (nsMap.has(key64)) { - this._currentSize -= nsMap.get(key64)[1].byteLength - } - nsMap.set(key64, [Date.now(), data]) - this._currentSize += data.byteLength - - await this.prune() - } - - /** - * prune if we are over our size - */ - async prune () { - if (this._currentSize < this._config.cacheSize) { - return - } - const arr = [] - - for (let [nsK, nsM] of this._data) { - for (let [eK, eR] of nsM) { - arr.push([eR[0], nsK, eK, eR[1].length]) - } - } - - arr.sort(_timeSort) - - this._currentSize = 0 - for (let ref of arr) { - if (this._currentSize + ref[3] > this._config.cacheSize) { - this._data.get(ref[1]).delete(ref[2]) - } else { - this._currentSize += ref[3] - } - } - } - - // -- private -- // - - /** - * helper fetch the namespaced map - */ - _getNsRef (ns) { - if (!this._data.has(ns)) { - this._data.set(ns, new Map()) - } - return this._data.get(ns) - } -} - -exports.PersistCacheLru = PersistCacheLru diff --git a/packages/n3h-mod-persist-cache-lru/lib/index.test.js b/packages/n3h-mod-persist-cache-lru/lib/index.test.js deleted file mode 100644 index 78b283e..0000000 --- a/packages/n3h-mod-persist-cache-lru/lib/index.test.js +++ /dev/null @@ -1,138 +0,0 @@ -const crypto = require('crypto') - -const { expect } = require('chai') - -const { ModMod } = require('@holochain/n3h-common') -const PersistCacheLru = require('./index').PersistCacheLru - -const NS = 'test' - -const bail = e => { throw new Error(e) } - -function _sleep (ms) { - return new Promise((resolve, reject) => { - setTimeout(resolve, ms) - }) -} - -const zero = Buffer.from([0]) -let stubData = {} -const nvStub = { - start: () => { - stubData = {} - }, - destroy: () => {}, - get: (nv, key) => { - key instanceof Buffer || bail('key type') - return stubData[Buffer.concat([Buffer.from(nv), zero, key])] - }, - set: (nv, key, data) => { - key instanceof Buffer || bail('key type') - data instanceof Buffer || bail('data type') - stubData[Buffer.concat([Buffer.from(nv), zero, key])] = data - }, - ready: () => {} -} - -async function addRand (cache, keyIdx, size) { - const bytes = crypto.randomBytes(size) - await cache.set(NS, Buffer.from(keyIdx.toString()), bytes) -} - -describe('PersistCacheLRU Suite', () => { - let m = null - let i = null - let c = null - - beforeEach(async () => { - stubData = {} - m = await new ModMod({ - nvPersist: ['get', 'set'], - persistCache: ['get', 'set', 'getNsAsStringJson'] - }) - m.register([ - PersistCacheLru, - class { - static getDefinition () { - return { - type: 'nvPersist', - name: 'testStub', - defaultConfig: {} - } - } - - constructor () { - return nvStub - } - } - ]) - - const defaultConfig = JSON.parse(m.getDefaultConfig()) - defaultConfig.persistCache.lru.config.cacheSize = 500 - - i = await m.launch(defaultConfig) - c = i.persistCache - }) - - afterEach(async () => { - await m.destroy() - }) - - it('should be an instance', () => { - expect(typeof c).equals('object') - }) - - it('should set and get', async () => { - await c.set(NS, Buffer.from('bla'), Buffer.from('hello')) - expect((await c.get(NS, Buffer.from('bla'))).toString()).equals('hello') - }) - - it('should set and get (StringJson)', async () => { - const t = c.getNsAsStringJson(NS) - await t.set('bla', 'hello') - expect(await t.get('bla')).equals('hello') - }) - - it('should update', async () => { - await c.set(NS, Buffer.from('bla'), Buffer.from('hello')) - await c.set(NS, Buffer.from('bla'), Buffer.from('zoik')) - expect((await c.get(NS, Buffer.from('bla'))).toString()).equals('zoik') - }) - - it('should get null', async () => { - expect(await c.get(NS, Buffer.from('bla'))).equals(null) - }) - - it('should get null (StringJson)', async () => { - const t = c.getNsAsStringJson(NS) - expect(await t.get('bla')).equals(null) - }) - - it('should drop LRU', async () => { - for (let i = 0; i < 10; ++i) { - await addRand(c, i, 101) - expect(c._._currentSize).lessThan(500) - } - }) - - it('can fetch dropped items', async () => { - await c.set(NS, Buffer.from('bla'), Buffer.from('hello')) - await _sleep(5) - await addRand(c, 1, 499) - await addRand(c, 2, 499) - expect(c._._currentSize).lessThan(500) - expect((await c.get(NS, Buffer.from('bla'))).toString()).equals('hello') - }) - - it('should LRU sort order', async () => { - for (let i = 0; i < 10; ++i) { - await addRand(c, i, 101) - await _sleep(1) - - // get the first one to update the timestamp - await c.get(NS, Buffer.from((1).toString())) - - expect(c._._currentSize).lessThan(500) - } - }) -}) diff --git a/packages/n3h-mod-persist-cache-lru/package.json b/packages/n3h-mod-persist-cache-lru/package.json deleted file mode 100644 index 4f18fd0..0000000 --- a/packages/n3h-mod-persist-cache-lru/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "@holochain/n3h-mod-persist-cache-lru", - "version": "0.0.1", - "description": "n3h lru persist-cache module", - "main": "lib/index.js", - "scripts": { - "lint": "standard --fix 'lib/**/*.js' 'bin/**/*.js'", - "mocha": "mocha lib/**/*.test.js bin/**/*.test.js", - "nyc": "nyc npm run mocha", - "test": "npm run lint && npm run nyc", - "show-coverage": "node -e \"require('opn')('coverage/lcov-report/index.html')\"" - }, - "license": "Apache-2.0", - "devDependencies": { - "chai": "^4.2.0", - "mocha": "^5.2.0", - "nyc": "^12.0.2", - "opn": "^5.4.0", - "sinon": "^7.1.1", - "standard": "^12.0.1" - }, - "dependencies": { - "@holochain/n3h-common": "^0.0.1" - }, - "standard": { - "env": { - "mocha": true - } - }, - "nyc": { - "check-coverage": true, - "per-file": false, - "lines": 80, - "statements": 80, - "functions": 80, - "branches": 80, - "all": true, - "include": [ - "./lib/**/*.js" - ], - "reporter": [ - "lcov", - "text-summary" - ] - } -} diff --git a/packages/n3h-mod-spec/README.md b/packages/n3h-mod-spec/README.md deleted file mode 100644 index e457911..0000000 --- a/packages/n3h-mod-spec/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# n3h-mod-spec - -api spec files for interchangeable n3h modules diff --git a/packages/n3h-mod-spec/package.json b/packages/n3h-mod-spec/package.json deleted file mode 100644 index b3336e8..0000000 --- a/packages/n3h-mod-spec/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "@holochain/n3h-mod-spec", - "version": "0.0.1", - "description": "api spec files for interchangeable n3h modules", - "main": "lib/index.js", - "scripts": { - "lint": "standard --fix 'lib/**/*.js' 'bin/**/*.js'", - "mocha": "mocha lib/**/*.test.js bin/**/*.test.js", - "nyc": "nyc npm run mocha", - "test": "npm run lint && npm run nyc", - "show-coverage": "node -e \"require('opn')('coverage/lcov-report/index.html')\"" - }, - "license": "Apache-2.0", - "devDependencies": { - "chai": "^4.2.0", - "mocha": "^5.2.0", - "nyc": "^12.0.2", - "opn": "^5.4.0", - "sinon": "^7.1.1", - "standard": "^12.0.1" - }, - "dependencies": { - "@holochain/n3h-common": "0.0.1" - }, - "standard": { - "env": { - "mocha": true - } - }, - "nyc": { - "check-coverage": false, - "per-file": false, - "lines": 80, - "statements": 80, - "functions": 80, - "branches": 80, - "all": true, - "include": [ - "./lib/**/*.js" - ], - "reporter": [ - "lcov", - "text-summary" - ] - } -} diff --git a/packages/n3h/README.md b/packages/n3h/README.md deleted file mode 100644 index 367af55..0000000 --- a/packages/n3h/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# n3h - -nodejs holochain networking library with swapable / configurable modules diff --git a/packages/n3h/bin/n3h b/packages/n3h/bin/n3h index 706f859..2d2d491 100755 --- a/packages/n3h/bin/n3h +++ b/packages/n3h/bin/n3h @@ -1,157 +1,2 @@ #!/usr/bin/env node - -const fs = require('fs') -const path = require('path') -const os = require('os') - -const { mkdirp } = require('@holochain/n3h-common') -const tweetlog = require('@holochain/tweetlog') -const log = tweetlog('n3h-bin') - -const { buildLogHandler } = require('../lib/file-logger') -const { N3hNode, N3hHackMode, N3hMock } = require('../lib/index') -const { unhandledRejection } = require('@holochain/n3h-common') -unhandledRejection.strict() - -async function main () { - const workDir = 'N3H_WORK_DIR' in process.env - ? process.env.N3H_WORK_DIR - : path.resolve(path.join( - os.homedir(), '.n3h')) - - // Move into working directory? - await mkdirp(workDir) - process.chdir(workDir) - - const logDir = path.join(workDir, 'logs') - await mkdirp(logDir) - - const logHandler = buildLogHandler({ - dir: logDir - }) - - // setup logging - tweetlog.set('t') // enable trace logging - tweetlog.listen(logHandler) - - const quietMode = 'N3H_QUIET' in process.env - if (!quietMode) { - tweetlog.listen((level, tag, ...args) => { - args = args.map(a => { - if (a instanceof Error) { - return a.stack || a.toString() - } else if (typeof a === 'object') { - return JSON.stringify(a) - } - return a.toString() - }).join(' ') - console.error(`(${tag}) [${level}] ${args}`) - }) - } - - let rawConfigData = null - - try { - rawConfigData = JSON.parse((await _tryReadStdin()).toString()) - log.w('got stdin config!', rawConfigData) - } catch (e) { - log.w('could not read stdin', e) - } - - if (!rawConfigData) { - try { - rawConfigData = JSON.parse(fs.readFileSync(path.resolve('n3h-config.json'))) - } catch (e) { - log.w('failed to load config', e) - } - } - - let mode = 'HACK' - - // mode from config - if (rawConfigData && 'mode' in rawConfigData) { - mode = rawConfigData.mode - } - - // environment mode override - if ('N3H_MODE' in process.env) { - mode = process.env.N3H_MODE - } - - var n3hNode = null - - let terminated = false - const terminate = async () => { - if (terminated) { - return - } - try { - if (n3hNode) { - await n3hNode.destroy() - } - log.i('n3h exited cleanly') - await logHandler.cleanup() - process.exit(0) - } catch (e) { - try { - await logHandler.cleanup() - } catch (e) { /* pass */ } - log.e(e.stack || e.toString()) - process.exit(1) - } - } - - process.on('SIGINT', terminate) - process.on('SIGTERM', terminate) - process.on('unhandledRejection', err => { - log.e(err) - terminate() - }) - - log.i('executing mode ' + mode) - switch(mode) { - case 'MOCK': - n3hNode = await new N3hMock(workDir, rawConfigData) - break - case 'HACK': - n3hNode = await new N3hHackMode(workDir, rawConfigData) - break - default: - log.e('so called "real" mode disabled while running POC on hackmode / mockmode') - process.exit(1) - //n3hNode = await N3hNode.constructDefault(workDir, rawConfigData) - //break - } - - await n3hNode.run() -} - -main().then(() => {}, (err) => { - log.e(err) - process.exit(1) -}) - -/** - * read from stdin until closed - * timeout if not read in 4 seconds - */ -async function _tryReadStdin () { - const timeout = (new Error('timeout')).stack - return new Promise((resolve, reject) => { - const timer = setTimeout(() => { - reject(timeout) - }, 4000) - - log.w('attempting read stdin') - process.stdin.resume() - - let data = Buffer.alloc(0) - process.stdin.on('data', chunk => { - data = Buffer.concat([data, chunk]) - }) - process.stdin.on('end', () => { - clearTimeout(timer) - resolve(data) - }) - }) -} +require('../../../bin/n3h') diff --git a/packages/n3h/package.json b/packages/n3h/package.json deleted file mode 100644 index 3a40c87..0000000 --- a/packages/n3h/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "@holochain/n3h", - "version": "0.0.1", - "description": "nodejs holochain networking library with swapable / configurable modules", - "main": "lib/index.js", - "scripts": { - "lint": "standard --fix 'lib/**/*.js' 'bin/**/*.js'", - "mocha": "mocha lib/**/*.test.js bin/**/*.test.js", - "nyc": "nyc npm run mocha", - "test": "npm run lint && npm run nyc", - "show-coverage": "node -e \"require('opn')('coverage/lcov-report/index.html')\"" - }, - "license": "Apache-2.0", - "devDependencies": { - "chai": "^4.2.0", - "mocha": "^5.2.0", - "nyc": "^12.0.2", - "opn": "^5.4.0", - "sinon": "^7.1.1", - "standard": "^12.0.1", - "tmp": "0.0.33" - }, - "dependencies": { - "@holochain/hackmode": "^0.0.1", - "@holochain/n3h-mock": "^0.0.1", - "@holochain/n3h-ipc": "^0.0.1", - "@holochain/n3h-common": "^0.0.1", - "@holochain/n3h-mod-message-libp2p": "^0.0.1", - "@holochain/n3h-mod-nv-persist-sqlite3": "^0.0.1", - "@holochain/n3h-mod-persist-cache-lru": "^0.0.1", - "@holochain/tweetlog": "^0.0.1", - "peer-id": "^0.11.0", - "peer-info": "^0.14.1", - "@holochain/test-suite-executor": "^0.0.1" - }, - "standard": { - "env": { - "mocha": true - } - }, - "nyc": { - "check-coverage": false, - "per-file": false, - "lines": 80, - "statements": 80, - "functions": 80, - "branches": 80, - "all": true, - "include": [ - "./lib/**/*.js" - ], - "reporter": [ - "lcov", - "text-summary" - ] - } -} diff --git a/packages/test-suite-executor/README.md b/packages/test-suite-executor/README.md deleted file mode 100644 index e78df54..0000000 --- a/packages/test-suite-executor/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# test-suite-executor - -integration test suite for exercising a holochain networking/p2p node diff --git a/packages/test-suite-executor/lib/index.js b/packages/test-suite-executor/lib/index.js deleted file mode 100644 index 74a350f..0000000 --- a/packages/test-suite-executor/lib/index.js +++ /dev/null @@ -1,201 +0,0 @@ -const path = require('path') - -const tmp = require('tmp') - -const { AsyncClass, mkdirp, $sleep } = require('@holochain/n3h-common') - -const { IpcWrapper } = require('./ipc-wrapper') - -/** - */ -class TestSuiteExecutor extends AsyncClass { - /** - */ - constructor () { - super() - - return AsyncClass.$construct(this, async (self) => { - self._nodes = [] - self._dirs = [] - - self.$pushDestructor(async () => { - const wait = [] - for (let node of self._nodes) { - wait.push(self.emit('killNode', node)) - wait.push(node.nodePromise) - } - await Promise.all(wait) - self._nodes = null - - for (let dir of self._dirs) { - dir() - } - self._dirs = null - }) - - return self - }) - } - - /** - */ - async run () { - let wait = [] - for (let i = 0; i < 3; ++i) { - const node = {} - node.nodePromise = new Promise((resolve, reject) => { - node.resolve = resolve - node.reject = reject - }) - - node.name = 'node-' + i - const t = tmp.dirSync({ - prefix: 'n3h-test-suite-' + node.name + '-', - unsafeCleanup: true - }) - - node.dir = t.name - this._dirs.push(t.removeCallback) - - await mkdirp(node.dir) - - node.ipcUri = 'ipc://' + path.join(node.dir, 'n3h-ipc.socket') - - wait.push(this.emit('spawnNode', node)) - - this._nodes.push(node) - } - - await Promise.all(wait) - - wait = [] - for (let node of this._nodes) { - wait.push((async () => { - node.ipcClient = await new IpcWrapper(node.ipcUri) - })()) - } - - await Promise.all(wait) - - wait = [] - for (let node of this._nodes) { - wait.push(node.ipcClient.requestState()) - } - - console.log('@@', await Promise.all(wait)) - - wait = [] - for (let node of this._nodes) { - wait.push(node.ipcClient.requestDefaultConfig()) - } - - const defConfig = (await Promise.all(wait))[0].config - console.log('@@config@@', defConfig) - - for (let node of this._nodes) { - node.ipcClient.setConfig(defConfig) - } - - for (;;) { - await $sleep(100) - - wait = [] - for (let node of this._nodes) { - wait.push(node.ipcClient.requestState()) - } - - wait = await Promise.all(wait) - - let done = true - - for (let item of wait) { - if (item.state !== 'ready') { - console.log('state is still ' + item.state + ' ... waiting...') - done = false - break - } - } - - if (done) { - break - } - } - await Promise.all(wait) - console.log('@@ setComplete') - - let hubId = null - let hubAddr = null - - wait = [] - for (let node of this._nodes) { - wait.push((async () => { - const state = await node.ipcClient.requestState() - node.$id = state.id - if (!hubAddr) { - hubId = state.id - hubAddr = state.bindings[0] - } - })()) - } - - await Promise.all(wait) - - for (let node of this._nodes) { - if (node.$id === hubId) { - console.log('hub address:', hubAddr) - } else { - console.log('connect', node.$id, 'to hub') - node.ipcClient.connect(hubAddr) - } - } - - let peerConnectedCount = 0 - for (;;) { - await $sleep(100) - let done = false - for (let node of this._nodes) { - const uh = node.ipcClient.getUnhandled() - if (uh && uh.method === 'peerConnected') { - ++peerConnectedCount - console.log('@@ new peer count', peerConnectedCount, uh.id) - if (peerConnectedCount >= 4) { - done = true - break - } - } - } - if (done) { - break - } - } - - wait = [] - for (let fromNode of this._nodes) { - for (let toNode of this._nodes) { - if (fromNode === toNode) { - continue - } - console.log('message from', fromNode.$id, 'to', toNode.$id) - wait.push((async () => { - const message = 'message # ' + (wait.length + 1) - const result = await fromNode.ipcClient.send({ - toAddress: toNode.$id, - data: message - }) - if (result.data !== 'echo: ' + message) { - throw new Error('unexpected result: ' + JSON.stringify(result)) - } - return result - })()) - } - } - - console.log('@@', await Promise.all(wait)) - - console.log('got all calls') - - this.emit('done') - } -} - -exports.TestSuiteExecutor = TestSuiteExecutor diff --git a/packages/test-suite-executor/lib/index.test.js b/packages/test-suite-executor/lib/index.test.js deleted file mode 100644 index 1d5c205..0000000 --- a/packages/test-suite-executor/lib/index.test.js +++ /dev/null @@ -1,9 +0,0 @@ -const { expect } = require('chai') - -const { TestSuiteExecutor } = require('./index') - -describe('Test Suite Executor Suite', () => { - it('should be a function', () => { - expect(typeof TestSuiteExecutor).equals('function') - }) -}) diff --git a/packages/test-suite-executor/lib/ipc-wrapper.js b/packages/test-suite-executor/lib/ipc-wrapper.js deleted file mode 100644 index 2293a46..0000000 --- a/packages/test-suite-executor/lib/ipc-wrapper.js +++ /dev/null @@ -1,181 +0,0 @@ -const { AsyncClass } = require('@holochain/n3h-common') -const { IpcClient } = require('@holochain/n3h-ipc') - -class IpcWrapper extends AsyncClass { - async init (ipcUri) { - await super.init() - - this._unhandledMessages = [] - - this._genericWait = {} - this._idWait = {} - - this._ipc = await new IpcClient() - this._ipc.on('message', opt => this._handleMessage(opt.name, opt.data)) - await this._ipc.connect(ipcUri) - - this.$pushDestructor(async () => { - await this._ipc.destroy() - this._ipc = null - this._unhandledMessages = null - this._genericWait = null - this._idWait = null - }) - } - - getUnhandled () { - return this._unhandledMessages.shift() - } - - requestState () { - this.$checkDestroyed() - this._ipc.send('json', { - method: 'requestState' - }) - return this._postGenericWait('state') - } - - requestDefaultConfig () { - this.$checkDestroyed() - this._ipc.send('json', { - method: 'requestDefaultConfig' - }) - return this._postGenericWait('defaultConfig') - } - - setConfig (config) { - this.$checkDestroyed() - this._ipc.send('json', { - method: 'setConfig', - config - }) - } - - connect (address) { - this.$checkDestroyed() - this._ipc.send('json', { - method: 'connect', - address - }) - } - - send (data) { - this.$checkDestroyed() - const { id, promise } = this._postIdWait() - this._ipc.send('json', { - method: 'send', - _id: id, - toAddress: data.toAddress, - data: data.data - }) - return promise - } - - // -- private -- // - - _postGenericWait (eventName, timeoutMs) { - timeoutMs || (timeoutMs = 2000) - const innerStack = (new Error('stack')).stack - return new Promise((resolve, reject) => { - try { - const timer = setTimeout(() => { - cleanup() - reject(new Error('timeout: ' + innerStack)) - }, timeoutMs) - const cleanup = () => { - clearTimeout(timer) - } - try { - if (!(eventName in this._genericWait)) { - this._genericWait[eventName] = [] - } - this._genericWait[eventName].push({ - resolve: (...args) => { - cleanup() - resolve(...args) - } - }) - } catch (e) { - cleanup() - reject(e) - } - } catch (e) { - reject(e) - } - }) - } - - _getNextId () { - this._lastId || (this._lastId = Math.random()) - this._lastId += 1 + Math.random() - return this._lastId.toString(36) - } - - _postIdWait (timeoutMs) { - const id = this._getNextId() - timeoutMs || (timeoutMs = 2000) - const innerStack = (new Error('stack')).stack - let promise = new Promise((resolve, reject) => { - try { - const timer = setTimeout(() => { - cleanup() - reject(new Error('timeout: ' + innerStack)) - }, timeoutMs) - const cleanup = () => { - delete this._idWait[id] - clearTimeout(timer) - } - try { - this._idWait[id] = { - resolve: (...args) => { - cleanup() - resolve(...args) - } - } - } catch (e) { - cleanup() - reject(e) - } - } catch (e) { - reject(e) - } - }) - return { id, promise } - } - - async _handleMessage (name, data) { - if (this.$isDestroyed()) { - return - } - if (name !== 'json') { - return - } - - if (data._id && data._id in this._idWait) { - this._idWait[data._id].resolve(data) - return - } - - if (data.method in this._genericWait) { - for (let i of this._genericWait[data.method]) { - i.resolve(data) - } - this._genericWait[data.method] = [] - return - } - - if (data.method === 'handleSend') { - const message = 'echo: ' + data.data - this._ipc.send('json', { - method: 'handleSendResult', - _id: data._id, - data: message - }) - return - } - - this._unhandledMessages.push(data) - } -} - -exports.IpcWrapper = IpcWrapper diff --git a/packages/test-suite-executor/package.json b/packages/test-suite-executor/package.json deleted file mode 100644 index 7b46f27..0000000 --- a/packages/test-suite-executor/package.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "@holochain/test-suite-executor", - "version": "0.0.1", - "description": "integration test suite for exercising a holochain networking/p2p node", - "main": "lib/index.js", - "scripts": { - "lint": "standard --fix 'lib/**/*.js' 'bin/**/*.js'", - "mocha": "mocha lib/**/*.test.js bin/**/*.test.js", - "nyc": "nyc npm run mocha", - "test": "npm run lint && npm run nyc", - "show-coverage": "node -e \"require('opn')('coverage/lcov-report/index.html')\"" - }, - "license": "Apache-2.0", - "devDependencies": { - "chai": "^4.2.0", - "mocha": "^5.2.0", - "nyc": "^12.0.2", - "opn": "^5.4.0", - "sinon": "^7.1.1", - "standard": "^12.0.1" - }, - "dependencies": { - "@holochain/n3h-ipc": "^0.0.1", - "@holochain/n3h-common": "^0.0.1", - "tmp": "0.0.33" - }, - "standard": { - "env": { - "mocha": true - } - }, - "nyc": { - "check-coverage": false, - "per-file": false, - "lines": 80, - "statements": 80, - "functions": 80, - "branches": 80, - "all": true, - "include": [ - "./lib/**/*.js" - ], - "reporter": [ - "lcov", - "text-summary" - ] - } -} diff --git a/packages/tweetlog/README.md b/packages/tweetlog/README.md deleted file mode 100644 index 0d1158f..0000000 --- a/packages/tweetlog/README.md +++ /dev/null @@ -1,111 +0,0 @@ -# tweetlog - -super light-weight logging abstraction - -## Usage - -```javascript -const tweetlog = require('@holochain/tweetlog') -tweetlog.set('e') // set general logging to error only -tweetlog.listen(tweetlog.console) // enable console output - -const log = tweetlog('testlogger') // create a logger -tweetlog.set('t', 'testlogger') // set testlogger output to trace level - -log.t('hello world') -// outputs: "(testlogger) [t] hello world" -``` - -## API - -### Logging levels - -``` -t = trace -d = debug -i = info -w = warn -e = error -``` - -### Getting a logger - -The tweetlog export is a function that takes a tag name and returns a logger object, this object will have 5 methods on it corresponding to the logging levels above. - -```javascript -/** - * @param {string} tag - logs produced with the resulting object will include this tag - * @return {object} the logger object - */ -module.exports = function tweetlog (tag) { ... } -``` - -### Setting the logging level, either globally, or per-tag - -```javascript -/** - * @param {string} level - the single character log level to set - * @param {string} [tag] - the optional logger tag to set - */ -tweetlog.set = function set (level, tag) { ... } -``` - -### Registering a log listener - -```javascript -/** - * @param {function} callback - the listener callback - */ -tweetlog.listen = function listen (callback) { ... } -``` - -callback signature: - -```javascript -/** - * @param {string} level - the single character log level for this message - * @param {string} tag - the logger tag specified with this message - * @param {*} ...items - everything logged by the implementor - */ -function callback (level, tag, ...items) { ... } -``` - -### The provided console listener - -Tweetlog provides a listener that outputs log messages to the javascript console in the form `(tag) [level] `. - -```javascript -tweetlog.listen(tweetlog.console) -``` - -### Clear any registered log listeners or levels - -```javasrcipt -/** - */ -tweetlog.clear = function clear () { ... } -``` - -### Check if a given level and tag would be logged - -This is helpful if generating your log message is resource intensive. - -```javascript -/** - * @param {string} level - the single character log level to check - * @param {string} tag - the logger tag to check - * @return {boolean} - true if it would be logged - */ -tweetlog.should = function should (level, tag) { ... } -``` - -### Check if a level is greater than or equal to another level - -```javascript -/** - * @param {string} a - single character log level - * @param {string} b - single character log level - * @param {boolean} - true if a >= b - */ -tweetlog.gte = function gte (a, b) { ... } -``` diff --git a/packages/tweetlog/package.json b/packages/tweetlog/package.json deleted file mode 100644 index 42c8c24..0000000 --- a/packages/tweetlog/package.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "name": "@holochain/tweetlog", - "version": "0.0.1", - "description": "super light-weight logging abstraction", - "main": "lib/tweetlog.js", - "scripts": { - "lint": "standard --fix 'lib/**/*.js' 'bin/**/*.js'", - "mocha": "mocha lib/**/*.test.js bin/**/*.test.js", - "nyc": "nyc npm run mocha", - "test": "npm run lint && npm run nyc", - "show-coverage": "node -e \"require('opn')('coverage/lcov-report/index.html')\"" - }, - "license": "Apache-2.0", - "devDependencies": { - "chai": "^4.2.0", - "mocha": "^5.2.0", - "nyc": "^12.0.2", - "opn": "^5.4.0", - "sinon": "^7.1.1", - "standard": "^12.0.1" - }, - "dependencies": {}, - "standard": { - "env": { - "mocha": true - } - }, - "nyc": { - "check-coverage": true, - "per-file": false, - "lines": 80, - "statements": 80, - "functions": 80, - "branches": 80, - "all": true, - "include": [ - "./lib/**/*.js" - ], - "reporter": [ - "lcov", - "text-summary" - ] - }, - "generate-docs": { - "tweetlog": "lib/tweetlog.js" - } -}