diff --git a/.travis.yml b/.travis.yml index 36fc1d3..44c2855 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,6 +15,7 @@ before_script: after_success: - yarn run coverage script: + - yarn run lint - yarn run test notifications: slack: diff --git a/README.md b/README.md index 7820202..87a330b 100644 --- a/README.md +++ b/README.md @@ -74,11 +74,14 @@ cd gnarly # install yarn if you haven't already # $ npm i -g yarn -# install lerna -yarn global add lerna +# install workspace dependencies, which includes lerna +yarn install # boostrap the packages within this project (install deps, linking, etc) lerna bootstrap + +# now this command should pass: +yarn run build-ts ``` Now you should be able to run the tests with diff --git a/lerna.json b/lerna.json index c880d35..151d7e0 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,5 @@ { - "lerna": "2.11.0", + "lerna": "3.0.3", "packages": [ "packages/*" ], diff --git a/package-lock.json b/package-lock.json index 9a90c2e..0d46df7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6845,7 +6845,7 @@ "integrity": "sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ==", "dev": true }, - "tslint": { + "tslint": "^5.11.0"": { "version": "5.10.0", "dev": true, "requires": { diff --git a/package.json b/package.json index 134132d..c1180ea 100644 --- a/package.json +++ b/package.json @@ -2,11 +2,13 @@ "private": true, "version": "0.0.4-alpha.1", "scripts": { - "watch-ts": "lerna exec --parallel -- yarn run watch-ts", - "build-ts": "lerna exec --parallel -- yarn run build-ts", - "test": "lerna exec --parallel --stream --sort --scope @xlnt/gnarly-core -- yarn run test", + "watch-ts": "lerna run watch-ts --parallel", + "build-ts": "lerna run build-ts", + "test": "lerna run test --scope @xlnt/gnarly-core", + "lint": "lerna run lint --parallel", + "clean": "lerna clean --yes && lerna exec --parallel -- rm -r ./lib", "coverage": "yarn run coverage:generate && yarn run coverage:submit", - "coverage:generate": "lerna exec --parallel --scope @xlnt/gnarly-core -- yarn run coverage", + "coverage:generate": "lerna run coverage --parallel --scope @xlnt/gnarly-core", "coverage:submit": "lcov-result-merger 'packages/**/lcov.info' | coveralls", "pkg": "lerna run pkg --scope=@xlnt/gnarly-bin", "docker-build": "docker build -t shrugs/gnarly-test:demo .", @@ -14,16 +16,15 @@ "deploy": "yarn run build-ts && yarn run pkg && yarn run docker-build && yarn run docker-push" }, "devDependencies": { - "@types/chai-spies": "^0.0.1", "@types/mocha": "^2.2.48", "@types/node": "^9.4.0", "@types/uuid": "^3.4.3", "coveralls": "^3.0.2", "lcov-result-merger": "^3.1.0", - "lerna": "^2.11.0", + "lerna": "^3.0.3", "nodemon": "^1.14.12", - "ts-node": "^5.0.1", - "tslint": "^5.9.1" + "ts-node": "^7.0.1", + "tslint": "^5.11.0" }, "workspaces": [ "packages/*" diff --git a/packages/gnarly-bin/package.json b/packages/gnarly-bin/package.json index f6ad8fe..c56e320 100644 --- a/packages/gnarly-bin/package.json +++ b/packages/gnarly-bin/package.json @@ -10,12 +10,12 @@ "ts-start": "ts-node --no-cache src/index.ts", "start": "node lib/index.js", "watch": "concurrently -k -p \"[{name}]\" -n \"TypeScript,Node\" -c \"cyan.bold,green.bold\" \"npm run watch-ts\" \"npm run watch-node\"", - "test": "nyc --reporter=text mocha -r ts-node/register -r source-map-support/register --full-trace test/**/*.spec.ts", - "watch-test": " mocha --watch --watch-extensions ts -r ts-node/register test/**/*.spec.ts", + "test": "nyc --reporter=text mocha -r ts-node/register -r source-map-support/register --full-trace 'test/**/*.spec.ts'", + "watch-test": " mocha --watch --watch-extensions ts -r ts-node/register 'test/**/*.spec.ts'", "coverage": "nyc report --reporter=text-lcov > ./lcov.info", "build-ts": "tsc", "watch-ts": "tsc -w", - "tslint": "tslint --project .", + "lint": "tslint --project .", "pkg": "pkg --targets node9-linux-x64,node9-macos-x64 --out-path ./pkg ." }, "pkg": { @@ -35,19 +35,16 @@ "license": "Apache-2.0", "devDependencies": { "@types/chai": "^4.1.4", - "@types/chai-spies": "^1.0.0", "@types/node": "^10.5.7", - "@xlnt/typescript-typings": "^0.6.0", "chai": "^4.1.2", - "chai-spies": "^1.0.0", "mocha": "^5.2.0", "nyc": "^12.0.2", "pkg": "^4.3.1", "rosie": "^2.0.1", "source-map-support": "^0.5.6", - "ts-node": "^6.0.3", - "tslint": "^5.9.1", - "typescript": "^2.8.3" + "ts-node": "^7.0.1", + "tslint": "^5.11.0", + "typescript": "^3.0.1" }, "publishConfig": { "access": "public" diff --git a/packages/gnarly-bin/src/index.ts b/packages/gnarly-bin/src/index.ts index 04293fa..dcb19e7 100644 --- a/packages/gnarly-bin/src/index.ts +++ b/packages/gnarly-bin/src/index.ts @@ -123,8 +123,11 @@ const main = async () => { process.on('SIGINT', gracefulExit) process.on('SIGTERM', gracefulExit) - await gnarly.reset(process.env.GNARLY_RESET === 'true') - await gnarly.shaka(process.env.LATEST_BLOCK_HASH) + const GNARLY_RESET = (process.env.GNARLY_RESET || 'false') === 'true' + const LATEST_BLOCK_HASH = process.env.LATEST_BLOCK_HASH || null + + await gnarly.reset(GNARLY_RESET) + await gnarly.shaka(LATEST_BLOCK_HASH) } process.on('unhandledRejection', (error) => { diff --git a/packages/gnarly-bin/tsconfig.json b/packages/gnarly-bin/tsconfig.json index d8d1906..54d5db3 100644 --- a/packages/gnarly-bin/tsconfig.json +++ b/packages/gnarly-bin/tsconfig.json @@ -1,15 +1,8 @@ { - "extends": "../../tsconfig.json", + "extends": "../tsconfig.build.json", "compilerOptions": { + "rootDir": "src", "outDir": "lib" }, - "include": [ - "src/**/*" - ], - "references": [ - { "path": "../../gnarly-core" }, - { "path": "../../gnarly-reducer-block-meta" }, - { "path": "../../gnarly-reducer-erc721" }, - { "path": "../../gnarly-reducer-events" } - ] + "include": ["src"] } diff --git a/packages/gnarly-core/package.json b/packages/gnarly-core/package.json index faba9f7..9d38fb2 100644 --- a/packages/gnarly-core/package.json +++ b/packages/gnarly-core/package.json @@ -8,12 +8,12 @@ "prepare": "npm run build", "build": "npm run build-ts && npm run tslint", "start": "node lib/index.js", - "test": "nyc --reporter=text mocha -r ts-node/register -r source-map-support/register --full-trace test/**/*.spec.ts", - "watch-test": " mocha --watch --watch-extensions ts -r ts-node/register -r source-map-support/register --full-trace test/**/*.spec.ts", + "test": "TS_NODE_PROJECT=./tsconfig.test.json nyc --reporter=text mocha -r ts-node/register -r source-map-support/register --full-trace 'test/**/*.spec.ts'", + "watch-test": " TS_NODE_PROJECT=./tsconfig.test.json mocha --watch --watch-extensions ts -r ts-node/register -r source-map-support/register --full-trace 'test/**/*.spec.ts'", "coverage": "nyc report --reporter=text-lcov > ./lcov.info", "build-ts": "tsc", "watch-ts": "tsc -w", - "tslint": "tslint --project ." + "lint": "tslint --project ." }, "files": [ "lib" @@ -52,7 +52,6 @@ "@types/lodash.identity": "^3.0.3", "@types/lodash.isplainobject": "^4.0.3", "@types/node": "^10.5.7", - "@xlnt/typescript-typings": "^0.6.0", "bn-chai": "^1.0.1", "chai": "^4.1.2", "chai-spies": "^1.0.0", @@ -61,9 +60,9 @@ "nyc": "^12.0.2", "rosie": "^2.0.1", "source-map-support": "^0.5.6", - "ts-node": "^6.0.3", - "tslint": "^5.9.1", - "typescript": "2.6.1" + "ts-node": "^7.0.1", + "tslint": "^5.11.0", + "typescript": "^3.0.1" }, "publishConfig": { "access": "public" diff --git a/packages/gnarly-core/src/Blockstream.ts b/packages/gnarly-core/src/Blockstream.ts index 58b4d88..2b10e91 100644 --- a/packages/gnarly-core/src/Blockstream.ts +++ b/packages/gnarly-core/src/Blockstream.ts @@ -5,7 +5,6 @@ const debugOnBlockAdd = makeDebug('gnarly-core:blockstream:onBlockAdd') const debugOnBlockInvalidated = makeDebug('gnarly-core:blockstream:onBlockInvalidated') import { - Block as BlockstreamBlock, BlockAndLogStreamer, } from 'ethereumjs-blockstream' import 'isomorphic-fetch' @@ -15,8 +14,6 @@ import uuid = require('uuid') import { IJSONBlock } from './models/Block' import { IJSONLog } from './models/Log' -import Ourbit from './ourbit' - import { timeout, toBN, @@ -42,52 +39,68 @@ class BlockStream { }) constructor ( - private ourbit: Ourbit, - private onBlock: (block: BlockstreamBlock, syncing: boolean) => () => Promise, - private interval: number = 5000, + private reducerKey: string, + private processTransaction: (txId: string, fn: () => Promise, extra: object) => Promise , + private rollbackTransaction: (blockHash: string) => Promise, + private onNewBlock: (block: IJSONBlock, syncing: boolean) => () => Promise < any > , + private blockRetention: number = 100, ) { - + this.streamer = new BlockAndLogStreamer(globalState.api.getBlockByHash, globalState.api.getLogs, { + blockRetention: this.blockRetention, + }) } public start = async (fromBlockHash: string = null) => { - this.streamer = new BlockAndLogStreamer(globalState.api.getBlockByHash, globalState.api.getLogs, { - blockRetention: 100, - }) + let localLatestBlock: IJSONBlock | null = null - this.onBlockAddedSubscriptionToken = this.streamer.subscribeToOnBlockAdded(this.onBlockAdd) - this.onBlockRemovedSubscriptionToken = this.streamer.subscribeToOnBlockRemoved(this.onBlockInvalidated) + // the primary purpose of this function to to extend the historical block reduction + // beyond the blockRetention limit provided to ethereumjs-blockstream + // because we might have stopped tracking blocks for longer than ~100 blocks and need to catch up - let startBlockNumber - if (fromBlockHash === null) { - // if no hash provided, we're starting from HEAD - startBlockNumber = toBN( - (await globalState.api.getLatestBlock()).number, - ) + const remoteLatestBlock = await globalState.api.getLatestBlock() + + if (fromBlockHash !== null) { + // ^ if fromBlockHash is provided, it takes priority + debug('Continuing from blockHash %s', fromBlockHash) + + // so look up the latest block we know about + localLatestBlock = await globalState.api.getBlockByHash(fromBlockHash) + + // need to load that block into the local chain so handlers trigger correctly + // when we defer to the ethereumjs-blockstream reconciliation algorithm where it fetches + // its own historical blocks + this.streamer.reconcileNewBlock(localLatestBlock) } else { - // otherwise get the expected block's number - const startFromBlock = await globalState.api.getBlockByHash(fromBlockHash) - startBlockNumber = toBN(startFromBlock.number).add(toBN(1)) - // ^ +1 because we already know about this block and we want the next + // we are starting from head + debug('Starting from HEAD') + + // ask the remote for the latest "local" block + localLatestBlock = await globalState.api.getLatestBlock() } - debug('Beginning from block %d', startBlockNumber) + const remoteLatestBlockNumber = toBN(remoteLatestBlock.number) + const localLatestBlockNumber = toBN(localLatestBlock.number) - // get the latest block - let latestBlockNumber = toBN( - (await globalState.api.getLatestBlock()).number, - ) + // subscribe to changes in chain + this.onBlockAddedSubscriptionToken = this.streamer.subscribeToOnBlockAdded(this.onBlockAdd) + this.onBlockRemovedSubscriptionToken = this.streamer.subscribeToOnBlockRemoved(this.onBlockInvalidated) + + debug('Local block number: %d. Remote block number: %d', localLatestBlockNumber, remoteLatestBlockNumber) - // if we're not at that block number, start pulling the blocks - // from before until we catch up, then track latest - if (latestBlockNumber.gt(startBlockNumber)) { + let syncUpToNumber = await this.latestRemoteNumberWithRetentionBuffer() + // if we're not at that block number, start pulling the blocks from history + // until we enter the block retention limit + // once we've gotten to the block retention limit, we need to defer to blockstream's chain + // reconciliation algorithm + if (localLatestBlockNumber.lt(syncUpToNumber)) { debugFastForward( 'Starting from %d and continuing to %d', - startBlockNumber.toNumber(), - latestBlockNumber.toNumber(), + localLatestBlockNumber.toNumber(), + remoteLatestBlockNumber.toNumber(), ) this.syncing = true - let i = startBlockNumber.clone() - while (i.lt(latestBlockNumber)) { + let i = localLatestBlockNumber.clone() + while (i.lt(syncUpToNumber)) { // if we're at the top of the queue // wait a bit and then add the thing while (this.pendingTransactions.size >= MAX_QUEUE_LENGTH) { @@ -101,14 +114,15 @@ class BlockStream { const block = await globalState.api.getBlockByNumber(i) debugFastForward( 'block %s (%s)', - block.number, + toBN(block.number).toString(), block.hash, ) - i = i.add(toBN(1)) await this.streamer.reconcileNewBlock(block) + + i = toBN(block.number).add(toBN(1)) // TODO: easy optimization, only check latest block on the last // iteration - latestBlockNumber = toBN((await globalState.api.getLatestBlock()).number) + syncUpToNumber = await this.latestRemoteNumberWithRetentionBuffer() } this.syncing = false @@ -128,7 +142,19 @@ class BlockStream { debug('Done! Exiting...') } - private onBlockAdd = async (block: BlockstreamBlock) => { + public initWithHistoricalBlocks = async (historicalBlocks: IJSONBlock[] = []): Promise => { + // ^ if historicalBlocks provided, reconcile blocks + debug( + 'Initializing history with last historical block %s', + toBN(historicalBlocks[historicalBlocks.length - 1].number), + ) + + for (const block of historicalBlocks) { + await this.streamer.reconcileNewBlock(block) + } + } + + private onBlockAdd = async (block: IJSONBlock) => { const pendingTransaction = async () => { debugOnBlockAdd( 'block %s (%s)', @@ -136,19 +162,21 @@ class BlockStream { block.hash, ) - return this.ourbit.processTransaction( + await this.processTransaction( uuid.v4(), - this.onBlock(block, this.syncing), + this.onNewBlock(block, this.syncing), { blockHash: block.hash, }, ) + + await globalState.store.saveHistoricalBlock(this.reducerKey, this.blockRetention, block) } this.pendingTransactions.add(pendingTransaction) } - private onBlockInvalidated = (block: BlockstreamBlock) => { + private onBlockInvalidated = (block: IJSONBlock) => { const pendingTransaction = async () => { debugOnBlockInvalidated( 'block %s (%s)', @@ -156,7 +184,10 @@ class BlockStream { block.hash, ) - return this.ourbit.rollbackTransaction(block.hash) + // when a block is invalidated, rollback the transaction + await this.rollbackTransaction(block.hash) + // and then delete the historical block + await globalState.store.deleteHistoricalBlock(this.reducerKey, block.hash) } this.pendingTransactions.add(pendingTransaction) @@ -167,6 +198,14 @@ class BlockStream { await this.streamer.reconcileNewBlock(await globalState.api.getLatestBlock()) }) } + + private latestRemoteNumberWithRetentionBuffer = async () => { + return toBN( + (await globalState.api.getLatestBlock()).number, + ).sub(toBN(this.blockRetention - 10)) + // ^ manually import historical blocks until we're within 90 blocks of HEAD + // and then we can use blockstream's reconciliation algorithm + } } export default BlockStream diff --git a/packages/gnarly-core/src/ReducerRunner.ts b/packages/gnarly-core/src/ReducerRunner.ts index 2a55e49..1fef8f4 100644 --- a/packages/gnarly-core/src/ReducerRunner.ts +++ b/packages/gnarly-core/src/ReducerRunner.ts @@ -1,5 +1,6 @@ import makeDebug = require('debug') +import assert = require('assert') import Blockstream from './Blockstream' import { globalState } from './globalstate' import Block, { IJSONBlock } from './models/Block' @@ -14,6 +15,9 @@ import { TypeStorer, } from './typeStore' +// TODO: should be moved to bin +const BLOCK_RETENTION = 100 + export class ReducerRunner { public ourbit: Ourbit public blockstreamer: Blockstream @@ -36,14 +40,17 @@ export class ReducerRunner { ) this.blockstreamer = new Blockstream( - this.ourbit, + this.reducer.config.key, + this.ourbit.processTransaction, + this.ourbit.rollbackTransaction, this.handleNewBlock, + BLOCK_RETENTION, ) } - public run = async (fromBlockHash: string) => { + public run = async (fromBlockHash: string | null) => { await globalState.store.saveReducer(this.reducer.config.key) - let latestBlockHash = null + let latestBlockHash = fromBlockHash switch (this.reducer.config.type) { // idempotent reducers are only called from HEAD @@ -57,29 +64,49 @@ export class ReducerRunner { // we're resuming, so replay from store if possible try { const latestTransaction = await globalState.store.getLatestTransaction(this.reducer.config.key) - if (!latestTransaction) { - throw new Error('No latest transaction available.') - } - latestBlockHash = latestTransaction.blockHash + // load historical chain + const historicalBlocks = await globalState.store.getHistoricalBlocks(this.reducer.config.key) + + if (!latestTransaction || !historicalBlocks || historicalBlocks.length === 0) { + throw new Error('No latest transaction or historical blocks available, skipping resumption.') + } try { + const mostRecentHistoricalBlock = historicalBlocks[historicalBlocks.length - 1] + + assert.equal( + mostRecentHistoricalBlock.hash, + latestTransaction.blockHash, + `We have a latestTransaction ${latestTransaction.id} with blockHash ${latestTransaction.blockHash} + but it doesn't match the most recent historical block ${mostRecentHistoricalBlock.hash}!`, + ) + // let's re-hydrate local state by replaying transactions - this.debug('Attempting to reload state from %s', latestTransaction.id || 'HEAD') + this.debug('Attempting to reload ourbit state from %s', latestTransaction.id || 'HEAD') await this.ourbit.resumeFromTxId(latestTransaction.id) + this.debug('Done reloading ourbit state.') + + this.debug('Attempting to reload blockstream state from %s', latestTransaction.blockHash) + // let's reset the blockstreamer's internal state + await this.blockstreamer.initWithHistoricalBlocks(historicalBlocks) + this.debug('Done reloading blockstream state.') + + latestBlockHash = latestTransaction.blockHash } catch (error) { // we weren't able to replace state, which means something is totally broken this.debug(error) process.exit(1) } } catch (error) { - latestBlockHash = null - this.debug('No latest transaction, so we\'re definitely starting from scratch.') + // there's nothing to replay, so let's mention that and return to default behavior + this.debug(error.message) } } else { - // we reset, so let's start from HEAD - latestBlockHash = fromBlockHash || null + // we specifically reset, so let's mention that this.debug('Explicitely starting from %s', latestBlockHash || 'HEAD') + // and then reset blockstreamer chain + await globalState.store.deleteHistoricalBlocks(this.reducer.config.key) } break } @@ -87,7 +114,9 @@ export class ReducerRunner { throw new Error(`Unexpected ReducerType ${this.reducer.config.type}`) } + // default behavior is to start from HEAD this.debug('Streaming blocks from %s', latestBlockHash || 'HEAD') + // and now ingest blocks from latestBlockHash await this.blockstreamer.start(latestBlockHash) @@ -112,6 +141,7 @@ export class ReducerRunner { private handleNewBlock = (rawBlock: IJSONBlock, syncing: boolean) => async () => { const block = await this.normalizeBlock(rawBlock) + await this.reducer.reduce(this.reducer.state, block, this.context.utils) } diff --git a/packages/gnarly-core/src/models/ExternalTransaction.ts b/packages/gnarly-core/src/models/ExternalTransaction.ts index 74a1941..83eddbf 100644 --- a/packages/gnarly-core/src/models/ExternalTransaction.ts +++ b/packages/gnarly-core/src/models/ExternalTransaction.ts @@ -25,10 +25,6 @@ export interface IJSONExternalTransaction { input: string } -function isJSONExternalTransaction (obj: any): obj is IJSONExternalTransaction { - return 'nonce' in obj -} - export interface IJSONExternalTransactionReceipt { blockHash: string blockNumber: string @@ -44,13 +40,19 @@ export interface IJSONExternalTransactionReceipt { transactionIndex: string } -function isJSONExternalTransactionReceipt (obj: any): obj is IJSONExternalTransactionReceipt { - return 'status' in obj -} - export type IJSONExternalTransactionInfo = IJSONExternalTransaction | IJSONExternalTransactionReceipt -export const isExternalTransaction = (obj: any): obj is ExternalTransaction => 'external' in obj +// is JSONExternalTransaction if it has a nonce +const isJSONExternalTransaction = (obj: any): obj is IJSONExternalTransaction => + 'nonce' in obj + + // is a Transaction Receipt if it has a status +const isJSONExternalTransactionReceipt = (obj: any): obj is IJSONExternalTransactionReceipt => + 'status' in obj + +// is an external transaction (vs internal transaction) if it has external property that is truthy +export const isExternalTransaction = (obj: any): obj is ExternalTransaction => + 'external' in obj && obj.external export default class ExternalTransaction extends Transaction { public external: boolean = true @@ -97,8 +99,7 @@ export default class ExternalTransaction extends Transaction { traces = await globalState.api.traceTransaction(this.hash) this.internalTransactions = traces.map((itx) => new InternalTransaction(this, itx)) } catch (error) { - // @TODO(shrugs) - should this throw? - debug('trace_replayTransaction not working, ignoring %s - %s', error.stack, traces) + throw new Error(`IngestAPI#traceTransaction not working: ${error.stack}`) } } @@ -122,7 +123,7 @@ export default class ExternalTransaction extends Transaction { this.logs = tx.logs.map((l) => new Log(this, l)) this.status = toBN(tx.status) } else { - throw new Error(`Unexpected type ${tx} in Transaction#setSelf()`) + throw new Error(`Unexpected type in Transaction#setSelf(): ${JSON.stringify(tx)}`) } } } diff --git a/packages/gnarly-core/src/models/InternalTransaction.ts b/packages/gnarly-core/src/models/InternalTransaction.ts index d2186e3..8997a71 100644 --- a/packages/gnarly-core/src/models/InternalTransaction.ts +++ b/packages/gnarly-core/src/models/InternalTransaction.ts @@ -85,7 +85,7 @@ export default class InternalTransaction extends Transaction { this.traceAddress = itx.traceAddress this.transactionHash = tx.hash - // this.transactionPosition = tx.trans + // this.transactionPosition = tx.transactionPosition this.type = itx.type if (itx.error !== undefined) { diff --git a/packages/gnarly-core/src/stores/IPersistInterface.ts b/packages/gnarly-core/src/stores/IPersistInterface.ts new file mode 100644 index 0000000..bbcbf3b --- /dev/null +++ b/packages/gnarly-core/src/stores/IPersistInterface.ts @@ -0,0 +1,30 @@ +import { IJSONBlock } from '../models/Block' +import { ITransaction } from '../ourbit/types' + +export interface IPersistInterface { + // @TODO - how do you get typescript to stop complaining about AsyncIterator symbols? + + // reducer CRUD + saveReducer (reducerKey: string): Promise + deleteReducer (reducerKey: string): Promise + + // blockstream CRUD + getHistoricalBlocks (reducerKey: string): Promise + saveHistoricalBlock (reducerKey: string, blockRetention: number, block: IJSONBlock): Promise + deleteHistoricalBlock (reducerKey: string, blockHash: string): Promise + deleteHistoricalBlocks (reducerKey: string): Promise + + // transaction CRUD + getAllTransactionsTo (reducerKey: string, toTxId: null | string): Promise + getLatestTransaction (reducerKey: string): Promise + deleteTransaction (reducerKey: string, tx: ITransaction): Promise + saveTransaction (reducerKey: string, tx: ITransaction): Promise + getTransaction (reducerKey: string, txId: string): Promise + getTransactionByBlockHash (reducerKey: string, blockHash: string): Promise + + // event log CRUD actions + + // setup + setup (): Promise + setdown (): Promise +} diff --git a/packages/gnarly-core/src/stores/index.ts b/packages/gnarly-core/src/stores/index.ts index ef0c15a..e5443cb 100644 --- a/packages/gnarly-core/src/stores/index.ts +++ b/packages/gnarly-core/src/stores/index.ts @@ -1,26 +1,8 @@ -import { ITransaction } from '../ourbit/types' - -export interface IPersistInterface { - - saveReducer (reducerKey: string): Promise - deleteReducer (reducerKey: string): Promise - // transaction storage - // @TODO - how do you get typescript to stop complaining about AsyncIterator symbols? - getAllTransactionsTo (reducerKey: string, toTxId: null | string): Promise - getLatestTransaction (reducerKey: string): Promise - deleteTransaction (reducerKey: string, tx: ITransaction): Promise - saveTransaction (reducerKey: string, tx: ITransaction): Promise - getTransaction (reducerKey: string, txId: string): Promise - getTransactionByBlockHash (reducerKey: string, blockHash: string): Promise - - // event log CRUD actions - - // setup - setup (): Promise - setdown (): Promise -} - export { default as SequelizePersistInterface, makeSequelizeModels, } from './sequelize' + +export { + IPersistInterface, +} from './IPersistInterface' diff --git a/packages/gnarly-core/src/stores/sequelize.ts b/packages/gnarly-core/src/stores/sequelize.ts index c5210f9..2b66252 100644 --- a/packages/gnarly-core/src/stores/sequelize.ts +++ b/packages/gnarly-core/src/stores/sequelize.ts @@ -2,10 +2,12 @@ import identity = require('lodash.identity') const plain = true +import { IJSONBlock } from '../models/Block' import { ITransaction, } from '../ourbit/types' import { IPersistInterface } from '../stores' +import { toBN } from '../utils' export const makeSequelizeModels = ( Sequelize: any, @@ -50,6 +52,26 @@ export const makeSequelizeModels = ( ], }) + // we explicitely don't save all of the fields of block, even though typescript assumes we do + // if there's every a property that ethereumjs-blockstream expects that we don't store, stuff will break + const HistoricalBlock = sequelize.define('historicalblock', { + id: { type: DataTypes.INTEGER, primaryKey: true, autoIncrement: true }, + hash: { type: DataTypes.STRING }, + number: { type: DataTypes.STRING }, + numberDecimal: { type: DataTypes.DECIMAL(76, 0) }, + parentHash: { type: DataTypes.STRING }, + }, { + indexes: [ + { fields: ['hash'] }, + { fields: ['numberDecimal'] }, + ], + }) + + // each reducer has many historical blocks + Reducer.HistoricalBlocks = Reducer.hasMany(HistoricalBlock) + // each historical block belongs to a reducer + HistoricalBlock.Reducer = HistoricalBlock.belongsTo(Reducer) + // a reducer has many transactions Reducer.Transactions = Reducer.hasMany(Transaction) // a transaction belongs to a reducer @@ -69,6 +91,7 @@ export const makeSequelizeModels = ( return { Reducer, + HistoricalBlock, Transaction, Patch, Reason, @@ -105,6 +128,7 @@ async function* batch ( class SequelizePersistInterface implements IPersistInterface { private Reducer + private HistoricalBlock private Transaction private Patch private Reason @@ -112,12 +136,11 @@ class SequelizePersistInterface implements IPersistInterface { constructor ( private Sequelize: any, - private sequelize: any, + sequelize: any, ) { - const { DataTypes } = Sequelize - const { Reducer, + HistoricalBlock, Transaction, Patch, Operation, @@ -128,6 +151,7 @@ class SequelizePersistInterface implements IPersistInterface { ) this.Reducer = Reducer + this.HistoricalBlock = HistoricalBlock this.Transaction = Transaction this.Patch = Patch this.Operation = Operation @@ -140,6 +164,7 @@ class SequelizePersistInterface implements IPersistInterface { await this.Patch.sync() await this.Operation.sync() await this.Reason.sync() + await this.HistoricalBlock.sync() } public setdown = async () => { @@ -148,6 +173,7 @@ class SequelizePersistInterface implements IPersistInterface { await this.Patch.drop({ cascade: true }) await this.Transaction.drop({ cascade: true }) await this.Reducer.drop({ cascade: true }) + await this.HistoricalBlock.drop({ cascade: true }) } public saveReducer = async (reducerKey: string): Promise => { @@ -160,6 +186,74 @@ class SequelizePersistInterface implements IPersistInterface { }) } + public getHistoricalBlocks = async (reducerKey: string): Promise => { + const blocks = await this.HistoricalBlock.findAll({ + include: [{ + model: this.Reducer, + where: { id: { [this.Sequelize.Op.eq]: reducerKey } }, + }], + order: [['numberDecimal', 'ASC']], + }) + + return blocks.map((b) => b.get({ plain })) + } + + public saveHistoricalBlock = async ( + reducerKey: string, + blockRetention: number, + block: IJSONBlock, + ): Promise => { + try { + const blockNum = toBN(block.number) + + // TODO: needed optimization to reduce calls to DB + await this.HistoricalBlock.create({ + reducerId: reducerKey, + hash: block.hash, + number: block.number, + numberDecimal: blockNum.toString(), + parentHash: block.parentHash, + }) + + // remove blocks that are further away than the block retention limit + await this.HistoricalBlock.destroy({ + where: { + reducerId: { [this.Sequelize.Op.eq]: reducerKey }, + numberDecimal: { [this.Sequelize.Op.lte]: blockNum.sub(toBN(blockRetention)).toString() }, + }, + }) + + } catch (error) { + throw new Error(`Was not able to save historical block + ${JSON.stringify(block)} in reducer ${reducerKey}. ${error.stack}`) + } + } + + public deleteHistoricalBlock = async (reducerKey: string, blockHash: string): Promise => { + try { + await this.HistoricalBlock.destroy({ + where: { + reducerId: { [this.Sequelize.Op.eq]: reducerKey }, + hash: { [this.Sequelize.Op.eq]: blockHash }, + }, + }) + } catch (error) { + throw new Error(`Was not able to delete historical block ${blockHash} in reducer ${reducerKey}. ${error.stack}`) + } + } + + public deleteHistoricalBlocks = async (reducerKey: string): Promise => { + try { + await this.HistoricalBlock.destroy({ + where: { + reducerId: { [this.Sequelize.Op.eq]: reducerKey }, + }, + }) + } catch (error) { + throw new Error(`Was not able to delete historical blocks in reducer ${reducerKey}. ${error.stack}`) + } + } + public getLatestTransaction = async (reducerKey: string): Promise => { try { return (await this.Transaction.findOne({ diff --git a/packages/gnarly-core/src/utils.ts b/packages/gnarly-core/src/utils.ts index d09c798..27b33b1 100644 --- a/packages/gnarly-core/src/utils.ts +++ b/packages/gnarly-core/src/utils.ts @@ -37,9 +37,8 @@ export const parsePath = (path: string): IPathThing => { export const toBN = (v: string | number | BN): BN => numberToBN(v) -export const forEach = async (iterable, mapper, opts = { concurrency: 10 }) => { - return pMap(iterable, mapper, opts) -} +export const forEach = async (iterable, mapper, opts = { concurrency: 10 }) => + pMap(iterable, mapper, opts) export const addressesEqual = (left: string, right: string): boolean => { return left && right && left.toLowerCase() === right.toLowerCase() @@ -71,7 +70,7 @@ export const getMethodId = (input: string) => input.substr(0, 10) export const toHex = (num: BN) => `0x${num.toString(16)}` -export const timeout = async (ms: number = 1000) => +export const timeout = async (ms: number = 0) => new Promise((resolve) => setTimeout(resolve, ms)) diff --git a/packages/gnarly-core/test/Blockstream.spec.ts b/packages/gnarly-core/test/Blockstream.spec.ts new file mode 100644 index 0000000..64c0e87 --- /dev/null +++ b/packages/gnarly-core/test/Blockstream.spec.ts @@ -0,0 +1,279 @@ +import chai = require('chai') +import 'mocha' + +import Blockstream from '../src/Blockstream' +import { globalState } from '../src/globalstate' +import { IJSONBlock } from '../src/models/Block' +import { forEach, timeout, toBN, toHex } from '../src/utils' + +import IJSONBlockFactory from './factories/IJSONBlockFactory' +import MockIngestApi from './mocks/MockIngestApi' +import MockPersistInterface from './mocks/MockPersistInterface' + +const blockAfter = (block: IJSONBlock, fork: number = 1) => IJSONBlockFactory.build({ + hash: toHex(toBN(block.hash).add(toBN(1 + 10 * fork))), + number: toHex(toBN(block.number).add(toBN(1))), + parentHash: block.hash, + nonce: toHex(toBN(block.hash).add(toBN(1 + 10 * fork))), +}) + +const genesis = () => [IJSONBlockFactory.build({ + hash: '0x1', + number: '0x1', + parentHash: '0x0', + nonce: '0x1', +})] + +const buildChain = (from: IJSONBlock[], len: number = 10, fork: number = 1) => { + const chain = [...from] + for (let i = 0; i < len; i++) { + chain.push(blockAfter(chain[chain.length - 1], fork)) + } + return chain +} + +const RETENTION = 20 +const MOCK_REDUCER_KEY = 'test' +const WAIT_FOR_HANDLERS = 100 // wait 100ms for handlers to be called + +const should = chai + .use(require('chai-spies')) + .should() + +const bootstrapHistoricalBlocks = async (reducerKey: string, blocks, store: MockPersistInterface, bs: Blockstream) => { + await forEach(blocks, async (block) => store.saveHistoricalBlock(reducerKey, 100, block), { concurrency: 1 }) + await bs.initWithHistoricalBlocks(blocks) +} + +let realChain = [] as IJSONBlock[] +describe('Blockstream', function () { + beforeEach(async function () { + + this.processTransaction = chai.spy(async function (txId: string, fn: () => Promise, extra: object) { + await fn() + }) + + this.rollbackTransaction = chai.spy(async function (blockHash: string) { + return + }) + + this.onNewBlock = chai.spy(function (block: IJSONBlock, syncing: boolean) { + return function () { + // + } + }) + + this.api = new MockIngestApi() + this.store = new MockPersistInterface() + globalState.setApi(this.api) + globalState.setStore(this.store) + + chai.spy.on(this.api, 'getLatestBlock', function () { + return realChain[realChain.length - 1] + }) + chai.spy.on(this.api, 'getBlockByHash', function (hash) { + return realChain.find((b) => b.hash === hash) + }) + chai.spy.on(this.api, 'getBlockByNumber', function (num) { + return realChain.find((b) => b.number === toHex(num)) + }) + + this.bs = new Blockstream( + MOCK_REDUCER_KEY, + this.processTransaction, + this.rollbackTransaction, + this.onNewBlock, + RETENTION, + ) + + this.onBlockAdd = chai.spy.on(this.bs, 'onBlockAdd') + this.onBlockInvalidated = chai.spy.on(this.bs, 'onBlockInvalidated') + }) + + afterEach(async function () { + chai.spy.restore() + }) + + context('instantiation', function () { + it('can be constructed', async function () { + const bs = new Blockstream( + MOCK_REDUCER_KEY, + this.processTransaction, + this.rollbackTransaction, + this.onNewBlock, + 1, + ) + should.exist(bs) + }) + + it('handles default args', async function () { + const bs = new Blockstream( + MOCK_REDUCER_KEY, + this.processTransaction, + this.rollbackTransaction, + this.onNewBlock, + ) + should.exist(bs) + }) + }) + + context('without historical blocks', function () { + + beforeEach(async function () { + realChain = buildChain(genesis(), 8) + + await this.bs.start() + await this.api.forceSendBlock() + await timeout(WAIT_FOR_HANDLERS) + }) + + it('should start from head and only add the first block', async function () { + await timeout(WAIT_FOR_HANDLERS) + await this.bs.stop() + + this.onBlockAdd.should.have.been.called.exactly(1) + this.onBlockInvalidated.should.not.have.been.called() + this.processTransaction.should.have.been.called.exactly(1) + this.rollbackTransaction.should.not.have.been.called() + this.onNewBlock.should.have.been.called.exactly(1) + }) + + it('should add new blocks when presented', async function () { + realChain = buildChain(realChain, 2) + const newBlocks = realChain.slice(-2) + + await this.api.forceSendBlock() + await timeout(WAIT_FOR_HANDLERS) + await this.bs.stop() + + newBlocks.forEach((block) => + this.onNewBlock.should.have.been.called.with(block), + ) + }) + + it('should invalidate forked blocks', async function () { + const shortFork = buildChain(realChain, 2, 1) + const invalidBlocks = shortFork.slice(-2) + const validChain = buildChain(realChain, 3, 2) + const validBlocks = validChain.slice(-3) + + realChain = shortFork + await this.api.forceSendBlock() + await timeout(WAIT_FOR_HANDLERS) + + invalidBlocks.forEach((block) => + this.onBlockAdd.should.have.been.called.with(block), + ) + + realChain = validChain + await this.api.forceSendBlock() + await timeout(WAIT_FOR_HANDLERS) + await this.bs.stop() + + invalidBlocks.forEach((block) => + this.onBlockInvalidated.should.have.been.called.with(block), + ) + validBlocks.forEach((block) => { + this.onBlockAdd.should.have.been.called.with(block) + this.onNewBlock.should.have.been.called.with(block) + }) + }) + }) + + context('with historical blocks', function () { + it('should init with historical blocks and not call any handlers', async function () { + realChain = buildChain(genesis(), 8) + await bootstrapHistoricalBlocks(MOCK_REDUCER_KEY, realChain, this.store, this.bs) + + this.onBlockAdd.should.not.have.been.called() + this.onBlockInvalidated.should.not.have.been.called() + this.processTransaction.should.not.have.been.called() + this.rollbackTransaction.should.not.have.been.called() + this.onNewBlock.should.not.have.been.called() + }) + + context('when presented with a future block within retention', function () { + beforeEach(async function () { + this.localChain = buildChain(genesis(), 7) // 8 blocks long + this.remoteChain = buildChain(this.localChain, 12) // 20 blocks long + this.newBlocks = this.remoteChain.slice(-12) + realChain = this.localChain + + await bootstrapHistoricalBlocks(MOCK_REDUCER_KEY, realChain, this.store, this.bs) + // now set the real chain to the remote chain + realChain = this.remoteChain + await this.bs.start(this.localChain[this.localChain.length - 1].hash) // from HEAD + await this.api.forceSendBlock() + await timeout(WAIT_FOR_HANDLERS) + }) + + it('should fast forward and trigger add handlers', async function () { + await this.bs.stop() + this.newBlocks.forEach((block) => { + this.onBlockAdd.should.have.been.called.with(block) + this.onNewBlock.should.have.been.called.with(block) + }) + }) + + it('should not have invalided any blocks', async function () { + await this.bs.stop() + this.onBlockInvalidated.should.not.have.been.called() + }) + }) + + context('when presented with a future block beyond retention', function () { + beforeEach(async function () { + realChain = buildChain(genesis(), 8) + await bootstrapHistoricalBlocks(MOCK_REDUCER_KEY, realChain, this.store, this.bs) + + const lastLocalBlock = realChain[realChain.length - 1] + const remoteLength = RETENTION + 10 // 10 blocks past retention limit + this.remoteChain = buildChain(realChain, remoteLength) + this.newBlocks = this.remoteChain.slice(-1 * remoteLength) + + realChain = this.remoteChain + await this.bs.start(lastLocalBlock.hash) // start from the local HEAD + + await this.api.forceSendBlock() + await timeout(WAIT_FOR_HANDLERS) + }) + + it('should fast forward manually and then defer to blockstream while triggering add handlers', async function () { + this.newBlocks.forEach((block) => { + this.onBlockAdd.should.have.been.called.with(block) + this.onNewBlock.should.have.been.called.with(block) + }) + }) + }) + + context('when presentend with a short lived fork', function () { + beforeEach(async function () { + const accurateChain = buildChain(genesis(), 7) // 8 blocks long + const shortLivedFork = buildChain(accurateChain, 2, 1) // 10 blocks long + this.invalidBlocks = shortLivedFork.slice(-2) + realChain = shortLivedFork + + await bootstrapHistoricalBlocks(MOCK_REDUCER_KEY, realChain, this.store, this.bs) + // tell blockstreamer that the last two blocks it saw were actually invalid by giving it a new longer chain + await this.bs.start() + const newChain = buildChain(accurateChain, 3, 2) // 11 blocks long + this.validBlocks = newChain.slice(-3) + realChain = newChain + await this.api.forceSendBlock() + await timeout(WAIT_FOR_HANDLERS) + }) + + it('calls rollbackTransaction with the offending blocks', async function () { + await this.bs.stop() + + this.onBlockInvalidated.should.have.been.called() + this.invalidBlocks.forEach((block) => + this.onBlockInvalidated.should.have.been.called.with(block), + ) + this.validBlocks.forEach((block) => + this.onBlockAdd.should.have.been.called.with(block), + ) + }) + }) + }) +}) diff --git a/packages/gnarly-core/test/exports.spec.ts b/packages/gnarly-core/test/exports.spec.ts index 4634042..22201c3 100644 --- a/packages/gnarly-core/test/exports.spec.ts +++ b/packages/gnarly-core/test/exports.spec.ts @@ -24,6 +24,6 @@ describe('gnarly-core exports', function () { it('getLogs works', async function () { const logs = await getLogs({}) - logs.length.should.eq(NUM_LOGS) + logs.length.should.equal(NUM_LOGS) }) }) diff --git a/packages/gnarly-core/test/factories/IJSONInternalTransactionFactory.ts b/packages/gnarly-core/test/factories/IJSONInternalTransactionFactory.ts index adf16f3..dbbb5cd 100644 --- a/packages/gnarly-core/test/factories/IJSONInternalTransactionFactory.ts +++ b/packages/gnarly-core/test/factories/IJSONInternalTransactionFactory.ts @@ -17,5 +17,5 @@ export default new Factory() subtraces: () => 0, traceAddress: () => [], type: 'CALL', - error: null, + error: undefined, }) diff --git a/packages/gnarly-core/test/globalstate.spec.ts b/packages/gnarly-core/test/globalstate.spec.ts index 4b4fce2..2fbc8b2 100644 --- a/packages/gnarly-core/test/globalstate.spec.ts +++ b/packages/gnarly-core/test/globalstate.spec.ts @@ -30,7 +30,7 @@ describe('globalstate', function () { it('can set/get api', async function () { this.globals.setApi(this.api) - this.globals.api.should.eq(this.api) + this.globals.api.should.equal(this.api) }) }) @@ -41,7 +41,7 @@ describe('globalstate', function () { it('can set/get store', async function () { this.globals.setStore(this.store) - this.globals.store.should.eq(this.store) + this.globals.store.should.equal(this.store) }) }) @@ -50,7 +50,7 @@ describe('globalstate', function () { it('can add an abi', async function () { this.globals.addABI(MOCK_ADDRESS, erc20Abi) - this.globals.abis[MOCK_ADDRESS].length.should.eq(erc20Abi.length) + this.globals.abis[MOCK_ADDRESS].length.should.equal(erc20Abi.length) }) }) @@ -71,7 +71,7 @@ describe('globalstate', function () { it('can getABI()', async function () { const abiSet = this.globals.getABI(MOCK_ADDRESS) - abiSet.length.should.eq(erc20Abi.length) + abiSet.length.should.equal(erc20Abi.length) }) it('should have enhanced the abi', async function () { @@ -82,7 +82,7 @@ describe('globalstate', function () { it('can getMethod()', async function () { const method = this.globals.getMethod(MOCK_ADDRESS, TRANSFER_METHOD_ID) - method.shortId.should.eq(TRANSFER_METHOD_ID) + method.shortId.should.equal(TRANSFER_METHOD_ID) }) }) }) @@ -97,7 +97,7 @@ describe('globalstate', function () { it('returns empty array', async function () { const logs = await this.globals.getLogs({}) - logs.length.should.eq(0) + logs.length.should.equal(0) }) }) @@ -110,7 +110,7 @@ describe('globalstate', function () { it('can getLogs()', async function () { const logs = await this.globals.getLogs({}) - logs.length.should.eq(NUM_LOGS) + logs.length.should.equal(NUM_LOGS) logs.map((l) => l.should.be.instanceof(Log)) }) }) diff --git a/packages/gnarly-core/test/mocks/MockIngestApi.ts b/packages/gnarly-core/test/mocks/MockIngestApi.ts index 45e3b42..01604c6 100644 --- a/packages/gnarly-core/test/mocks/MockIngestApi.ts +++ b/packages/gnarly-core/test/mocks/MockIngestApi.ts @@ -54,6 +54,10 @@ export default class MockIngestApi implements IIngestApi { return this.decompose } + public forceSendBlock = (block: IJSONBlock) => { + this.cb() + } + public decompose = () => { // } diff --git a/packages/gnarly-core/test/mocks/MockPersistInterface.ts b/packages/gnarly-core/test/mocks/MockPersistInterface.ts index 32eec9f..93b81cc 100644 --- a/packages/gnarly-core/test/mocks/MockPersistInterface.ts +++ b/packages/gnarly-core/test/mocks/MockPersistInterface.ts @@ -1,4 +1,5 @@ import _ = require('lodash') +import { IJSONBlock } from '../../src/models/Block' import { ITransaction, } from '../../src/ourbit' @@ -12,10 +13,11 @@ async function* iter ( } } -class MockPersistInterface implements IPersistInterface { +export default class MockPersistInterface implements IPersistInterface { private reducers: any[] = [] private transactions: ITransaction[] = [] + private historicalBlocks: { [_: string]: IJSONBlock[] } = {} public setup = async (reset: boolean = false) => { // nothing to be done @@ -36,6 +38,32 @@ class MockPersistInterface implements IPersistInterface { return } + public getHistoricalBlocks = async (reducerKey: string): Promise => { + return (this.historicalBlocks[reducerKey] || []) + } + + public saveHistoricalBlock = async ( + reducerKey: string, + blockRetention: number, + block: IJSONBlock, + ): Promise => { + if (!this.historicalBlocks[reducerKey]) { + this.historicalBlocks[reducerKey] = [] + } + + this.historicalBlocks[reducerKey].push(block) + } + + public deleteHistoricalBlock = async (reducerKey: string, blockHash: string): Promise => { + this.historicalBlocks[reducerKey] = this.historicalBlocks[reducerKey].filter((b) => + b.hash !== blockHash, + ) + } + + public deleteHistoricalBlocks = async (reducerKey: string): Promise => { + this.historicalBlocks[reducerKey] = [] + } + public async getAllTransactionsTo (reducerKey: string, toTxId: null | string): Promise { return iter([this.transactions]) } @@ -67,5 +95,3 @@ class MockPersistInterface implements IPersistInterface { return _.find(this.transactions, (t) => t.blockHash === blockHash) } } - -export default MockPersistInterface diff --git a/packages/gnarly-core/test/models/Models.spec.ts b/packages/gnarly-core/test/models/Models.spec.ts index 1528586..92dc06f 100644 --- a/packages/gnarly-core/test/models/Models.spec.ts +++ b/packages/gnarly-core/test/models/Models.spec.ts @@ -4,13 +4,18 @@ import 'mocha' import { globalState } from '../../src/globalstate' import Block from '../../src/models/Block' -import ExternalTransaction from '../../src/models/ExternalTransaction' +import ExternalTransaction, { + IJSONExternalTransaction, + isExternalTransaction, +} from '../../src/models/ExternalTransaction' +import InternalTransaction from '../../src/models/InternalTransaction' import Log from '../../src/models/Log' import { toBN } from '../../src/utils' import erc20Abi from '../data/erc20Abi' import IJSONBlockFactory from '../factories/IJSONBlockFactory' import IJSONExternalTransactionFactory from '../factories/IJSONExternalTransactionFactory' +import IJSONInternalTransactionFactory from '../factories/IJSONInternalTransactionFactory' import IJSONLogFactory from '../factories/IJSONLogFactory' import MockIngestApi from '../mocks/MockIngestApi' import { expectThrow } from '../utils' @@ -135,15 +140,73 @@ describe('Models', function () { etx.internalTransactions.length.should.equal(NUM_INTERNAL_TX) }) + it('throws for improperly formatted info', async function () { + const badData: IJSONExternalTransaction = {} as IJSONExternalTransaction + const fn = () => new ExternalTransaction(this.block, badData) + fn.should.throw() + }) + context('without tracing', function () { + beforeEach(async function () { + chai.spy.on(globalState.api, 'traceTransaction', () => { + throw new Error() + }) + }) + + afterEach(async function () { + chai.spy.restore() + }) + it('swallows error', async function () { const etxData = IJSONExternalTransactionFactory.build() const etx = new ExternalTransaction(this.block, etxData) - await etx.getInternalTransactions() + + await expectThrow(etx.getInternalTransactions()) + }) + }) + + context('isExternalTransaction()', function () { + it('can identify an internal and external transaction', async function () { + const etxData = IJSONExternalTransactionFactory.build() + const etx = new ExternalTransaction(this.block, etxData) + + const itxData = IJSONInternalTransactionFactory.build() + const itx = new InternalTransaction(etx, itxData) + + isExternalTransaction(etx).should.equal(true) + isExternalTransaction(itx).should.equal(false) }) }) }) + describe('InternalTransaction', function () { + const TEST_ERROR = '0x1' + const TEST_OUTPUT = '0x1' + const TEST_GAS_USED = '0x1' + + beforeEach(async function () { + this.etxData = IJSONExternalTransactionFactory.build() + this.etx = new ExternalTransaction(this.block, this.etxData) + }) + // mostly tested as a side effect of the other tests + it('should set result if error not available', async function () { + const itxData = IJSONInternalTransactionFactory.build({ error: undefined, result: { + output: TEST_OUTPUT, + gasUsed: '0x1', + } }) + const itx = new InternalTransaction(this.etx, itxData) + itx.result.output.should.equal(TEST_OUTPUT) + itx.result.gasUsed.should.eq.BN(toBN(TEST_GAS_USED)) + }) + + it('should set error if available', async function () { + const itxData = IJSONInternalTransactionFactory.build({ error: TEST_ERROR }) + const itx = new InternalTransaction(this.etx, itxData) + should.not.exist(itx.result) + itx.error.should.equal(TEST_ERROR) + }) + }) + describe('Log', function () { const bnFields = [ 'logIndex', @@ -188,6 +251,21 @@ describe('Models', function () { log.parse().should.equal(false) }) + it('handles invalid log', async function () { + globalState.addABI(MOCK_ADDRESS, erc20Abi) + const logData = IJSONLogFactory.build({ + address: MOCK_ADDRESS, + topics: [ + TRANSFER_EVENT_SIGNATURE, + '0xno', + '0xno', + ], + data: '0x0', + }) + const log = new Log(this.etx, logData) + log.parse().should.equal(false) + }) + it('should be able to parse valid log for abi item', async function () { globalState.addABI(MOCK_ADDRESS, erc20Abi) const logData = IJSONLogFactory.build({ diff --git a/packages/gnarly-core/test/utils.spec.ts b/packages/gnarly-core/test/utils.spec.ts index 3001dc9..2d00e3b 100644 --- a/packages/gnarly-core/test/utils.spec.ts +++ b/packages/gnarly-core/test/utils.spec.ts @@ -1,5 +1,4 @@ import chai = require('chai') -import spies = require('chai-spies') import 'mocha' import uuid = require('uuid') @@ -7,9 +6,11 @@ import { IABIItemInput } from '../src' import { IOperation } from '../src/ourbit' import * as utils from '../src/utils' +import { expectThrow } from './utils' -chai.use(spies) -const should = chai.should() +const should = chai + .use(require('chai-spies')) + .should() const TRANSFER_ABI: IABIItemInput = { anonymous: false, @@ -47,14 +48,14 @@ describe('utils', function () { context('addressesEqual', function () { it('should work on mixed case addresses', async function () { - utils.addressesEqual('0x1', '0x1').should.eq(true) - utils.addressesEqual('0xA', '0xA').should.eq(true) - utils.addressesEqual('0xA', '0xa').should.eq(true) - utils.addressesEqual('0xa', '0xA').should.eq(true) + utils.addressesEqual('0x1', '0x1').should.equal(true) + utils.addressesEqual('0xA', '0xA').should.equal(true) + utils.addressesEqual('0xA', '0xa').should.equal(true) + utils.addressesEqual('0xa', '0xA').should.equal(true) }) it('should detect non equal addresses', async function () { - utils.addressesEqual('0x1', '0x2').should.eq(false) + utils.addressesEqual('0x1', '0x2').should.equal(false) }) }) @@ -65,9 +66,9 @@ describe('utils', function () { const longest = opts[opts.length - 1] * 40 const mapper = async (i) => await utils.timeout(i * 40) const now = +(new Date()) - await utils.forEach(opts, mapper, { concurrency: opts.length }) + await utils.forEach(opts, mapper) const diff = (+(new Date()) - now) - diff.should.be.gte(longest).and.lte(longest * 1.1) + diff.should.be.at.least(longest).and.at.most(longest * 1.2) }) it('should iterate promises with concurrency 1', async function () { @@ -76,26 +77,35 @@ describe('utils', function () { const now = +(new Date()) await utils.forEach(opts, mapper, { concurrency: 1 }) const diff = (+(new Date()) - now) - diff.should.be.gte(total).and.lte(total * 1.1) + diff.should.be.at.least(total).and.at.most(total * 1.2) + }) + + it('should throw if arguments are invalid', async function () { + await expectThrow(utils.forEach(undefined, undefined, undefined)) }) }) context('timeout', function () { const TIMEOUT = 100 + + it('should have default, of 0', async function () { + await utils.timeout() + }) + it('should work', async function () { const now = +(new Date()) await utils.timeout(TIMEOUT) const diff = (+(new Date()) - now) - diff.should.be.gte(TIMEOUT).and.lte(TIMEOUT * 1.1) // 10% error bounds + diff.should.be.at.least(TIMEOUT).and.at.most(TIMEOUT * 1.2) }) }) context('enhanceAbiItem', function () { it('should produce name, sig, shortId', async function () { const enhanced = utils.enhanceAbiItem(TRANSFER_ABI) - enhanced.fullName.should.eq('Transfer(address,address,uint256)') - enhanced.signature.should.eq('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef') - enhanced.shortId.should.eq('0xddf252ad') + enhanced.fullName.should.equal('Transfer(address,address,uint256)') + enhanced.signature.should.equal('0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef') + enhanced.shortId.should.equal('0xddf252ad') // ^^ https://www.4byte.directory/signatures/?bytes4_signature=0xddf252ad }) }) @@ -104,7 +114,7 @@ describe('utils', function () { it('works', async function () { utils.getMethodId( '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef', - ).should.eq('0xddf252ad') + ).should.equal('0xddf252ad') }) }) @@ -118,10 +128,10 @@ describe('utils', function () { } const inverted = utils.invertOperation(add) // the invert of an add is a removal at the same path - inverted.path.should.eq(add.path) - inverted.op.should.eq('remove') + inverted.path.should.equal(add.path) + inverted.op.should.equal('remove') should.not.exist(inverted.value) - inverted.oldValue.should.eq(add.value) + inverted.oldValue.should.equal(add.value) }) it('inverts a remove operation', async function () { @@ -133,9 +143,9 @@ describe('utils', function () { } const inverted = utils.invertOperation(remove) // the invert of a remove is an add of the old value at that path - inverted.path.should.eq(remove.path) - inverted.op.should.eq('add') - inverted.value.should.eq(remove.oldValue) + inverted.path.should.equal(remove.path) + inverted.op.should.equal('add') + inverted.value.should.equal(remove.oldValue) should.not.exist(inverted.oldValue) }) @@ -149,10 +159,10 @@ describe('utils', function () { } const inverted = utils.invertOperation(replace) // the invert of a replace just swaps value/oldValue - inverted.path.should.eq(replace.path) - inverted.op.should.eq('replace') - inverted.value.should.eq(replace.oldValue) - inverted.oldValue.should.eq(replace.value) + inverted.path.should.equal(replace.path) + inverted.op.should.equal('replace') + inverted.value.should.equal(replace.oldValue) + inverted.oldValue.should.equal(replace.value) }) it('should throw on invalid operation', async function () { @@ -184,13 +194,13 @@ describe('utils', function () { context('appendTo', function () { it('generates a valid op', async function () { const op = utils.appendTo('domain', { test: true }) - op.op.should.eq('add') - op.path.should.eq('/domain/uuid') - op.value.should.deep.eq({ + op.op.should.equal('add') + op.path.should.equal('/domain/uuid') + op.value.should.deep.equal({ uuid: 'uuid', test: true, }) - op.volatile.should.eq(true) + op.volatile.should.equal(true) }) }) diff --git a/packages/gnarly-core/test/utils/index.ts b/packages/gnarly-core/test/utils/index.ts index 10001a2..66b334b 100644 --- a/packages/gnarly-core/test/utils/index.ts +++ b/packages/gnarly-core/test/utils/index.ts @@ -3,7 +3,8 @@ import chai = require('chai') export const expectThrow = async (p) => { try { await p - } catch (error) { throw new chai.AssertionError('Expected promise to throw, but it did not.') + } catch (error) { + chai.expect(true).to.equal(true) } } diff --git a/packages/gnarly-core/tsconfig.json b/packages/gnarly-core/tsconfig.json index 795c9d6..b803ccf 100644 --- a/packages/gnarly-core/tsconfig.json +++ b/packages/gnarly-core/tsconfig.json @@ -1,12 +1,9 @@ { - "extends": "../../tsconfig.json", + "extends": "../tsconfig.build.json", "compilerOptions": { + "rootDir": "src", "outDir": "lib" }, - "include": [ - "src/**/*" - ], - "references": [ - { "path": "../../typescript-typings" } - ] + "include": ["src"], + "typeRoots": ["../../node_modules/@types"] } diff --git a/packages/gnarly-core/tsconfig.test.json b/packages/gnarly-core/tsconfig.test.json new file mode 100644 index 0000000..c0e24c3 --- /dev/null +++ b/packages/gnarly-core/tsconfig.test.json @@ -0,0 +1,8 @@ +{ + "extends": "../tsconfig.test.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "lib" + }, + "include": ["src", "test"] +} diff --git a/packages/gnarly-reducer-block-meta/package.json b/packages/gnarly-reducer-block-meta/package.json index ce99166..571fe3a 100644 --- a/packages/gnarly-reducer-block-meta/package.json +++ b/packages/gnarly-reducer-block-meta/package.json @@ -9,12 +9,12 @@ "ts-start": "ts-node src/index.ts", "start": "node lib/index.js", "watch": "concurrently -k -p \"[{name}]\" -n \"TypeScript,Node\" -c \"cyan.bold,green.bold\" \"npm run watch-ts\" \"npm run watch-node\"", - "test": "nyc --reporter=text mocha -r ts-node/register -r source-map-support/register --full-trace test/**/*.spec.ts", - "watch-test": " mocha --watch --watch-extensions ts -r ts-node/register test/**/*.spec.ts", + "test": "nyc --reporter=text mocha -r ts-node/register -r source-map-support/register --full-trace 'test/**/*.spec.ts'", + "watch-test": " mocha --watch --watch-extensions ts -r ts-node/register 'test/**/*.spec.ts'", "coverage": "nyc report --reporter=text-lcov > ./lcov.info", "build-ts": "tsc", "watch-ts": "tsc -w", - "tslint": "tslint --project ." + "lint": "tslint --project ." }, "files": [ "lib" @@ -30,18 +30,15 @@ "license": "Apache-2.0", "devDependencies": { "@types/chai": "^4.1.4", - "@types/chai-spies": "^1.0.0", "@types/node": "^10.5.7", "@xlnt/gnarly-core": "^0.6.0", - "@xlnt/typescript-typings": "^0.6.0", "chai": "^4.1.2", - "chai-spies": "^1.0.0", "mocha": "^5.2.0", "nyc": "^12.0.2", "rosie": "^2.0.1", "source-map-support": "^0.5.6", - "tslint": "^5.9.1", - "typescript": "^2.8.3" + "tslint": "^5.11.0", + "typescript": "^3.0.1" }, "publishConfig": { "access": "public" diff --git a/packages/gnarly-reducer-block-meta/tsconfig.json b/packages/gnarly-reducer-block-meta/tsconfig.json index caeae5f..54d5db3 100644 --- a/packages/gnarly-reducer-block-meta/tsconfig.json +++ b/packages/gnarly-reducer-block-meta/tsconfig.json @@ -1,13 +1,8 @@ { - "extends": "../../tsconfig.json", + "extends": "../tsconfig.build.json", "compilerOptions": { + "rootDir": "src", "outDir": "lib" }, - "include": [ - "src/**/*" - ], - "references": [ - { "path": "../../gnarly-core" }, - { "path": "../../typescript-typings" } - ] + "include": ["src"] } diff --git a/packages/gnarly-reducer-erc20/package.json b/packages/gnarly-reducer-erc20/package.json index bd90d31..3b81891 100644 --- a/packages/gnarly-reducer-erc20/package.json +++ b/packages/gnarly-reducer-erc20/package.json @@ -9,12 +9,12 @@ "ts-start": "ts-node src/index.ts", "start": "node lib/index.js", "watch": "concurrently -k -p \"[{name}]\" -n \"TypeScript,Node\" -c \"cyan.bold,green.bold\" \"npm run watch-ts\" \"npm run watch-node\"", - "test": "nyc --reporter=text mocha -r ts-node/register -r source-map-support/register --full-trace test/**/*.spec.ts", - "watch-test": " mocha --watch --watch-extensions ts -r ts-node/register test/**/*.spec.ts", + "test": "nyc --reporter=text mocha -r ts-node/register -r source-map-support/register --full-trace 'test/**/*.spec.ts'", + "watch-test": " mocha --watch --watch-extensions ts -r ts-node/register 'test/**/*.spec.ts'", "coverage": "nyc report --reporter=text-lcov > ./lcov.info", "build-ts": "tsc", "watch-ts": "tsc -w", - "tslint": "tslint --project ." + "lint": "tslint --project ." }, "files": [ "lib" @@ -30,18 +30,15 @@ "license": "Apache-2.0", "devDependencies": { "@types/chai": "^4.1.4", - "@types/chai-spies": "^1.0.0", "@types/node": "^10.5.7", "@xlnt/gnarly-core": "^0.6.0", - "@xlnt/typescript-typings": "^0.6.0", "chai": "^4.1.2", - "chai-spies": "^1.0.0", "mocha": "^5.2.0", "nyc": "^12.0.2", "rosie": "^2.0.1", "source-map-support": "^0.5.6", - "tslint": "^5.9.1", - "typescript": "^2.8.3" + "tslint": "^5.11.0", + "typescript": "^3.0.1" }, "publishConfig": { "access": "public" diff --git a/packages/gnarly-reducer-erc20/tsconfig.json b/packages/gnarly-reducer-erc20/tsconfig.json index caeae5f..54d5db3 100644 --- a/packages/gnarly-reducer-erc20/tsconfig.json +++ b/packages/gnarly-reducer-erc20/tsconfig.json @@ -1,13 +1,8 @@ { - "extends": "../../tsconfig.json", + "extends": "../tsconfig.build.json", "compilerOptions": { + "rootDir": "src", "outDir": "lib" }, - "include": [ - "src/**/*" - ], - "references": [ - { "path": "../../gnarly-core" }, - { "path": "../../typescript-typings" } - ] + "include": ["src"] } diff --git a/packages/gnarly-reducer-erc721/package.json b/packages/gnarly-reducer-erc721/package.json index ff85fcf..dd34f28 100644 --- a/packages/gnarly-reducer-erc721/package.json +++ b/packages/gnarly-reducer-erc721/package.json @@ -9,12 +9,12 @@ "ts-start": "ts-node src/index.ts", "start": "node lib/index.js", "watch": "concurrently -k -p \"[{name}]\" -n \"TypeScript,Node\" -c \"cyan.bold,green.bold\" \"npm run watch-ts\" \"npm run watch-node\"", - "test": "nyc --reporter=text mocha -r ts-node/register -r source-map-support/register --full-trace test/**/*.spec.ts", - "watch-test": " mocha --watch --watch-extensions ts -r ts-node/register test/**/*.spec.ts", + "test": "nyc --reporter=text mocha -r ts-node/register -r source-map-support/register --full-trace 'test/**/*.spec.ts'", + "watch-test": " mocha --watch --watch-extensions ts -r ts-node/register 'test/**/*.spec.ts'", "coverage": "nyc report --reporter=text-lcov > ./lcov.info", "build-ts": "tsc", "watch-ts": "tsc -w", - "tslint": "tslint --project ." + "lint": "tslint --project ." }, "files": [ "lib" @@ -30,18 +30,15 @@ "license": "Apache-2.0", "devDependencies": { "@types/chai": "^4.1.4", - "@types/chai-spies": "^1.0.0", "@types/node": "^10.5.7", "@xlnt/gnarly-core": "^0.6.0", - "@xlnt/typescript-typings": "^0.6.0", "chai": "^4.1.2", - "chai-spies": "^1.0.0", "mocha": "^5.2.0", "nyc": "^12.0.2", "rosie": "^2.0.1", "source-map-support": "^0.5.6", - "tslint": "^5.9.1", - "typescript": "^2.8.3" + "tslint": "^5.11.0", + "typescript": "^3.0.1" }, "publishConfig": { "access": "public" diff --git a/packages/gnarly-reducer-erc721/tsconfig.json b/packages/gnarly-reducer-erc721/tsconfig.json index caeae5f..54d5db3 100644 --- a/packages/gnarly-reducer-erc721/tsconfig.json +++ b/packages/gnarly-reducer-erc721/tsconfig.json @@ -1,13 +1,8 @@ { - "extends": "../../tsconfig.json", + "extends": "../tsconfig.build.json", "compilerOptions": { + "rootDir": "src", "outDir": "lib" }, - "include": [ - "src/**/*" - ], - "references": [ - { "path": "../../gnarly-core" }, - { "path": "../../typescript-typings" } - ] + "include": ["src"] } diff --git a/packages/gnarly-reducer-events/package.json b/packages/gnarly-reducer-events/package.json index f6cff47..771a060 100644 --- a/packages/gnarly-reducer-events/package.json +++ b/packages/gnarly-reducer-events/package.json @@ -9,12 +9,12 @@ "ts-start": "ts-node src/index.ts", "start": "node lib/index.js", "watch": "concurrently -k -p \"[{name}]\" -n \"TypeScript,Node\" -c \"cyan.bold,green.bold\" \"npm run watch-ts\" \"npm run watch-node\"", - "test": "nyc --reporter=text mocha -r ts-node/register -r source-map-support/register --full-trace test/**/*.spec.ts", - "watch-test": " mocha --watch --watch-extensions ts -r ts-node/register test/**/*.spec.ts", + "test": "nyc --reporter=text mocha -r ts-node/register -r source-map-support/register --full-trace 'test/**/*.spec.ts'", + "watch-test": " mocha --watch --watch-extensions ts -r ts-node/register 'test/**/*.spec.ts'", "coverage": "nyc report --reporter=text-lcov > ./lcov.info", "build-ts": "tsc", "watch-ts": "tsc -w", - "tslint": "tslint --project ." + "lint": "tslint --project ." }, "files": [ "lib" @@ -24,24 +24,21 @@ ], "repository": { "type": "git", - "url": "git@github.com:XLNT/gnarly" + "url": "git@github.com:XLNT/gnarly.git" }, "author": "Matt Condon ", "license": "Apache-2.0", "devDependencies": { "@types/chai": "^4.1.4", - "@types/chai-spies": "^1.0.0", "@types/node": "^10.5.7", "@xlnt/gnarly-core": "^0.6.0", - "@xlnt/typescript-typings": "^0.6.0", "chai": "^4.1.2", - "chai-spies": "^1.0.0", "mocha": "^5.2.0", "nyc": "^12.0.2", "rosie": "^2.0.1", "source-map-support": "^0.5.6", - "tslint": "^5.9.1", - "typescript": "^2.8.3" + "tslint": "^5.11.0", + "typescript": "^3.0.1" }, "publishConfig": { "access": "public" diff --git a/packages/gnarly-reducer-events/tsconfig.json b/packages/gnarly-reducer-events/tsconfig.json index caeae5f..54d5db3 100644 --- a/packages/gnarly-reducer-events/tsconfig.json +++ b/packages/gnarly-reducer-events/tsconfig.json @@ -1,13 +1,8 @@ { - "extends": "../../tsconfig.json", + "extends": "../tsconfig.build.json", "compilerOptions": { + "rootDir": "src", "outDir": "lib" }, - "include": [ - "src/**/*" - ], - "references": [ - { "path": "../../gnarly-core" }, - { "path": "../../typescript-typings" } - ] + "include": ["src"] } diff --git a/tsconfig.base.json b/packages/tsconfig.build.json similarity index 86% rename from tsconfig.base.json rename to packages/tsconfig.build.json index 4c1cf5d..862ea8a 100644 --- a/tsconfig.base.json +++ b/packages/tsconfig.build.json @@ -1,12 +1,14 @@ { "compilerOptions": { + "composite": true, "declaration": true, + "declarationMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, "module": "commonjs", "target": "es6", "moduleResolution": "node", "sourceMap": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, "lib": [ "es5", "es6", @@ -25,6 +27,5 @@ "esnext.asynciterable" ] }, - "typeRoots": ["node_modules/@xlnt/typescript-typings/types", "node_modules/@types"], - "composite": true, + "typeRoots": ["node_modules/@types"] } diff --git a/packages/tsconfig.json b/packages/tsconfig.json new file mode 100644 index 0000000..1a3b847 --- /dev/null +++ b/packages/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { "path": "gnarly-bin" }, + { "path": "gnarly-core" }, + { "path": "gnarly-reducer-block-meta" }, + { "path": "gnarly-reducer-erc20" }, + { "path": "gnarly-reducer-erc721" }, + { "path": "gnarly-reducer-events" } + ] +} diff --git a/packages/tsconfig.test.json b/packages/tsconfig.test.json new file mode 100644 index 0000000..7bbca10 --- /dev/null +++ b/packages/tsconfig.test.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "composite": true, + "declaration": true, + "declarationMap": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "module": "commonjs", + "target": "es6", + "moduleResolution": "node", + "sourceMap": true, + "skipLibCheck": true, + "lib": [ + "es5", + "es6", + "es7", + "dom", + "es2015.core", + "es2015.collection", + "es2015.generator", + "es2015.iterable", + "es2015.promise", + "es2015.proxy", + "es2015.reflect", + "es2015.symbol", + "es2015.symbol.wellknown", + "es2017", + "esnext.asynciterable" + ] + }, + "typeRoots": ["node_modules/@types"] +} diff --git a/packages/typescript-typings/package.json b/packages/typescript-typings/package.json deleted file mode 100644 index 2e00efa..0000000 --- a/packages/typescript-typings/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "@xlnt/typescript-typings", - "version": "0.6.0", - "description": "Typescript Types", - "main": "lib/index.js", - "types": "lib/index.d.ts", - "scripts": { - "prepare": "npm run build", - "build": "npm run build-ts && npm run tslint", - "build-ts": "tsc", - "watch-ts": "tsc -w", - "tslint": "tslint --project .", - "test": "nyc --reporter=text mocha -r ts-node/register -r source-map-support/register --full-trace test/**/*.spec.ts", - "watch-test": " mocha --watch --watch-extensions ts -r ts-node/register test/**/*.spec.ts", - "coverage": "nyc report --reporter=text-lcov > ./lcov.info" - }, - "files": [ - "lib" - ], - "repository": "https://github.com/XLNT/gnarly/tree/master/packages/typescript-typings", - "keywords": [ - "ethereum" - ], - "license": "Apache-2.0", - "bugs": { - "url": "https://github.com/XLNT/gnarly/issues" - }, - "homepage": "https://github.com/XLNT/gnarly#readme", - "devDependencies": { - "@types/chai": "^4.1.4", - "@types/chai-spies": "^1.0.0", - "@types/node": "^10.5.7", - "rosie": "^2.0.1", - "truffle-contract": "^3.0.6", - "ts-node": "^6.0.3", - "tslint": "^5.9.1", - "typescript": "2.6.1" - }, - "publishConfig": { - "access": "public" - } -} diff --git a/packages/typescript-typings/tsconfig.json b/packages/typescript-typings/tsconfig.json deleted file mode 100644 index 36f4b89..0000000 --- a/packages/typescript-typings/tsconfig.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "lib" - }, -} diff --git a/packages/typescript-typings/types/chai-bignumber/index.d.ts b/packages/typescript-typings/types/chai-bignumber/index.d.ts deleted file mode 100644 index e5aeb65..0000000 --- a/packages/typescript-typings/types/chai-bignumber/index.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -/// -declare module "chai-bignumber" { - function chaiBignumber(bignumber: any): (chai: any, utils: any) => void; - - namespace chaiBignumber { - - } - - export = chaiBignumber; -} - -declare namespace Chai { - // For BDD API - interface Assertion extends LanguageChains, NumericComparison, TypeComparison { - bignumber: Assertion; - } -} diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index 68211eb..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.base.json", -// "compilerOptions": { -// "baseUrl": "./packages", -// "paths": { -// "@xlnt/*": ["./*/src"] -// } -// } -} diff --git a/yarn.lock b/yarn.lock index 825ba05..9b40a1f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -82,11 +82,503 @@ lodash "^4.17.5" to-fast-properties "^2.0.0" -"@types/chai-spies@^0.0.1": - version "0.0.1" - resolved "https://registry.yarnpkg.com/@types/chai-spies/-/chai-spies-0.0.1.tgz#f95c741f0d9b88216b328ec6fb45f54701fbdef0" +"@lerna/add@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/add/-/add-3.0.0.tgz#90e660d55d18ee3f2dfd65aae5d07e0c71b29cdf" dependencies: - "@types/chai" "*" + "@lerna/bootstrap" "^3.0.0" + "@lerna/command" "^3.0.0" + "@lerna/filter-options" "^3.0.0" + "@lerna/validation-error" "^3.0.0" + dedent "^0.7.0" + npm-package-arg "^6.0.0" + p-map "^1.2.0" + package-json "^4.0.1" + semver "^5.5.0" + +"@lerna/batch-packages@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/batch-packages/-/batch-packages-3.0.0.tgz#960a3dbb5fbc17283e2850448c76c023f6a35200" + dependencies: + "@lerna/package-graph" "^3.0.0" + "@lerna/validation-error" "^3.0.0" + npmlog "^4.1.2" + +"@lerna/bootstrap@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/bootstrap/-/bootstrap-3.0.0.tgz#7dff0f27cadfea7f1381c886aa6b12da4011fdfd" + dependencies: + "@lerna/batch-packages" "^3.0.0" + "@lerna/command" "^3.0.0" + "@lerna/filter-options" "^3.0.0" + "@lerna/npm-conf" "^3.0.0" + "@lerna/npm-install" "^3.0.0" + "@lerna/rimraf-dir" "^3.0.0" + "@lerna/run-lifecycle" "^3.0.0" + "@lerna/run-parallel-batches" "^3.0.0" + "@lerna/symlink-binary" "^3.0.0" + "@lerna/symlink-dependencies" "^3.0.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" + +"@lerna/changed@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@lerna/changed/-/changed-3.0.2.tgz#c90b8d1a00c93ce99b4f6dc34653c3b835d8d468" + dependencies: + "@lerna/collect-updates" "^3.0.0" + "@lerna/command" "^3.0.0" + "@lerna/listable" "^3.0.0" + "@lerna/output" "^3.0.0" + "@lerna/version" "^3.0.2" + +"@lerna/child-process@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/child-process/-/child-process-3.0.0.tgz#5b93ac65347eb5e317e9ce2524ab2bdd59f37cb7" + dependencies: + chalk "^2.3.1" + execa "^0.10.0" + strong-log-transformer "^1.0.6" + +"@lerna/clean@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/clean/-/clean-3.0.0.tgz#5e4dcf0fb376dda6fd5c717b4a6d1ceaff6284e9" + dependencies: + "@lerna/command" "^3.0.0" + "@lerna/filter-options" "^3.0.0" + "@lerna/prompt" "^3.0.0" + "@lerna/rimraf-dir" "^3.0.0" + p-map "^1.2.0" + p-map-series "^1.0.0" + p-waterfall "^1.0.0" + +"@lerna/cli@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@lerna/cli/-/cli-3.0.3.tgz#b05055391b8b859493aa21b064479f3ad0b663e7" + dependencies: + "@lerna/add" "^3.0.0" + "@lerna/bootstrap" "^3.0.0" + "@lerna/changed" "^3.0.2" + "@lerna/clean" "^3.0.0" + "@lerna/create" "^3.0.0" + "@lerna/diff" "^3.0.0" + "@lerna/exec" "^3.0.2" + "@lerna/global-options" "^3.0.0" + "@lerna/import" "^3.0.0" + "@lerna/init" "^3.0.0" + "@lerna/link" "^3.0.0" + "@lerna/list" "^3.0.0" + "@lerna/publish" "^3.0.3" + "@lerna/run" "^3.0.2" + "@lerna/version" "^3.0.2" + dedent "^0.7.0" + is-ci "^1.0.10" + npmlog "^4.1.2" + yargs "^12.0.1" + +"@lerna/collect-updates@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/collect-updates/-/collect-updates-3.0.0.tgz#be4436e479adfc5540d9fb36e764d514ba9fb1c7" + dependencies: + "@lerna/child-process" "^3.0.0" + minimatch "^3.0.4" + npmlog "^4.1.2" + slash "^1.0.0" + +"@lerna/command@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/command/-/command-3.0.0.tgz#c974029dac0486688dcf3e01351b982e45727aae" + dependencies: + "@lerna/child-process" "^3.0.0" + "@lerna/collect-updates" "^3.0.0" + "@lerna/filter-packages" "^3.0.0" + "@lerna/package-graph" "^3.0.0" + "@lerna/project" "^3.0.0" + "@lerna/validation-error" "^3.0.0" + "@lerna/write-log-file" "^3.0.0" + dedent "^0.7.0" + execa "^0.10.0" + lodash "^4.17.5" + npmlog "^4.1.2" + +"@lerna/conventional-commits@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@lerna/conventional-commits/-/conventional-commits-3.0.2.tgz#1089d06c4022bbea1d56e7e0b3801c9be9a62d71" + dependencies: + "@lerna/validation-error" "^3.0.0" + conventional-changelog-angular "^1.6.6" + conventional-changelog-core "^2.0.5" + conventional-recommended-bump "^2.0.6" + dedent "^0.7.0" + fs-extra "^6.0.1" + get-stream "^3.0.0" + npm-package-arg "^6.0.0" + npmlog "^4.1.2" + semver "^5.5.0" + +"@lerna/create-symlink@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/create-symlink/-/create-symlink-3.0.0.tgz#f7281028c011d0524f362531a36211724793f77f" + dependencies: + cmd-shim "^2.0.2" + fs-extra "^6.0.1" + npmlog "^4.1.2" + +"@lerna/create@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/create/-/create-3.0.0.tgz#93945e4f71cf2c3fc13500bc91526d7a5c07a84c" + dependencies: + "@lerna/child-process" "^3.0.0" + "@lerna/command" "^3.0.0" + "@lerna/npm-conf" "^3.0.0" + "@lerna/validation-error" "^3.0.0" + camelcase "^4.1.0" + dedent "^0.7.0" + fs-extra "^6.0.1" + 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" + +"@lerna/diff@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/diff/-/diff-3.0.0.tgz#7e7d175c5f6555d700b8b0592f154b11d2f7b646" + dependencies: + "@lerna/child-process" "^3.0.0" + "@lerna/command" "^3.0.0" + "@lerna/validation-error" "^3.0.0" + npmlog "^4.1.2" + +"@lerna/exec@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@lerna/exec/-/exec-3.0.2.tgz#97c055e5d636e4510362f0542f8b85ce9bc0a19b" + dependencies: + "@lerna/batch-packages" "^3.0.0" + "@lerna/child-process" "^3.0.0" + "@lerna/command" "^3.0.0" + "@lerna/filter-options" "^3.0.0" + "@lerna/run-parallel-batches" "^3.0.0" + "@lerna/validation-error" "^3.0.0" + +"@lerna/filter-options@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-options/-/filter-options-3.0.0.tgz#db329277f9c482b12993fa5c0ec4d145201ab399" + dependencies: + dedent "^0.7.0" + +"@lerna/filter-packages@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/filter-packages/-/filter-packages-3.0.0.tgz#5eb25ad1610f3e2ab845133d1f8d7d40314e838f" + dependencies: + "@lerna/validation-error" "^3.0.0" + multimatch "^2.1.0" + npmlog "^4.1.2" + +"@lerna/get-npm-exec-opts@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-3.0.0.tgz#8fc7866e8d8e9a2f2dc385287ba32eb44de8bdeb" + dependencies: + npmlog "^4.1.2" + +"@lerna/global-options@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/global-options/-/global-options-3.0.0.tgz#85d4878317816eba538b0d637e30dae89a2a9a92" + +"@lerna/import@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/import/-/import-3.0.0.tgz#2fd206c41aa9e4bab2fbb362aefa31c8a340f61e" + dependencies: + "@lerna/child-process" "^3.0.0" + "@lerna/command" "^3.0.0" + "@lerna/prompt" "^3.0.0" + "@lerna/validation-error" "^3.0.0" + dedent "^0.7.0" + fs-extra "^6.0.1" + p-map-series "^1.0.0" + +"@lerna/init@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/init/-/init-3.0.0.tgz#11d7726bc65b9dbf67668be3b218c1e19d7ac541" + dependencies: + "@lerna/child-process" "^3.0.0" + "@lerna/command" "^3.0.0" + fs-extra "^6.0.1" + p-map "^1.2.0" + write-json-file "^2.3.0" + +"@lerna/link@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/link/-/link-3.0.0.tgz#874d57b104f1609e0e5887f795896c6983a2e229" + dependencies: + "@lerna/command" "^3.0.0" + "@lerna/package-graph" "^3.0.0" + "@lerna/symlink-dependencies" "^3.0.0" + p-map "^1.2.0" + slash "^1.0.0" + +"@lerna/list@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/list/-/list-3.0.0.tgz#509bfe9853f18742f5375b8cc693ea843d27405a" + dependencies: + "@lerna/command" "^3.0.0" + "@lerna/filter-options" "^3.0.0" + "@lerna/listable" "^3.0.0" + "@lerna/output" "^3.0.0" + +"@lerna/listable@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/listable/-/listable-3.0.0.tgz#27209b1382c87abdbc964220e75c247d803d4199" + dependencies: + chalk "^2.3.1" + columnify "^1.5.4" + +"@lerna/log-packed@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/log-packed/-/log-packed-3.0.0.tgz#d264ee611c64f0995153751f5c3d95defed71807" + dependencies: + byte-size "^4.0.3" + columnify "^1.5.4" + has-unicode "^2.0.1" + npmlog "^4.1.2" + +"@lerna/npm-conf@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-conf/-/npm-conf-3.0.0.tgz#7a4b8304a0ecd1e366208f656bd3d7f4dcb3b5e7" + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + +"@lerna/npm-dist-tag@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-dist-tag/-/npm-dist-tag-3.0.0.tgz#73d9c37e4032c981bdfcea2fefef5eedd63966ec" + dependencies: + "@lerna/child-process" "^3.0.0" + "@lerna/get-npm-exec-opts" "^3.0.0" + npmlog "^4.1.2" + +"@lerna/npm-install@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-install/-/npm-install-3.0.0.tgz#189c0481721e0c36c622b3c415915cb43cb41eb4" + dependencies: + "@lerna/child-process" "^3.0.0" + "@lerna/get-npm-exec-opts" "^3.0.0" + fs-extra "^6.0.1" + npm-package-arg "^6.0.0" + npmlog "^4.1.2" + signal-exit "^3.0.2" + write-pkg "^3.1.0" + +"@lerna/npm-publish@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-publish/-/npm-publish-3.0.0.tgz#4d0a87a9e8b207f1f6ad30ce6cfb3bc86e084e65" + dependencies: + "@lerna/child-process" "^3.0.0" + "@lerna/get-npm-exec-opts" "^3.0.0" + "@lerna/log-packed" "^3.0.0" + npmlog "^4.1.2" + +"@lerna/npm-run-script@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/npm-run-script/-/npm-run-script-3.0.0.tgz#771be1f9bd96f1ab35870334d2011dff0b0e7997" + dependencies: + "@lerna/child-process" "^3.0.0" + "@lerna/get-npm-exec-opts" "^3.0.0" + npmlog "^4.1.2" + +"@lerna/output@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/output/-/output-3.0.0.tgz#4ed4a30ed2f311046b714b3840a090990ba3ce35" + dependencies: + npmlog "^4.1.2" + +"@lerna/package-graph@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/package-graph/-/package-graph-3.0.0.tgz#f2e9131856c4f43ea91f2cab1bfe5c9264079f53" + dependencies: + npm-package-arg "^6.0.0" + semver "^5.5.0" + +"@lerna/package@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/package/-/package-3.0.0.tgz#14afc9a6cb1f7f7b23c1d7c7aa81bdac7d44c0e5" + dependencies: + npm-package-arg "^6.0.0" + write-pkg "^3.1.0" + +"@lerna/project@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/project/-/project-3.0.0.tgz#4320d2a2b4080cabcf95161d9c48475217d8a545" + dependencies: + "@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@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/prompt/-/prompt-3.0.0.tgz#8e506de608d16d78d39f5dde59e81b4f8ecf720e" + dependencies: + inquirer "^5.1.0" + npmlog "^4.1.2" + +"@lerna/publish@^3.0.3": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@lerna/publish/-/publish-3.0.3.tgz#4b3f621aa880743d70e1a0055eb46f5e9f03ad4a" + dependencies: + "@lerna/batch-packages" "^3.0.0" + "@lerna/child-process" "^3.0.0" + "@lerna/collect-updates" "^3.0.0" + "@lerna/command" "^3.0.0" + "@lerna/get-npm-exec-opts" "^3.0.0" + "@lerna/npm-dist-tag" "^3.0.0" + "@lerna/npm-publish" "^3.0.0" + "@lerna/output" "^3.0.0" + "@lerna/run-lifecycle" "^3.0.0" + "@lerna/run-parallel-batches" "^3.0.0" + "@lerna/validation-error" "^3.0.0" + "@lerna/version" "^3.0.2" + fs-extra "^6.0.1" + npm-package-arg "^6.0.0" + npmlog "^4.1.2" + p-finally "^1.0.0" + p-map "^1.2.0" + p-reduce "^1.0.0" + semver "^5.5.0" + +"@lerna/resolve-symlink@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/resolve-symlink/-/resolve-symlink-3.0.0.tgz#40e2c59faa9298cd2003eeb8433b6a3b28f57c84" + dependencies: + fs-extra "^6.0.1" + npmlog "^4.1.2" + read-cmd-shim "^1.0.1" + +"@lerna/rimraf-dir@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/rimraf-dir/-/rimraf-dir-3.0.0.tgz#6d3a4872e79f86c152630454ecd27f211125bad0" + dependencies: + "@lerna/child-process" "^3.0.0" + npmlog "^4.1.2" + path-exists "^3.0.0" + rimraf "^2.6.2" + +"@lerna/run-lifecycle@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/run-lifecycle/-/run-lifecycle-3.0.0.tgz#3d9a09b390f53dd321ae4be8c7b779714d4037fe" + dependencies: + "@lerna/npm-conf" "^3.0.0" + npm-lifecycle "^2.0.0" + npmlog "^4.1.2" + +"@lerna/run-parallel-batches@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/run-parallel-batches/-/run-parallel-batches-3.0.0.tgz#468704934084c74991d3124d80607857d4dfa840" + dependencies: + p-map "^1.2.0" + p-map-series "^1.0.0" + +"@lerna/run@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@lerna/run/-/run-3.0.2.tgz#ebda5894cf6c5b78442d510c6d6d86579945e8fb" + dependencies: + "@lerna/batch-packages" "^3.0.0" + "@lerna/command" "^3.0.0" + "@lerna/filter-options" "^3.0.0" + "@lerna/npm-run-script" "^3.0.0" + "@lerna/output" "^3.0.0" + "@lerna/run-parallel-batches" "^3.0.0" + "@lerna/validation-error" "^3.0.0" + p-map "^1.2.0" + +"@lerna/symlink-binary@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-binary/-/symlink-binary-3.0.0.tgz#f4ea3817c0a38316eddc8a7a75311e8b85731240" + dependencies: + "@lerna/create-symlink" "^3.0.0" + "@lerna/package" "^3.0.0" + fs-extra "^6.0.1" + p-map "^1.2.0" + read-pkg "^3.0.0" + +"@lerna/symlink-dependencies@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/symlink-dependencies/-/symlink-dependencies-3.0.0.tgz#649f4dc9225dfb047bd49fa4204b4859a7008db2" + dependencies: + "@lerna/create-symlink" "^3.0.0" + "@lerna/resolve-symlink" "^3.0.0" + "@lerna/symlink-binary" "^3.0.0" + fs-extra "^6.0.1" + p-finally "^1.0.0" + p-map "^1.2.0" + p-map-series "^1.0.0" + +"@lerna/validation-error@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/validation-error/-/validation-error-3.0.0.tgz#a27e90051c3ba71995e2a800a43d94ad04b3e3f4" + dependencies: + npmlog "^4.1.2" + +"@lerna/version@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@lerna/version/-/version-3.0.2.tgz#befa2a09be44af56668ef34785269187fe08f7bb" + dependencies: + "@lerna/child-process" "^3.0.0" + "@lerna/collect-updates" "^3.0.0" + "@lerna/command" "^3.0.0" + "@lerna/conventional-commits" "^3.0.2" + "@lerna/output" "^3.0.0" + "@lerna/prompt" "^3.0.0" + "@lerna/run-lifecycle" "^3.0.0" + "@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-reduce "^1.0.0" + p-waterfall "^1.0.0" + semver "^5.5.0" + slash "^1.0.0" + temp-write "^3.4.0" + +"@lerna/write-log-file@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@lerna/write-log-file/-/write-log-file-3.0.0.tgz#2f95fee80c6821fe1ee6ccf8173d2b4079debbd2" + dependencies: + npmlog "^4.1.2" + write-file-atomic "^2.3.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.stat@^1.0.1": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.0.tgz#50c1e2260ac0ed9439a181de3725a0168d59c48a" "@types/chai-spies@^1.0.0": version "1.0.0" @@ -174,10 +666,6 @@ acorn@5.5.3, acorn@^5.0.3: version "5.5.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" -add-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" - ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" @@ -185,7 +673,7 @@ ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.1.0, ajv@^5.1.1: +ajv@^5.1.0, ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: @@ -294,6 +782,10 @@ arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" +array-differ@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" + array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" @@ -324,6 +816,10 @@ arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" +asap@^2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" @@ -352,7 +848,7 @@ async-limiter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" -async@^1.4.0, async@^1.5.0: +async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -376,6 +872,10 @@ aws4@^1.2.1, aws4@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.7.0.tgz#d4d0e9b9dbfca77bf08eeb0a8a471550fe39e289" +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + babel-code-frame@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -413,14 +913,16 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -"bignumber.js@git+https://github.com/frozeman/bignumber.js-nolookahead.git": - version "2.0.7" - resolved "git+https://github.com/frozeman/bignumber.js-nolookahead.git#57692b3ecfc98bbdd6b3a516cb2353652ea49934" - binary-extensions@^1.0.0: version "1.11.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + bluebird@^3.4.6, bluebird@^3.5.0: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" @@ -526,6 +1028,10 @@ buffer-from@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" +buffer-from@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + buffer-to-arraybuffer@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/buffer-to-arraybuffer/-/buffer-to-arraybuffer-0.0.5.tgz#6064a40fa76eb43c723aba9ef8f6e1216d10511a" @@ -538,10 +1044,18 @@ builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + byline@5.0.0, byline@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/byline/-/byline-5.0.0.tgz#741c5216468eadc457b03410118ad77de8c1ddb1" +byte-size@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/byte-size/-/byte-size-4.0.3.tgz#b7c095efc68eadf82985fccd9a2df43a74fa2ccd" + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -568,6 +1082,10 @@ caching-transform@^1.0.0: mkdirp "^0.5.1" write-file-atomic "^1.1.4" +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" @@ -653,7 +1171,7 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" dependencies: @@ -726,14 +1244,6 @@ cliui@^2.1.0: right-align "^0.1.1" wordwrap "0.0.2" -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" @@ -812,16 +1322,12 @@ columnify@^1.5.4: strip-ansi "^3.0.0" wcwidth "^1.0.0" -combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: +combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5, combined-stream@~1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" dependencies: delayed-stream "~1.0.0" -command-join@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/command-join/-/command-join-2.0.0.tgz#52e8b984f4872d952ff1bdc8b98397d27c7144cf" - commander@2.11.0: version "2.11.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" @@ -853,7 +1359,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@^1.4.10: +concat-stream@^1.6.0: version "1.6.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" dependencies: @@ -875,6 +1381,13 @@ concurrently@^3.5.1: supports-color "^3.2.3" tree-kill "^1.1.0" +config-chain@^1.1.11: + version "1.1.11" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + configstore@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" @@ -905,29 +1418,7 @@ conventional-changelog-angular@^1.6.6: compare-func "^1.3.1" q "^1.5.1" -conventional-changelog-atom@^0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-0.2.8.tgz#8037693455990e3256f297320a45fa47ee553a14" - dependencies: - q "^1.5.1" - -conventional-changelog-cli@^1.3.13: - version "1.3.22" - resolved "https://registry.yarnpkg.com/conventional-changelog-cli/-/conventional-changelog-cli-1.3.22.tgz#13570fe1728f56f013ff7a88878ff49d5162a405" - dependencies: - add-stream "^1.0.0" - conventional-changelog "^1.1.24" - lodash "^4.2.1" - meow "^4.0.0" - tempfile "^1.1.1" - -conventional-changelog-codemirror@^0.3.8: - version "0.3.8" - resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.8.tgz#a1982c8291f4ee4d6f2f62817c6b2ecd2c4b7b47" - dependencies: - q "^1.5.1" - -conventional-changelog-core@^2.0.11: +conventional-changelog-core@^2.0.5: version "2.0.11" resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-2.0.11.tgz#19b5fbd55a9697773ed6661f4e32030ed7e30287" dependencies: @@ -945,43 +1436,6 @@ conventional-changelog-core@^2.0.11: read-pkg-up "^1.0.1" through2 "^2.0.0" -conventional-changelog-ember@^0.3.12: - version "0.3.12" - resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-0.3.12.tgz#b7d31851756d0fcb49b031dffeb6afa93b202400" - dependencies: - q "^1.5.1" - -conventional-changelog-eslint@^1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.9.tgz#b13cc7e4b472c819450ede031ff1a75c0e3d07d3" - dependencies: - q "^1.5.1" - -conventional-changelog-express@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-0.3.6.tgz#4a6295cb11785059fb09202180d0e59c358b9c2c" - dependencies: - q "^1.5.1" - -conventional-changelog-jquery@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-jquery/-/conventional-changelog-jquery-0.1.0.tgz#0208397162e3846986e71273b6c79c5b5f80f510" - dependencies: - q "^1.4.1" - -conventional-changelog-jscs@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/conventional-changelog-jscs/-/conventional-changelog-jscs-0.1.0.tgz#0479eb443cc7d72c58bf0bcf0ef1d444a92f0e5c" - dependencies: - q "^1.4.1" - -conventional-changelog-jshint@^0.3.8: - version "0.3.8" - resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.8.tgz#9051c1ac0767abaf62a31f74d2fe8790e8acc6c8" - dependencies: - compare-func "^1.3.1" - q "^1.5.1" - conventional-changelog-preset-loader@^1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.8.tgz#40bb0f142cd27d16839ec6c74ee8db418099b373" @@ -1001,30 +1455,14 @@ conventional-changelog-writer@^3.0.9: split "^1.0.0" through2 "^2.0.0" -conventional-changelog@^1.1.24: - version "1.1.24" - resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-1.1.24.tgz#3d94c29c960f5261c002678315b756cdd3d7d1f0" - dependencies: - conventional-changelog-angular "^1.6.6" - conventional-changelog-atom "^0.2.8" - conventional-changelog-codemirror "^0.3.8" - conventional-changelog-core "^2.0.11" - conventional-changelog-ember "^0.3.12" - conventional-changelog-eslint "^1.0.9" - conventional-changelog-express "^0.3.6" - conventional-changelog-jquery "^0.1.0" - conventional-changelog-jscs "^0.1.0" - conventional-changelog-jshint "^0.3.8" - conventional-changelog-preset-loader "^1.1.8" - -conventional-commits-filter@^1.1.1, conventional-commits-filter@^1.1.6: +conventional-commits-filter@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-1.1.6.tgz#4389cd8e58fe89750c0b5fb58f1d7f0cc8ad3831" dependencies: is-subset "^0.1.1" modify-values "^1.0.0" -conventional-commits-parser@^2.1.1, conventional-commits-parser@^2.1.7: +conventional-commits-parser@^2.1.7: version "2.1.7" resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-2.1.7.tgz#eca45ed6140d72ba9722ee4132674d639e644e8e" dependencies: @@ -1036,17 +1474,18 @@ conventional-commits-parser@^2.1.1, conventional-commits-parser@^2.1.7: through2 "^2.0.0" trim-off-newlines "^1.0.0" -conventional-recommended-bump@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-1.2.1.tgz#1b7137efb5091f99fe009e2fe9ddb7cc490e9375" +conventional-recommended-bump@^2.0.6: + version "2.0.9" + resolved "https://registry.yarnpkg.com/conventional-recommended-bump/-/conventional-recommended-bump-2.0.9.tgz#7392421e7d0e3515f3df2040572a23cc73a68a93" dependencies: - concat-stream "^1.4.10" - conventional-commits-filter "^1.1.1" - conventional-commits-parser "^2.1.1" - git-raw-commits "^1.3.0" - git-semver-tags "^1.3.0" - meow "^3.3.0" - object-assign "^4.0.1" + concat-stream "^1.6.0" + conventional-changelog-preset-loader "^1.1.8" + conventional-commits-filter "^1.1.6" + conventional-commits-parser "^2.1.7" + git-raw-commits "^1.3.6" + git-semver-tags "^1.3.6" + meow "^4.0.0" + q "^1.5.1" convert-source-map@^1.5.0, convert-source-map@^1.5.1: version "1.5.1" @@ -1079,6 +1518,14 @@ cors@^2.8.1: object-assign "^4" vary "^1" +cosmiconfig@^5.0.2: + version "5.0.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39" + dependencies: + is-directory "^0.3.1" + js-yaml "^3.9.0" + parse-json "^4.0.0" + coveralls@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.2.tgz#f5a0bcd90ca4e64e088b710fa8dda640aea4884f" @@ -1111,6 +1558,16 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^6.0.0: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" @@ -1123,14 +1580,6 @@ cryptiles@3.x.x: dependencies: boom "5.x.x" -crypto-js@^3.1.4: - version "3.1.8" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.1.8.tgz#715f070bf6014f2ae992a98b3929258b713f08d5" - -crypto-js@^3.1.9-1: - version "3.1.9-1" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.1.9-1.tgz#fda19e761fc077e01ffbfdc6e9fdfc59e8806cd8" - crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" @@ -1177,6 +1626,10 @@ debug@3.1.0, debug@^3.1.0: dependencies: ms "2.0.0" +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + decamelize-keys@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" @@ -1188,6 +1641,12 @@ decamelize@^1.0.0, decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +decamelize@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" + dependencies: + xregexp "4.0.0" + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -1286,10 +1745,24 @@ detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" +dezalgo@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + dependencies: + asap "^2.0.0" + wrappy "1" + diff@3.5.0, diff@^3.1.0, diff@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" +dir-glob@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + dom-walk@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" @@ -1300,7 +1773,7 @@ dot-prop@^3.0.0: dependencies: is-obj "^1.0.0" -dot-prop@^4.1.0: +dot-prop@^4.1.0, dot-prop@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" dependencies: @@ -1434,14 +1907,6 @@ ethereumjs-blockstream@^3.1.0: source-map-support "0.4.14" uuid "3.0.1" -ethjs-abi@0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/ethjs-abi/-/ethjs-abi-0.1.8.tgz#cd288583ed628cdfadaf8adefa3ba1dbcbca6c18" - dependencies: - bn.js "4.11.6" - js-sha3 "0.5.5" - number-to-bn "1.7.0" - ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" @@ -1461,11 +1926,11 @@ event-stream@~3.3.0: stream-combiner "~0.0.4" through "~2.3.1" -execa@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" +execa@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" dependencies: - cross-spawn "^5.0.1" + cross-spawn "^6.0.0" get-stream "^3.0.0" is-stream "^1.1.0" npm-run-path "^2.0.0" @@ -1473,9 +1938,9 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" dependencies: cross-spawn "^5.0.1" get-stream "^3.0.0" @@ -1549,7 +2014,7 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0: +extend@^3.0.0, extend@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" @@ -1557,7 +2022,7 @@ extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" -external-editor@^2.0.4: +external-editor@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" dependencies: @@ -1594,6 +2059,17 @@ fast-equals@^1.5.3: version "1.5.3" resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-1.5.3.tgz#22087aee55a87d440b881445f19424a2f4f4282e" +fast-glob@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.2.tgz#71723338ac9b4e0e2fff1d6748a2a13d5ed352bf" + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.0.1" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.1" + micromatch "^3.1.10" + fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -1654,6 +2130,12 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + dependencies: + locate-path "^3.0.0" + flush-write-stream@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" @@ -1694,7 +2176,7 @@ form-data@~2.1.1: combined-stream "^1.0.5" mime-types "^2.1.12" -form-data@~2.3.1: +form-data@~2.3.1, form-data@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" dependencies: @@ -1728,9 +2210,9 @@ fs-extra@4.0.1: jsonfile "^3.0.0" universalify "^0.1.0" -fs-extra@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" +fs-extra@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-6.0.1.tgz#8abc128f7946e310135ddc93b98bddb410e7a34b" dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" @@ -1760,6 +2242,15 @@ fsevents@^1.1.2: nan "^2.9.2" node-pre-gyp "^0.9.0" +fstream@^1.0.0, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -1821,7 +2312,7 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -git-raw-commits@^1.3.0, git-raw-commits@^1.3.6: +git-raw-commits@^1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.3.6.tgz#27c35a32a67777c1ecd412a239a6c19d71b95aff" dependencies: @@ -1838,7 +2329,7 @@ git-remote-origin-url@^2.0.0: gitconfiglocal "^1.0.0" pify "^2.3.0" -git-semver-tags@^1.3.0, git-semver-tags@^1.3.6: +git-semver-tags@^1.3.6: version "1.3.6" resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-1.3.6.tgz#357ea01f7280794fe0927f2806bee6414d2caba5" dependencies: @@ -1873,6 +2364,10 @@ glob-stream@^6.1.0: to-absolute-glob "^2.0.0" unique-stream "^2.0.2" +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + glob@7.1.2, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" @@ -1901,7 +2396,7 @@ globals@^11.1.0: version "11.7.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" -globby@6.1.0, globby@^6.1.0: +globby@6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" dependencies: @@ -1911,6 +2406,18 @@ globby@6.1.0, globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" +globby@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" + dependencies: + 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" + got@^6.7.1: version "6.7.1" resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" @@ -1971,6 +2478,13 @@ har-validator@~5.0.3: ajv "^5.1.0" har-schema "^2.0.0" +har-validator@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29" + dependencies: + ajv "^5.3.0" + har-schema "^2.0.0" + has-ansi@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e" @@ -1999,7 +2513,7 @@ has-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" -has-unicode@^2.0.0: +has-unicode@^2.0.0, has-unicode@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -2075,10 +2589,14 @@ hoek@4.x.x: version "4.2.1" resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" -hosted-git-info@^2.1.4, hosted-git-info@^2.5.0: +hosted-git-info@^2.1.4: version "2.6.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" +hosted-git-info@^2.6.0: + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + http-errors@1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" @@ -2133,6 +2651,10 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" +ignore@^3.3.5: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + immutable@3.8.2: version "3.8.2" resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" @@ -2141,6 +2663,13 @@ import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" +import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -2170,7 +2699,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -2178,21 +2707,33 @@ ini@^1.3.2, ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" -inquirer@^3.2.2: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" +init-package-json@^1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/init-package-json/-/init-package-json-1.10.3.tgz#45ffe2f610a8ca134f2bd1db5637b235070f6cbe" + dependencies: + 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@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726" dependencies: ansi-escapes "^3.0.0" chalk "^2.0.0" cli-cursor "^2.1.0" cli-width "^2.0.0" - external-editor "^2.0.4" + external-editor "^2.1.0" figures "^2.0.0" lodash "^4.3.0" mute-stream "0.0.7" run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" + rxjs "^5.5.2" string-width "^2.1.0" strip-ansi "^4.0.0" through "^2.3.6" @@ -2288,6 +2829,10 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-data-descriptor "^1.0.0" kind-of "^6.0.2" +is-directory@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -2523,10 +3068,6 @@ istanbul-reports@^1.4.1: dependencies: handlebars "^4.0.11" -js-sha3@0.5.5: - version "0.5.5" - resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.5.5.tgz#baf0c0e8c54ad5903447df96ade7a4a1bca79a4a" - js-sha3@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.3.1.tgz#86122802142f0828502a0d1dee1d95e253bb0243" @@ -2539,7 +3080,7 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" -js-yaml@^3.11.0: +js-yaml@^3.11.0, js-yaml@^3.9.0: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" dependencies: @@ -2679,49 +3220,13 @@ lead@^1.0.0: dependencies: flush-write-stream "^1.0.2" -lerna@^2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/lerna/-/lerna-2.11.0.tgz#89b5681e286d388dda5bbbdbbf6b84c8094eff65" +lerna@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.0.3.tgz#130b98e51ac4d2889fad7a753f934ddd4440072f" dependencies: - async "^1.5.0" - chalk "^2.1.0" - cmd-shim "^2.0.2" - columnify "^1.5.4" - command-join "^2.0.0" - conventional-changelog-cli "^1.3.13" - conventional-recommended-bump "^1.2.1" - dedent "^0.7.0" - execa "^0.8.0" - find-up "^2.1.0" - fs-extra "^4.0.1" - get-port "^3.2.0" - glob "^7.1.2" - glob-parent "^3.1.0" - globby "^6.1.0" - graceful-fs "^4.1.11" - hosted-git-info "^2.5.0" - inquirer "^3.2.2" - is-ci "^1.0.10" - load-json-file "^4.0.0" - lodash "^4.17.4" - minimatch "^3.0.4" + "@lerna/cli" "^3.0.3" + import-local "^1.0.0" npmlog "^4.1.2" - p-finally "^1.0.0" - package-json "^4.0.1" - path-exists "^3.0.0" - read-cmd-shim "^1.0.1" - read-pkg "^3.0.0" - rimraf "^2.6.1" - safe-buffer "^5.1.1" - semver "^5.4.1" - signal-exit "^3.0.2" - slash "^1.0.0" - strong-log-transformer "^1.0.6" - temp-write "^3.3.0" - write-file-atomic "^2.3.0" - write-json-file "^2.2.0" - write-pkg "^3.1.0" - yargs "^8.0.2" levn@~0.3.0: version "0.3.0" @@ -2740,15 +3245,6 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -2765,6 +3261,13 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + lodash._reinterpolate@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" @@ -2790,7 +3293,7 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "~3.0.0" -lodash@^4.17.1, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1: +lodash@^4.17.1, lodash@^4.17.5, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" @@ -2917,6 +3420,10 @@ merge-source-map@^1.1.0: dependencies: source-map "^0.6.1" +merge2@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.2.tgz#03212e3da8d86c4d8523cebd6318193414f94e34" + methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" @@ -2947,12 +3454,22 @@ mime-db@~1.33.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" +mime-db@~1.35.0: + version "1.35.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.35.0.tgz#0569d657466491283709663ad379a99b90d9ab47" + mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: version "2.1.18" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" dependencies: mime-db "~1.33.0" +mime-types@~2.1.19: + version "2.1.19" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.19.tgz#71e464537a7ef81c15f2db9d97e913fc0ff606f0" + dependencies: + mime-db "~1.35.0" + mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" @@ -2979,7 +3496,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" -minimatch@3.0.4, minimatch@^3.0.2, minimatch@^3.0.4: +minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -3028,7 +3545,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: +mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -3092,6 +3609,15 @@ ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" +multimatch@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" + dependencies: + array-differ "^1.0.0" + array-union "^1.0.1" + arrify "^1.0.0" + minimatch "^3.0.0" + multistream@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/multistream/-/multistream-2.1.0.tgz#625c267d5c44424ad6294788b5bb4da3dcb32f1d" @@ -3099,7 +3625,7 @@ multistream@2.1.0: inherits "^2.0.1" readable-stream "^2.0.5" -mute-stream@0.0.7: +mute-stream@0.0.7, mute-stream@~0.0.4: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -3140,6 +3666,10 @@ negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" +nice-try@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" + node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -3147,6 +3677,23 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" +node-gyp@^3.6.2: + version "3.8.0" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" + dependencies: + 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" + node-pre-gyp@^0.9.0: version "0.9.1" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.9.1.tgz#f11c07516dd92f87199dbc7e1838eab7cd56c9e0" @@ -3177,6 +3724,12 @@ nodemon@^1.14.12: undefsafe "^2.0.2" update-notifier "^2.3.0" +"nopt@2 || 3": + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -3190,7 +3743,7 @@ nopt@~1.0.10: dependencies: abbrev "1" -normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5: +normalize-package-data@^2.0.0, normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.3.5: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: @@ -3215,6 +3768,28 @@ npm-bundled@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308" +npm-lifecycle@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-2.0.3.tgz#696bedf1143371163e9cc16fe872357e25d8d90e" + dependencies: + byline "^5.0.0" + graceful-fs "^4.1.11" + node-gyp "^3.6.2" + resolve-from "^4.0.0" + slide "^1.1.6" + uid-number "0.0.6" + umask "^1.1.0" + which "^1.3.0" + +"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1" + dependencies: + hosted-git-info "^2.6.0" + osenv "^0.1.5" + semver "^5.5.0" + validate-npm-package-name "^3.0.0" + npm-packlist@^1.1.6: version "1.1.10" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.10.tgz#1039db9e985727e464df066f4cf0ab6ef85c398a" @@ -3228,7 +3803,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.0.2, npmlog@^4.1.2: +"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.2, npmlog@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" dependencies: @@ -3284,6 +3859,10 @@ oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -3379,7 +3958,7 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -osenv@^0.1.4: +osenv@0, osenv@^0.1.4, osenv@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" dependencies: @@ -3396,12 +3975,30 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" +p-limit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" dependencies: p-limit "^1.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + dependencies: + p-limit "^2.0.0" + +p-map-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-map-series/-/p-map-series-1.0.0.tgz#bf98fe575705658a9e1351befb85ae4c1f07bdca" + dependencies: + p-reduce "^1.0.0" + p-map@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" @@ -3410,6 +4007,10 @@ p-queue@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-2.4.2.tgz#03609826682b743be9a22dba25051bd46724fc34" +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + p-retry@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-2.0.0.tgz#b97f1f4d6d81a3c065b2b40107b811e995c1bfba" @@ -3420,6 +4021,16 @@ p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" +p-try@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" + +p-waterfall@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-waterfall/-/p-waterfall-1.0.0.tgz#7ed94b3ceb3332782353af6aae11aa9fc235bb00" + dependencies: + p-reduce "^1.0.0" + package-json@^4.0.0, package-json@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" @@ -3487,7 +4098,7 @@ path-is-inside@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" -path-key@^2.0.0: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -3507,12 +4118,6 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - dependencies: - pify "^2.0.0" - path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -3596,6 +4201,12 @@ pkg-dir@^1.0.0: dependencies: find-up "^1.0.0" +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + pkg-fetch@2.5.4: version "2.5.4" resolved "https://registry.yarnpkg.com/pkg-fetch/-/pkg-fetch-2.5.4.tgz#0573550050f38d2d5f91131c1bd718f9b39faf06" @@ -3674,6 +4285,16 @@ progress@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" +promzard@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/promzard/-/promzard-0.3.0.tgz#26a5d6ee8c7dee4cb12208305acfb93ba382a9ee" + dependencies: + read "1" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + proxy-addr@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" @@ -3691,6 +4312,10 @@ pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" +psl@^1.1.24: + version "1.1.29" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" + pstree.remy@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.0.tgz#f2af27265bd3e5b32bbfcc10e80bac55ba78688b" @@ -3716,7 +4341,7 @@ punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" -q@^1.4.1, q@^1.5.1: +q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -3728,7 +4353,7 @@ qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" -qs@~6.5.1: +qs@~6.5.1, qs@~6.5.2: version "6.5.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" @@ -3776,6 +4401,27 @@ read-cmd-shim@^1.0.1: dependencies: graceful-fs "^4.1.2" +"read-package-json@1 || 2", read-package-json@^2.0.0: + version "2.0.13" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.13.tgz#2e82ebd9f613baa6d2ebe3aa72cefe3f68e41f4a" + dependencies: + glob "^7.1.1" + json-parse-better-errors "^1.0.1" + normalize-package-data "^2.0.0" + slash "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.2" + +read-package-tree@^5.1.6: + version "5.2.1" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.2.1.tgz#6218b187d6fac82289ce4387bbbaf8eef536ad63" + dependencies: + 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-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -3783,13 +4429,6 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" @@ -3805,14 +4444,6 @@ read-pkg@^1.0.0, read-pkg@^1.1.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -3821,6 +4452,12 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" +read@1, read@~1.0.1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4" + dependencies: + mute-stream "~0.0.4" + readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" @@ -3833,6 +4470,15 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" +readdir-scoped-modules@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.0.2.tgz#9fafa37d286be5d92cbaebdee030dc9b5f406747" + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + readdirp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" @@ -4002,6 +4648,31 @@ request@^2.85.0: tunnel-agent "^0.6.0" uuid "^3.1.0" +request@^2.87.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + dependencies: + 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@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -4010,10 +4681,24 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + dependencies: + resolve-from "^3.0.0" + resolve-from@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + resolve-options@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" @@ -4064,7 +4749,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@^2.6.1, rimraf@^2.6.2: +rimraf@2, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -4080,20 +4765,16 @@ run-async@^2.2.0: dependencies: is-promise "^2.1.0" -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - rx@2.3.24: version "2.3.24" resolved "https://registry.yarnpkg.com/rx/-/rx-2.3.24.tgz#14f950a4217d7e35daa71bbcbe58eff68ea4b2b7" +rxjs@^5.5.2: + version "5.5.11" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.11.tgz#f733027ca43e3bec6b994473be4ab98ad43ced87" + dependencies: + symbol-observable "1.0.1" + safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -4122,7 +4803,7 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" @@ -4134,6 +4815,10 @@ semver@5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" +semver@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + send@0.16.2: version "0.16.2" resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" @@ -4271,7 +4956,7 @@ slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" -slide@^1.1.5: +slide@^1.1.5, slide@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" @@ -4336,13 +5021,6 @@ source-map-support@0.4.14: dependencies: source-map "^0.5.6" -source-map-support@^0.5.3: - version "0.5.5" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.5.tgz#0d4af9e00493e855402e8ec36ebed2d266fceb90" - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - source-map-support@^0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13" @@ -4607,6 +5285,18 @@ supports-color@^4.0.0: dependencies: has-flag "^2.0.0" +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + +tar@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + tar@^4: version "4.4.2" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.2.tgz#60685211ba46b38847b1ae7ee1a24d744a2cd462" @@ -4623,7 +5313,7 @@ temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" -temp-write@^3.3.0: +temp-write@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/temp-write/-/temp-write-3.4.0.tgz#8cff630fb7e9da05f047c74ce4ce4d685457d492" dependencies: @@ -4634,13 +5324,6 @@ temp-write@^3.3.0: temp-dir "^1.0.0" uuid "^3.0.1" -tempfile@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2" - dependencies: - os-tmpdir "^1.0.0" - uuid "^2.0.1" - term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" @@ -4760,6 +5443,13 @@ tough-cookie@~2.3.0, tough-cookie@~2.3.3: dependencies: punycode "^1.4.1" +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + tree-kill@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.0.tgz#5846786237b4239014f05db156b643212d4c6f36" @@ -4784,65 +5474,26 @@ trim@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" -truffle-blockchain-utils@^0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/truffle-blockchain-utils/-/truffle-blockchain-utils-0.0.5.tgz#a4e5c064dadd69f782a137f3d276d21095da7a47" - -truffle-contract-schema@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/truffle-contract-schema/-/truffle-contract-schema-2.0.1.tgz#9bf821d32e26e674ba15eb5d40f96b10b1c9d568" - dependencies: - ajv "^5.1.1" - crypto-js "^3.1.9-1" - debug "^3.1.0" - -truffle-contract@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/truffle-contract/-/truffle-contract-3.0.6.tgz#2ef6fc32d7faafa9f4aed8e50001a9fdea342192" - dependencies: - ethjs-abi "0.1.8" - truffle-blockchain-utils "^0.0.5" - truffle-contract-schema "^2.0.1" - truffle-error "^0.0.3" - web3 "0.20.6" - -truffle-error@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/truffle-error/-/truffle-error-0.0.3.tgz#4bf55242e14deee1c7194932709182deff2c97ca" - -ts-node@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-5.0.1.tgz#78e5d1cb3f704de1b641e43b76be2d4094f06f81" - dependencies: - arrify "^1.0.0" - chalk "^2.3.0" - diff "^3.1.0" - make-error "^1.1.1" - minimist "^1.2.0" - mkdirp "^0.5.1" - source-map-support "^0.5.3" - yn "^2.0.0" - -ts-node@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-6.0.3.tgz#28bf74bcad134fad17f7469dad04638ece03f0f4" +ts-node@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-7.0.1.tgz#9562dc2d1e6d248d24bc55f773e3f614337d9baf" dependencies: arrify "^1.0.0" - chalk "^2.3.0" + buffer-from "^1.1.0" diff "^3.1.0" make-error "^1.1.1" minimist "^1.2.0" mkdirp "^0.5.1" - source-map-support "^0.5.3" + source-map-support "^0.5.6" yn "^2.0.0" tslib@^1.8.0, tslib@^1.8.1: version "1.9.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" -tslint@^5.9.1: - version "5.10.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.10.0.tgz#11e26bccb88afa02dd0d9956cae3d4540b5f54c3" +tslint@^5.11.0: + version "5.11.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.11.0.tgz#98f30c02eae3cde7006201e4c33cb08b48581eed" dependencies: babel-code-frame "^6.22.0" builtin-modules "^1.1.1" @@ -4855,11 +5506,11 @@ tslint@^5.9.1: resolve "^1.3.2" semver "^5.3.0" tslib "^1.8.0" - tsutils "^2.12.1" + tsutils "^2.27.2" -tsutils@^2.12.1: - version "2.26.2" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.26.2.tgz#a9f9f63434a456a5e0c95a45d9a59181cb32d3bf" +tsutils@^2.27.2: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" dependencies: tslib "^1.8.1" @@ -4894,13 +5545,9 @@ typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" -typescript@2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.1.tgz#ef39cdea27abac0b500242d6726ab90e0c846631" - -typescript@^2.8.3: - version "2.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.8.3.tgz#5d817f9b6f31bb871835f4edf0089f21abe6c170" +typescript@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.0.1.tgz#43738f29585d3a87575520a4b93ab6026ef11fdb" uglify-js@^2.6: version "2.8.29" @@ -4915,6 +5562,10 @@ uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" +uid-number@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + uid2@0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/uid2/-/uid2-0.0.3.tgz#483126e11774df2f71b8b639dcd799c376162b82" @@ -4923,6 +5574,10 @@ ultron@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" +umask@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/umask/-/umask-1.1.0.tgz#f29cebf01df517912bb58ff9c4e50fde8e33320d" + unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" @@ -5029,10 +5684,6 @@ utf8@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.1.tgz#2e01db02f7d8d0944f77104f1609eb0c304cf768" -utf8@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/utf8/-/utf8-2.1.2.tgz#1fa0d9270e9be850d9b05027f63519bf46457d96" - util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -5045,14 +5696,14 @@ uuid@3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1" -uuid@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" - uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0, uuid@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" +uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + validate-npm-package-license@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" @@ -5060,6 +5711,19 @@ validate-npm-package-license@^3.0.1: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" +validate-npm-package-license@^3.0.3: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + dependencies: + builtins "^1.0.3" + validator@^9.4.1: version "9.4.1" resolved "https://registry.yarnpkg.com/validator/-/validator-9.4.1.tgz#abf466d398b561cd243050112c6ff1de6cc12663" @@ -5167,16 +5831,6 @@ web3-utils@1.0.0-beta.34, web3-utils@^1.0.0-beta.34: underscore "1.8.3" utf8 "2.1.1" -web3@0.20.6: - version "0.20.6" - resolved "https://registry.yarnpkg.com/web3/-/web3-0.20.6.tgz#3e97306ae024fb24e10a3d75c884302562215120" - dependencies: - bignumber.js "git+https://github.com/frozeman/bignumber.js-nolookahead.git" - crypto-js "^3.1.4" - utf8 "^2.1.1" - xhr2 "*" - xmlhttprequest "*" - whatwg-fetch@>=0.10.0: version "2.0.4" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f" @@ -5185,15 +5839,15 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@^1.2.9: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" +which@1, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: isexe "^2.0.0" -which@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" +which@^1.2.9: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: isexe "^2.0.0" @@ -5258,7 +5912,7 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.3.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" -write-json-file@^2.2.0: +write-json-file@^2.2.0, write-json-file@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-json-file/-/write-json-file-2.3.0.tgz#2b64c8a33004d54b8698c76d585a77ceb61da32f" dependencies: @@ -5306,10 +5960,6 @@ xhr-request@^1.0.1: url-set-query "^1.0.0" xhr "^2.0.4" -xhr2@*: - version "0.1.4" - resolved "https://registry.yarnpkg.com/xhr2/-/xhr2-0.1.4.tgz#7f87658847716db5026323812f818cadab387a5f" - xhr@^2.0.4, xhr@^2.3.3: version "2.4.1" resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.4.1.tgz#ba982cced205ae5eec387169ac9dc77ca4853d38" @@ -5319,9 +5969,9 @@ xhr@^2.0.4, xhr@^2.3.3: parse-headers "^2.0.0" xtend "^4.0.0" -xmlhttprequest@*: - version "1.8.0" - resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" +xregexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" @@ -5331,6 +5981,10 @@ y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" +"y18n@^3.2.1 || ^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" @@ -5339,9 +5993,9 @@ yallist@^3.0.0, yallist@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" -yargs-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" +yargs-parser@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" dependencies: camelcase "^4.1.0" @@ -5374,23 +6028,22 @@ yargs@11.1.0: y18n "^3.2.1" yargs-parser "^9.0.2" -yargs@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" +yargs@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.1.tgz#6432e56123bb4e7c3562115401e98374060261c2" dependencies: - camelcase "^4.1.0" - cliui "^3.2.0" - decamelize "^1.1.1" + cliui "^4.0.0" + decamelize "^2.0.0" + find-up "^3.0.0" get-caller-file "^1.0.1" os-locale "^2.0.0" - read-pkg-up "^2.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" - yargs-parser "^7.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^10.1.0" yargs@~3.10.0: version "3.10.0"