diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 00000000..f856286d --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,39 @@ +{ + "extends": ["prettier/@typescript-eslint", "plugin:prettier/recommended"], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": 2020, + "project": "./tsconfig.json", + "sourceType": "module" + }, + "plugins": ["@typescript-eslint"], + "rules": { + "@typescript-eslint/adjacent-overload-signatures": "error", + "@typescript-eslint/ban-types": "error", + "camelcase": "off", + "@typescript-eslint/camelcase": "error", + "@typescript-eslint/class-name-casing": "error", + "@typescript-eslint/consistent-type-assertions": "error", + "@typescript-eslint/interface-name-prefix": "error", + "@typescript-eslint/member-delimiter-style": [ + "error", + { "multiline": { "delimiter": "none" } } + ], + "no-array-constructor": "off", + "@typescript-eslint/no-array-constructor": "error", + "no-empty-function": "off", + "@typescript-eslint/no-empty-function": "error", + "@typescript-eslint/no-empty-interface": "error", + "@typescript-eslint/no-inferrable-types": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-this-alias": "error", + "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": "warn", + "@typescript-eslint/type-annotation-spacing": "error", + "no-var": "error", + "prefer-const": "error", + "prefer-rest-params": "error", + "prefer-spread": "error" + } +} diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..d769d8ce --- /dev/null +++ b/.prettierrc @@ -0,0 +1,10 @@ +{ + "bracketSpacing": false, + "endOfLine": "lf", + "parser": "typescript", + "printWidth": 120, + "semi": false, + "singleQuote": true, + "trailingComma": "none", + "useTabs": false +} diff --git a/package.json b/package.json index fa520c03..ad851a3d 100644 --- a/package.json +++ b/package.json @@ -15,11 +15,11 @@ "build:browser": "browserify src/index.ts -s jstt -p tsify > dist/bundle.js", "build:server": "tsc -d", "clean": "shx rm -rf dist", - "lint": "tslint -c tslint.json src/*.ts", + "lint": "eslint src/*.ts", "tdd": "concurrently -r -p '' -k 'npm run watch' 'npm run watch:test'", "test": "ava --serial --verbose", "prepublishOnly": "npm test", - "pretest": "npm run build", + "pretest": "npm run build && npm run lint", "watch": "tsc -w", "watch:test": "ava -w" }, @@ -54,7 +54,7 @@ "lodash": "^4.17.11", "minimist": "^1.2.0", "mz": "^2.7.0", - "prettier": "^1.18.2", + "prettier": "^1.19.1", "stdin": "0.0.1" }, "devDependencies": { @@ -62,13 +62,17 @@ "@types/lodash": "^4.14.121", "@types/minimist": "^1.2.0", "@types/mz": "0.0.32", + "@typescript-eslint/eslint-plugin": "^2.9.0", + "@typescript-eslint/parser": "^2.9.0", "ava": "^1.2.1", "browserify": "^16.2.3", "browserify-shim": "^3.8.14", "concurrently": "^4.1.0", + "eslint": "^6.7.2", + "eslint-config-prettier": "^6.7.0", + "eslint-plugin-prettier": "^3.1.1", "shx": "^0.3.2", "tsify": "^4.0.1", - "tslint": "^5.13.1", "typescript": "^3.3.3333" }, "ava": { diff --git a/src/cli.ts b/src/cli.ts index d15ce7a6..7abfbb31 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -1,23 +1,24 @@ #!/usr/bin/env node -import { whiteBright } from 'cli-color' -import { JSONSchema4 } from 'json-schema' +import {whiteBright} from 'cli-color' +import {JSONSchema4} from 'json-schema' import minimist = require('minimist') -import { readFile, writeFile } from 'mz/fs' -import { resolve } from 'path' +import {readFile, writeFile} from 'mz/fs' +import {resolve} from 'path' import stdin = require('stdin') -import { compile, Options } from './index' +import {compile, Options} from './index' -main(minimist(process.argv.slice(2), { - alias: { - help: ['h'], - input: ['i'], - output: ['o'] - } -})) +main( + minimist(process.argv.slice(2), { + alias: { + help: ['h'], + input: ['i'], + output: ['o'] + } + }) +) async function main(argv: minimist.ParsedArgs) { - if (argv.help) { printHelp() process.exit(0) @@ -34,7 +35,6 @@ async function main(argv: minimist.ParsedArgs) { console.error(whiteBright.bgRedBright('error'), e) process.exit(1) } - } function readInput(argIn?: string) { @@ -60,7 +60,7 @@ function printHelp() { const pkg = require('../../package.json') process.stdout.write( -` + ` ${pkg.name} ${pkg.version} Usage: json2ts [--input, -i] [IN_FILE] [--output, -o] [OUT_FILE] [OPTIONS] diff --git a/src/formatter.ts b/src/formatter.ts index c18f41df..18edf6e6 100644 --- a/src/formatter.ts +++ b/src/formatter.ts @@ -1,6 +1,6 @@ -import { format as prettify } from 'prettier' -import { Options } from './' +import {format as prettify} from 'prettier' +import {Options} from './' export function format(code: string, options: Options): string { - return prettify(code, { parser: 'typescript', ...options.style }) + return prettify(code, {parser: 'typescript', ...options.style}) } diff --git a/src/generator.ts b/src/generator.ts index 9b9d3f1e..e4aca994 100644 --- a/src/generator.ts +++ b/src/generator.ts @@ -1,30 +1,35 @@ -import { whiteBright } from 'cli-color' -import { omit } from 'lodash' -import { DEFAULT_OPTIONS, Options } from './index' +import {whiteBright} from 'cli-color' +import {omit} from 'lodash' +import {DEFAULT_OPTIONS, Options} from './index' import { - AST, ASTWithStandaloneName, hasComment, hasStandaloneName, T_ANY, TArray, TEnum, TInterface, TIntersection, - TNamedInterface, TUnion + AST, + ASTWithStandaloneName, + hasComment, + hasStandaloneName, + T_ANY, + TArray, + TEnum, + TInterface, + TIntersection, + TNamedInterface, + TUnion } from './types/AST' -import { log, toSafeString } from './utils' +import {log, toSafeString} from './utils' export function generate(ast: AST, options = DEFAULT_OPTIONS): string { - return [ - options.bannerComment, - declareNamedTypes(ast, options, ast.standaloneName!), - declareNamedInterfaces(ast, options, ast.standaloneName!), - declareEnums(ast, options) - ] - .filter(Boolean) - .join('\n\n') - + '\n' // trailing newline + return ( + [ + options.bannerComment, + declareNamedTypes(ast, options, ast.standaloneName!), + declareNamedInterfaces(ast, options, ast.standaloneName!), + declareEnums(ast, options) + ] + .filter(Boolean) + .join('\n\n') + '\n' + ) // trailing newline } -function declareEnums( - ast: AST, - options: Options, - processed = new Set() -): string { - +function declareEnums(ast: AST, options: Options, processed = new Set()): string { if (processed.has(ast)) { return '' } @@ -45,9 +50,7 @@ function declareEnums( } break case 'INTERFACE': - type = getSuperTypesAndParams(ast).reduce((prev, ast) => - prev + declareEnums(ast, options, processed), - '') + type = getSuperTypesAndParams(ast).reduce((prev, ast) => prev + declareEnums(ast, options, processed), '') break default: return '' @@ -56,13 +59,7 @@ function declareEnums( return type } -function declareNamedInterfaces( - ast: AST, - options: Options, - rootASTName: string, - processed = new Set() -): string { - +function declareNamedInterfaces(ast: AST, options: Options, rootASTName: string, processed = new Set()): string { if (processed.has(ast)) { return '' } @@ -76,16 +73,24 @@ function declareNamedInterfaces( break case 'INTERFACE': type = [ - hasStandaloneName(ast) && (ast.standaloneName === rootASTName || options.declareExternallyReferenced) && generateStandaloneInterface(ast, options), - getSuperTypesAndParams(ast).map(ast => - declareNamedInterfaces(ast, options, rootASTName, processed) - ).filter(Boolean).join('\n') - ].filter(Boolean).join('\n') + hasStandaloneName(ast) && + (ast.standaloneName === rootASTName || options.declareExternallyReferenced) && + generateStandaloneInterface(ast, options), + getSuperTypesAndParams(ast) + .map(ast => declareNamedInterfaces(ast, options, rootASTName, processed)) + .filter(Boolean) + .join('\n') + ] + .filter(Boolean) + .join('\n') break case 'INTERSECTION': case 'TUPLE': case 'UNION': - type = ast.params.map(_ => declareNamedInterfaces(_, options, rootASTName, processed)).filter(Boolean).join('\n') + type = ast.params + .map(_ => declareNamedInterfaces(_, options, rootASTName, processed)) + .filter(Boolean) + .join('\n') if (ast.type === 'TUPLE' && ast.spreadParam) { type += declareNamedInterfaces(ast.spreadParam, options, rootASTName, processed) } @@ -97,13 +102,7 @@ function declareNamedInterfaces( return type } -function declareNamedTypes( - ast: AST, - options: Options, - rootASTName: string, - processed = new Set() -): string { - +function declareNamedTypes(ast: AST, options: Options, rootASTName: string, processed = new Set()): string { if (processed.has(ast)) { return '' } @@ -116,24 +115,38 @@ function declareNamedTypes( type = [ declareNamedTypes(ast.params, options, rootASTName, processed), hasStandaloneName(ast) ? generateStandaloneType(ast, options) : undefined - ].filter(Boolean).join('\n') + ] + .filter(Boolean) + .join('\n') break case 'ENUM': type = '' break case 'INTERFACE': - type = getSuperTypesAndParams(ast).map(ast => - (ast.standaloneName === rootASTName || options.declareExternallyReferenced) && declareNamedTypes(ast, options, rootASTName, processed)) - .filter(Boolean).join('\n') + type = getSuperTypesAndParams(ast) + .map( + ast => + (ast.standaloneName === rootASTName || options.declareExternallyReferenced) && + declareNamedTypes(ast, options, rootASTName, processed) + ) + .filter(Boolean) + .join('\n') break case 'INTERSECTION': case 'TUPLE': case 'UNION': type = [ hasStandaloneName(ast) ? generateStandaloneType(ast, options) : undefined, - ast.params.map(ast => declareNamedTypes(ast, options, rootASTName, processed)).filter(Boolean).join('\n'), - ('spreadParam' in ast && ast.spreadParam) ? declareNamedTypes(ast.spreadParam, options, rootASTName, processed) : undefined - ].filter(Boolean).join('\n') + ast.params + .map(ast => declareNamedTypes(ast, options, rootASTName, processed)) + .filter(Boolean) + .join('\n'), + 'spreadParam' in ast && ast.spreadParam + ? declareNamedTypes(ast.spreadParam, options, rootASTName, processed) + : undefined + ] + .filter(Boolean) + .join('\n') break default: if (hasStandaloneName(ast)) { @@ -162,58 +175,69 @@ function generateRawType(ast: AST, options: Options): string { } switch (ast.type) { - case 'ANY': return 'any' - case 'ARRAY': return (() => { - const type = generateType(ast.params, options) - return type.endsWith('"') ? '(' + type + ')[]' : type + '[]' - })() - case 'BOOLEAN': return 'boolean' - case 'INTERFACE': return generateInterface(ast, options) - case 'INTERSECTION': return generateSetOperation(ast, options) - case 'LITERAL': return JSON.stringify(ast.params) - case 'NUMBER': return 'number' - case 'NULL': return 'null' - case 'OBJECT': return 'object' - case 'REFERENCE': return ast.params - case 'STRING': return 'string' - case 'TUPLE': return (() => { - const minItems = ast.minItems - const maxItems = ast.maxItems || -1 - - let spreadParam = ast.spreadParam - const astParams = [...ast.params] - if (minItems > 0 && minItems > astParams.length && ast.spreadParam === undefined) { - // this is a valid state, and JSONSchema doesn't care about the item type - if (maxItems < 0) { - // no max items and no spread param, so just spread any - spreadParam = T_ANY + case 'ANY': + return 'any' + case 'ARRAY': + return (() => { + const type = generateType(ast.params, options) + return type.endsWith('"') ? '(' + type + ')[]' : type + '[]' + })() + case 'BOOLEAN': + return 'boolean' + case 'INTERFACE': + return generateInterface(ast, options) + case 'INTERSECTION': + return generateSetOperation(ast, options) + case 'LITERAL': + return JSON.stringify(ast.params) + case 'NUMBER': + return 'number' + case 'NULL': + return 'null' + case 'OBJECT': + return 'object' + case 'REFERENCE': + return ast.params + case 'STRING': + return 'string' + case 'TUPLE': + return (() => { + const minItems = ast.minItems + const maxItems = ast.maxItems || -1 + + let spreadParam = ast.spreadParam + const astParams = [...ast.params] + if (minItems > 0 && minItems > astParams.length && ast.spreadParam === undefined) { + // this is a valid state, and JSONSchema doesn't care about the item type + if (maxItems < 0) { + // no max items and no spread param, so just spread any + spreadParam = T_ANY + } } - } - if (maxItems > astParams.length && ast.spreadParam === undefined) { - // this is a valid state, and JSONSchema doesn't care about the item type - // fill the tuple with any elements - for (let i = astParams.length; i < maxItems; i += 1) { - astParams.push(T_ANY) + if (maxItems > astParams.length && ast.spreadParam === undefined) { + // this is a valid state, and JSONSchema doesn't care about the item type + // fill the tuple with any elements + for (let i = astParams.length; i < maxItems; i += 1) { + astParams.push(T_ANY) + } } - } - function addSpreadParam(params: string[]): string[] { - if (spreadParam) { - const spread = '...(' + generateType(spreadParam, options) + ')[]' - params.push(spread) + function addSpreadParam(params: string[]): string[] { + if (spreadParam) { + const spread = '...(' + generateType(spreadParam, options) + ')[]' + params.push(spread) + } + return params } - return params - } - function paramsToString(params: string[]): string { - return '[' + params.join(', ') + ']' - } + function paramsToString(params: string[]): string { + return '[' + params.join(', ') + ']' + } - const paramsList = astParams - .map(param => generateType(param, options)) + const paramsList = astParams.map(param => generateType(param, options)) - if (paramsList.length > minItems) { - /* + if (paramsList.length > minItems) { + /* if there are more items than the min, we return a union of tuples instead of using the optional element operator. This is done because it is more typesafe. @@ -226,36 +250,38 @@ function generateRawType(ast: AST, options: Options): string { const b: B = ['a', undefined, 'c'] // TS error */ - const cumulativeParamsList: string[] = paramsList.slice(0, minItems) - const typesToUnion: string[] = [] + const cumulativeParamsList: string[] = paramsList.slice(0, minItems) + const typesToUnion: string[] = [] - if (cumulativeParamsList.length > 0) { - // actually has minItems, so add the initial state - typesToUnion.push(paramsToString(cumulativeParamsList)) - } else { - // no minItems means it's acceptable to have an empty tuple type - typesToUnion.push(paramsToString([])) - } + if (cumulativeParamsList.length > 0) { + // actually has minItems, so add the initial state + typesToUnion.push(paramsToString(cumulativeParamsList)) + } else { + // no minItems means it's acceptable to have an empty tuple type + typesToUnion.push(paramsToString([])) + } - for (let i = minItems; i < paramsList.length; i += 1) { - cumulativeParamsList.push(paramsList[i]) + for (let i = minItems; i < paramsList.length; i += 1) { + cumulativeParamsList.push(paramsList[i]) - if (i === paramsList.length - 1) { - // only the last item in the union should have the spread parameter - addSpreadParam(cumulativeParamsList) + if (i === paramsList.length - 1) { + // only the last item in the union should have the spread parameter + addSpreadParam(cumulativeParamsList) + } + + typesToUnion.push(paramsToString(cumulativeParamsList)) } - typesToUnion.push(paramsToString(cumulativeParamsList)) + return typesToUnion.join('|') } - return typesToUnion.join('|') - } - - // no max items so only need to return one type - return paramsToString(addSpreadParam(paramsList)) - })() - case 'UNION': return generateSetOperation(ast, options) - case 'CUSTOM_TYPE': return ast.params + // no max items so only need to return one type + return paramsToString(addSpreadParam(paramsList)) + })() + case 'UNION': + return generateSetOperation(ast, options) + case 'CUSTOM_TYPE': + return ast.params } } @@ -268,65 +294,70 @@ function generateSetOperation(ast: TIntersection | TUnion, options: Options): st return members.length === 1 ? members[0] : '(' + members.join(' ' + separator + ' ') + ')' } -function generateInterface( - ast: TInterface, - options: Options -): string { - return `{` - + '\n' - + ast.params +function generateInterface(ast: TInterface, options: Options): string { + return ( + `{` + + '\n' + + ast.params .filter(_ => !_.isPatternProperty && !_.isUnreachableDefinition) - .map(({ isRequired, keyName, ast }) => [isRequired, keyName, ast, generateType(ast, options)] as [boolean, string, AST, string]) - .map(([isRequired, keyName, ast, type]) => - (hasComment(ast) && !ast.standaloneName ? generateComment(ast.comment) + '\n' : '') - + escapeKeyName(keyName) - + (isRequired ? '' : '?') - + ': ' - + (hasStandaloneName(ast) ? toSafeString(type) : type) + .map( + ({isRequired, keyName, ast}) => + [isRequired, keyName, ast, generateType(ast, options)] as [boolean, string, AST, string] + ) + .map( + ([isRequired, keyName, ast, type]) => + (hasComment(ast) && !ast.standaloneName ? generateComment(ast.comment) + '\n' : '') + + escapeKeyName(keyName) + + (isRequired ? '' : '?') + + ': ' + + (hasStandaloneName(ast) ? toSafeString(type) : type) ) - .join('\n') - + '\n' - + '}' + .join('\n') + + '\n' + + '}' + ) } function generateComment(comment: string): string { - return [ - '/**', - ...comment.split('\n').map(_ => ' * ' + _), - ' */' - ].join('\n') + return ['/**', ...comment.split('\n').map(_ => ' * ' + _), ' */'].join('\n') } function generateStandaloneEnum(ast: TEnum, options: Options): string { - return (hasComment(ast) ? generateComment(ast.comment) + '\n' : '') - + 'export ' + (options.enableConstEnums ? 'const ' : '') + `enum ${toSafeString(ast.standaloneName)} {` - + '\n' - + ast.params.map(({ ast, keyName }) => - keyName + ' = ' + generateType(ast, options) - ) - .join(',\n') - + '\n' - + '}' + return ( + (hasComment(ast) ? generateComment(ast.comment) + '\n' : '') + + 'export ' + + (options.enableConstEnums ? 'const ' : '') + + `enum ${toSafeString(ast.standaloneName)} {` + + '\n' + + ast.params.map(({ast, keyName}) => keyName + ' = ' + generateType(ast, options)).join(',\n') + + '\n' + + '}' + ) } function generateStandaloneInterface(ast: TNamedInterface, options: Options): string { - return (hasComment(ast) ? generateComment(ast.comment) + '\n' : '') - + `export interface ${toSafeString(ast.standaloneName)} ` - + (ast.superTypes.length > 0 ? `extends ${ast.superTypes.map(superType => toSafeString(superType.standaloneName)).join(', ')} ` : '') - + generateInterface(ast, options) + return ( + (hasComment(ast) ? generateComment(ast.comment) + '\n' : '') + + `export interface ${toSafeString(ast.standaloneName)} ` + + (ast.superTypes.length > 0 + ? `extends ${ast.superTypes.map(superType => toSafeString(superType.standaloneName)).join(', ')} ` + : '') + + generateInterface(ast, options) + ) } function generateStandaloneType(ast: ASTWithStandaloneName, options: Options): string { - return (hasComment(ast) ? generateComment(ast.comment) + '\n' : '') - + `export type ${toSafeString(ast.standaloneName)} = ${generateType(omit(ast, 'standaloneName') as AST /* TODO */, options)}` + return ( + (hasComment(ast) ? generateComment(ast.comment) + '\n' : '') + + `export type ${toSafeString(ast.standaloneName)} = ${generateType( + omit(ast, 'standaloneName') as AST /* TODO */, + options + )}` + ) } function escapeKeyName(keyName: string): string { - if ( - keyName.length - && /[A-Za-z_$]/.test(keyName.charAt(0)) - && /^[\w$]+$/.test(keyName) - ) { + if (keyName.length && /[A-Za-z_$]/.test(keyName.charAt(0)) && /^[\w$]+$/.test(keyName)) { return keyName } if (keyName === '[k: string]') { @@ -336,7 +367,5 @@ function escapeKeyName(keyName: string): string { } function getSuperTypesAndParams(ast: TInterface): AST[] { - return ast.params - .map(param => param.ast) - .concat(ast.superTypes) + return ast.params.map(param => param.ast).concat(ast.superTypes) } diff --git a/src/index.ts b/src/index.ts index aefa0dbb..87bf9f4d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,19 +1,19 @@ -import { readFileSync } from 'fs' -import { JSONSchema4 } from 'json-schema' -import { Options as $RefOptions } from 'json-schema-ref-parser' -import { endsWith, merge } from 'lodash' -import { dirname } from 'path' -import { Options as PrettierOptions } from 'prettier' -import { format } from './formatter' -import { generate } from './generator' -import { normalize } from './normalizer' -import { optimize } from './optimizer' -import { parse } from './parser' -import { dereference } from './resolver' -import { error, stripExtension, Try } from './utils' -import { validate } from './validator' +import {readFileSync} from 'fs' +import {JSONSchema4} from 'json-schema' +import {Options as $RefOptions} from 'json-schema-ref-parser' +import {endsWith, merge} from 'lodash' +import {dirname} from 'path' +import {Options as PrettierOptions} from 'prettier' +import {format} from './formatter' +import {generate} from './generator' +import {normalize} from './normalizer' +import {optimize} from './optimizer' +import {parse} from './parser' +import {dereference} from './resolver' +import {error, stripExtension, Try} from './utils' +import {validate} from './validator' -export { EnumJSONSchema, JSONSchema, NamedEnumJSONSchema, CustomTypeJSONSchema } from './types/JSONSchema' +export {EnumJSONSchema, JSONSchema, NamedEnumJSONSchema, CustomTypeJSONSchema} from './types/JSONSchema' export interface Options { /** @@ -76,37 +76,29 @@ export const DEFAULT_OPTIONS: Options = { unreachableDefinitions: false } -export function compileFromFile( - filename: string, - options: Partial = DEFAULT_OPTIONS -): Promise { +export function compileFromFile(filename: string, options: Partial = DEFAULT_OPTIONS): Promise { const contents = Try( () => readFileSync(filename), - () => { throw new ReferenceError(`Unable to read file "${filename}"`) } + () => { + throw new ReferenceError(`Unable to read file "${filename}"`) + } ) const schema = Try( () => JSON.parse(contents.toString()), - () => { throw new TypeError(`Error parsing JSON in file "${filename}"`) } - ) - return compile( - schema, - stripExtension(filename), - { cwd: dirname(filename), ...options } + () => { + throw new TypeError(`Error parsing JSON in file "${filename}"`) + } ) + return compile(schema, stripExtension(filename), {cwd: dirname(filename), ...options}) } -export async function compile( - schema: JSONSchema4, - name: string, - options: Partial = {} -): Promise { - +export async function compile(schema: JSONSchema4, name: string, options: Partial = {}): Promise { const _options = merge({}, DEFAULT_OPTIONS, options) const errors = validate(schema, name) if (errors.length) { errors.forEach(_ => error(_)) - throw new ValidationError + throw new ValidationError() } // normalize options @@ -114,12 +106,10 @@ export async function compile( _options.cwd += '/' } - return format(generate( - optimize( - parse(await dereference(normalize(schema, name), _options), _options) - ), + return format( + generate(optimize(parse(await dereference(normalize(schema, name), _options), _options)), _options), _options - ), _options) + ) } -export class ValidationError extends Error { } +export class ValidationError extends Error {} diff --git a/src/normalizer.ts b/src/normalizer.ts index 0486730a..8d5d07cd 100644 --- a/src/normalizer.ts +++ b/src/normalizer.ts @@ -1,8 +1,8 @@ -import { whiteBright } from 'cli-color' +import {whiteBright} from 'cli-color' import stringify = require('json-stringify-safe') -import { cloneDeep } from 'lodash' -import { JSONSchema, JSONSchemaTypeName, NormalizedJSONSchema } from './types/JSONSchema' -import { escapeBlockComment, justName, log, toSafeString, traverse } from './utils' +import {cloneDeep} from 'lodash' +import {JSONSchema, JSONSchemaTypeName, NormalizedJSONSchema} from './types/JSONSchema' +import {escapeBlockComment, justName, log, toSafeString, traverse} from './utils' type Rule = (schema: JSONSchema, rootSchema: JSONSchema, fileName?: string) => void const rules = new Map() @@ -18,8 +18,12 @@ function isArrayType(schema: JSONSchema) { } rules.set('Remove `type=["null"]` if `enum=[null]`', schema => { - if (Array.isArray(schema.enum) && schema.enum.some(e => e === null) && - Array.isArray(schema.type) && schema.type.includes('null')) { + if ( + Array.isArray(schema.enum) && + schema.enum.some(e => e === null) && + Array.isArray(schema.type) && + schema.type.includes('null') + ) { schema.type = schema.type.filter(type => type !== 'null') } }) @@ -30,23 +34,21 @@ rules.set('Destructure unary types', schema => { } }) -rules.set('Add empty `required` property if none is defined', (schema) => { +rules.set('Add empty `required` property if none is defined', schema => { if (!('required' in schema) && isObjectType(schema)) { schema.required = [] } }) -rules.set('Transform `required`=false to `required`=[]', (schema) => { +rules.set('Transform `required`=false to `required`=[]', schema => { if (schema.required === false) { schema.required = [] } }) // TODO: default to empty schema (as per spec) instead -rules.set('Default additionalProperties to true', (schema) => { - if (!('additionalProperties' in schema) && - isObjectType(schema) && - schema.patternProperties === undefined) { +rules.set('Default additionalProperties to true', schema => { + if (!('additionalProperties' in schema) && isObjectType(schema) && schema.patternProperties === undefined) { schema.additionalProperties = true } }) @@ -61,7 +63,7 @@ rules.set('Escape closing JSDoc Comment', schema => { escapeBlockComment(schema) }) -rules.set('Normalise schema.minItems', (schema) => { +rules.set('Normalise schema.minItems', schema => { // make sure we only add the props onto array types if (isArrayType(schema)) { const {minItems} = schema @@ -98,7 +100,7 @@ rules.set('Normalize schema.items', schema => { export function normalize(schema: JSONSchema, filename?: string): NormalizedJSONSchema { const _schema = cloneDeep(schema) as NormalizedJSONSchema rules.forEach((rule, key) => { - traverse(_schema, (schema) => rule(schema, _schema, filename)) + traverse(_schema, schema => rule(schema, _schema, filename)) log(whiteBright.bgYellow('normalizer'), `Applied rule: "${key}"`) }) return _schema diff --git a/src/optimizer.ts b/src/optimizer.ts index eb764dea..30a26c7e 100644 --- a/src/optimizer.ts +++ b/src/optimizer.ts @@ -1,11 +1,10 @@ -import { whiteBright } from 'cli-color' +import {whiteBright} from 'cli-color' import stringify = require('json-stringify-safe') -import { uniqBy } from 'lodash' -import { AST, T_ANY } from './types/AST' -import { log } from './utils' +import {uniqBy} from 'lodash' +import {AST, T_ANY} from './types/AST' +import {log} from './utils' export function optimize(ast: AST, processed = new Map()): AST { - log(whiteBright.bgCyan('optimizer'), ast, processed.has(ast) ? '(FROM CACHE)' : '') if (processed.has(ast)) { @@ -17,13 +16,10 @@ export function optimize(ast: AST, processed = new Map()): AST { switch (ast.type) { case 'INTERFACE': return Object.assign(ast, { - params: ast.params.map(_ => - Object.assign(_, { ast: optimize(_.ast, processed) }) - ) + params: ast.params.map(_ => Object.assign(_, {ast: optimize(_.ast, processed)})) }) case 'INTERSECTION': case 'UNION': - // [A, B, C, Any] -> Any if (ast.params.some(_ => _.type === 'ANY')) { log(whiteBright.bgCyan('optimizer'), ast, '<- T_ANY') @@ -31,9 +27,7 @@ export function optimize(ast: AST, processed = new Map()): AST { } // [A, B, B] -> [A, B] - ast.params = uniqBy(ast.params, _ => - `${_.type}------${stringify((_ as any).params)}` - ) + ast.params = uniqBy(ast.params, _ => `${_.type}------${stringify((_ as any).params)}`) return Object.assign(ast, { params: ast.params.map(_ => optimize(_, processed)) diff --git a/src/parser.ts b/src/parser.ts index 664be45d..b4786ba2 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -1,12 +1,21 @@ -import { whiteBright } from 'cli-color' -import { JSONSchema4Type, JSONSchema4TypeName } from 'json-schema' -import { findKey, includes, isPlainObject, map } from 'lodash' -import { format } from 'util' -import { Options } from './' -import { typeOfSchema } from './typeOfSchema' -import { AST, hasStandaloneName, T_ANY, T_ANY_ADDITIONAL_PROPERTIES, TInterface, TInterfaceParam, TNamedInterface, TTuple } from './types/AST' -import { JSONSchema, JSONSchemaWithDefinitions, SchemaSchema } from './types/JSONSchema' -import { generateName, log } from './utils' +import {whiteBright} from 'cli-color' +import {JSONSchema4Type, JSONSchema4TypeName} from 'json-schema' +import {findKey, includes, isPlainObject, map} from 'lodash' +import {format} from 'util' +import {Options} from './' +import {typeOfSchema} from './typeOfSchema' +import { + AST, + hasStandaloneName, + T_ANY, + T_ANY_ADDITIONAL_PROPERTIES, + TInterface, + TInterfaceParam, + TNamedInterface, + TTuple +} from './types/AST' +import {JSONSchema, JSONSchemaWithDefinitions, SchemaSchema} from './types/JSONSchema' +import {generateName, log} from './utils' export type Processed = Map @@ -21,7 +30,6 @@ export function parse( processed: Processed = new Map(), usedNames = new Set() ): AST { - // If we've seen this node before, return it. if (processed.has(schema)) { return processed.get(schema)! @@ -33,12 +41,21 @@ export function parse( // Cache processed ASTs before they are actually computed, then update // them in place using set(). This is to avoid cycles. // TODO: Investigate alternative approaches (lazy-computing nodes, etc.) - let ast = {} as AST + const ast = {} as AST processed.set(schema, ast) const set = (_ast: AST) => Object.assign(ast, _ast) return isSchema - ? parseNonLiteral(schema as SchemaSchema, options, rootSchema, keyName, keyNameFromDefinition, set, processed, usedNames) + ? parseNonLiteral( + schema as SchemaSchema, + options, + rootSchema, + keyName, + keyNameFromDefinition, + set, + processed, + usedNames + ) : parseLiteral(schema, keyName, keyNameFromDefinition, set) } @@ -66,7 +83,6 @@ function parseNonLiteral( processed: Processed, usedNames: UsedNames ) { - log(whiteBright.bgBlue('parser'), schema, '<-' + typeOfSchema(schema), processed.has(schema) ? '(FROM CACHE)' : '') switch (typeOfSchema(schema)) { @@ -178,7 +194,15 @@ function parseNonLiteral( type: 'ANY' } } else if (schema.additionalItems) { - arrayType.spreadParam = parse(schema.additionalItems, options, rootSchema, undefined, true, processed, usedNames) + arrayType.spreadParam = parse( + schema.additionalItems, + options, + rootSchema, + undefined, + true, + processed, + usedNames + ) } return set(arrayType) } else { @@ -195,7 +219,9 @@ function parseNonLiteral( return set({ comment: schema.description, keyName, - params: (schema.type as JSONSchema4TypeName[]).map(_ => parse({ ...schema, type: _ }, options, rootSchema, undefined, true, processed, usedNames)), + params: (schema.type as JSONSchema4TypeName[]).map(_ => + parse({...schema, type: _}, options, rootSchema, undefined, true, processed, usedNames) + ), standaloneName: standaloneName(schema, keyNameFromDefinition, usedNames), type: 'UNION' }) @@ -208,7 +234,9 @@ function parseNonLiteral( type: 'UNION' }) case 'UNNAMED_SCHEMA': - return set(newInterface(schema as SchemaSchema, options, rootSchema, processed, usedNames, keyName, keyNameFromDefinition)) + return set( + newInterface(schema as SchemaSchema, options, rootSchema, processed, usedNames, keyName, keyNameFromDefinition) + ) case 'UNTYPED_ARRAY': // normalised to not be undefined const minItems = schema.minItems! @@ -242,12 +270,8 @@ function parseNonLiteral( /** * Compute a schema name using a series of fallbacks */ -function standaloneName( - schema: JSONSchema, - keyNameFromDefinition: string | undefined, - usedNames: UsedNames -) { - let name = schema.title || schema.id || keyNameFromDefinition +function standaloneName(schema: JSONSchema, keyNameFromDefinition: string | undefined, usedNames: UsedNames) { + const name = schema.title || schema.id || keyNameFromDefinition if (name) { return generateName(name, usedNames) } @@ -262,7 +286,7 @@ function newInterface( keyName?: string, keyNameFromDefinition?: string ): TInterface { - let name = standaloneName(schema, keyNameFromDefinition, usedNames)! + const name = standaloneName(schema, keyNameFromDefinition, usedNames)! return { comment: schema.description, keyName, @@ -317,7 +341,6 @@ function parseSchema( usedNames: UsedNames, parentSchemaName: string ): TInterfaceParam[] { - let asts: TInterfaceParam[] = map(schema.properties, (value, key: string) => ({ ast: parse(value, options, rootSchema, key, true, processed, usedNames), isPatternProperty: false, @@ -331,39 +354,41 @@ function parseSchema( // partially support patternProperties. in the case that // additionalProperties is not set, and there is only a single // value definition, we can validate against that. - singlePatternProperty = ( - !schema.additionalProperties && Object.keys(schema.patternProperties).length === 1 - ) + singlePatternProperty = !schema.additionalProperties && Object.keys(schema.patternProperties).length === 1 - asts = asts.concat(map(schema.patternProperties, (value, key: string) => { - let ast = parse(value, options, rootSchema, key, true, processed, usedNames) - let comment = `This interface was referenced by \`${parentSchemaName}\`'s JSON-Schema definition + asts = asts.concat( + map(schema.patternProperties, (value, key: string) => { + const ast = parse(value, options, rootSchema, key, true, processed, usedNames) + const comment = `This interface was referenced by \`${parentSchemaName}\`'s JSON-Schema definition via the \`patternProperty\` "${key}".` - ast.comment = ast.comment ? `${ast.comment}\n\n${comment}` : comment - return ({ - ast, - isPatternProperty: !singlePatternProperty, - isRequired: singlePatternProperty || includes(schema.required || [], key), - isUnreachableDefinition: false, - keyName: singlePatternProperty ? '[k: string]' : key + ast.comment = ast.comment ? `${ast.comment}\n\n${comment}` : comment + return { + ast, + isPatternProperty: !singlePatternProperty, + isRequired: singlePatternProperty || includes(schema.required || [], key), + isUnreachableDefinition: false, + keyName: singlePatternProperty ? '[k: string]' : key + } }) - })) + ) } if (options.unreachableDefinitions) { - asts = asts.concat(map(schema.definitions, (value, key: string) => { - let ast = parse(value, options, rootSchema, key, true, processed, usedNames) - let comment = `This interface was referenced by \`${parentSchemaName}\`'s JSON-Schema + asts = asts.concat( + map(schema.definitions, (value, key: string) => { + const ast = parse(value, options, rootSchema, key, true, processed, usedNames) + const comment = `This interface was referenced by \`${parentSchemaName}\`'s JSON-Schema via the \`definition\` "${key}".` - ast.comment = ast.comment ? `${ast.comment}\n\n${comment}` : comment - return { - ast, - isPatternProperty: false, - isRequired: includes(schema.required || [], key), - isUnreachableDefinition: true, - keyName: key - } - })) + ast.comment = ast.comment ? `${ast.comment}\n\n${comment}` : comment + return { + ast, + isPatternProperty: false, + isRequired: includes(schema.required || [], key), + isUnreachableDefinition: true, + keyName: key + } + }) + ) } // handle additionalProperties @@ -397,33 +422,35 @@ via the \`definition\` "${key}".` } } -type Definitions = { [k: string]: JSONSchema } +type Definitions = {[k: string]: JSONSchema} /** * TODO: Memoize */ -function getDefinitions( - schema: JSONSchema, - isSchema = true, - processed = new Set() -): Definitions { +function getDefinitions(schema: JSONSchema, isSchema = true, processed = new Set()): Definitions { if (processed.has(schema)) { return {} } processed.add(schema) if (Array.isArray(schema)) { - return schema.reduce((prev, cur) => ({ - ...prev, - ...getDefinitions(cur, false, processed) - }), {}) + return schema.reduce( + (prev, cur) => ({ + ...prev, + ...getDefinitions(cur, false, processed) + }), + {} + ) } if (isPlainObject(schema)) { return { ...(isSchema && hasDefinitions(schema) ? schema.definitions : {}), - ...Object.keys(schema).reduce((prev, cur) => ({ - ...prev, - ...getDefinitions(schema[cur], false, processed) - }), {}) + ...Object.keys(schema).reduce( + (prev, cur) => ({ + ...prev, + ...getDefinitions(schema[cur], false, processed) + }), + {} + ) } } return {} diff --git a/src/resolver.ts b/src/resolver.ts index a5fa651f..5fbe4485 100644 --- a/src/resolver.ts +++ b/src/resolver.ts @@ -1,10 +1,13 @@ -import { whiteBright } from 'cli-color' +import {whiteBright} from 'cli-color' import $RefParser = require('json-schema-ref-parser') -import { JSONSchema } from './types/JSONSchema' -import { log } from './utils' +import {JSONSchema} from './types/JSONSchema' +import {log} from './utils' -export async function dereference(schema: JSONSchema, {cwd, $refOptions}: {cwd: string, $refOptions: $RefParser.Options}): Promise { +export async function dereference( + schema: JSONSchema, + {cwd, $refOptions}: {cwd: string; $refOptions: $RefParser.Options} +): Promise { log(whiteBright.bgGreen('resolver'), schema, cwd) - const parser = new $RefParser + const parser = new $RefParser() return parser.dereference(cwd, schema, $refOptions) } diff --git a/src/typeOfSchema.ts b/src/typeOfSchema.ts index bbe0d38b..49400511 100644 --- a/src/typeOfSchema.ts +++ b/src/typeOfSchema.ts @@ -1,5 +1,5 @@ -import { isPlainObject } from 'lodash' -import { JSONSchema, SCHEMA_TYPE } from './types/JSONSchema' +import {isPlainObject} from 'lodash' +import {JSONSchema, SCHEMA_TYPE} from './types/JSONSchema' /** * Duck types a JSONSchema schema or property to determine which kind of AST node to parse it into. @@ -16,23 +16,32 @@ export function typeOfSchema(schema: JSONSchema): SCHEMA_TYPE { if (schema.enum) return 'UNNAMED_ENUM' if (schema.$ref) return 'REFERENCE' switch (schema.type) { - case 'string': return 'STRING' - case 'number': return 'NUMBER' - case 'integer': return 'NUMBER' - case 'boolean': return 'BOOLEAN' + case 'string': + return 'STRING' + case 'number': + return 'NUMBER' + case 'integer': + return 'NUMBER' + case 'boolean': + return 'BOOLEAN' case 'object': if (!schema.properties && !isPlainObject(schema)) { return 'OBJECT' } break - case 'array': return 'UNTYPED_ARRAY' - case 'any': return 'ANY' + case 'array': + return 'UNTYPED_ARRAY' + case 'any': + return 'ANY' } switch (typeof schema.default) { - case 'boolean': return 'BOOLEAN' - case 'number': return 'NUMBER' - case 'string': return 'STRING' + case 'boolean': + return 'BOOLEAN' + case 'number': + return 'NUMBER' + case 'string': + return 'STRING' } if (schema.id) return 'NAMED_SCHEMA' if (isPlainObject(schema) && Object.keys(schema).length) return 'UNNAMED_SCHEMA' diff --git a/src/utils.ts b/src/utils.ts index ed4cd55f..f614a199 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,7 +1,7 @@ -import { whiteBright } from 'cli-color' -import { deburr, isPlainObject, mapValues, trim, upperFirst } from 'lodash' -import { basename, extname } from 'path' -import { JSONSchema } from './types/JSONSchema' +import {whiteBright} from 'cli-color' +import {deburr, isPlainObject, mapValues, trim, upperFirst} from 'lodash' +import {basename, extname} from 'path' +import {JSONSchema} from './types/JSONSchema' // TODO: pull out into a separate package export function Try(fn: () => T, err: (e: Error) => any): T { @@ -15,32 +15,31 @@ export function Try(fn: () => T, err: (e: Error) => any): T { /** * Depth-first traversal */ -export function dft(object: { [k: string]: any }, cb: (value: U, key: string) => T): void { - for (let key in object) { +export function dft(object: {[k: string]: any}, cb: (value: U, key: string) => T): void { + for (const key in object) { if (!object.hasOwnProperty(key)) continue if (isPlainObject(object[key])) dft(object[key], cb) cb(object[key], key) } } -export function mapDeep( - object: object, - fn: (value: object, key?: string) => object, - key?: string -): object { - return fn(mapValues(object, (_: unknown, key) => { - if (isPlainObject(_)) { - return mapDeep(_ as object, fn, key) - } else if (Array.isArray(_)) { - return _.map(item => { - if (isPlainObject(item)) { - return mapDeep(item as object, fn, key) - } - return item - }) - } - return _ - }), key) +export function mapDeep(object: object, fn: (value: object, key?: string) => object, key?: string): object { + return fn( + mapValues(object, (_: unknown, key) => { + if (isPlainObject(_)) { + return mapDeep(_ as object, fn, key) + } else if (Array.isArray(_)) { + return _.map(item => { + if (isPlainObject(item)) { + return mapDeep(item as object, fn, key) + } + return item + }) + } + return _ + }), + key + ) } // keys that shouldn't be traversed by the catchall step @@ -78,10 +77,7 @@ const BLACKLISTED_KEYS = new Set([ 'oneOf', 'not' ]) -function traverseObjectKeys( - obj: Record, - callback: (schema: JSONSchema) => void -) { +function traverseObjectKeys(obj: Record, callback: (schema: JSONSchema) => void) { Object.keys(obj).forEach(k => { if (obj[k] && typeof obj[k] === 'object' && !Array.isArray(obj[k])) { traverse(obj[k], callback) @@ -134,12 +130,14 @@ export function traverse(schema: JSONSchema, callback: (schema: JSONSchema) => v } // technically you can put definitions on any key - Object.keys(schema).filter(key => !BLACKLISTED_KEYS.has(key)).forEach(key => { - const child = schema[key] - if (child && typeof child === 'object') { - traverseObjectKeys(child, callback) - } - }) + Object.keys(schema) + .filter(key => !BLACKLISTED_KEYS.has(key)) + .forEach(key => { + const child = schema[key] + if (child && typeof child === 'object') { + traverseObjectKeys(child, callback) + } + }) } /** @@ -168,18 +166,19 @@ export function toSafeString(string: string) { return upperFirst( // remove accents, umlauts, ... by their basic latin letters deburr(string) - // replace chars which are not valid for typescript identifiers with whitespace - .replace(/(^\s*[^a-zA-Z_$])|([^a-zA-Z_$\d])/g, ' ') - // uppercase leading underscores followed by lowercase - .replace(/^_[a-z]/g, match => match.toUpperCase()) - // remove non-leading underscores followed by lowercase (convert snake_case) - .replace(/_[a-z]/g, match => match.substr(1, match.length).toUpperCase()) - // uppercase letters after digits, dollars - .replace(/([\d$]+[a-zA-Z])/g, match => match.toUpperCase()) - // uppercase first letter after whitespace - .replace(/\s+([a-zA-Z])/g, match => trim(match.toUpperCase())) - // remove remaining whitespace - .replace(/\s/g, '')) + // replace chars which are not valid for typescript identifiers with whitespace + .replace(/(^\s*[^a-zA-Z_$])|([^a-zA-Z_$\d])/g, ' ') + // uppercase leading underscores followed by lowercase + .replace(/^_[a-z]/g, match => match.toUpperCase()) + // remove non-leading underscores followed by lowercase (convert snake_case) + .replace(/_[a-z]/g, match => match.substr(1, match.length).toUpperCase()) + // uppercase letters after digits, dollars + .replace(/([\d$]+[a-zA-Z])/g, match => match.toUpperCase()) + // uppercase first letter after whitespace + .replace(/\s+([a-zA-Z])/g, match => trim(match.toUpperCase())) + // remove remaining whitespace + .replace(/\s/g, '') + ) } export function generateName(from: string, usedNames: Set) { diff --git a/src/validator.ts b/src/validator.ts index d2167303..34af75ad 100644 --- a/src/validator.ts +++ b/src/validator.ts @@ -1,5 +1,5 @@ -import { JSONSchema } from './types/JSONSchema' -import { mapDeep } from './utils' +import {JSONSchema} from './types/JSONSchema' +import {mapDeep} from './utils' type Rule = (schema: JSONSchema) => boolean | void const rules = new Map() diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 5fedf427..00000000 --- a/tslint.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "rules": { - "class-name": true, - "comment-format": [true, "check-space"], - "eofline": true, - "indent": [true, "spaces"], - "linebreak-style": [true, "LF"], - "member-access": false, - "no-angle-bracket-type-assertion": true, - "no-bitwise": true, - "no-consecutive-blank-lines": [true], - "no-debugger": true, - "no-default-export": true, - "no-duplicate-key": true, - "no-duplicate-variable": true, - "no-eval": true, - "no-internal-module": true, - "no-invalid-this": true, - "no-reference": true, - "no-trailing-whitespace": true, - "no-unused-expression": true, - "no-unused-new": true, - "no-var-keyword": true, - "object-literal-key-quotes": [true, "as-needed"], - "object-literal-shorthand": true, - "object-literal-sort-keys": true, - "one-line": [true, "check-catch", "check-finally", "check-else", "check-open-brace"], - "one-variable-per-declaration": [true, "ignore-for-loop"], - "ordered-imports": [true], - "quotemark": [true, "single"], - "semicolon": [true, "never"], - "trailing-comma": [true, {"multiline": "never", "singleline": "never"}], - "triple-equals": [true, "allow-null-check"], - "use-isnan": true, - "whitespace": [true, "check-branch", "check-decl", "check-module", "check-operator", "check-separator", "check-type"] - } -} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 1a3c7363..8a12fa8a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -328,6 +328,11 @@ version "0.3.29" resolved "http://registry.npmjs.org/@types/cli-color/-/cli-color-0.3.29.tgz#c83a71fe02c8c7e1ccec048dd6a2458d1f6c96ea" +"@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/json-schema@^7.0.3": version "7.0.3" resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" @@ -358,6 +363,49 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.16.1.tgz#328d1c9b54402e44119398bcb6a31b7bbd606d59" integrity sha512-db6pZL5QY3JrlCHBhYQzYDci0xnoDuxfseUuguLRr3JNk+bnCfpkK6p8quiUDyO8A0vbpBKkk59Fw125etrNeA== +"@typescript-eslint/eslint-plugin@^2.9.0": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.9.0.tgz#fa810282c0e45f6c2310b9c0dfcd25bff97ab7e9" + integrity sha512-98rfOt3NYn5Gr9wekTB8TexxN6oM8ZRvYuphPs1Atfsy419SDLYCaE30aJkRiiTCwGEY98vOhFsEVm7Zs4toQQ== + dependencies: + "@typescript-eslint/experimental-utils" "2.9.0" + eslint-utils "^1.4.3" + functional-red-black-tree "^1.0.1" + regexpp "^3.0.0" + tsutils "^3.17.1" + +"@typescript-eslint/experimental-utils@2.9.0": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.9.0.tgz#bbe99a8d9510240c055fc4b17230dd0192ba3c7f" + integrity sha512-0lOLFdpdJsCMqMSZT7l7W2ta0+GX8A3iefG3FovJjrX+QR8y6htFlFdU7aOVPL6pDvt6XcsOb8fxk5sq+girTw== + dependencies: + "@types/json-schema" "^7.0.3" + "@typescript-eslint/typescript-estree" "2.9.0" + eslint-scope "^5.0.0" + +"@typescript-eslint/parser@^2.9.0": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.9.0.tgz#2e9cf438de119b143f642a3a406e1e27eb70b7cd" + integrity sha512-fJ+dNs3CCvEsJK2/Vg5c2ZjuQ860ySOAsodDPwBaVlrGvRN+iCNC8kUfLFL8cT49W4GSiLPa/bHiMjYXA7EhKQ== + dependencies: + "@types/eslint-visitor-keys" "^1.0.0" + "@typescript-eslint/experimental-utils" "2.9.0" + "@typescript-eslint/typescript-estree" "2.9.0" + eslint-visitor-keys "^1.1.0" + +"@typescript-eslint/typescript-estree@2.9.0": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.9.0.tgz#09138daf8f47d0e494ba7db9e77394e928803017" + integrity sha512-v6btSPXEWCP594eZbM+JCXuFoXWXyF/z8kaSBSdCb83DF+Y7+xItW29SsKtSULgLemqJBT+LpT+0ZqdfH7QVmA== + dependencies: + debug "^4.1.1" + eslint-visitor-keys "^1.1.0" + glob "^7.1.6" + is-glob "^4.0.1" + lodash.unescape "4.0.1" + semver "^6.3.0" + tsutils "^3.17.1" + JSONStream@^1.0.3: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -382,6 +430,11 @@ acorn-dynamic-import@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" +acorn-jsx@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" + integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== + acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2: version "1.6.2" resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.6.2.tgz#b7d7ceca6f22e6417af933a62cad4de01048d5d2" @@ -404,6 +457,21 @@ acorn@^6.0.2: version "6.0.4" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.4.tgz#77377e7353b72ec5104550aa2d2097a2fd40b754" +acorn@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" + integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== + +ajv@^6.10.0, ajv@^6.10.2: + version "6.10.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" @@ -420,6 +488,13 @@ ansi-escapes@^3.1.0: resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== +ansi-escapes@^4.2.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" + integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg== + dependencies: + type-fest "^0.8.1" + ansi-regex@^2.0.0, ansi-regex@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -433,11 +508,17 @@ ansi-regex@^4.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" integrity sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w== -ansi-styles@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== -ansi-styles@^3.2.1: +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" dependencies: @@ -551,6 +632,11 @@ assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + async-each@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" @@ -647,14 +733,6 @@ ava@^1.2.1: unique-temp-dir "^1.0.0" update-notifier "^2.5.0" -babel-code-frame@^6.22.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - babel-plugin-espower@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/babel-plugin-espower/-/babel-plugin-espower-3.0.1.tgz#180db17126f88e754105b8b5216d21e520a6bd4e" @@ -894,7 +972,7 @@ buffer@^5.0.2: base64-js "^1.0.2" ieee754 "^1.1.4" -builtin-modules@^1.0.0, builtin-modules@^1.1.1: +builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -937,6 +1015,11 @@ call-signature@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/call-signature/-/call-signature-0.0.2.tgz#a84abc825a55ef4cb2b028bd74e205a65b9a4996" +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + camelcase-keys@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" @@ -954,17 +1037,7 @@ capture-stack-trace@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" -chalk@^1.1.3: - version "1.1.3" - resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" - dependencies: - ansi-styles "^2.2.1" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^2.0.0, chalk@^2.4.2: +chalk@^2.0.0, chalk@^2.1.0, 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== @@ -973,7 +1046,7 @@ chalk@^2.0.0, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1: +chalk@^2.0.1, chalk@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" dependencies: @@ -981,6 +1054,11 @@ chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + chokidar@^2.0.4: version "2.1.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.2.tgz#9c23ea40b01638439e0513864d362aeacc5ad058" @@ -1069,6 +1147,13 @@ cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + cli-spinners@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.0.0.tgz#4b078756fc17a8f72043fdc9f1f14bf4fa87e2df" @@ -1082,6 +1167,11 @@ cli-truncate@^1.1.0: slice-ansi "^1.0.0" string-width "^2.0.0" +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" @@ -1131,10 +1221,6 @@ combine-source-map@^0.8.0, combine-source-map@~0.8.0: lodash.memoize "~3.0.3" source-map "~0.5.3" -commander@^2.12.1: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - common-path-prefix@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-1.0.0.tgz#cd52f6f0712e0baab97d6f9732874f22f47752c0" @@ -1281,7 +1367,7 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.0: +cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" dependencies: @@ -1343,7 +1429,7 @@ debug@^2.1.2, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -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== @@ -1381,6 +1467,11 @@ deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + defaults@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" @@ -1471,10 +1562,6 @@ detective@~3.1.0: escodegen "~1.1.0" esprima-fb "3001.1.0-dev-harmony-fb" -diff@^3.2.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - diffie-hellman@^5.0.0: version "5.0.3" resolved "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -1490,6 +1577,13 @@ dir-glob@^2.0.0: dependencies: path-type "^3.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" + domain-browser@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" @@ -1533,6 +1627,16 @@ emittery@^0.4.1: resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.4.1.tgz#abe9d3297389ba424ac87e53d1c701962ce7433d" integrity sha512-r4eRSeStEGf6M5SKdrQhhLK5bOwOBxQhIE3YSTnZE3GpKiLfnnhE+tPtrJE79+eDJgm39BM6LSoI8SCx4HbwlQ== +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== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + empower-core@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/empower-core/-/empower-core-1.2.0.tgz#ce3fb2484d5187fa29c23fba8344b0b2fdf5601c" @@ -1591,7 +1695,7 @@ es6-weak-map@^2.0.2: es6-iterator "^2.0.1" es6-symbol "^3.1.1" -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.3, escape-string-regexp@^1.0.4, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -1606,6 +1710,83 @@ escodegen@~1.1.0: optionalDependencies: source-map "~0.1.30" +eslint-config-prettier@^6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.7.0.tgz#9a876952e12df2b284adbd3440994bf1f39dfbb9" + integrity sha512-FamQVKM3jjUVwhG4hEMnbtsq7xOIDm+SY5iBPfR8gKsJoAB2IQnNF+bk1+8Fy44Nq7PPJaLvkRxILYdJWoguKQ== + dependencies: + get-stdin "^6.0.0" + +eslint-plugin-prettier@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.1.tgz#507b8562410d02a03f0ddc949c616f877852f2ba" + integrity sha512-A+TZuHZ0KU0cnn56/9mfR7/KjUJ9QNVXUhwvRFSR7PGPe0zQR6PTkmyqg1AtUUEOzTqeRsUwyKFh0oVZKVCrtA== + dependencies: + prettier-linter-helpers "^1.0.0" + +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.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.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.7.2: + version "6.7.2" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.7.2.tgz#c17707ca4ad7b2d8af986a33feba71e18a9fecd1" + integrity sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng== + 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.3" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" + 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 "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^7.0.0" + 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.3" + 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" + esm@^3.1.3: version "3.2.9" resolved "https://registry.yarnpkg.com/esm/-/esm-3.2.9.tgz#9dca653e3b39f89c3c65c5e84cebfa4af345c10d" @@ -1620,6 +1801,15 @@ espower-location-detector@^1.0.0: source-map "^0.5.0" xtend "^4.0.0" +espree@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" + integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA== + dependencies: + acorn "^7.1.0" + acorn-jsx "^5.1.0" + eslint-visitor-keys "^1.1.0" + esprima-fb@3001.1.0-dev-harmony-fb: version "3001.1.0-dev-harmony-fb" resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz#b77d37abcd38ea0b77426bb8bc2922ce6b426411" @@ -1640,10 +1830,29 @@ espurify@^1.6.0: dependencies: core-js "^2.0.0" +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.1: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" +estraverse@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + estraverse@~1.5.0: version "1.5.1" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.5.1.tgz#867a3e8e58a9f84618afb6c2ddbcd916b7cbaf71" @@ -1736,6 +1945,15 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -1749,17 +1967,46 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + fast-diff@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" dependencies: escape-string-regexp "^1.0.5" +figures@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" + integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== + 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" @@ -1786,6 +2033,20 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" +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== + for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -1822,6 +2083,11 @@ function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" +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" @@ -1848,6 +2114,11 @@ get-port@^4.1.0: resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== + get-stream@^3.0.0: version "3.0.0" resolved "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -1864,7 +2135,14 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: +glob-parent@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" + integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== + dependencies: + is-glob "^4.0.1" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.0, glob@^7.1.2, glob@^7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" dependencies: @@ -1875,6 +2153,18 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2, gl once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + global-dirs@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" @@ -1886,6 +2176,13 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== +globals@^12.1.0: + version "12.3.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13" + integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw== + dependencies: + type-fest "^0.8.1" + globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" @@ -1938,12 +2235,6 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" -has-ansi@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" - dependencies: - ansi-regex "^2.0.0" - has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" @@ -2037,7 +2328,7 @@ https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" -iconv-lite@^0.4.4: +iconv-lite@^0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" dependencies: @@ -2062,6 +2353,19 @@ ignore@^3.3.5: resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" integrity sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug== +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== + +import-fresh@^3.0.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" + integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" @@ -2107,6 +2411,25 @@ inline-source-map@~0.6.0: dependencies: source-map "~0.5.3" +inquirer@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.0.tgz#9e2b032dde77da1db5db804758b8fea3a970519a" + integrity sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ== + dependencies: + ansi-escapes "^4.2.1" + chalk "^2.4.2" + cli-cursor "^3.1.0" + cli-width "^2.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.15" + mute-stream "0.0.8" + run-async "^2.2.0" + rxjs "^6.4.0" + string-width "^4.1.0" + strip-ansi "^5.1.0" + through "^2.3.6" + insert-module-globals@^7.0.0: version "7.2.0" resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.0.tgz#ec87e5b42728479e327bd5c5c71611ddfb4752ba" @@ -2243,6 +2566,11 @@ is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -2257,6 +2585,13 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" +is-glob@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + is-installed-globally@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" @@ -2379,16 +2714,12 @@ js-string-escape@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" -js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.10.0, js-yaml@^3.7.0: +js-yaml@^3.10.0: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" dependencies: @@ -2403,6 +2734,14 @@ js-yaml@^3.12.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -2425,6 +2764,16 @@ json-schema-ref-parser@^6.1.0: js-yaml "^3.12.1" ono "^4.0.11" +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + json-stable-stringify@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" @@ -2490,6 +2839,14 @@ lcid@^2.0.0: dependencies: invert-kv "^2.0.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= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + 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" @@ -2556,10 +2913,20 @@ lodash.merge@^4.6.1: resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.1.tgz#adc25d9cb99b9391c59624f379fbba60d7111d54" integrity sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ== +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@^4.17.10, lodash@^4.17.11: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" +lodash@^4.17.14, lodash@^4.17.15: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" @@ -2713,6 +3080,11 @@ mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -2814,6 +3186,11 @@ multimatch@^3.0.0: arrify "^1.0.1" minimatch "^3.0.4" +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + mz@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" @@ -2842,6 +3219,11 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= + needle@^2.2.1: version "2.2.4" resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" @@ -2979,6 +3361,13 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + ono@^4.0.11: version "4.0.11" resolved "https://registry.yarnpkg.com/ono/-/ono-4.0.11.tgz#c7f4209b3e396e8a44ef43b9cedc7f5d791d221d" @@ -2986,6 +3375,18 @@ ono@^4.0.11: dependencies: format-util "^1.0.3" +optionator@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + ora@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ora/-/ora-3.2.0.tgz#67e98a7e11f7f0ac95deaaaf11bb04de3d09e481" @@ -3014,7 +3415,7 @@ os-locale@^3.0.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -3097,6 +3498,13 @@ pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" +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" + parents@^1.0.0, parents@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" @@ -3234,14 +3642,26 @@ posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" -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== +prettier-linter-helpers@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" + integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== + dependencies: + fast-diff "^1.1.2" + +prettier@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== pretty-ms@^4.0.0: version "4.0.0" @@ -3258,6 +3678,11 @@ process@~0.11.0: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -3281,6 +3706,11 @@ punycode@^1.3.2: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + querystring-es3@~0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -3421,6 +3851,16 @@ 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== + +regexpp@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" + integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== + regexpu-core@^4.1.3: version "4.4.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.4.0.tgz#8d43e0d1266883969720345e70c275ee0aec0d32" @@ -3515,6 +3955,11 @@ resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" @@ -3541,11 +3986,19 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" -rimraf@^2.2.8: +rimraf@2.6.3, rimraf@^2.2.8: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== @@ -3565,6 +4018,13 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= + dependencies: + is-promise "^2.1.0" + rxjs@^6.3.3: version "6.4.0" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" @@ -3572,6 +4032,13 @@ rxjs@^6.3.3: dependencies: tslib "^1.9.0" +rxjs@^6.4.0: + version "6.5.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" + integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== + dependencies: + tslib "^1.9.0" + safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -3600,6 +4067,11 @@ semver-diff@^2.0.0: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" +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== + serialize-error@^2.1.0: version "2.1.0" resolved "http://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz#50b679d5635cdf84667bdc8e59af4e5b81d5f60a" @@ -3698,6 +4170,15 @@ slice-ansi@^1.0.0: dependencies: is-fullwidth-code-point "^2.0.0" +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.5: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" @@ -3864,6 +4345,24 @@ string-width@^1.0.1: 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-width@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + string_decoder@^1.1.1, string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -3894,6 +4393,20 @@ strip-ansi@^5.0.0: dependencies: ansi-regex "^4.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== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + strip-bom-buf@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-buf/-/strip-bom-buf-1.0.0.tgz#1cb45aaf57530f4caf86c7f75179d2c9a51dd572" @@ -3923,6 +4436,11 @@ strip-json-comments@^2.0.0, 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" +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== + subarg@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" @@ -3939,10 +4457,6 @@ supertap@^1.0.0: serialize-error "^2.1.0" strip-ansi "^4.0.0" -supports-color@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" - supports-color@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" @@ -3976,6 +4490,16 @@ syntax-error@^1.1.1: dependencies: acorn-node "^1.2.0" +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: version "4.4.8" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" @@ -3999,6 +4523,11 @@ ternary@~1.0.0: resolved "https://registry.yarnpkg.com/ternary/-/ternary-1.0.0.tgz#45702725608c9499d46a9610e9b0e49ff26f789e" integrity sha1-RXAnJWCMlJnUapYQ6bDkn/JveJ4= +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" @@ -4026,7 +4555,7 @@ through2@~0.4.0: readable-stream "~1.0.17" xtend "~2.1.1" -"through@>=2.2.7 <3", through@~2.3.4: +"through@>=2.2.7 <3", through@^2.3.6, through@~2.3.4: version "2.3.8" resolved "http://registry.npmjs.org/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -4051,6 +4580,13 @@ timers-ext@^0.1.5: es5-ext "~0.10.46" next-tick "1" +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -4127,32 +4663,14 @@ tsify@^4.0.1: through2 "^2.0.0" tsconfig "^5.0.3" -tslib@^1.8.0, tslib@^1.8.1, tslib@^1.9.0: +tslib@^1.8.1, tslib@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" -tslint@^5.13.1: - version "5.13.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.13.1.tgz#fbc0541c425647a33cd9108ce4fd4cd18d7904ed" - integrity sha512-fplQqb2miLbcPhyHoMV4FU9PtNRbgmm/zI5d3SZwwmJQM6V0eodju+hplpyfhLWpmwrDNfNYU57uYRb8s0zZoQ== - dependencies: - babel-code-frame "^6.22.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.7.0" - minimatch "^3.0.4" - mkdirp "^0.5.1" - resolve "^1.3.2" - semver "^5.3.0" - tslib "^1.8.0" - tsutils "^2.27.2" - -tsutils@^2.27.2: - version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" +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" @@ -4160,6 +4678,18 @@ tty-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" @@ -4264,6 +4794,13 @@ update-notifier@^2.5.0: semver-diff "^2.0.0" xdg-basedir "^3.0.0" +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" @@ -4301,6 +4838,11 @@ util@~0.10.1: dependencies: inherits "2.0.3" +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== + validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -4346,6 +4888,11 @@ widest-line@^2.0.0: dependencies: string-width "^2.1.1" +word-wrap@~1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + wrap-ansi@^2.0.0: version "2.1.0" resolved "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -4365,6 +4912,13 @@ write-file-atomic@^2.0.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" +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" + xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"