diff --git a/package.json b/package.json index 6258c11117..e8b581825d 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "@babel/core": "^7.7.5", "@babel/register": "^7.7.4", "@babel/runtime": "^7.7.6", - "@polkadot/dev": "^0.32.0-beta.18", + "@polkadot/dev": "^0.32.0-beta.19", "@polkadot/ts": "^0.1.88" } } diff --git a/packages/types/src/codec/Set.ts b/packages/types/src/codec/Set.ts index cfe6860a5b..f326e0ae46 100644 --- a/packages/types/src/codec/Set.ts +++ b/packages/types/src/codec/Set.ts @@ -4,13 +4,14 @@ import { Codec, Constructor, IHash, Registry } from '../types'; -import { assert, isU8a, isNumber, isUndefined, stringCamelCase, stringUpperFirst, u8aToHex } from '@polkadot/util'; +import BN from 'bn.js'; +import { assert, bnToBn, isU8a, isNumber, isString, isUndefined, stringCamelCase, stringUpperFirst, u8aToHex, isBn, u8aToU8a } from '@polkadot/util'; import { blake2AsU8a } from '@polkadot/util-crypto'; import Raw from './Raw'; import { compareArray } from './utils'; -type SetValues = Record; +type SetValues = Record; /** * @name Set @@ -22,17 +23,19 @@ type SetValues = Record; export default class CodecSet extends Set implements Codec { public readonly registry: Registry; - private _setValues: SetValues; + protected _setValues: SetValues; - constructor (registry: Registry, setValues: SetValues, value?: string[] | Set | Uint8Array | number) { + constructor (registry: Registry, setValues: SetValues, value?: string[] | Set | Uint8Array | BN | number | string) { super(CodecSet.decodeSet(setValues, value)); this.registry = registry; this._setValues = setValues; } - public static decodeSet (setValues: SetValues, value: string[] | Set | Uint8Array | number = 0): string[] { - if (isU8a(value)) { + public static decodeSet (setValues: SetValues, value: string[] | Set | Uint8Array | BN | number | string = 0): string[] { + if (isString(value)) { + return CodecSet.decodeSet(setValues, u8aToU8a(value)); + } else if (isU8a(value)) { return value.length === 0 ? [] : CodecSet.decodeSetNumber(setValues, value[0]); @@ -55,9 +58,10 @@ export default class CodecSet extends Set implements Codec { }, [] as string[]); } - private static decodeSetNumber (setValues: SetValues, value: number): string[] { + private static decodeSetNumber (setValues: SetValues, _value: BN | number): string[] { + const bn = bnToBn(_value); const result = Object.keys(setValues).reduce((result, key): string[] => { - if ((value & setValues[key]) === setValues[key]) { + if (bn.and(bnToBn(setValues[key])).eq(bnToBn(setValues[key]))) { result.push(key); } @@ -66,15 +70,15 @@ export default class CodecSet extends Set implements Codec { const computed = CodecSet.encodeSet(setValues, result); - assert(value === computed, `Set: Mismatch decoding '${value}', computed as '${computed}' with ${result}`); + assert(bn.eq(computed), `Set: Mismatch decoding '${bn}', computed as '${computed}' with ${result}`); return result; } - public static encodeSet (setValues: SetValues, value: string[]): number { - return value.reduce((result, value): number => { - return result | (setValues[value] || 0); - }, 0); + public static encodeSet (setValues: SetValues, value: string[]): BN { + return value.reduce((result, value): BN => { + return result.or(bnToBn(setValues[value] || 0)); + }, new BN(0)); } public static with (values: SetValues): Constructor { @@ -129,7 +133,7 @@ export default class CodecSet extends Set implements Codec { /** * @description The encoded value for the set members */ - public get valueEncoded (): number { + public get valueEncoded (): BN { return CodecSet.encodeSet(this._setValues, this.strings); } @@ -155,8 +159,8 @@ export default class CodecSet extends Set implements Codec { return compareArray(this.strings.sort(), other.sort()); } else if (other instanceof Set) { return this.eq([...other.values()]); - } else if (isNumber(other)) { - return this.valueEncoded === other; + } else if (isNumber(other) || isBn(other)) { + return this.valueEncoded.eq(bnToBn(other)); } return false; @@ -180,7 +184,7 @@ export default class CodecSet extends Set implements Codec { * @description The encoded value for the set members */ public toNumber (): number { - return this.valueEncoded; + return this.valueEncoded.toNumber(); } /** @@ -204,6 +208,6 @@ export default class CodecSet extends Set implements Codec { */ // eslint-disable-next-line @typescript-eslint/no-unused-vars public toU8a (isBare?: boolean): Uint8Array { - return new Uint8Array([this.valueEncoded]); + return new Uint8Array([this.valueEncoded.toNumber()]); } } diff --git a/packages/types/src/interfaceRegistry.ts b/packages/types/src/interfaceRegistry.ts index cf6f66e4ef..9fa771fb24 100644 --- a/packages/types/src/interfaceRegistry.ts +++ b/packages/types/src/interfaceRegistry.ts @@ -2,7 +2,7 @@ /* eslint-disable @typescript-eslint/no-empty-interface */ import { Compact, Option, Raw, Vec } from '@polkadot/types/codec'; -import { Bytes, Fixed64, H160, H256, H512, Null, StorageData, StorageHasher, StorageKey, Text, Type, U256, bool, i128, i16, i256, i32, i64, i8, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types/primitive'; +import { Bytes, Data, Fixed64, H160, H256, H512, IdentityFields, Null, StorageData, StorageHasher, StorageKey, Text, Type, U256, bool, i128, i16, i256, i32, i64, i8, u128, u16, u256, u32, u64, u8, usize } from '@polkadot/types/primitive'; import { AccountId, AccountIdOf, AccountIndex, Address, AssetId, Balance, BalanceOf, Block, BlockNumber, Call, Consensus, ConsensusEngineId, Digest, DigestItem, DispatchClass, DispatchInfo, EcdsaSignature, Ed25519Signature, Extrinsic, ExtrinsicEra, ExtrinsicPayload, ExtrinsicPayloadUnknown, ExtrinsicPayloadV1, ExtrinsicPayloadV2, ExtrinsicPayloadV3, ExtrinsicPayloadV4, ExtrinsicUnknown, ExtrinsicV1, ExtrinsicV2, ExtrinsicV3, ExtrinsicV4, Hash, Header, ImmortalEra, Index, Justification, KeyTypeId, KeyValue, LockIdentifier, Moment, MortalEra, MultiSignature, Origin, Perbill, Permill, Phantom, PhantomData, PreRuntime, Seal, SealV0, Signature, SignedBlock, SignerPayload, Sr25519Signature, ValidatorId, Weight, WeightMultiplier } from '@polkadot/types/interfaces/runtime'; import { InclusionHeight, Uncle, UncleEntryItem } from '@polkadot/types/interfaces/authorship'; import { RawAuraPreDigest } from '@polkadot/types/interfaces/aura'; @@ -16,7 +16,7 @@ import { AccountInfo, Amount, AssetOf, InherentOfflineReport, LockPeriods, NewAc import { ApprovalFlag, SetIndex, Vote, VoteIndex, VoteThreshold, VoterInfo } from '@polkadot/types/interfaces/elections'; import { AssetOptions, Owner, PermissionLatest, PermissionVersions, PermissionsV1 } from '@polkadot/types/interfaces/genericAsset'; import { AuthorityIndex, AuthorityList, AuthorityWeight, NextAuthority, PendingPause, PendingResume, SetId, StoredPendingChange, StoredState } from '@polkadot/types/interfaces/grandpa'; -import { Data, IdentityFields, IdentityInfo, IdentityInfoAdditional, Judgement, RegistrarIndex, RegistrarInfo, Registration, RegistrationJudgement } from '@polkadot/types/interfaces/identity'; +import { IdentityInfo, IdentityInfoAdditional, Judgement, RegistrarIndex, RegistrarInfo, Registration, RegistrationJudgement } from '@polkadot/types/interfaces/identity'; import { AuthIndex, AuthoritySignature, Heartbeat, OpaqueMultiaddr, OpaqueNetworkState, OpaquePeerId } from '@polkadot/types/interfaces/imOnline'; import { Kind, OffenceDetails, Offender, OpaqueTimeSlot, ReportIdOf, Reporter } from '@polkadot/types/interfaces/offences'; import { FullIdentification, IdentificationTuple, Keys, SessionIndex, SessionKeys1, SessionKeys2, SessionKeys3, SessionKeys4, SessionKeys5, SessionKeys6 } from '@polkadot/types/interfaces/session'; @@ -38,6 +38,9 @@ export interface InterfaceRegistry { Bytes: Bytes; 'Option': Option; 'Vec': Vec; + Data: Data; + 'Option': Option; + 'Vec': Vec; H160: H160; 'Option': Option; 'Vec': Vec; @@ -47,6 +50,9 @@ export interface InterfaceRegistry { H512: H512; 'Option': Option; 'Vec': Vec; + IdentityFields: IdentityFields; + 'Option': Option; + 'Vec': Vec; i8: i8; 'Option': Option; 'Vec': Vec; @@ -535,12 +541,6 @@ export interface InterfaceRegistry { StoredState: StoredState; 'Option': Option; 'Vec': Vec; - Data: Data; - 'Option': Option; - 'Vec': Vec; - IdentityFields: IdentityFields; - 'Option': Option; - 'Vec': Vec; IdentityInfoAdditional: IdentityInfoAdditional; 'Option': Option; 'Vec': Vec; diff --git a/packages/types/src/interfaces/identity/definitions.ts b/packages/types/src/interfaces/identity/definitions.ts index 05aaa7d81a..4a0f6e09b8 100644 --- a/packages/types/src/interfaces/identity/definitions.ts +++ b/packages/types/src/interfaces/identity/definitions.ts @@ -4,27 +4,6 @@ export default { types: { - Data: { - _enum: { - None: 'Null', - Raw: 'Bytes', - BlakeTwo256: 'H256', - Sha256: 'H256', - Keccak256: 'H256', - ShaThree256: 'H256' - } - }, - IdentityFields: { - _set: { - Display: 0b0000000000000000000000000000000000000000000000000000000000000001, - Legal: 0b0000000000000000000000000000000000000000000000000000000000000010, - Web: 0b0000000000000000000000000000000000000000000000000000000000000100, - Riot: 0b0000000000000000000000000000000000000000000000000000000000001000, - Email: 0b0000000000000000000000000000000000000000000000000000000000010000, - PgpFingerprint: 0b0000000000000000000000000000000000000000000000000000000000100000, - Image: 0b0000000000000000000000000000000000000000000000000000000001000000 - } - }, IdentityInfoAdditional: '(Data, Data)', IdentityInfo: { additional: 'Vec', diff --git a/packages/types/src/interfaces/identity/types.ts b/packages/types/src/interfaces/identity/types.ts index ec29b90e30..b71795de6c 100644 --- a/packages/types/src/interfaces/identity/types.ts +++ b/packages/types/src/interfaces/identity/types.ts @@ -2,54 +2,10 @@ /* eslint-disable @typescript-eslint/no-empty-interface */ import { ITuple } from '@polkadot/types/types'; -import { Enum, Option, Set, Struct, Vec } from '@polkadot/types/codec'; -import { Bytes, H160, H256, u32 } from '@polkadot/types/primitive'; +import { Enum, Option, Struct, Vec } from '@polkadot/types/codec'; +import { Data, H160, IdentityFields, u32 } from '@polkadot/types/primitive'; import { AccountId, Balance } from '@polkadot/types/interfaces/runtime'; -/** Enum */ -export interface Data extends Enum { - /** 0:: None */ - readonly isNone: boolean; - /** 1:: Raw(Bytes) */ - readonly isRaw: boolean; - /** Bytes */ - readonly asRaw: Bytes; - /** 2:: BlakeTwo256(H256) */ - readonly isBlakeTwo256: boolean; - /** H256 */ - readonly asBlakeTwo256: H256; - /** 3:: Sha256(H256) */ - readonly isSha256: boolean; - /** H256 */ - readonly asSha256: H256; - /** 4:: Keccak256(H256) */ - readonly isKeccak256: boolean; - /** H256 */ - readonly asKeccak256: H256; - /** 5:: ShaThree256(H256) */ - readonly isShaThree256: boolean; - /** H256 */ - readonly asShaThree256: H256; -} - -/** Set */ -export interface IdentityFields extends Set { - /** boolean */ - readonly isDisplay: boolean; - /** boolean */ - readonly isLegal: boolean; - /** boolean */ - readonly isWeb: boolean; - /** boolean */ - readonly isRiot: boolean; - /** boolean */ - readonly isEmail: boolean; - /** boolean */ - readonly isPgpFingerprint: boolean; - /** boolean */ - readonly isImage: boolean; -} - /** Struct */ export interface IdentityInfo extends Struct { /** Vec */ diff --git a/packages/types/src/primitive/Data.spec.ts b/packages/types/src/primitive/Data.spec.ts new file mode 100644 index 0000000000..dfb61bddfa --- /dev/null +++ b/packages/types/src/primitive/Data.spec.ts @@ -0,0 +1,28 @@ +// Copyright 2017-2019 @polkadot/types authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +import { TypeRegistry } from '../codec/create'; +import Data from './Data'; + +const registry = new TypeRegistry(); + +describe('Data', (): void => { + it('encodes a normal None', (): void => { + expect( + new Data(registry).toHex() + ).toEqual('0x00'); + }); + + it('encodes a hashed value correctly', (): void => { + expect( + new Data(registry, { Keccak256: '0x0102030405060708091011121314151617181920212223242526272829303132' }).toHex() + ).toEqual('0x240102030405060708091011121314151617181920212223242526272829303132'); + }); + + it('encodes a Raw value correctly', (): void => { + expect( + new Data(registry, { Raw: '0x0102030405060708' }).toHex() + ).toEqual('0x090102030405060708'); + }); +}); diff --git a/packages/types/src/primitive/Data.ts b/packages/types/src/primitive/Data.ts new file mode 100644 index 0000000000..881f0c1740 --- /dev/null +++ b/packages/types/src/primitive/Data.ts @@ -0,0 +1,90 @@ +// Copyright 2017-2019 @polkadot/types authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +import { Registry } from '../types'; + +import { isString, isU8a, u8aToU8a } from '@polkadot/util'; + +import Enum from '../codec/Enum'; +import { createType } from '../codec/create/createType'; + +function decodeDataU8a (registry: Registry, value: Uint8Array): [any, number | undefined] { + if (!value.length) { + return [undefined, undefined]; + } + + const indicator = value[0]; + + if (indicator === 0) { + return [null, 0]; + } else if (indicator >= 1 && indicator <= 33) { + const length = indicator - 1; + const data = value.subarray(1, length + 1); + + // in this case, we are passing a Raw back (since we have no length) + return [createType(registry, 'Raw', data), 1]; + } else if (indicator >= 34 && indicator <= 37) { + return [value.subarray(1, 32 + 1), indicator - 32]; // 34 becomes 2 + } + + throw new Error(`Unable to decode Data, invalid indicator byte ${indicator}`); +} + +function decodeData (registry: Registry, value?: Record | Uint8Array | Enum | string): [any, number | undefined] { + if (!value) { + return [undefined, undefined]; + } else if (isString(value)) { + return decodeDataU8a(registry, u8aToU8a(value)); + } else if (isU8a(value)) { + return decodeDataU8a(registry, value); + } + + // assume we have an Enum or an object input, handle this via the normal Enum decoding + return [value, undefined]; +} + +/** + * @name Data + * @description + * A [[Data]] container with node, raw or hashed data + */ +export default class Data extends Enum { + constructor (registry: Registry, value?: Record | Uint8Array | Enum | string) { + super(registry, { + None: 'Null', // 0 + Raw: 'Bytes', // 1 + BlakeTwo256: 'H256', // 2 + Sha256: 'H256', // 3 + Keccak256: 'H256', // 4 + ShaThree256: 'H256' // 5 + }, ...decodeData(registry, value)); + } + + /** + * @description Encodes the value as a Uint8Array as per the SCALE specifications + */ + public toU8a (): Uint8Array { + if (this.index === 0) { + return new Uint8Array(1); + } else if (this.index === 1) { + // don't add the length, just the data + const data = this.raw.toU8a(true); + const length = Math.min(data.length, 32); + const u8a = new Uint8Array(length + 1); + + u8a.set([data.length + 1], 0); + u8a.set(data.subarray(0, length), 1); + + return u8a; + } + + // otherwise we simply have a hash + const u8a = new Uint8Array(33); + + u8a.set([this.index + 32], 0); + u8a.set(this.raw.toU8a(), 1); + + return u8a; + } +} diff --git a/packages/types/src/primitive/Generic/index.ts b/packages/types/src/primitive/Generic/index.ts index 6eafadd46a..180d459869 100644 --- a/packages/types/src/primitive/Generic/index.ts +++ b/packages/types/src/primitive/Generic/index.ts @@ -8,7 +8,7 @@ export { default as GenericAddress } from './Address'; export { default as GenericBlock } from './Block'; export { default as GenericCall } from './Call'; export { default as GenericConsensusEngineId } from './ConsensusEngineId'; -export { default as GenericEvent } from './Event'; export { default as GenericDigest, DigestItem as GenericDigestItem } from './Digest'; +export { default as GenericEvent } from './Event'; export { default as GenericOrigin } from './Origin'; export { default as GenericVote } from './Vote'; diff --git a/packages/types/src/primitive/IdentityFields.spec.ts b/packages/types/src/primitive/IdentityFields.spec.ts new file mode 100644 index 0000000000..03e5b121eb --- /dev/null +++ b/packages/types/src/primitive/IdentityFields.spec.ts @@ -0,0 +1,28 @@ +// Copyright 2017-2019 @polkadot/types authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +import { TypeRegistry } from '../codec'; +import IdentityFields from './IdentityFields'; + +describe('IdentityFields', (): void => { + const registry = new TypeRegistry(); + + it('has a custom u64 (64-bit) encodedLength', (): void => { + expect( + new IdentityFields(registry).encodedLength + ).toEqual(8); + }); + + it('encodes a sample', (): void => { + expect( + new IdentityFields(registry, ['Display', 'Legal']).valueEncoded.eqn(1 + 2) + ).toBe(true); + }); + + it('encodes to a valid hex value', (): void => { + expect( + new IdentityFields(registry, ['Display', 'Legal']).toHex() + ).toEqual('0x0300000000000000'); + }); +}); diff --git a/packages/types/src/primitive/IdentityFields.ts b/packages/types/src/primitive/IdentityFields.ts new file mode 100644 index 0000000000..66d104d1ca --- /dev/null +++ b/packages/types/src/primitive/IdentityFields.ts @@ -0,0 +1,49 @@ +// Copyright 2017-2019 @polkadot/types authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +import { Registry } from '../types'; + +import BN from 'bn.js'; +import { isString, isU8a, u8aToU8a } from '@polkadot/util'; + +import Set from '../codec/Set'; +import { createType } from '../codec/create/createType'; + +function decodeFields (registry: Registry, value?: any): any { + if (isString(value)) { + return decodeFields(registry, u8aToU8a(value.toString())); + } else if (isU8a(value)) { + return createType(registry, 'u64', value); + } + + return value; +} + +export default class IdentityFields extends Set { + constructor (registry: Registry, value?: any) { + super(registry, { + Display: new BN(0b0000000000000000000000000000000000000000000000000000000000000001), + Legal: new BN(0b0000000000000000000000000000000000000000000000000000000000000010), + Web: new BN(0b0000000000000000000000000000000000000000000000000000000000000100), + Riot: new BN(0b0000000000000000000000000000000000000000000000000000000000001000), + Email: new BN(0b0000000000000000000000000000000000000000000000000000000000010000), + PgpFingerprint: new BN(0b0000000000000000000000000000000000000000000000000000000000100000), + Image: new BN(0b0000000000000000000000000000000000000000000000000000000001000000) + }, decodeFields(registry, value)); + } + + /** + * @description The length of the value when encoded as a Uint8Array + */ + public get encodedLength (): number { + return 8; + } + + /** + * @description Encodes the value as a Uint8Array as per the SCALE specifications + */ + public toU8a (): Uint8Array { + return createType(this.registry, 'u64', this.valueEncoded).toU8a(); + } +} diff --git a/packages/types/src/primitive/index.ts b/packages/types/src/primitive/index.ts index b78d039bf9..7530423c72 100644 --- a/packages/types/src/primitive/index.ts +++ b/packages/types/src/primitive/index.ts @@ -10,9 +10,11 @@ */ export { default as bool } from './Bool'; export { default as Bytes } from './Bytes'; +export { default as Data } from './Data'; export { default as H160 } from './H160'; export { default as H256 } from './H256'; export { default as H512 } from './H512'; +export { default as IdentityFields } from './IdentityFields'; export { default as i8 } from './I8'; export { default as i16 } from './I16'; export { default as i32 } from './I32'; diff --git a/yarn.lock b/yarn.lock index fcf76706a9..e4e8149b40 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1832,10 +1832,10 @@ dependencies: "@types/node" ">= 8" -"@polkadot/dev@^0.32.0-beta.18": - version "0.32.0-beta.18" - resolved "https://registry.yarnpkg.com/@polkadot/dev/-/dev-0.32.0-beta.18.tgz#d55b9017a7c9d0f2821802c4e29ecf0ca881ba99" - integrity sha512-1b5hvCVaqw4VUfn8Or2jjySzGHxt7A0wGu1+lK7ra4jteFuVxFcVaP+m6JNdLmh5m+7WlAsoC6XxaLt5XzYsZg== +"@polkadot/dev@^0.32.0-beta.19": + version "0.32.0-beta.19" + resolved "https://registry.yarnpkg.com/@polkadot/dev/-/dev-0.32.0-beta.19.tgz#9f4e9a78a559f4e050842a6a06365d16d7003188" + integrity sha512-Ozftw1CLtu/K4c8039/b2qBvvrLDSA8GsZi9MdwN0t17AuGmkWruiZ8apd3M4Cqfc7q7NbiwGfOvCdk/7tpTfw== dependencies: "@babel/cli" "^7.7.5" "@babel/core" "^7.7.5" @@ -1856,7 +1856,7 @@ "@typescript-eslint/parser" "2.11.0" babel-core "^7.0.0-bridge.0" babel-jest "^24.9.0" - babel-plugin-module-resolver "^4.0.0" + babel-plugin-module-resolver "^3.2.0" chalk "^3.0.0" coveralls "^3.0.9" cpx "^1.5.0" @@ -3065,7 +3065,7 @@ babel-plugin-jest-hoist@^24.9.0: dependencies: "@types/babel__traverse" "^7.0.6" -babel-plugin-module-resolver@3.2.0: +babel-plugin-module-resolver@3.2.0, babel-plugin-module-resolver@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz#ddfa5e301e3b9aa12d852a9979f18b37881ff5a7" integrity sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA== @@ -3076,17 +3076,6 @@ babel-plugin-module-resolver@3.2.0: reselect "^3.0.1" resolve "^1.4.0" -babel-plugin-module-resolver@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-4.0.0.tgz#8f3a3d9d48287dc1d3b0d5595113adabd36a847f" - integrity sha512-3pdEq3PXALilSJ6dnC4wMWr0AZixHRM4utpdpBR9g5QG7B7JwWyukQv7a9hVxkbGFl+nQbrHDqqQOIBtTXTP/Q== - dependencies: - find-babel-config "^1.2.0" - glob "^7.1.6" - pkg-up "^3.1.0" - reselect "^4.0.0" - resolve "^1.13.1" - babel-preset-jest@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.9.0.tgz#192b521e2217fb1d1f67cf73f70c336650ad3cdc" @@ -5795,7 +5784,7 @@ finalhandler@~1.1.2: statuses "~1.5.0" unpipe "~1.0.0" -find-babel-config@^1.1.0, find-babel-config@^1.2.0: +find-babel-config@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/find-babel-config/-/find-babel-config-1.2.0.tgz#a9b7b317eb5b9860cda9d54740a8c8337a2283a2" integrity sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA== @@ -9717,13 +9706,6 @@ pkg-up@^2.0.0: dependencies: find-up "^2.1.0" -pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== - dependencies: - find-up "^3.0.0" - pluralize@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" @@ -10816,11 +10798,6 @@ reselect@^3.0.1: resolved "https://registry.yarnpkg.com/reselect/-/reselect-3.0.1.tgz#efdaa98ea7451324d092b2b2163a6a1d7a9a2147" integrity sha1-79qpjqdFEyTQkrKyFjpqHXqaIUc= -reselect@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.0.0.tgz#f2529830e5d3d0e021408b246a206ef4ea4437f7" - integrity sha512-qUgANli03jjAyGlnbYVAV5vvnOmJnODyABz51RdBN7M4WaVu8mecZWgyQNkG8Yqe3KRGRt0l4K4B3XVEULC4CA== - resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" @@ -10853,7 +10830,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.2.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.2.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1: version "1.13.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16" integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==