diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..cea5c785 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +**/node_modules/** +**/lib/** +**/example/** +packages/light.js/example-react diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..0f2da7da --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,30 @@ +module.exports = { + parser: '@typescript-eslint/parser', + parserOptions: { + ecmaVersion: 2018, + sourceType: 'module', + }, + plugins: ['@typescript-eslint'], + extends: [ + 'semistandard', + 'plugin:@typescript-eslint/recommended' + ], + rules: { + '@typescript-eslint/camelcase': ['error', { allow: ['keccak_256'] }], + '@typescript-eslint/no-unused-vars': [1, { argsIgnorePattern: '^_' }], + + // TODO: Remove all of these disabled rules. + '@typescript-eslint/ban-ts-ignore': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-explicit-any': 'off', + }, + overrides: [ + { + files: ['*.spec.{ts,tsx}', 'testHelpers.ts'], + env: { + jest: true, + }, + plugins: ['jest'], + }, + ], +}; diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 00000000..d161a2a5 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,7 @@ +module.exports = { + printWidth: 80, + semi: true, + singleQuote: true, + tabWidth: 2, + trailingComma: 'es5', +}; diff --git a/.travis.yml b/.travis.yml index a768dadd..edc4de6f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,6 +13,7 @@ node_js: - '10' script: - yarn lint + - yarn typecheck - yarn test:api - yarn test --silent --coverage --coverageReporters=text-lcov | coveralls ; test ${PIPESTATUS[0]} -eq 0 before_deploy: diff --git a/README.md b/README.md index dc91aef9..08f2ba1a 100644 --- a/README.md +++ b/README.md @@ -75,10 +75,10 @@ yarn outdated git checkout -b ``` -5. Run tests, linting, and build +5. Run tests, type checking, linting, and build ```bash -yarn test; yarn lint; yarn build +yarn test; yarn typecheck; yarn lint; yarn build ``` 6. Push the branch to your fork of the repo diff --git a/package.json b/package.json index 9428bd10..b015029d 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,9 @@ }, "scripts": { "build": "lerna exec yarn build --stream", - "lint": "tslint 'packages/**/*.ts'", + "typecheck": "lerna exec yarn typecheck --stream", + "lint-files": "FILES='packages/*/**/*.{ts,tsx}' && ./scripts/lint-files.sh $FILES", + "lint": "yarn lint-files", "postinstall": "yarn build", "test": "jest", "test:api": "cd packages/api && yarn test", @@ -31,12 +33,23 @@ }, "devDependencies": { "@types/jest": "^24.0.13", + "@typescript-eslint/eslint-plugin": "^2.2.0", + "@typescript-eslint/parser": "^2.2.0", + "eslint": "^6.3.0", + "eslint-config-semistandard": "^15.0.0", + "eslint-config-standard": "^14.0.0", + "eslint-import-resolver-typescript": "^1.1.1", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-jest": "^22.17.0", + "eslint-plugin-json": "^1.4.0", + "eslint-plugin-node": "^9.1.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.0", "jest": "^24.8.0", "lerna": "^3.4.3", + "prettier": "^1.18.2", "rimraf": "^2.6.2", "ts-jest": "^24.0.0", - "tslint": "^5.10.0", - "tslint-config-semistandard": "^7.0.0", "typedoc": "^0.14.2", "typedoc-plugin-markdown": "^1.1.13", "typescript": "^3.1.6" diff --git a/packages/abi/package.json b/packages/abi/package.json index e9ae22e3..42ea3118 100644 --- a/packages/abi/package.json +++ b/packages/abi/package.json @@ -17,6 +17,7 @@ "scripts": { "docs": "typedoc", "prebuild": "rimraf lib", + "typecheck": "tsc --noEmit", "build": "tsc", "test": "jest" }, diff --git a/packages/abi/src/decoder/decoder.ts b/packages/abi/src/decoder/decoder.ts index f4f5b086..eacf7e54 100644 --- a/packages/abi/src/decoder/decoder.ts +++ b/packages/abi/src/decoder/decoder.ts @@ -59,7 +59,7 @@ class Decoder { static decodeParam ( param: ParamType, slices: Slices, - offset: number = 0 + offset = 0 ): DecodeResult { if (!isInstanceOf(param, ParamType)) { throw new Error('param should be instanceof ParamType'); diff --git a/packages/abi/src/encoder/encoder.ts b/packages/abi/src/encoder/encoder.ts index 1dadc2ce..3bce587c 100644 --- a/packages/abi/src/encoder/encoder.ts +++ b/packages/abi/src/encoder/encoder.ts @@ -83,9 +83,7 @@ class Encoder { } } catch (e) { throw new Error( - `Cannot encode token #${index} [${token.type}: ${token.value}]. ${ - e.message - }` + `Cannot encode token #${index} [${token.type}: ${token.value}]. ${e.message}` ); } diff --git a/packages/abi/src/encoder/mediate.ts b/packages/abi/src/encoder/mediate.ts index 06ec51b7..ee1a6655 100644 --- a/packages/abi/src/encoder/mediate.ts +++ b/packages/abi/src/encoder/mediate.ts @@ -123,6 +123,7 @@ class Mediate { .join(''); case 'array': + /* eslint-disable no-case-declarations */ const prefix = padU32((this._value as Mediate[]).length); const inits = (this._value as Mediate[]) .map((mediate: Mediate, index: number) => @@ -146,6 +147,7 @@ class Mediate { .toString(16) ) .join(''); + /* eslint-enable no-case-declarations */ return `${prefix}${inits}${closings}`; } diff --git a/packages/abi/src/types.ts b/packages/abi/src/types.ts index 1058a0e3..2e022a7b 100644 --- a/packages/abi/src/types.ts +++ b/packages/abi/src/types.ts @@ -88,7 +88,7 @@ export type ArrayValue = FixedArrayValue[]; export type TokenValue = | AddressValue - | Boolean + | boolean | BytesValue | StringValue | IntValue diff --git a/packages/abi/src/util/pad.ts b/packages/abi/src/util/pad.ts index 32a5ea5f..298cebff 100644 --- a/packages/abi/src/util/pad.ts +++ b/packages/abi/src/util/pad.ts @@ -91,6 +91,7 @@ export const stringToBytes = (input: BytesValue) => { export const padBytes = (input: BytesValue) => { const inputBytes = stringToBytes(input); + // eslint-disable-next-line @typescript-eslint/no-use-before-define return `${padU32(inputBytes.length)}${padFixedBytes(inputBytes)}`; }; diff --git a/packages/abi/src/util/signature.ts b/packages/abi/src/util/signature.ts index 264f0e0c..a8c2c8ae 100644 --- a/packages/abi/src/util/signature.ts +++ b/packages/abi/src/util/signature.ts @@ -15,6 +15,7 @@ export const eventSignature = ( eventName: string | undefined, params: ParamType[] = [] ) => { + // eslint-disable-next-line @typescript-eslint/no-use-before-define const { strName, name } = parseName(eventName); const types = (params || []).map(fromParamType).join(','); const id = `${strName}(${types})`; diff --git a/packages/abi/src/util/types.spec.ts b/packages/abi/src/util/types.spec.ts index 1b6502cc..a14f997a 100644 --- a/packages/abi/src/util/types.spec.ts +++ b/packages/abi/src/util/types.spec.ts @@ -49,6 +49,7 @@ describe('util/types', () => { describe('isInstanceOf', () => { it('correctly identifies build-in instanceof', () => { + // eslint-disable-next-line no-new-wrappers expect(isInstanceOf(new String('123'), String)).toBe(true); }); diff --git a/packages/abi/src/util/types.ts b/packages/abi/src/util/types.ts index 5ee5fb94..14787222 100644 --- a/packages/abi/src/util/types.ts +++ b/packages/abi/src/util/types.ts @@ -35,6 +35,7 @@ export function isFunction (input?: any): input is Function { } export function isHex (input?: any): boolean { + // eslint-disable-next-line @typescript-eslint/no-use-before-define if (!isString(input)) { return false; } diff --git a/packages/api/package.json b/packages/api/package.json index a96b8469..a0f3a20e 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -18,6 +18,7 @@ }, "scripts": { "prebuild": "rimraf lib", + "typecheck": "tsc --noEmit", "build": "tsc", "test": "cross-env NODE_ENV=test mocha -r ts-node/register 'src/*.spec.js' 'src/**/*.spec.js'" }, diff --git a/packages/api/src/format/input.ts b/packages/api/src/format/input.ts index d0e1d5c3..1132f69d 100644 --- a/packages/api/src/format/input.ts +++ b/packages/api/src/format/input.ts @@ -3,6 +3,8 @@ // // SPDX-License-Identifier: MIT +/* eslint-disable @typescript-eslint/no-use-before-define */ + import BigNumber from 'bignumber.js'; import { @@ -90,7 +92,7 @@ export const inTopics = (topics?: (Topic | Topic[])[]): (string | null)[] => { export const inFilter = (options: FilterOptions) => { const result: { - [key in keyof FilterOptions]: number | string | string[] | Topic[] + [key in keyof FilterOptions]: number | string | string[] | Topic[]; } = {}; if (options) { @@ -232,7 +234,7 @@ export const inTraceFilter = (filterObject: FilterObject) => { default: // @ts-ignore Here, we explicitly pass down extra keys, if they exist - result[key] = options[key]; + result[key] = filterObject[key]; } }); } diff --git a/packages/api/src/format/output.ts b/packages/api/src/format/output.ts index 13c4cc58..73064b81 100644 --- a/packages/api/src/format/output.ts +++ b/packages/api/src/format/output.ts @@ -3,6 +3,8 @@ // // SPDX-License-Identifier: MIT +/* eslint-disable @typescript-eslint/no-use-before-define */ + import BigNumber from 'bignumber.js'; import { isString } from '@parity/abi/lib/util/types'; import { toChecksumAddress } from '@parity/abi/lib/util/address'; @@ -343,10 +345,12 @@ export function outSignerRequest (request: SerializedSignerRequest) { break; case 'origin': + /* eslint-disable no-case-declarations */ // @ts-ignore "Object is possibly 'undefined'." No it's not. const type = Object.keys(result[key])[0]; // @ts-ignore "Object is possibly 'undefined'." No it's not. const details = result[key][type]; + /* eslint-enable no-case-declarations */ request[key] = { type, details }; break; diff --git a/packages/api/src/util/encode.ts b/packages/api/src/util/encode.ts index 879bfb12..75c5ba62 100644 --- a/packages/api/src/util/encode.ts +++ b/packages/api/src/util/encode.ts @@ -70,6 +70,7 @@ export const abiUnencode = (abi: AbiObject, data: string) => { return ( field.type === 'function' && !!field.inputs && + // eslint-disable-next-line @typescript-eslint/no-use-before-define abiSignature(field.name, field.inputs.map(input => input.type)).substr( 2, 8 @@ -93,9 +94,7 @@ export const abiUnencode = (abi: AbiObject, data: string) => { (result, field, index) => { if (!field.name) { throw new Error( - `abiUnencode: input at index ${index} with type ${ - field.type - } doesn't have a name.` + `abiUnencode: input at index ${index} with type ${field.type} doesn't have a name.` ); } result[field.name] = argsByIndex[index]; diff --git a/packages/api/src/util/format.ts b/packages/api/src/util/format.ts index 3d24198b..08904fd4 100644 --- a/packages/api/src/util/format.ts +++ b/packages/api/src/util/format.ts @@ -61,6 +61,7 @@ export const cleanupValue = (value: string | number | Bytes, type: string) => { * @param hex - The hex string to convert. */ export const hexToBytes = (hex: string) => { + // eslint-disable-next-line @typescript-eslint/no-use-before-define const raw = toHex(hex).slice(2); const bytes = []; @@ -114,6 +115,7 @@ export const asciiToHex = (baseString: string) => { */ export const padRight = (input: string, length: number) => { const hexLength = length * 2; + // eslint-disable-next-line @typescript-eslint/no-use-before-define const value = toHex(input).substr(2, hexLength); return ( @@ -133,6 +135,7 @@ export const padRight = (input: string, length: number) => { */ export const padLeft = (input: string | undefined, length: number) => { const hexLength = length * 2; + // eslint-disable-next-line @typescript-eslint/no-use-before-define const value = toHex(input).substr(2, hexLength); return ( diff --git a/packages/api/src/util/types.spec.ts b/packages/api/src/util/types.spec.ts index 2dba528b..7e4ed54a 100644 --- a/packages/api/src/util/types.spec.ts +++ b/packages/api/src/util/types.spec.ts @@ -12,7 +12,7 @@ import { isObject, isString } from './types'; -const Eth = require('../rpc/eth'); +import * as Eth from '../rpc/eth'; describe('util/types', () => { describe('isArray', () => { @@ -71,6 +71,7 @@ describe('util/types', () => { describe('isInstanceOf', () => { it('correctly identifies build-in instanceof', () => { + // eslint-disable-next-line no-new-wrappers expect(isInstanceOf(new String('123'), String)).toBe(true); }); diff --git a/packages/contracts/package.json b/packages/contracts/package.json index 024dbd39..90498fef 100644 --- a/packages/contracts/package.json +++ b/packages/contracts/package.json @@ -18,6 +18,7 @@ "scripts": { "docs": "typedoc && rimraf docs/README.md", "prebuild": "rimraf lib", + "typecheck": "tsc --noEmit", "build": "tsc", "test": "jest" }, diff --git a/packages/contracts/src/badgereg.ts b/packages/contracts/src/badgereg.ts index 85b4af50..4e3d011b 100644 --- a/packages/contracts/src/badgereg.ts +++ b/packages/contracts/src/badgereg.ts @@ -1,4 +1,4 @@ -// Copyright 2015-2019 Parity Technologies (UK) Ltd. +// Copyright 2015-2019 Parity Technologies(UK) Ltd. // This file is part of Parity. // // SPDX-License-Identifier: MIT @@ -28,6 +28,7 @@ export default class BadgeReg { public contracts: { [key: string]: Contract; } = {}; + private _registry: Registry; constructor (api: Api, registry: Registry) { diff --git a/packages/contracts/src/registry.ts b/packages/contracts/src/registry.ts index 1635761e..14ce410f 100644 --- a/packages/contracts/src/registry.ts +++ b/packages/contracts/src/registry.ts @@ -7,7 +7,7 @@ import * as abis from './abi'; import { Api, Contract, ContractInstance } from './types'; interface QueueItem { - resolve (...args: any[]): void; + resolve(...args: any[]): void; } const REGISTRY_V1_HASHES = [ @@ -20,11 +20,13 @@ export default class Registry { private _contracts: { [key: string]: Contract; } = {}; + private _fetching = false; private _instance: ContractInstance = null; private _pendingContracts: { [key: string]: Promise; } = {}; + private _queue: QueueItem[] = []; private _registryContract: Contract | null = null; diff --git a/packages/electron/package.json b/packages/electron/package.json index c8a87bd6..06f99b4e 100644 --- a/packages/electron/package.json +++ b/packages/electron/package.json @@ -17,6 +17,7 @@ "scripts": { "docs": "typedoc", "prebuild": "rimraf lib", + "typecheck": "tsc --noEmit", "build": "tsc", "test": "jest" }, diff --git a/packages/electron/src/getParityPath.ts b/packages/electron/src/getParityPath.ts index 63b11291..3a2b637c 100644 --- a/packages/electron/src/getParityPath.ts +++ b/packages/electron/src/getParityPath.ts @@ -115,7 +115,7 @@ export async function getParityPath () { ); return path; } catch (err) { - logger()('@parity/electron:main')(`Parity not found on machine.`); + logger()('@parity/electron:main')('Parity not found on machine.'); throw err; } } diff --git a/packages/electron/src/isParityRunning.ts b/packages/electron/src/isParityRunning.ts index 7f6bb606..b3fc49f4 100644 --- a/packages/electron/src/isParityRunning.ts +++ b/packages/electron/src/isParityRunning.ts @@ -24,7 +24,7 @@ export async function isParityRunning ( wsPort: '8546' } ) { - return new Promise((resolve, reject) => { + return new Promise(resolve => { const { wsInterface, wsPort } = { wsInterface: '127.0.0.1', wsPort: '8546', diff --git a/packages/electron/src/runParity.ts b/packages/electron/src/runParity.ts index ddb437e9..7b793f64 100644 --- a/packages/electron/src/runParity.ts +++ b/packages/electron/src/runParity.ts @@ -57,7 +57,7 @@ export async function runParity ( }, ...options }; - const parityPath = options.parityPath || await getParityPath(); + const parityPath = options.parityPath || (await getParityPath()); // Some users somehow had no +x on the parity binary after downloading // it. We try to set it here (no guarantee it will work, we might not @@ -68,7 +68,7 @@ export async function runParity ( /* Do nothing if error. */ } - return new Promise((resolve, reject) => { + return new Promise(resolve => { let logLastLine = ''; // Always contains last line of the Parity logs // Run an instance of parity with the correct flags diff --git a/packages/electron/src/signerNewToken.ts b/packages/electron/src/signerNewToken.ts index ad462768..1446c796 100644 --- a/packages/electron/src/signerNewToken.ts +++ b/packages/electron/src/signerNewToken.ts @@ -13,11 +13,15 @@ import logger from './utils/logger'; * Runs parity signer new-token and resolves with a new secure token to be * used in a dapp. Rejects if no token could be extracted. */ -export function signerNewToken (options?: { parityPath: string; }): Promise { +export function signerNewToken (options?: { + parityPath: string; +}): Promise { + // eslint-disable-next-line no-async-promise-executor return new Promise(async (resolve, reject) => { logger()('@parity/electron:main')('Requesting new token.'); - const parityPath = options && options.parityPath || await getParityPath(); + const parityPath = + (options && options.parityPath) || (await getParityPath()); // Generate a new token const paritySigner = spawn(parityPath, ['signer', 'new-token']); diff --git a/packages/light.js-react/package.json b/packages/light.js-react/package.json index 2c6336ec..7d49b8de 100644 --- a/packages/light.js-react/package.json +++ b/packages/light.js-react/package.json @@ -22,6 +22,7 @@ }, "scripts": { "prebuild": "rimraf lib", + "typecheck": "tsc --noEmit", "build": "tsc", "test": "jest" }, diff --git a/packages/light.js-react/src/index.spec.tsx b/packages/light.js-react/src/index.spec.tsx index 3ea93e2f..667483fd 100644 --- a/packages/light.js-react/src/index.spec.tsx +++ b/packages/light.js-react/src/index.spec.tsx @@ -5,6 +5,7 @@ import 'symbol-observable'; // TODO Remove this once https://github.com/acdlite/recompose/pull/660 is merged +// eslint-disable-next-line @typescript-eslint/no-unused-vars import * as React from 'react'; import * as Adapter from 'enzyme-adapter-react-16'; import * as Enzyme from 'enzyme'; @@ -16,7 +17,9 @@ import light, { withOneObservable } from './'; Enzyme.configure({ adapter: new Adapter() }); const { mount } = Enzyme; -const MockComponent = toClass(props =>
{JSON.stringify(props)}
) as any; +const MockComponent = toClass(props => ( +
{JSON.stringify(props)}
+)) as any; const mockRpc$ = () => of('bar'); describe('withOneObservable', () => { @@ -25,6 +28,7 @@ describe('withOneObservable', () => { }); test('it should give the wrapped component the correct props', () => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars const EnhancedComponent = withOneObservable('foo', mockRpc$)(MockComponent); const wrapper = mount(); const div = wrapper.find('div'); @@ -42,6 +46,7 @@ describe('light', () => { }); test('it should give the wrapped component the correct props', () => { + // eslint-disable-next-line @typescript-eslint/no-unused-vars const EnhancedComponent = light({ foo: mockRpc$, baz: mockRpc$ })( MockComponent ); diff --git a/packages/light.js-react/src/index.ts b/packages/light.js-react/src/index.ts index a683a7b5..041411ff 100644 --- a/packages/light.js-react/src/index.ts +++ b/packages/light.js-react/src/index.ts @@ -24,16 +24,16 @@ export const withOneObservable = ( key: string, rpc$: RpcObservable ) => - mapPropsStreamWithConfig({ + mapPropsStreamWithConfig({ // Converts a plain ES observable to an RxJS 6 observable - fromESObservable: from, - toESObservable: stream$ => stream$ - })(props$ => - combineLatest( - props$, - (props$ as Observable).pipe(switchMap(rpc$)) - ).pipe(map(([props, value]) => ({ ...props, [key]: value }))) - ); + fromESObservable: from, + toESObservable: stream$ => stream$ + })(props$ => + combineLatest( + props$, + (props$ as Observable).pipe(switchMap(rpc$)) + ).pipe(map(([props, value]) => ({ ...props, [key]: value }))) + ); /** * HOC which listens to multiple Observables, and injects those emitted values diff --git a/packages/light.js/package.json b/packages/light.js/package.json index 540058f1..1f0d8612 100644 --- a/packages/light.js/package.json +++ b/packages/light.js/package.json @@ -22,6 +22,7 @@ "scripts": { "docs": "typedoc", "prebuild": "rimraf lib", + "typecheck": "tsc --noEmit", "build": "tsc", "test": "jest --runInBand" }, diff --git a/packages/light.js/src/frequency/frequency.spec.ts b/packages/light.js/src/frequency/frequency.spec.ts index 30a3e234..87472430 100644 --- a/packages/light.js/src/frequency/frequency.spec.ts +++ b/packages/light.js/src/frequency/frequency.spec.ts @@ -9,11 +9,7 @@ import { take } from 'rxjs/operators'; import frequency from './frequency'; import { FrequencyObservable, FrequencyKey, FrequencyMap } from '../types'; import isObservable from '../utils/isObservable'; -import { - MockProvider, - rejectApi, - resolveApi -} from '../utils/testHelpers/mockApi'; +import { resolveApi } from '../utils/testHelpers/mockApi'; import { setApi } from '@parity/light.js/src/api'; jest.mock('@parity/api'); diff --git a/packages/light.js/src/frequency/other.ts b/packages/light.js/src/frequency/other.ts index a4529a0e..999b7521 100644 --- a/packages/light.js/src/frequency/other.ts +++ b/packages/light.js/src/frequency/other.ts @@ -3,6 +3,8 @@ // // SPDX-License-Identifier: MIT +/* eslint-disable @typescript-eslint/no-unused-vars */ + import { of } from 'rxjs'; import * as memoizee from 'memoizee'; @@ -17,6 +19,7 @@ function onStartup$ (options?: FrequencyObservableOptions) { return of(0); } // @ts-ignore +// eslint-disable-next-line no-func-assign onStartup$ = memoizee(onStartup$); export { onStartup$ }; diff --git a/packages/light.js/src/frequency/time.ts b/packages/light.js/src/frequency/time.ts index e5a540ab..7c137735 100644 --- a/packages/light.js/src/frequency/time.ts +++ b/packages/light.js/src/frequency/time.ts @@ -3,6 +3,8 @@ // // SPDX-License-Identifier: MIT +/* eslint-disable @typescript-eslint/no-unused-vars */ + import { timer } from 'rxjs'; import * as memoizee from 'memoizee'; @@ -15,6 +17,7 @@ function onEverySecond$ (options?: FrequencyObservableOptions) { return timer(0, 1000); } // @ts-ignore +// eslint-disable-next-line no-func-assign onEverySecond$ = memoizee(onEverySecond$); /** @@ -24,6 +27,7 @@ function onEvery2Seconds$ (options?: FrequencyObservableOptions) { return timer(0, 2000); } // @ts-ignore +// eslint-disable-next-line no-func-assign onEvery2Seconds$ = memoizee(onEvery2Seconds$); /** @@ -33,6 +37,7 @@ function onEvery5Seconds$ (options?: FrequencyObservableOptions) { return timer(0, 5000); } // @ts-ignore +// eslint-disable-next-line no-func-assign onEvery5Seconds$ = memoizee(onEvery5Seconds$); export { onEverySecond$, onEvery2Seconds$, onEvery5Seconds$ }; diff --git a/packages/light.js/src/frequency/utils/createPubsubObservable.spec.ts b/packages/light.js/src/frequency/utils/createPubsubObservable.spec.ts index 3a4eb076..ad23e2cd 100644 --- a/packages/light.js/src/frequency/utils/createPubsubObservable.spec.ts +++ b/packages/light.js/src/frequency/utils/createPubsubObservable.spec.ts @@ -3,7 +3,10 @@ // // SPDX-License-Identifier: MIT -import createPubsubObservable, { POLL_INTERVAL, UNSUB_DELAY } from './createPubsubObservable'; +import createPubsubObservable, { + POLL_INTERVAL, + UNSUB_DELAY +} from './createPubsubObservable'; import isObservable from '../../utils/isObservable'; import { rejectApi, resolveApi } from '../../utils/testHelpers/mockApi'; import { setApi } from '../../api'; @@ -90,14 +93,20 @@ describe('should manage polling sparingly', () => { }); it('should emit values and re-emit previous value on observable subscription', async () => { - setApi(resolveApi(() => { - return called++; - }, false)); - - sub1 = initial$.subscribe(i => { sub1received.push(i as number); }); + setApi( + resolveApi(() => { + return called++; + }, false) + ); + + sub1 = initial$.subscribe(i => { + sub1received.push(i as number); + }); await sleep(POLL_INTERVAL - 5); - sub2 = copy$.subscribe(i => { sub2Received.push(i as number); }); + sub2 = copy$.subscribe(i => { + sub2Received.push(i as number); + }); await sleep(10); expect(sub1received).toEqual([0, 1]); @@ -109,7 +118,7 @@ describe('should manage polling sparingly', () => { sub2.unsubscribe(); await sleep(UNSUB_DELAY); - let previousCalled = called; + const previousCalled = called; await sleep(POLL_INTERVAL + 5); expect(called).toBe(previousCalled); @@ -120,16 +129,16 @@ describe('should manage pubsub connection sparingly', () => { let blockNumber = 10442873; const api = { isPubSub: true, - pubsub: - { + pubsub: { eth: { blockNumber: async (next: any) => { + // eslint-disable-next-line @typescript-eslint/no-use-before-define expect(subscription).not.toBeUndefined(); next(null, blockNumber++); return 5; } }, - unsubscribe: (_subscriptionId: any) => { return; } + unsubscribe: (_subscriptionId: any) => {} } }; const pubsubUnsubSpy = jest.spyOn(api.pubsub, 'unsubscribe'); @@ -158,7 +167,7 @@ describe('should manage pubsub connection sparingly', () => { }); it('should re-emit previous value on observable subscription', async () => { - let values: number[] = []; + const values: number[] = []; subscription = obs.subscribe(x => values.push(x)); await sleep(5); @@ -166,9 +175,12 @@ describe('should manage pubsub connection sparingly', () => { }); it('should re-use the same pubsub when used twice', async () => { - const obs2: Observable = createPubsubObservable('eth_blockNumber', 'eth_blockNumber'); + const obs2: Observable = createPubsubObservable( + 'eth_blockNumber', + 'eth_blockNumber' + ); - let values: number[] = []; + const values: number[] = []; obs2.subscribe(x => values.push(x)); expect(values).toEqual([10442874]); }); diff --git a/packages/light.js/src/frequency/utils/createPubsubObservable.ts b/packages/light.js/src/frequency/utils/createPubsubObservable.ts index 14395c01..597e9b4c 100644 --- a/packages/light.js/src/frequency/utils/createPubsubObservable.ts +++ b/packages/light.js/src/frequency/utils/createPubsubObservable.ts @@ -57,7 +57,7 @@ const createPubsubObservableWithApi = memoizee( if (!api.isPubSub) { debug('@parity/light.js:api')( `Pubsub not available for ${ - api.provider ? api.provider.constructor.name : 'current Api' + api.provider ? api.provider.constructor.name : 'current Api' } provider, polling "${fallback}" every ${POLL_INTERVAL}ms.` ); @@ -96,7 +96,9 @@ const createPubsubObservableWithApi = memoizee( }); } - return observable.pipe(distinctReplayRefCountDelay(UNSUB_DELAY)) as Observable; + return observable.pipe( + distinctReplayRefCountDelay(UNSUB_DELAY) + ) as Observable; } ); diff --git a/packages/light.js/src/rpc/eth.ts b/packages/light.js/src/rpc/eth.ts index 75767b02..0eb6563f 100644 --- a/packages/light.js/src/rpc/eth.ts +++ b/packages/light.js/src/rpc/eth.ts @@ -19,7 +19,7 @@ import { switchMapPromise } from '../utils/operators'; * @return - An Observable containing the chain ID. */ export function chainId$ (options?: RpcObservableOptions) { - return createRpc$({ + return createRpc$({ calls: ['eth_chainId'], frequency: [frequency.onStartup$], name: 'chainId$', @@ -51,7 +51,7 @@ export function accounts$ (options?: RpcObservableOptions) { * @return - An Observable containing the balance. */ export function balanceOf$ (address: Address, options?: RpcObservableOptions) { - return createRpc$({ + return createRpc$({ calls: ['eth_getBalance'], frequency: [frequency.onEveryBlock$, frequency.onStartup$], name: 'balanceOf$', @@ -66,12 +66,17 @@ export function balanceOf$ (address: Address, options?: RpcObservableOptions) { * @param options - Options to pass to {@link RpcObservableOptions}. * @return - An Observable containing the transaction count. */ -export function transactionCountOf$ (address: Address, options?: RpcObservableOptions) { - return createRpc$({ +export function transactionCountOf$ ( + address: Address, + options?: RpcObservableOptions +) { + return createRpc$({ calls: ['eth_getTransactionCount'], frequency: [frequency.onEveryBlock$, frequency.onStartup$], name: 'transactionCountOf$', - pipes: api => [switchMapPromise(() => api.eth.getTransactionCount(address))] + pipes: api => [ + switchMapPromise(() => api.eth.getTransactionCount(address)) + ] })(options)(address); } @@ -107,15 +112,11 @@ export function blockNumber$ (options?: RpcObservableOptions) { * Shorthand for fetching the current account's balance. */ export function myBalance$ (options?: RpcObservableOptions) { - return createRpc$({ - calls: [`eth_getBalance`], + return createRpc$({ + calls: ['eth_getBalance'], dependsOn: defaultAccount$, name: 'myBalance$', - pipes: () => [ - switchMap(defaultAccount => - balanceOf$(defaultAccount) - ) - ] + pipes: () => [switchMap(defaultAccount => balanceOf$(defaultAccount))] })(options)(); } diff --git a/packages/light.js/src/rpc/other/makeContract.ts b/packages/light.js/src/rpc/other/makeContract.ts index 55bf8bdd..42370610 100644 --- a/packages/light.js/src/rpc/other/makeContract.ts +++ b/packages/light.js/src/rpc/other/makeContract.ts @@ -91,15 +91,18 @@ const makeContractWithApi = memoizee( } else { const { estimate, passphrase, ...txFields } = options; - return post$({ - to: address, - data: abiEncode( - method.name, - method.inputs.map(({ kind: { type } }: any) => type), // TODO Use @parity/api types - args - ), - ...txFields - }, { estimate, passphrase }); + return post$( + { + to: address, + data: abiEncode( + method.name, + method.inputs.map(({ kind: { type } }: any) => type), // TODO Use @parity/api types + args + ), + ...txFields + }, + { estimate, passphrase } + ); } }; }); diff --git a/packages/light.js/src/rpc/other/post.ts b/packages/light.js/src/rpc/other/post.ts index bf7b34e2..270944c8 100644 --- a/packages/light.js/src/rpc/other/post.ts +++ b/packages/light.js/src/rpc/other/post.ts @@ -8,12 +8,11 @@ import * as debug from 'debug'; import { Observable, Observer } from 'rxjs'; import { createApiFromProvider, getApi } from '../../api'; -import { distinctReplayRefCountDelay } from '../../utils/operators'; import { RpcObservableOptions, Tx, TxStatus } from '../../types'; interface PostOptions extends RpcObservableOptions { estimate?: boolean; - passphrase: String; + passphrase: string; } function getTransactionByHash (transactionHash: string, api: any) { @@ -64,10 +63,13 @@ export function post$ (tx: Tx, options: PostOptions) { observer.next({ estimated: gas }); } - const signedTransaction = await api.personal.signTransaction(tx, passphrase); + const signedTransaction = await api.personal.signTransaction( + tx, + passphrase + ); observer.next({ signed: signedTransaction.raw }); + // eslint-disable-next-line @typescript-eslint/no-use-before-define postRaw$(signedTransaction.raw).subscribe(observer); - } catch (error) { observer.next({ failed: error }); observer.error(error); diff --git a/packages/light.js/src/rpc/parity.ts b/packages/light.js/src/rpc/parity.ts index 456ece2d..24139aee 100644 --- a/packages/light.js/src/rpc/parity.ts +++ b/packages/light.js/src/rpc/parity.ts @@ -48,6 +48,8 @@ export function versionInfo$ (options?: RpcObservableOptions) { calls: ['parity_versionInfo'], frequency: [frequency.onStartup$], name: 'versionInfo$', - pipes: api => [switchMapPromise(() => api.parity.versionInfo(), { emitErrors: true })] + pipes: api => [ + switchMapPromise(() => api.parity.versionInfo(), { emitErrors: true }) + ] })(options)(); } diff --git a/packages/light.js/src/rpc/rpc.spec.ts b/packages/light.js/src/rpc/rpc.spec.ts index 48af663c..b1a6c194 100644 --- a/packages/light.js/src/rpc/rpc.spec.ts +++ b/packages/light.js/src/rpc/rpc.spec.ts @@ -6,9 +6,7 @@ import * as Api from '@parity/api'; import isObservable from '../utils/isObservable'; -import { - resolveApi -} from '../utils/testHelpers/mockApi'; +import { resolveApi } from '../utils/testHelpers/mockApi'; import rpc from './rpc'; import { RpcKey, RpcMap, RpcObservable } from '../types'; import { setApi } from '../api'; @@ -63,7 +61,6 @@ const testRpc = (name: string, rpc$: RpcObservable) => // Memoization tests don't concern post$ if (name === 'post$' || name === 'postRaw$') { - return; } }); diff --git a/packages/light.js/src/rpc/utils/createRpc.spec.ts b/packages/light.js/src/rpc/utils/createRpc.spec.ts index 70feeeb9..1e36f6de 100644 --- a/packages/light.js/src/rpc/utils/createRpc.spec.ts +++ b/packages/light.js/src/rpc/utils/createRpc.spec.ts @@ -11,26 +11,27 @@ import { setApi } from '../../api'; import sleep from '../../utils/testHelpers/sleep'; describe('should manage source observable sparingly', () => { - let unsubscribe = 0; // Returns an observable function rpc (options?: RpcObservableOptions) { return createRpc$({ - frequency: [() => { - return new Observable(subscriber => { - let i = 0; - subscriber.next(i++); - const itl = setInterval(() => { + frequency: [ + () => { + return new Observable(subscriber => { + let i = 0; subscriber.next(i++); - }, 1000); - return () => { - clearInterval(itl); - unsubscribe++; - }; - }); - }], - pipes: api => [] + const itl = setInterval(() => { + subscriber.next(i++); + }, 1000); + return () => { + clearInterval(itl); + unsubscribe++; + }; + }); + } + ], + pipes: () => [] })(options)(); } @@ -62,7 +63,7 @@ describe('should manage source observable sparingly', () => { }); it('should re-emit previous value on observable subscription', async () => { - let values: number[] = []; + const values: number[] = []; subscription = obs.subscribe(x => { values.push(x); }); @@ -74,7 +75,7 @@ describe('should manage source observable sparingly', () => { it('should use the same source observable when used twice', async () => { const obs2: Observable = rpc(); - let values: number[] = []; + const values: number[] = []; await sleep(1000); @@ -86,7 +87,7 @@ describe('should manage source observable sparingly', () => { setApi(resolveApi('foo')); const obs2: Observable = rpc(); - let values: number[] = []; + const values: number[] = []; obs2.subscribe(x => values.push(x)); await sleep(5); @@ -94,11 +95,11 @@ describe('should manage source observable sparingly', () => { }); let obs3: Observable; - let provider = new MockProvider(); + const provider = new MockProvider(); it('should not use the same source observable if options are passed', async () => { obs3 = rpc({ provider }); - let values: number[] = []; + const values: number[] = []; obs3.subscribe(x => values.push(x)); await sleep(5); @@ -109,7 +110,7 @@ describe('should manage source observable sparingly', () => { const obs4: Observable = rpc({ provider }); await sleep(1000); - let values: number[] = []; + const values: number[] = []; obs4.subscribe(x => values.push(x)); expect(values).toEqual([1]); diff --git a/packages/light.js/src/rpc/utils/createRpc.ts b/packages/light.js/src/rpc/utils/createRpc.ts index 3f0654aa..e5a0c0ae 100644 --- a/packages/light.js/src/rpc/utils/createRpc.ts +++ b/packages/light.js/src/rpc/utils/createRpc.ts @@ -3,7 +3,7 @@ // // SPDX-License-Identifier: MIT -import { defer, merge, Observable, of, OperatorFunction } from 'rxjs'; +import { defer, merge, Observable, OperatorFunction } from 'rxjs'; import { isFunction } from '@parity/api/lib/util/types'; // @ts-ignore Unfortunately no types for memoizee/weak. import * as memoizeeWeak from 'memoizee/weak'; @@ -34,9 +34,7 @@ const createRpcWithApi = memoizeeWeak( (api: any, metadata: Metadata, ...args: any[]) => { if (!metadata.dependsOn && !metadata.frequency) { throw new Error( - `Rpc$ '${ - metadata.name - }' needs either a 'dependsOn' or a 'frequency' field.` + `Rpc$ '${metadata.name}' needs either a 'dependsOn' or a 'frequency' field.` ); } @@ -46,10 +44,10 @@ const createRpcWithApi = memoizeeWeak( const source$ = metadata.dependsOn ? metadata.dependsOn(...args, { provider: api.provider }) : merge( - ...(metadata.frequency as FrequencyObservable[]).map(f => - f({ provider: api.provider }) - ) - ); + ...(metadata.frequency as FrequencyObservable[]).map(f => + f({ provider: api.provider }) + ) + ); // The pipes to add const pipes: OperatorFunction[] = []; @@ -84,7 +82,7 @@ const createRpcWithApi = memoizeeWeak( * createRpc(metadata)(options) returns a RpcObservable. * createRpc(metadata)(options)(someArgs) returns an Observable. */ -const createRpc = (metadata: Metadata) => ( +const createRpc = (metadata: Metadata) => ( options: RpcObservableOptions = {} ) => (...args: any[]) => { // Evaluate api only once we subscribe diff --git a/packages/light.js/src/types.ts b/packages/light.js/src/types.ts index 7870408a..8c3c43e6 100644 --- a/packages/light.js/src/types.ts +++ b/packages/light.js/src/types.ts @@ -17,7 +17,7 @@ declare global { // TODO This should be on @parity/api export type AccountsInfo = { - name: String; + name: string; }; // TODO This should be on @parity/api @@ -53,7 +53,7 @@ export interface FrequencyObservable { } export type FrequencyMap = { - [index in FrequencyKey]: FrequencyObservable + [index in FrequencyKey]: FrequencyObservable; }; export interface MakeContract { @@ -68,7 +68,7 @@ export type RpcKey = keyof typeof rpc; export interface RpcObservable { (...args: any[]): Observable; metadata?: Metadata; - setFrequency? (frequency: FrequencyObservable[]): void; // post$, makeContract... don't have setFrequency + setFrequency?(frequency: FrequencyObservable[]): void; // post$, makeContract... don't have setFrequency } export type RpcMap = { [index in RpcKey]: RpcObservable }; diff --git a/packages/light.js/src/utils/operators/distinctReplayRefCountDelay.spec.ts b/packages/light.js/src/utils/operators/distinctReplayRefCountDelay.spec.ts index 0a68f949..d9d26875 100644 --- a/packages/light.js/src/utils/operators/distinctReplayRefCountDelay.spec.ts +++ b/packages/light.js/src/utils/operators/distinctReplayRefCountDelay.spec.ts @@ -6,8 +6,9 @@ import { distinctReplayRefCountDelay } from './distinctReplayRefCountDelay'; import isObservable from '../isObservable'; import mockRpc$ from '../testHelpers/mockRpc'; -import { Observable } from 'rxjs'; it('should return an Observable', () => { - expect(isObservable(mockRpc$().pipe(distinctReplayRefCountDelay(2000)))).toBe(true); + expect(isObservable(mockRpc$().pipe(distinctReplayRefCountDelay(2000)))).toBe( + true + ); }); diff --git a/packages/light.js/src/utils/operators/distinctReplayRefCountDelay.ts b/packages/light.js/src/utils/operators/distinctReplayRefCountDelay.ts index 27822822..90283b1d 100644 --- a/packages/light.js/src/utils/operators/distinctReplayRefCountDelay.ts +++ b/packages/light.js/src/utils/operators/distinctReplayRefCountDelay.ts @@ -3,7 +3,7 @@ // // SPDX-License-Identifier: MIT -import { publishReplay, refCount } from 'rxjs/operators'; +import { publishReplay } from 'rxjs/operators'; import { Observable } from 'rxjs'; import { operators } from 'rxjs-etc'; @@ -19,13 +19,13 @@ const { refCountDelay } = operators; export const distinctReplayRefCountDelay = (delay: number) => ( source$: Observable ): Observable => - source$.pipe( - distinctValues(), + source$.pipe( + distinctValues(), - // Note: uses a single subject, so the previous value might come from a - // previous dropped subscription to the source observable - publishReplay(1), + // Note: uses a single subject, so the previous value might come from a + // previous dropped subscription to the source observable + publishReplay(1), - // Unsubscribe to the source observable only after 2 seconds with no subscribers - refCountDelay(delay) - ); + // Unsubscribe to the source observable only after 2 seconds with no subscribers + refCountDelay(delay) + ); diff --git a/packages/light.js/src/utils/operators/switchMapPromise.spec.ts b/packages/light.js/src/utils/operators/switchMapPromise.spec.ts index 220e4cad..444637dd 100644 --- a/packages/light.js/src/utils/operators/switchMapPromise.spec.ts +++ b/packages/light.js/src/utils/operators/switchMapPromise.spec.ts @@ -3,8 +3,6 @@ // // SPDX-License-Identifier: MIT -import { skip, take } from 'rxjs/operators'; - import mockRpc$ from '../testHelpers/mockRpc'; import { rejectApi, resolveApi } from '../testHelpers/mockApi'; import { switchMapPromise } from './switchMapPromise'; @@ -32,7 +30,9 @@ it('should not error when the promise rejects', done => { it('should fire an error when the promise resolves with an error', done => { mockRpc$() .pipe( - switchMapPromise(rejectApi(new Error('boo')).fake.method, { emitErrors: true }) + switchMapPromise(rejectApi(new Error('boo')).fake.method, { + emitErrors: true + }) ) .subscribe(undefined, err => { expect(err).toEqual(new Error('boo')); @@ -43,7 +43,9 @@ it('should fire an error when the promise resolves with an error', done => { it('should fire an error when the promise rejects', done => { mockRpc$() .pipe( - switchMapPromise(rejectApi(new Error('boo')).fake.method, { emitErrors: true }) + switchMapPromise(rejectApi(new Error('boo')).fake.method, { + emitErrors: true + }) ) .subscribe(undefined, err => { expect(err).toEqual(new Error('boo')); @@ -53,9 +55,7 @@ it('should fire an error when the promise rejects', done => { it('should fire the correct value when the promise resolves', done => { mockRpc$() - .pipe( - switchMapPromise(resolveApi().fake.method) - ) + .pipe(switchMapPromise(resolveApi().fake.method)) .subscribe(data => { expect(data).toBe('foo'); done(); diff --git a/packages/light.js/src/utils/operators/switchMapPromise.ts b/packages/light.js/src/utils/operators/switchMapPromise.ts index d2b3eb47..057b558b 100644 --- a/packages/light.js/src/utils/operators/switchMapPromise.ts +++ b/packages/light.js/src/utils/operators/switchMapPromise.ts @@ -4,7 +4,7 @@ // SPDX-License-Identifier: MIT import { catchError, switchMap } from 'rxjs/operators'; -import { empty, from, Observable, throwError, OperatorFunction } from 'rxjs'; +import { empty, from, throwError, OperatorFunction } from 'rxjs'; interface SwitchMapPromiseOptions { emitErrors: boolean; @@ -20,11 +20,14 @@ interface SwitchMapPromiseOptions { * * @ignore */ -export const switchMapPromise = (promise: () => Promise, options: SwitchMapPromiseOptions = { emitErrors: false }): OperatorFunction => +export const switchMapPromise = ( + promise: () => Promise, + options: SwitchMapPromiseOptions = { emitErrors: false } +): OperatorFunction => switchMap(() => from( promise().then(result => { - // The result can sometimes be {id: 2, jsonrpc: "2.0", error: {...}} + // The result can sometimes be {id: 2, jsonrpc: "2.0", error: {...}} if ((result as any).error) { return Promise.reject(result); } @@ -48,4 +51,4 @@ export const switchMapPromise = (promise: () => Promise, options: Switch } }) ) - ); + ); diff --git a/packages/light.js/src/utils/testHelpers/mockApi.ts b/packages/light.js/src/utils/testHelpers/mockApi.ts index ff4748f4..df1672bc 100644 --- a/packages/light.js/src/utils/testHelpers/mockApi.ts +++ b/packages/light.js/src/utils/testHelpers/mockApi.ts @@ -22,7 +22,15 @@ export class MockProvider extends EventEmitter { // List of JSONRPCs we want to mock const listOfMockRps: { [index: string]: string[] } = { - eth: ['accounts', 'blockNumber', 'chainId', 'getBalance', 'getTransactionCount', 'newHeads', 'syncing'], + eth: [ + 'accounts', + 'blockNumber', + 'chainId', + 'getBalance', + 'getTransactionCount', + 'newHeads', + 'syncing' + ], fake: ['method'], net: ['peerCount'], parity: ['accountsInfo', 'chain', 'postTransaction', 'versionInfo'] @@ -34,15 +42,21 @@ const listOfMockRps: { [index: string]: string[] } = { * @ignore */ const createApi = ( - resolveValueOrFunction: string | object | (() => any) | { error: string } | Error, + resolveValueOrFunction: + | string + | object + | (() => any) + | { error: string } + | Error, isPubSub: boolean, isError: boolean ) => { - const getResolveValue = () => // TODO Casting as Function manually, or else we get: // "Cannot invoke an expression whose type lacks a call signature. Type 'Function | (() => any)' has no compatible call signatures." - (typeof resolveValueOrFunction === 'function' ? (resolveValueOrFunction as Function)() : resolveValueOrFunction); + typeof resolveValueOrFunction === 'function' + ? (resolveValueOrFunction as Function)() + : resolveValueOrFunction; const result = Object.keys(listOfMockRps).reduce( (apiObject, namespace: string) => { @@ -110,7 +124,7 @@ const createApi = ( */ export const rejectApi = ( resolveValueOrFunction = new Error('bar'), - isPubsub: boolean = true + isPubsub = true ) => createApi(resolveValueOrFunction, isPubsub, true); /** @@ -119,6 +133,10 @@ export const rejectApi = ( * @ignore */ export const resolveApi = ( - resolveValueOrFunction: string | object | (() => any) | { error: string } = 'foo', - isPubsub: boolean = true + resolveValueOrFunction: + | string + | object + | (() => any) + | { error: string } = 'foo', + isPubsub = true ) => createApi(resolveValueOrFunction, isPubsub, false); diff --git a/packages/light.js/src/utils/testHelpers/sleep.ts b/packages/light.js/src/utils/testHelpers/sleep.ts index 26d6db35..19517d2f 100644 --- a/packages/light.js/src/utils/testHelpers/sleep.ts +++ b/packages/light.js/src/utils/testHelpers/sleep.ts @@ -4,6 +4,7 @@ // SPDX-License-Identifier: MIT // TODO Use fake timers instead -export default (duration: number) => new Promise((resolve, reject) => { - setTimeout(resolve, duration); -}); +export default (duration: number) => + new Promise(resolve => { + setTimeout(resolve, duration); + }); diff --git a/scripts/lint-files.sh b/scripts/lint-files.sh new file mode 100755 index 00000000..976c0cf7 --- /dev/null +++ b/scripts/lint-files.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +# Apply `prettier` and `eslint` in two steps, because some `semistandard` rules +# aren't supported by `prettier`, e.g. https://github.com/prettier/prettier/issues/3845 + +[ $# -eq 0 ] && exit 0; # Exit successfully if no arguments + +set -e # Exit with error if any command fails + +echo 'Linting...' + +yarn prettier --loglevel error --write $@ +yarn eslint --fix $@ diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 4281b8e2..00000000 --- a/tslint.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": ["tslint-config-semistandard"], - "linterOptions": { - "exclude": ["**/node_modules/**/*", "**/lib/**/*", "**/example/**/*"] - } -} diff --git a/yarn.lock b/yarn.lock index 406edd14..eb03e164 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1182,6 +1182,11 @@ "@types/cheerio" "*" "@types/react" "*" +"@types/eslint-visitor-keys@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" + integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== + "@types/events@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" @@ -1247,6 +1252,16 @@ dependencies: "@types/jest-diff" "*" +"@types/json-schema@^7.0.3": + version "7.0.3" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" + integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== + +"@types/json5@^0.0.29": + version "0.0.29" + resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" + integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= + "@types/lodash@^4.14.110": version "4.14.136" resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.136.tgz#413e85089046b865d960c9ff1d400e04c31ab60f" @@ -1325,6 +1340,63 @@ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916" integrity sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw== +"@typescript-eslint/eslint-plugin@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.2.0.tgz#cba8caa6ad8df544c46bca674125a31af8c9ac2f" + integrity sha512-rOodtI+IvaO8USa6ValYOrdWm9eQBgqwsY+B0PPiB+aSiK6p6Z4l9jLn/jI3z3WM4mkABAhKIqvGIBl0AFRaLQ== + dependencies: + "@typescript-eslint/experimental-utils" "2.2.0" + eslint-utils "^1.4.2" + functional-red-black-tree "^1.0.1" + regexpp "^2.0.1" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.2.0.tgz#31d855fbc425168ecf56960c777aacfcca391cff" + integrity sha512-IMhbewFs27Frd/ICHBRfIcsUCK213B8MsEUqvKFK14SDPjPR5JF6jgOGPlroybFTrGWpMvN5tMZdXAf+xcmxsA== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.2.0" + eslint-scope "^5.0.0" + +"@typescript-eslint/experimental-utils@^1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-1.13.0.tgz#b08c60d780c0067de2fb44b04b432f540138301e" + integrity sha512-zmpS6SyqG4ZF64ffaJ6uah6tWWWgZ8m+c54XXgwFtUv0jNz8aJAVx8chMCvnk7yl6xwn8d+d96+tWp7fXzTuDg== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "1.13.0" + eslint-scope "^4.0.0" + +"@typescript-eslint/parser@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.2.0.tgz#3cd758ed85ae9be06667beb61bbdf8060f274fb7" + integrity sha512-0mf893kj9L65O5sA7wP6EoYvTybefuRFavUNhT7w9kjhkdZodoViwVS+k3D+ZxKhvtL7xGtP/y/cNMJX9S8W4A== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "2.2.0" + "@typescript-eslint/typescript-estree" "2.2.0" + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/typescript-estree@1.13.0": + version "1.13.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-1.13.0.tgz#8140f17d0f60c03619798f1d628b8434913dc32e" + integrity sha512-b5rCmd2e6DCC6tCTN9GSUAuxdYwCM/k/2wdjHGrIRGPSJotWMCe/dGpi66u42bhuh8q3QBzqM4TMA1GUUCJvdw== + dependencies: + lodash.unescape "4.0.1" + semver "5.5.0" + +"@typescript-eslint/typescript-estree@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.2.0.tgz#1e2aad5ed573f9f7a8e3261eb79404264c4fc57f" + integrity sha512-9/6x23A3HwWWRjEQbuR24on5XIfVmV96cDpGR9671eJv1ebFKHj2sGVVAwkAVXR2UNuhY1NeKS2QMv5P8kQb2Q== + dependencies: + glob "^7.1.4" + is-glob "^4.0.1" + lodash.unescape "4.0.1" + semver "^6.3.0" + "@zkochan/cmd-shim@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@zkochan/cmd-shim/-/cmd-shim-3.1.0.tgz#2ab8ed81f5bb5452a85f25758eb9b8681982fd2e" @@ -1360,6 +1432,11 @@ acorn-globals@^4.1.0, acorn-globals@^4.3.0: acorn "^6.0.1" acorn-walk "^6.0.1" +acorn-jsx@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.2.tgz#84b68ea44b373c4f8686023a551f61a21b7c4a4f" + integrity sha512-tiNTrP1MP0QrChmD2DdupCr6HWSFeKVw5d/dHTu4Y7rkAkRhU/Dt7dphAfIUyxtHpl/eBVip5uTNSpQJHylpAw== + acorn-walk@^6.0.1: version "6.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" @@ -1375,6 +1452,11 @@ acorn@^6.0.1, acorn@^6.0.4: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.2.1.tgz#3ed8422d6dec09e6121cc7a843ca86a330a86b51" integrity sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q== +acorn@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.0.0.tgz#26b8d1cd9a9b700350b71c0905546f64d1284e7a" + integrity sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ== + agent-base@4, agent-base@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" @@ -1412,7 +1494,7 @@ airbnb-prop-types@^2.13.2: prop-types-exact "^1.2.0" react-is "^16.8.6" -ajv@^6.5.5: +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.5.5: version "6.10.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== @@ -1582,6 +1664,14 @@ array-ify@^1.0.0: resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= +array-includes@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" + array-initial@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/array-initial/-/array-initial-1.1.0.tgz#2fa74b26739371c3947bd7a7adc73be334b3d795" @@ -1942,11 +2032,6 @@ buffer-from@1.x, buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== -builtin-modules@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" - integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= - builtins@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" @@ -2104,7 +2189,7 @@ chai@^4.1.2: pathval "^1.1.0" type-detect "^4.0.5" -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.3.1, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -2321,7 +2406,7 @@ commander@2.9.0: dependencies: graceful-readlink ">= 1.0.0" -commander@^2.12.1, commander@^2.19.0, commander@~2.20.0: +commander@^2.19.0, commander@~2.20.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== @@ -2377,6 +2462,11 @@ console-control-strings@^1.0.0, console-control-strings@~1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= +contains-path@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= + conventional-changelog-angular@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.3.tgz#299fdd43df5a1f095283ac16aeedfb0a682ecab0" @@ -2643,7 +2733,7 @@ debug@2.6.8: dependencies: ms "2.0.0" -debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2664,7 +2754,7 @@ debug@^3.0.0, debug@^3.1.0, debug@^3.2.6: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1: +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== @@ -2740,6 +2830,11 @@ deepmerge@4.0.0: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.0.0.tgz#3e3110ca29205f120d7cb064960a39c3d2087c09" integrity sha512-YZ1rOP5+kHor4hMAH+HRQnBQHg+wvS1un1hAOuIcxcBy0hzcUf6Jg2a1w65kpoOUnurOfZbERwjI1TfZxNjcww== +deepmerge@^2.0.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.2.1.tgz#5d3ff22a01c00f645405a2fbc17d0778a1801170" + integrity sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA== + default-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/default-compare/-/default-compare-1.0.0.tgz#cb61131844ad84d84788fb68fd01681ca7781a2f" @@ -2841,11 +2936,6 @@ diff@3.2.0: resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" integrity sha1-yc45Okt8vQsFinJck98pkCeGj/k= -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - diff@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" @@ -2863,13 +2953,20 @@ discontinuous-range@1.0.0: resolved "https://registry.yarnpkg.com/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo= -doctrine@0.7.2, doctrine@^0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523" - integrity sha1-fLhgNZujvpDgQLJrcpzkv6ZUxSM= +doctrine@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= dependencies: - esutils "^1.1.6" - isarray "0.0.1" + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" dom-serializer@0, dom-serializer@~0.1.1: version "0.1.1" @@ -2997,6 +3094,11 @@ electron@^4.0.1: electron-download "^4.1.0" extract-zip "^1.0.3" +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" @@ -3113,6 +3215,22 @@ es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.13 is-regex "^1.0.4" object-keys "^1.0.12" +es-abstract@^1.7.0: + version "1.14.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.14.2.tgz#7ce108fad83068c8783c3cdf62e504e084d8c497" + integrity sha512-DgoQmbpFNOofkjJtKwr87Ma5EW4Dc8fWhD0R+ndq7Oc456ivUfGOOP6oAZTTKl5/CcNMP+EN+e3/iUzgE0veZg== + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.0" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-inspect "^1.6.0" + object-keys "^1.1.1" + string.prototype.trimleft "^2.0.0" + string.prototype.trimright "^2.0.0" + es-to-primitive@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" @@ -3192,6 +3310,182 @@ escodegen@^1.11.0, escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" +eslint-config-semistandard@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-semistandard/-/eslint-config-semistandard-15.0.0.tgz#d8eefccfac4ca9cbc508d38de6cb8fd5e7a72fa9" + integrity sha512-volIMnosUvzyxGkYUA5QvwkahZZLeUx7wcS0+7QumPn+MMEBbV6P7BY1yukamMst0w3Et3QZlCjQEwQ8tQ6nug== + +eslint-config-standard@^14.0.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-14.1.0.tgz#b23da2b76fe5a2eba668374f246454e7058f15d4" + integrity sha512-EF6XkrrGVbvv8hL/kYa/m6vnvmUT+K82pJJc4JJVMM6+Qgqh0pnwprSxdduDLB9p/7bIxD+YV5O0wfb8lmcPbA== + +eslint-import-resolver-node@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== + dependencies: + debug "^2.6.9" + resolve "^1.5.0" + +eslint-import-resolver-typescript@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-1.1.1.tgz#e6d42172b95144ef16610fe104ef38340edea591" + integrity sha512-jqSfumQ+H5y3FUJ6NjRkbOQSUOlbBucGTN3ELymOtcDBbPjVdm/luvJuCfCaIXGh8sEF26ma1qVdtDgl9ndhUg== + dependencies: + debug "^4.0.1" + resolve "^1.4.0" + tsconfig-paths "^3.6.0" + +eslint-module-utils@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz#7b4675875bf96b0dbf1b21977456e5bb1f5e018c" + integrity sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw== + dependencies: + debug "^2.6.8" + pkg-dir "^2.0.0" + +eslint-plugin-es@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz#12acae0f4953e76ba444bfd1b2271081ac620998" + integrity sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA== + dependencies: + eslint-utils "^1.4.2" + regexpp "^2.0.1" + +eslint-plugin-import@^2.18.2: + version "2.18.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz#02f1180b90b077b33d447a17a2326ceb400aceb6" + integrity sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ== + dependencies: + array-includes "^3.0.3" + contains-path "^0.1.0" + debug "^2.6.9" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.4.0" + has "^1.0.3" + minimatch "^3.0.4" + object.values "^1.1.0" + read-pkg-up "^2.0.0" + resolve "^1.11.0" + +eslint-plugin-jest@^22.17.0: + version "22.17.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-22.17.0.tgz#dc170ec8369cd1bff9c5dd8589344e3f73c88cf6" + integrity sha512-WT4DP4RoGBhIQjv+5D0FM20fAdAUstfYAf/mkufLNTojsfgzc5/IYW22cIg/Q4QBavAZsROQlqppiWDpFZDS8Q== + dependencies: + "@typescript-eslint/experimental-utils" "^1.13.0" + +eslint-plugin-json@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-json/-/eslint-plugin-json-1.4.0.tgz#4d29f3a4c08d412df739bd65049ce23636515af8" + integrity sha512-CECvgRAWtUzuepdlPWd+VA7fhyF9HT183pZnl8wQw5x699Mk/MbME/q8xtULBfooi3LUbj6fToieNmsvUcDxWA== + dependencies: + vscode-json-languageservice "^3.2.1" + +eslint-plugin-node@^9.1.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-9.2.0.tgz#b1911f111002d366c5954a6d96d3cd5bf2a3036a" + integrity sha512-2abNmzAH/JpxI4gEOwd6K8wZIodK3BmHbTxz4s79OIYwwIt2gkpEXlAouJXu4H1c9ySTnRso0tsuthSOZbUMlA== + dependencies: + eslint-plugin-es "^1.4.1" + eslint-utils "^1.4.2" + ignore "^5.1.1" + minimatch "^3.0.4" + resolve "^1.10.1" + semver "^6.1.0" + +eslint-plugin-promise@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.2.1.tgz#845fd8b2260ad8f82564c1222fce44ad71d9418a" + integrity sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw== + +eslint-plugin-standard@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz#ff0519f7ffaff114f76d1bd7c3996eef0f6e20b4" + integrity sha512-v/KBnfyaOMPmZc/dmc6ozOdWqekGp7bBGq4jLAecEfPGmfKiWS4sA8sC0LqiV9w5qmXAtXVn4M3p1jSyhY85SQ== + +eslint-scope@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-scope@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" + integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.2.tgz#166a5180ef6ab7eb462f162fd0e6f2463d7309ab" + integrity sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q== + dependencies: + eslint-visitor-keys "^1.0.0" + +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" + integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== + +eslint@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.3.0.tgz#1f1a902f67bfd4c354e7288b81e40654d927eb6a" + integrity sha512-ZvZTKaqDue+N8Y9g0kp6UPZtS4FSY3qARxBs7p4f0H0iof381XHduqVerFWtK8DPtKmemqbqCFENWSQgPR/Gow== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.2" + eslint-visitor-keys "^1.1.0" + espree "^6.1.1" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^6.4.1" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.1.tgz#7f80e5f7257fc47db450022d723e356daeb1e5de" + integrity sha512-EYbr8XZUhWbYCqQRW0duU5LxzL5bETN6AjKBGy1302qqzPaCH10QbRg3Wvco79Z8x9WbiE8HYB4e75xl6qUYvQ== + dependencies: + acorn "^7.0.0" + acorn-jsx "^5.0.2" + eslint-visitor-keys "^1.1.0" + esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -3202,16 +3496,30 @@ esprima@^4.0.0: resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== +esquery@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + dependencies: + estraverse "^4.0.0" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= -esutils@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375" - integrity sha1-wBzKqa5LiXxtDD4hCuUvPHqEQ3U= - esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" @@ -3439,6 +3747,13 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -3457,7 +3772,7 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-up@^2.0.0: +find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= @@ -3507,6 +3822,20 @@ flagged-respawn@^1.0.0: resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" integrity sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q== +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" + integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== + flush-write-stream@^1.0.0, flush-write-stream@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -3656,6 +3985,11 @@ function.prototype.name@^1.1.0: function-bind "^1.1.1" is-callable "^1.1.3" +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -3874,7 +4208,7 @@ global@^4.3.2: min-document "^2.19.0" process "^0.11.10" -globals@^11.1.0: +globals@^11.1.0, globals@^11.7.0: version "11.12.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== @@ -4162,11 +4496,16 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -ignore@^4.0.3: +ignore@^4.0.3, ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== +ignore@^5.1.1: + version "5.1.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" + integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== + import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" @@ -4175,6 +4514,14 @@ import-fresh@^2.0.0: caller-path "^2.0.0" resolve-from "^3.0.0" +import-fresh@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.1.0.tgz#6d33fa1dcef6df930fae003446f33415af905118" + integrity sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" @@ -4256,6 +4603,25 @@ inquirer@^6.2.0: strip-ansi "^5.1.0" through "^2.3.6" +inquirer@^6.4.1: + version "6.5.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" + integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== + dependencies: + ansi-escapes "^3.2.0" + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^2.0.0" + lodash "^4.17.12" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^2.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + interpret@^1.0.0, interpret@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" @@ -4589,7 +4955,7 @@ isarray@0.0.1: resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= -isarray@1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -5171,6 +5537,18 @@ json5@2.x, json5@^2.1.0: dependencies: minimist "^1.2.0" +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + +jsonc-parser@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.1.1.tgz#83dc3d7a6e7186346b889b1280eefa04446c6d3e" + integrity sha512-VC0CjnWJylKB1iov4u76/W/5Ef0ydDkjtYWxoZ9t3HdWlSnZQwZL5MgFikaB/EtQ4RmMEw3tmQzuYnZA2/Ja1g== + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -5301,7 +5679,7 @@ leven@^2.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= -levn@~0.3.0: +levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= @@ -5334,6 +5712,16 @@ 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" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + 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" @@ -5514,6 +5902,11 @@ lodash.templatesettings@^4.0.0: dependencies: lodash._reinterpolate "^3.0.0" +lodash.unescape@4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" + integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= + lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -6296,7 +6689,7 @@ object-is@^1.0.1: resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= -object-keys@^1.0.11, object-keys@^1.0.12: +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -6436,7 +6829,7 @@ optimist@~0.3.5: dependencies: wordwrap "~0.0.2" -optionator@^0.8.1: +optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= @@ -6602,6 +6995,13 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + parse-filepath@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" @@ -6734,6 +7134,13 @@ 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" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + 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" @@ -6790,6 +7197,13 @@ pirates@^4.0.1: dependencies: node-modules-regexp "^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" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= + dependencies: + find-up "^2.1.0" + pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -6812,6 +7226,11 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +prettier@^1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.18.2.tgz#6823e7c5900017b4bd3acf46fe9ac4b4d7bda9ea" + integrity sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw== + pretty-bytes@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-1.0.4.tgz#0a22e8210609ad35542f8c8d5d2159aff0751c84" @@ -7109,6 +7528,14 @@ 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" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + 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" @@ -7134,6 +7561,15 @@ read-pkg@^1.0.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" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + 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" @@ -7261,6 +7697,11 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + remove-bom-buffer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" @@ -7420,6 +7861,13 @@ resolve@1.x, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, re dependencies: path-parse "^1.0.6" +resolve@^1.10.1, resolve@^1.11.0, resolve@^1.5.0: + version "1.12.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" + integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== + dependencies: + path-parse "^1.0.6" + restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -7443,7 +7891,7 @@ retry@^0.10.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= -rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: +rimraf@2, rimraf@2.6.3, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== @@ -7577,11 +8025,21 @@ semver-greatest-satisfied-range@^1.1.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== +semver@5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== + semver@^6.0.0, semver@^6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== +semver@^6.1.0, semver@^6.1.2, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -7683,6 +8141,15 @@ slash@^2.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + slide@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" @@ -7959,6 +8426,15 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + string.prototype.trim@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz#d04de2c89e137f4d7d206f086b5ed2fae6be8cea" @@ -7968,6 +8444,22 @@ string.prototype.trim@^1.1.2: es-abstract "^1.5.0" function-bind "^1.0.2" +string.prototype.trimleft@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" + integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" + integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + string_decoder@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" @@ -8001,7 +8493,7 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0, strip-ansi@^5.1.0: +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== @@ -8037,6 +8529,11 @@ strip-indent@^2.0.0: resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= +strip-json-comments@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" + integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== + strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -8097,6 +8594,16 @@ symbol-tree@^3.2.2: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + tar@^4, tar@^4.4.10, tar@^4.4.8: version "4.4.10" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" @@ -8147,6 +8654,11 @@ text-extensions@^2.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-2.0.0.tgz#43eabd1b495482fae4a2bf65e5f56c29f69220f6" integrity sha512-F91ZqLgvi1E0PdvmxMgp+gcf6q8fMH7mhdwWfzXnl1k+GbpQDmi8l7DzLC5JTASKbwpY3TfxajAUzAXcv2NmsQ== +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= + thenify-all@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" @@ -8346,84 +8858,26 @@ ts-node@^8.0.1: source-map-support "^0.5.6" yn "^3.0.0" -tslib@1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" - integrity sha512-f/qGG2tUkrISBlQZEjEqoZ3B2+npJjIf04H1wuAv9iA8i04Icp+61KRXxFdha22670NJopsZCIjhC3SnjPRKrQ== +tsconfig-paths@^3.6.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.8.0.tgz#4e34202d5b41958f269cf56b01ed95b853d59f72" + integrity sha512-zZEYFo4sjORK8W58ENkRn9s+HmQFkkwydDG7My5s/fnfr2YYCaiyXe/HBUcIgU8epEKOXwiahOO+KZYjiXlWyQ== + dependencies: + "@types/json5" "^0.0.29" + deepmerge "^2.0.1" + json5 "^1.0.1" + minimist "^1.2.0" + strip-bom "^3.0.0" -tslib@^1.0.0, tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: +tslib@^1.8.1, tslib@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== -tslint-config-semistandard@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/tslint-config-semistandard/-/tslint-config-semistandard-7.0.0.tgz#c2d3214b6282a4fed07e875dd9f0691be4e832f1" - integrity sha512-SMZmVMbHYn6sykthhoNSK39Oxt7b3LdkuXycAxsagp+W7rCBWYowbpwYOJQmeT2a8Vjh6Tz2ifHyraWKB5uArw== - dependencies: - tslint-config-standard "^7.0.0" - tslint-eslint-rules "^4.1.1" - -tslint-config-standard@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/tslint-config-standard/-/tslint-config-standard-7.1.0.tgz#6bcc435a179478e365f6cc62312a561221985760" - integrity sha512-cETzxZcEQ1RKjwtEScGryAtqwiRFc55xBxhZP6bePyOfXmo6i1/QKQrTgFKBiM4FjCvcqTjJq20/KGrh+TzTfQ== - dependencies: - tslint-eslint-rules "^5.3.1" - -tslint-eslint-rules@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/tslint-eslint-rules/-/tslint-eslint-rules-4.1.1.tgz#7c30e7882f26bc276bff91d2384975c69daf88ba" - integrity sha1-fDDniC8mvCdr/5HSOEl1xp2viLo= - dependencies: - doctrine "^0.7.2" - tslib "^1.0.0" - tsutils "^1.4.0" - -tslint-eslint-rules@^5.3.1: - version "5.4.0" - resolved "https://registry.yarnpkg.com/tslint-eslint-rules/-/tslint-eslint-rules-5.4.0.tgz#e488cc9181bf193fe5cd7bfca213a7695f1737b5" - integrity sha512-WlSXE+J2vY/VPgIcqQuijMQiel+UtmXS+4nvK4ZzlDiqBfXse8FAvkNnTcYhnQyOTW5KFM+uRRGXxYhFpuBc6w== - dependencies: - doctrine "0.7.2" - tslib "1.9.0" - tsutils "^3.0.0" - -tslint@^5.10.0: - version "5.18.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.18.0.tgz#f61a6ddcf372344ac5e41708095bbf043a147ac6" - integrity sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w== - dependencies: - "@babel/code-frame" "^7.0.0" - builtin-modules "^1.1.1" - chalk "^2.3.0" - commander "^2.12.1" - diff "^3.2.0" - glob "^7.1.1" - js-yaml "^3.13.1" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.29.0" - -tsutils@^1.4.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-1.9.1.tgz#b9f9ab44e55af9681831d5f28d0aeeaf5c750cb0" - integrity sha1-ufmrROVa+WgYMdXyjQrur1x1DLA= - -tsutils@^2.29.0: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" - integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== - dependencies: - tslib "^1.8.1" - -tsutils@^3.0.0: - version "3.14.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.14.0.tgz#bf8d5a7bae5369331fa0f2b0a5a10bd7f7396c77" - integrity sha512-SmzGbB0l+8I0QwsPgjooFRaRvHLBLNYM8SeQ0k6rtNDru5sCGeLJcZdwilNndN+GysuFjF5EIYgN8GfFG6UeUw== +tsutils@^3.17.1: + version "3.17.1" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" + integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== dependencies: tslib "^1.8.1" @@ -8716,6 +9170,11 @@ uuid@^3.0.1, uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== +v8-compile-cache@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" + integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== + v8flags@^3.0.1: version "3.1.3" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-3.1.3.tgz#fc9dc23521ca20c5433f81cc4eb9b3033bb105d8" @@ -8800,6 +9259,31 @@ vinyl@^2.0.0: remove-trailing-separator "^1.0.1" replace-ext "^1.0.0" +vscode-json-languageservice@^3.2.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/vscode-json-languageservice/-/vscode-json-languageservice-3.3.3.tgz#f7e512a2cd5e82fecbebf507d6fceaea47661297" + integrity sha512-5vL3OXTUuQpn6+tGd47dopio+7WwbtIZ07zfYMzAUX8eVWPZjfEsLeSWmQk5Xw+vwgu+j5zC4koz5UofLDGGRA== + dependencies: + jsonc-parser "^2.1.1" + vscode-languageserver-types "^3.15.0-next.2" + vscode-nls "^4.1.1" + vscode-uri "^2.0.3" + +vscode-languageserver-types@^3.15.0-next.2: + version "3.15.0-next.4" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.15.0-next.4.tgz#9aae49844ef826ae656382facecc20664113c060" + integrity sha512-IKIWTdUPBnOtwznIrhxKnjVZ7hYxEzwZ3M2xmDi7OjjexuOM6LnGtoo1Dv4wYSik4epK4STEib6e8da2GxUsJA== + +vscode-nls@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/vscode-nls/-/vscode-nls-4.1.1.tgz#f9916b64e4947b20322defb1e676a495861f133c" + integrity sha512-4R+2UoUUU/LdnMnFjePxfLqNhBS8lrAFyX7pjb2ud/lqDkrUavFUTcG7wR0HBZFakae0Q6KLBFjMS6W93F403A== + +vscode-uri@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-2.0.3.tgz#25e5f37f552fbee3cec7e5f80cef8469cefc6543" + integrity sha512-4D3DI3F4uRy09WNtDGD93H9q034OHImxiIcSq664Hq1Y1AScehlP3qqZyTkX/RWxeu0MRMHGkrxYqm2qlDF/aw== + w3c-hr-time@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" @@ -8985,6 +9469,13 @@ write-pkg@^3.1.0: sort-keys "^2.0.0" write-json-file "^2.2.0" +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + ws@^5.2.0: version "5.2.2" resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f"