From 786b54cff95b7656d18ff5900c11023fd1024b65 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Tue, 20 Feb 2018 14:47:35 +0100 Subject: [PATCH] Cleanup storage interface --- package.json | 5 +- packages/client-chains/package.json | 2 +- packages/client-db/package.json | 2 +- packages/client-db/src/memory/del.js | 8 +- packages/client-db/src/memory/get.js | 8 +- packages/client-db/src/memory/set.js | 10 ++- packages/client-p2p/package.json | 2 +- packages/client-rpc/package.json | 2 +- packages/client-state/package.json | 2 +- packages/client-wasm-runtime/package.json | 6 +- .../src/environment/storage/del.js | 8 +- .../src/environment/storage/get.js | 8 +- .../src/environment/storage/set.js | 10 +-- .../client-wasm-runtime/src/storage/index.js | 2 +- packages/client-wasm/package.json | 2 +- packages/client-wasm/src/create/fn.js | 15 +++- packages/client-wasm/src/create/fn.spec.js | 12 ++- packages/client-wasm/src/polkadot.spec.js | 40 ++++----- packages/client/package.json | 2 +- yarn.lock | 86 ++++++++++--------- 20 files changed, 132 insertions(+), 100 deletions(-) diff --git a/package.json b/package.json index 9657eaac..e048ce2a 100644 --- a/package.json +++ b/package.json @@ -9,11 +9,10 @@ "check": "eslint packages && flow check", "start": "node packages/client/scripts/polkadot.js", "start2": "node packages/client/scripts/polkadot.js --db-path=./tmp --p2p-peers=/ip4/127.0.0.1/tcp/39933 --p2p-port=39934 --rpc-port=9934", - "test": "jest --coverage", - "postinstall": "./build-wasm.sh" + "test": "jest --coverage" }, "devDependencies": { - "@polkadot/dev": "^0.16.9", + "@polkadot/dev": "^0.16.10", "lerna": "^2.5.1" } } diff --git a/packages/client-chains/package.json b/packages/client-chains/package.json index f4fe3bbe..8ffe4322 100644 --- a/packages/client-chains/package.json +++ b/packages/client-chains/package.json @@ -29,7 +29,7 @@ "test": "echo \"Tests only available from root wrapper\"" }, "dependencies": { - "@polkadot/util": "^0.15.3", + "@polkadot/util": "^0.15.5", "babel-runtime": "^6.26.0" } } diff --git a/packages/client-db/package.json b/packages/client-db/package.json index c1fda4d2..ca6c18e9 100644 --- a/packages/client-db/package.json +++ b/packages/client-db/package.json @@ -31,7 +31,7 @@ }, "dependencies": { "@polkadot/client-state": "^0.8.2", - "@polkadot/util": "^0.15.3", + "@polkadot/util": "^0.15.5", "babel-runtime": "^6.26.0", "leveldown": "^2.1.1", "levelup": "^2.0.1", diff --git a/packages/client-db/src/memory/del.js b/packages/client-db/src/memory/del.js index 4f2859f1..92c24c2d 100644 --- a/packages/client-db/src/memory/del.js +++ b/packages/client-db/src/memory/del.js @@ -5,10 +5,12 @@ import type { Memory$Storage } from './types'; -const u8aToHex = require('@polkadot/util/u8a/toHex'); +const u8aToString = require('@polkadot/util/u8a/toString'); module.exports = function del (storage: Memory$Storage, k: Uint8Array): void { - if (storage[u8aToHex(k)]) { - delete storage[u8aToHex(k)]; + const ks = u8aToString(k); + + if (storage[ks]) { + delete storage[ks]; } }; diff --git a/packages/client-db/src/memory/get.js b/packages/client-db/src/memory/get.js index 90973507..c0800b65 100644 --- a/packages/client-db/src/memory/get.js +++ b/packages/client-db/src/memory/get.js @@ -5,10 +5,12 @@ import type { Memory$Storage } from './types'; -const u8aToHex = require('@polkadot/util/u8a/toHex'); +const u8aToString = require('@polkadot/util/u8a/toString'); module.exports = function get (storage: Memory$Storage, k: Uint8Array): Uint8Array { - return storage[u8aToHex(k)] - ? storage[u8aToHex(k)].v + const ks = u8aToString(k); + + return storage[ks] + ? storage[ks].v.slice() : new Uint8Array([]); }; diff --git a/packages/client-db/src/memory/set.js b/packages/client-db/src/memory/set.js index d7657b83..e8be1c17 100644 --- a/packages/client-db/src/memory/set.js +++ b/packages/client-db/src/memory/set.js @@ -5,11 +5,13 @@ import type { Memory$Storage } from './types'; -const u8aToHex = require('@polkadot/util/u8a/toHex'); +const u8aToString = require('@polkadot/util/u8a/toString'); module.exports = function set (storage: Memory$Storage, k: Uint8Array, v: Uint8Array): void { - storage[u8aToHex(k)] = { - k, - v + const ks = u8aToString(k); + + storage[ks] = { + k: k.slice(), + v: v.slice() }; }; diff --git a/packages/client-p2p/package.json b/packages/client-p2p/package.json index caf74737..8f791ed0 100644 --- a/packages/client-p2p/package.json +++ b/packages/client-p2p/package.json @@ -32,7 +32,7 @@ "dependencies": { "@polkadot/primitives": "^0.6.5", "@polkadot/primitives-rlp": "^0.6.5", - "@polkadot/util": "^0.15.3", + "@polkadot/util": "^0.15.5", "babel-runtime": "^6.26.0", "eventemitter3": "^2.0.3", "libp2p": "^0.13.3", diff --git a/packages/client-rpc/package.json b/packages/client-rpc/package.json index 5a7c220b..d1ed18d3 100644 --- a/packages/client-rpc/package.json +++ b/packages/client-rpc/package.json @@ -34,7 +34,7 @@ "@polkadot/client": "^0.8.2" }, "dependencies": { - "@polkadot/util": "^0.15.3", + "@polkadot/util": "^0.15.5", "babel-runtime": "^6.26.0", "co-body": "^5.1.1", "eventemitter3": "^2.0.3", diff --git a/packages/client-state/package.json b/packages/client-state/package.json index 0cb5dfcb..af6f2edd 100644 --- a/packages/client-state/package.json +++ b/packages/client-state/package.json @@ -30,7 +30,7 @@ }, "dependencies": { "@polkadot/primitives": "^0.6.5", - "@polkadot/util": "^0.15.3", + "@polkadot/util": "^0.15.5", "babel-runtime": "^6.26.0" }, "devDependencies": { diff --git a/packages/client-wasm-runtime/package.json b/packages/client-wasm-runtime/package.json index 14502e96..a1a79c1a 100644 --- a/packages/client-wasm-runtime/package.json +++ b/packages/client-wasm-runtime/package.json @@ -30,9 +30,9 @@ "test": "echo \"Tests only available from root wrapper\"" }, "dependencies": { - "@polkadot/util": "^0.15.3", - "@polkadot/util-crypto": "^0.15.3", - "@polkadot/util-triehash": "^0.15.3", + "@polkadot/util": "^0.15.5", + "@polkadot/util-crypto": "^0.15.5", + "@polkadot/util-triehash": "^0.15.5", "babel-runtime": "^6.26.0", "merkle-patricia-tree": "^2.3.0" } diff --git a/packages/client-wasm-runtime/src/environment/storage/del.js b/packages/client-wasm-runtime/src/environment/storage/del.js index 6455e00e..6543313f 100644 --- a/packages/client-wasm-runtime/src/environment/storage/del.js +++ b/packages/client-wasm-runtime/src/environment/storage/del.js @@ -6,11 +6,13 @@ import type { BaseDbInterface } from '@polkadot/client-db/types'; import type { Memory$Storage } from '@polkadot/client-db/memory/types'; -const u8aToHex = require('@polkadot/util/u8a/toHex'); +const u8aToString = require('@polkadot/util/u8a/toString'); module.exports = function del (pending: Memory$Storage, backend: BaseDbInterface, k: Uint8Array): void { - pending[u8aToHex(k)] = { - k, + const ks = u8aToString(k); + + pending[ks] = { + k: k.slice(), v: new Uint8Array([]) }; }; diff --git a/packages/client-wasm-runtime/src/environment/storage/get.js b/packages/client-wasm-runtime/src/environment/storage/get.js index fc120e30..92b0cbb9 100644 --- a/packages/client-wasm-runtime/src/environment/storage/get.js +++ b/packages/client-wasm-runtime/src/environment/storage/get.js @@ -6,10 +6,12 @@ import type { BaseDbInterface } from '@polkadot/client-db/types'; import type { Memory$Storage } from '@polkadot/client-db/memory/types'; -const u8aToHex = require('@polkadot/util/u8a/toHex'); +const u8aToString = require('@polkadot/util/u8a/toString'); module.exports = function get (pending: Memory$Storage, backend: BaseDbInterface, k: Uint8Array): Uint8Array { - return pending[u8aToHex(k)] - ? pending[u8aToHex(k)].v + const ks = u8aToString(k); + + return pending[ks] + ? pending[ks].v.slice() : backend.get(k); }; diff --git a/packages/client-wasm-runtime/src/environment/storage/set.js b/packages/client-wasm-runtime/src/environment/storage/set.js index f9882838..932ca3c0 100644 --- a/packages/client-wasm-runtime/src/environment/storage/set.js +++ b/packages/client-wasm-runtime/src/environment/storage/set.js @@ -6,13 +6,13 @@ import type { BaseDbInterface } from '@polkadot/client-db/types'; import type { Memory$Storage } from '@polkadot/client-db/memory/types'; -const u8aToHex = require('@polkadot/util/u8a/toHex'); +const u8aToString = require('@polkadot/util/u8a/toString'); module.exports = function set (pending: Memory$Storage, backend: BaseDbInterface, k: Uint8Array, v: Uint8Array): void { - // console.log('setStorage', u8aToHex(k), k, v); + const ks = u8aToString(k); - pending[u8aToHex(k)] = { - k, - v + pending[ks] = { + k: k.slice(), + v: v.slice() }; }; diff --git a/packages/client-wasm-runtime/src/storage/index.js b/packages/client-wasm-runtime/src/storage/index.js index 71fc1c4a..28e94a72 100644 --- a/packages/client-wasm-runtime/src/storage/index.js +++ b/packages/client-wasm-runtime/src/storage/index.js @@ -63,7 +63,7 @@ module.exports = function storage ({ l, heap, storage }: RuntimeEnv): RuntimeInt return data.length; }, set_storage: (keyPtr: PointerType, keyLength: number, dataPtr: PointerType, dataLength: number): void => { - l.debug('set_storage', [keyPtr, keyLength, dataPtr, dataLength]); + l.debug('set_storage', [keyPtr, keyLength, dataPtr, dataLength], heap.get(keyPtr, keyLength), heap.get(dataPtr, dataLength)); storage.set( heap.get(keyPtr, keyLength), diff --git a/packages/client-wasm/package.json b/packages/client-wasm/package.json index 3c4b4c69..9d0b3b95 100644 --- a/packages/client-wasm/package.json +++ b/packages/client-wasm/package.json @@ -39,7 +39,7 @@ "dependencies": { "@polkadot/client-wasm-runtime": "^0.8.2", "@polkadot/primitives-codec": "^0.6.5", - "@polkadot/util": "^0.15.3", + "@polkadot/util": "^0.15.5", "@polkadot/wasm-bin": "paritytech/polkadot-wasm-bin#5b52b20d8f5446fa1c1dc7c822dbf7179e906954", "babel-runtime": "^6.26.0", "yargs": "^11.0.0" diff --git a/packages/client-wasm/src/create/fn.js b/packages/client-wasm/src/create/fn.js index 13af08c2..ce61e22b 100644 --- a/packages/client-wasm/src/create/fn.js +++ b/packages/client-wasm/src/create/fn.js @@ -5,12 +5,16 @@ import type { RuntimeInterface } from '@polkadot/client-wasm-runtime/types'; -const u8aToHex = require('@polkadot/util/u8a/toHex'); +type FnResult = { + lo: number, + hi: number +}; +type FnType = (...data: Array) => FnResult; -const FnType = (...data: Array) => Uint8Array; +const u8aToHex = require('@polkadot/util/u8a/toHex'); module.exports = function createFn (fns: WebAssemblyInstance$Exports, name: string, { environment: { l, heap } }: RuntimeInterface): FnType { - return (...data: Array): number => { + return (...data: Array): FnResult => { const params = data.reduce((params, data) => { l.debug('storing data', u8aToHex(data)); @@ -22,6 +26,9 @@ module.exports = function createFn (fns: WebAssemblyInstance$Exports, name: stri l.debug('executing', name, params); - return fns[name].apply(null, params); + const lo: number = fns[name].apply(null, params); + const hi: number = fns['get_result_hi'](); + + return { lo, hi }; }; }; diff --git a/packages/client-wasm/src/create/fn.spec.js b/packages/client-wasm/src/create/fn.spec.js index bdd071c0..1b8d2eb6 100644 --- a/packages/client-wasm/src/create/fn.spec.js +++ b/packages/client-wasm/src/create/fn.spec.js @@ -24,7 +24,8 @@ describe('createFn', () => { } }; instance = { - test: jest.fn() + test: jest.fn(() => 42), + get_result_hi: jest.fn(() => 69) }; }); @@ -63,4 +64,13 @@ describe('createFn', () => { 7, 3 // offset, length ); }); + + it('returns the hi/lo result pair', () => { + expect( + createFn(instance, 'test', runtime)() + ).toEqual({ + lo: 42, + hi: 69 + }); + }); }); diff --git a/packages/client-wasm/src/polkadot.spec.js b/packages/client-wasm/src/polkadot.spec.js index f10c5828..51dec309 100644 --- a/packages/client-wasm/src/polkadot.spec.js +++ b/packages/client-wasm/src/polkadot.spec.js @@ -14,6 +14,7 @@ describe('polkadot (runtimes)', () => { let config; let chain; let db; + let getStorage; let setStorage; beforeEach(() => { @@ -28,6 +29,8 @@ describe('polkadot (runtimes)', () => { db = memoryDb(); instance = wasm(config, { chain, db }, code); + + getStorage = instance.runtime.environment.storage.get; setStorage = instance.runtime.environment.storage.set; }); @@ -41,32 +44,29 @@ describe('polkadot (runtimes)', () => { beforeEach(() => { setStorage( new Uint8Array([209, 171, 83, 92, 36, 46, 52, 24, 171, 77, 162, 203, 90, 170, 128, 166]), - new Uint8Array([111, 0, 0, 0, 0, 0, 0, 0]) + new Uint8Array([(69 + 42), 0, 0, 0, 0, 0, 0, 0]) ); }); it('executes a basic transaction', () => { + instance.exports.execute_transaction( + hexToU8a('0x000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000910000002f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee000000000000000022d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a45000000000000005f9832c5a4a39e2dd4a3a0c5b400e9836beb362cb8f7d845a8291a2ae6fe366612e080e4acd0b5a75c3d0b6ee69614a68fb63698c1e76bf1f2dcd8fa617ddf05') + ); + expect( - instance.exports.execute_transaction( - hexToU8a('0x000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000910000002f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee000000000000000022d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a45000000000000005f9832c5a4a39e2dd4a3a0c5b400e9836beb362cb8f7d845a8291a2ae6fe366612e080e4acd0b5a75c3d0b6ee69614a68fb63698c1e76bf1f2dcd8fa617ddf05') + getStorage( + hexToU8a('0xd1ab535c242e3418ab4da2cb5aaa80a6') ) - ).toBeDefined(); - - /* - 0000000000000000000000000000000000000000000000000000000000000000 - 0100000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 0000000000000000000000000000000000000000000000000000000000000000 - 00000000 - 91000000 - 2f8c6129d816cf51c374bc7f08c3e63ed156cf78aefb4a6550d97b87997977ee - 0000000000000000 - 22 - d75a980182b10ab7d54bfed3c964073a0ee172f3daa62325af021a68f707511a - 4500000000000000 - 5f9832c5a4a39e2dd4a3a0c5b400e9836beb362cb8f7d845a8291a2ae6fe3666 - 12e080e4acd0b5a75c3d0b6ee69614a68fb63698c1e76bf1f2dcd8fa617ddf05 - */ + ).toEqual( + new Uint8Array([42, 0, 0, 0, 0, 0, 0, 0]) + ); + expect( + getStorage( + hexToU8a('0xb51ac18fd0242fd7fd033de43fd2940f') + ) + ).toEqual( + new Uint8Array([69, 0, 0, 0, 0, 0, 0, 0]) + ); }); }); diff --git a/packages/client/package.json b/packages/client/package.json index 2a6eb793..f8ee1107 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -41,7 +41,7 @@ "@polkadot/client-state": "^0.8.2", "@polkadot/client-wasm": "^0.8.2", "@polkadot/primitives": "^0.6.5", - "@polkadot/util": "^0.15.3", + "@polkadot/util": "^0.15.5", "package-json": "^4.0.1", "yargs": "^11.0.0" }, diff --git a/yarn.lock b/yarn.lock index 28aa7bee..58c141e9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -78,9 +78,9 @@ isomorphic-fetch "^2.2.1" websocket "^1.0.25" -"@polkadot/dev@^0.16.9": - version "0.16.9" - resolved "https://registry.yarnpkg.com/@polkadot/dev/-/dev-0.16.9.tgz#bcb5a52bca06679fe69cc6a34e032724e2036361" +"@polkadot/dev@^0.16.10": + version "0.16.10" + resolved "https://registry.yarnpkg.com/@polkadot/dev/-/dev-0.16.10.tgz#3bd0ba75436ff9f8c2e9a62a185d208220d57e47" dependencies: babel-cli "^6.26.0" babel-core "^6.26.0" @@ -92,9 +92,9 @@ babel-preset-env "^1.6.1" coveralls "^3.0.0" dox "^0.9.0" - eslint "^4.14.0" + eslint "^4.18.0" eslint-config-semistandard "^12.0.0" - eslint-config-standard "^11.0.0-beta.0" + eslint-config-standard "^11.0.0" eslint-config-standard-jsx "^5.0.0" eslint-config-standard-react "^6.0.0" eslint-plugin-flowtype "^2.39.1" @@ -102,7 +102,7 @@ eslint-plugin-jest "^21.3.2" eslint-plugin-node "^6.0.0" eslint-plugin-promise "^3.6.0" - eslint-plugin-react "^7.4.0" + eslint-plugin-react "^7.7.0" eslint-plugin-standard "^3.0.1" flow-bin "^0.66.0" flow-copy-source "^1.2.1" @@ -113,7 +113,7 @@ postcss-sass "^0.3.0" rimraf "^2.6.2" stylelint "^9.0.0" - stylelint-config-standard "^18.0.0" + stylelint-config-standard "^18.1.0" "@polkadot/primitives-codec@^0.6.5": version "0.6.5" @@ -148,9 +148,9 @@ "@polkadot/util" "^0.15.1" babel-runtime "^6.26.0" -"@polkadot/util-crypto@^0.15.3": - version "0.15.3" - resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-0.15.3.tgz#a36c1e1a84052d59e50b9e70e5e37d4d3b4089cf" +"@polkadot/util-crypto@^0.15.5": + version "0.15.5" + resolved "https://registry.yarnpkg.com/@polkadot/util-crypto/-/util-crypto-0.15.5.tgz#fc201831b951091215b76ccedd058f2511fe0ed0" dependencies: babel-runtime "^6.26.0" blakejs "^1.1.0" @@ -158,20 +158,20 @@ tweetnacl "^1.0.0" xxhashjs "^0.2.2" -"@polkadot/util-rlp@^0.15.3": - version "0.15.3" - resolved "https://registry.yarnpkg.com/@polkadot/util-rlp/-/util-rlp-0.15.3.tgz#23aa53102b9b58c37c823be01b86ee982e01ac5a" +"@polkadot/util-rlp@^0.15.5": + version "0.15.5" + resolved "https://registry.yarnpkg.com/@polkadot/util-rlp/-/util-rlp-0.15.5.tgz#42409fcae102e5c9f1b5e07850f44ebe6d2bb1fb" dependencies: - "@polkadot/util" "^0.15.3" + "@polkadot/util" "^0.15.5" babel-runtime "^6.26.0" -"@polkadot/util-triehash@^0.15.3": - version "0.15.3" - resolved "https://registry.yarnpkg.com/@polkadot/util-triehash/-/util-triehash-0.15.3.tgz#f81906875f28a2b7b89f0d8fd779484ce5202355" +"@polkadot/util-triehash@^0.15.5": + version "0.15.5" + resolved "https://registry.yarnpkg.com/@polkadot/util-triehash/-/util-triehash-0.15.5.tgz#02562458d96b2f3e6675fdcd7186f7deb95709c0" dependencies: - "@polkadot/util" "^0.15.3" - "@polkadot/util-crypto" "^0.15.3" - "@polkadot/util-rlp" "^0.15.3" + "@polkadot/util" "^0.15.5" + "@polkadot/util-crypto" "^0.15.5" + "@polkadot/util-rlp" "^0.15.5" babel-runtime "^6.26.0" "@polkadot/util@^0.13.1": @@ -192,9 +192,9 @@ deasync "^0.1.12" ip-regex "^2.1.0" -"@polkadot/util@^0.15.3": - version "0.15.3" - resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-0.15.3.tgz#c95055ed5ccbb3182a8148b7e5a24b2d7bc38897" +"@polkadot/util@^0.15.5": + version "0.15.5" + resolved "https://registry.yarnpkg.com/@polkadot/util/-/util-0.15.5.tgz#80a44868bc17fd8427a465fc9d344f08b1025214" dependencies: babel-runtime "^6.26.0" bn.js "^4.11.8" @@ -2040,12 +2040,18 @@ doctrine@1.5.0: esutils "^2.0.2" isarray "^1.0.0" -doctrine@^2.0.0, doctrine@^2.0.2: +doctrine@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.2.tgz#68f96ce8efc56cc42651f1faadb4f175273b0075" dependencies: esutils "^2.0.2" +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + dependencies: + esutils "^2.0.2" + dom-serializer@0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" @@ -2236,9 +2242,9 @@ eslint-config-standard-react@^6.0.0: dependencies: eslint-config-standard-jsx "^5.0.0" -eslint-config-standard@^11.0.0-beta.0: - version "11.0.0-beta.0" - resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-11.0.0-beta.0.tgz#f8afe69803d95c685a4b8392b8793188eb03cbb3" +eslint-config-standard@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-11.0.0.tgz#87ee0d3c9d95382dc761958cbb23da9eea31e0ba" eslint-import-resolver-node@^0.3.1: version "0.3.1" @@ -2292,13 +2298,13 @@ eslint-plugin-promise@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.6.0.tgz#54b7658c8f454813dc2a870aff8152ec4969ba75" -eslint-plugin-react@^7.4.0: - version "7.5.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.5.1.tgz#52e56e8d80c810de158859ef07b880d2f56ee30b" +eslint-plugin-react@^7.7.0: + version "7.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz#f606c719dbd8a1a2b3d25c16299813878cca0160" dependencies: - doctrine "^2.0.0" + doctrine "^2.0.2" has "^1.0.1" - jsx-ast-utils "^2.0.0" + jsx-ast-utils "^2.0.1" prop-types "^15.6.0" eslint-plugin-standard@^3.0.1: @@ -2316,9 +2322,9 @@ eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" -eslint@^4.14.0: - version "4.14.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.14.0.tgz#96609768d1dd23304faba2d94b7fefe5a5447a82" +eslint@^4.18.0: + version "4.18.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.18.0.tgz#ebd0ba795af6dc59aa5cee17938160af5950e051" dependencies: ajv "^5.3.0" babel-code-frame "^6.22.0" @@ -2326,7 +2332,7 @@ eslint@^4.14.0: concat-stream "^1.6.0" cross-spawn "^5.1.0" debug "^3.1.0" - doctrine "^2.0.2" + doctrine "^2.1.0" eslint-scope "^3.7.1" eslint-visitor-keys "^1.0.0" espree "^3.5.2" @@ -3941,7 +3947,7 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jsx-ast-utils@^2.0.0: +jsx-ast-utils@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" dependencies: @@ -6417,9 +6423,9 @@ stylelint-config-recommended@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.0.0.tgz#560a028e81ea3ca8894b9a8eef4c0e05ac60e090" -stylelint-config-standard@^18.0.0: - version "18.0.0" - resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-18.0.0.tgz#0d872b40fafdcddcf4188fb5b64ddb3887e8aefc" +stylelint-config-standard@^18.1.0: + version "18.1.0" + resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-18.1.0.tgz#e4d977063f5bca77970033d2f76941c3cc19fd9c" dependencies: stylelint-config-recommended "^2.0.0"