pax_global_header00006660000000000000000000000064136253337730014526gustar00rootroot0000000000000052 comment=4bd049e06e2c7ab31053020fc662f51bf6c179e3 babel-eslint-10.1.0/000077500000000000000000000000001362533377300141465ustar00rootroot00000000000000babel-eslint-10.1.0/.eslintignore000066400000000000000000000000161362533377300166460ustar00rootroot00000000000000test/fixtures babel-eslint-10.1.0/.eslintrc.js000066400000000000000000000003351362533377300164060ustar00rootroot00000000000000module.exports = { root: true, extends: "babel", "plugins": [ "prettier" ], rules: { "no-var": 0, "max-len": 0, "prettier/prettier": "error", }, env: { node: true, mocha: true } }; babel-eslint-10.1.0/.gitignore000066400000000000000000000000331362533377300161320ustar00rootroot00000000000000node_modules npm-debug.log babel-eslint-10.1.0/.prettierignore000066400000000000000000000000071362533377300172060ustar00rootroot00000000000000*.json babel-eslint-10.1.0/.prettierrc000066400000000000000000000000401362533377300163240ustar00rootroot00000000000000{ "trailingComma": "es5" }babel-eslint-10.1.0/.travis.yml000066400000000000000000000003761362533377300162650ustar00rootroot00000000000000sudo: false language: node_js node_js: - "10" - "8" - "6" matrix: fast_finish: true include: - node_js: "node" env: LINT=true script: - 'if [ -n "${LINT-}" ]; then npm run lint ; fi' - 'if [ -z "${LINT-}" ]; then npm test ; fi' babel-eslint-10.1.0/CONTRIBUTING.md000066400000000000000000000011171362533377300163770ustar00rootroot00000000000000# Contributing Thanks for contributing! If you're about to report an issue - please first check if it's already been reported in the [issues page](https://github.com/babel/babel-eslint/issues). Also check to see if the latest versions of eslint/babel-eslint still produce the issue. Also check out the [Known Issues](https://github.com/babel/babel-eslint#known-issues) section of the README. If you are having issues with JSX you might want to check out eslint-plugin-react. If there's an issue with new experimental syntax you might need to report that in eslint-plugin-babel instead. babel-eslint-10.1.0/LICENSE000066400000000000000000000021131362533377300151500ustar00rootroot00000000000000Copyright (c) 2014-2016 Sebastian McKenzie MIT License Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. babel-eslint-10.1.0/Makefile000066400000000000000000000001711362533377300156050ustar00rootroot00000000000000.PHONY: publish-patch publish-patch: ./node_modules/.bin/mocha npm version patch npm publish git push --follow-tags babel-eslint-10.1.0/README.md000066400000000000000000000102451362533377300154270ustar00rootroot00000000000000# babel-eslint [![npm](https://img.shields.io/npm/v/babel-eslint.svg)](https://www.npmjs.com/package/babel-eslint) [![travis](https://img.shields.io/travis/babel/babel-eslint/master.svg)](https://travis-ci.org/babel/babel-eslint) [![npm-downloads](https://img.shields.io/npm/dm/babel-eslint.svg)](https://www.npmjs.com/package/babel-eslint) **babel-eslint** allows you to lint **ALL** valid Babel code with the fantastic [ESLint](https://github.com/eslint/eslint). ### Why Use babel-eslint You only need to use babel-eslint if you are using types (Flow) or experimental features not supported in ESLint itself yet. Otherwise try the default parser (you don't have to use it just because you are using Babel). --- > If there is an issue, first check if it can be reproduced with the regular parser or with the latest versions of `eslint` and `babel-eslint`! For questions and support please visit the [`#discussion`](https://babeljs.slack.com/messages/discussion/) babel slack channel (sign up [here](https://github.com/babel/notes/issues/38)) or eslint [gitter](https://gitter.im/eslint/eslint)! > Note that the `ecmaFeatures` config property may still be required for ESLint to work properly with features not in ECMAScript 5 by default. Examples are `globalReturn` and `modules`). ## Known Issues Flow: > Check out [eslint-plugin-flowtype](https://github.com/gajus/eslint-plugin-flowtype): An `eslint` plugin that makes flow type annotations global variables and marks declarations as used. Solves the problem of false positives with `no-undef` and `no-unused-vars`. - `no-undef` for global flow types: `ReactElement`, `ReactClass` [#130](https://github.com/babel/babel-eslint/issues/130#issuecomment-111215076) - Workaround: define types as globals in `.eslintrc` or define types and import them `import type ReactElement from './types'` - `no-unused-vars/no-undef` with Flow declarations (`declare module A {}`) [#132](https://github.com/babel/babel-eslint/issues/132#issuecomment-112815926) Modules/strict mode - `no-unused-vars: [2, {vars: local}]` [#136](https://github.com/babel/babel-eslint/issues/136) Please check out [eslint-plugin-react](https://github.com/yannickcr/eslint-plugin-react) for React/JSX issues - `no-unused-vars` with jsx Please check out [eslint-plugin-babel](https://github.com/babel/eslint-plugin-babel) for other issues ## How does it work? ESLint allows custom parsers. This is great but some of the syntax nodes that Babel supports aren't supported by ESLint. When using this plugin, ESLint is monkeypatched and your code is transformed into code that ESLint can understand. All location info such as line numbers, columns is also retained so you can track down errors with ease. Basically `babel-eslint` exports an [`index.js`](/index.js) that a linter can use. It just needs to export a `parse` method that takes in a string of code and outputs an AST. ## Usage ### Supported ESLint versions ESLint | babel-eslint ------------ | ------------- 4.x | >= 6.x 3.x | >= 6.x 2.x | >= 6.x 1.x | >= 5.x ### Install Ensure that you have substituted the correct version lock for `eslint` and `babel-eslint` into this command: ```sh $ npm install eslint@4.x babel-eslint@8 --save-dev # or $ yarn add eslint@4.x babel-eslint@8 -D ``` ### Setup **.eslintrc** ```json { "parser": "babel-eslint", "rules": { "strict": 0 } } ``` Check out the [ESLint docs](http://eslint.org/docs/rules/) for all possible rules. ### Configuration - `sourceType` can be set to `'module'`(default) or `'script'` if your code isn't using ECMAScript modules. - `allowImportExportEverywhere` (default `false`) can be set to `true` to allow import and export declarations to appear anywhere a statement is allowed if your build environment supports that. Otherwise import and export declarations can only appear at a program's top level. - `codeFrame` (default `true`) can be set to `false` to disable the code frame in the reporter. This is useful since some eslint formatters don't play well with it. **.eslintrc** ```json { "parser": "babel-eslint", "parserOptions": { "sourceType": "module", "allowImportExportEverywhere": false, "codeFrame": true } } ``` ### Run ```sh $ eslint your-files-here ``` babel-eslint-10.1.0/lib/000077500000000000000000000000001362533377300147145ustar00rootroot00000000000000babel-eslint-10.1.0/lib/analyze-scope.js000066400000000000000000000213331362533377300200260ustar00rootroot00000000000000"use strict"; const t = require("@babel/types"); const requireFromESLint = require("./require-from-eslint"); const escope = requireFromESLint("eslint-scope"); const Definition = requireFromESLint("eslint-scope/lib/definition").Definition; const OriginalPatternVisitor = requireFromESLint( "eslint-scope/lib/pattern-visitor" ); const OriginalReferencer = requireFromESLint("eslint-scope/lib/referencer"); const fallback = require("eslint-visitor-keys").getKeys; const childVisitorKeys = require("./visitor-keys"); const flowFlippedAliasKeys = t.FLIPPED_ALIAS_KEYS.Flow.concat([ "ArrayPattern", "ClassDeclaration", "ClassExpression", "FunctionDeclaration", "FunctionExpression", "Identifier", "ObjectPattern", "RestElement", ]); const visitorKeysMap = Object.keys(t.VISITOR_KEYS).reduce(function(acc, key) { const value = t.VISITOR_KEYS[key]; if (flowFlippedAliasKeys.indexOf(value) === -1) { acc[key] = value; } return acc; }, {}); const propertyTypes = { // loops callProperties: { type: "loop", values: ["value"] }, indexers: { type: "loop", values: ["key", "value"] }, properties: { type: "loop", values: ["argument", "value"] }, types: { type: "loop" }, params: { type: "loop" }, // single property argument: { type: "single" }, elementType: { type: "single" }, qualification: { type: "single" }, rest: { type: "single" }, returnType: { type: "single" }, // others typeAnnotation: { type: "typeAnnotation" }, typeParameters: { type: "typeParameters" }, id: { type: "id" }, }; class PatternVisitor extends OriginalPatternVisitor { ArrayPattern(node) { node.elements.forEach(this.visit, this); } ObjectPattern(node) { node.properties.forEach(this.visit, this); } } class Referencer extends OriginalReferencer { // inherits. visitPattern(node, options, callback) { if (!node) { return; } // Visit type annotations. this._checkIdentifierOrVisit(node.typeAnnotation); if (t.isAssignmentPattern(node)) { this._checkIdentifierOrVisit(node.left.typeAnnotation); } // Overwrite `super.visitPattern(node, options, callback)` in order to not visit `ArrayPattern#typeAnnotation` and `ObjectPattern#typeAnnotation`. if (typeof options === "function") { callback = options; options = { processRightHandNodes: false }; } const visitor = new PatternVisitor(this.options, node, callback); visitor.visit(node); // Process the right hand nodes recursively. if (options.processRightHandNodes) { visitor.rightHandNodes.forEach(this.visit, this); } } // inherits. visitClass(node) { // Decorators. this._visitArray(node.decorators); // Flow type parameters. const typeParamScope = this._nestTypeParamScope(node); // Flow super types. this._visitTypeAnnotation(node.implements); this._visitTypeAnnotation( node.superTypeParameters && node.superTypeParameters.params ); // Basic. super.visitClass(node); // Close the type parameter scope. if (typeParamScope) { this.close(node); } } // inherits. visitFunction(node) { const typeParamScope = this._nestTypeParamScope(node); // Flow return types. this._checkIdentifierOrVisit(node.returnType); // Basic. super.visitFunction(node); // Close the type parameter scope. if (typeParamScope) { this.close(node); } } // inherits. visitProperty(node) { if (node.value && node.value.type === "TypeCastExpression") { this._visitTypeAnnotation(node.value); } this._visitArray(node.decorators); super.visitProperty(node); } InterfaceDeclaration(node) { this._createScopeVariable(node, node.id); const typeParamScope = this._nestTypeParamScope(node); // TODO: Handle mixins this._visitArray(node.extends); this.visit(node.body); if (typeParamScope) { this.close(node); } } EnumDeclaration(node) { this._createScopeVariable(node, node.id); } TypeAlias(node) { this._createScopeVariable(node, node.id); const typeParamScope = this._nestTypeParamScope(node); this.visit(node.right); if (typeParamScope) { this.close(node); } } ClassProperty(node) { this._visitClassProperty(node); } ClassPrivateProperty(node) { this._visitClassProperty(node); } DeclareModule(node) { this._visitDeclareX(node); } DeclareFunction(node) { this._visitDeclareX(node); } DeclareVariable(node) { this._visitDeclareX(node); } DeclareClass(node) { this._visitDeclareX(node); } // visit OptionalMemberExpression as a MemberExpression. OptionalMemberExpression(node) { super.MemberExpression(node); } _visitClassProperty(node) { this._visitTypeAnnotation(node.typeAnnotation); this.visitProperty(node); } _visitDeclareX(node) { if (node.id) { this._createScopeVariable(node, node.id); } const typeParamScope = this._nestTypeParamScope(node); if (typeParamScope) { this.close(node); } } _createScopeVariable(node, name) { this.currentScope().variableScope.__define( name, new Definition("Variable", name, node, null, null, null) ); } _nestTypeParamScope(node) { if (!node.typeParameters) { return null; } const parentScope = this.scopeManager.__currentScope; const scope = new escope.Scope( this.scopeManager, "type-parameters", parentScope, node, false ); this.scopeManager.__nestScope(scope); for (let j = 0; j < node.typeParameters.params.length; j++) { const name = node.typeParameters.params[j]; scope.__define(name, new Definition("TypeParameter", name, name)); if (name.typeAnnotation) { this._checkIdentifierOrVisit(name); } } scope.__define = function() { return parentScope.__define.apply(parentScope, arguments); }; return scope; } _visitTypeAnnotation(node) { if (!node) { return; } if (Array.isArray(node)) { node.forEach(this._visitTypeAnnotation, this); return; } // get property to check (params, id, etc...) const visitorValues = visitorKeysMap[node.type]; if (!visitorValues) { return; } // can have multiple properties for (let i = 0; i < visitorValues.length; i++) { const visitorValue = visitorValues[i]; const propertyType = propertyTypes[visitorValue]; const nodeProperty = node[visitorValue]; // check if property or type is defined if (propertyType == null || nodeProperty == null) { continue; } if (propertyType.type === "loop") { for (let j = 0; j < nodeProperty.length; j++) { if (Array.isArray(propertyType.values)) { for (let k = 0; k < propertyType.values.length; k++) { const loopPropertyNode = nodeProperty[j][propertyType.values[k]]; if (loopPropertyNode) { this._checkIdentifierOrVisit(loopPropertyNode); } } } else { this._checkIdentifierOrVisit(nodeProperty[j]); } } } else if (propertyType.type === "single") { this._checkIdentifierOrVisit(nodeProperty); } else if (propertyType.type === "typeAnnotation") { this._visitTypeAnnotation(node.typeAnnotation); } else if (propertyType.type === "typeParameters") { for (let l = 0; l < node.typeParameters.params.length; l++) { this._checkIdentifierOrVisit(node.typeParameters.params[l]); } } else if (propertyType.type === "id") { if (node.id.type === "Identifier") { this._checkIdentifierOrVisit(node.id); } else { this._visitTypeAnnotation(node.id); } } } } _checkIdentifierOrVisit(node) { if (node && node.typeAnnotation) { this._visitTypeAnnotation(node.typeAnnotation); } else if (node && node.type === "Identifier") { this.visit(node); } else { this._visitTypeAnnotation(node); } } _visitArray(nodeList) { if (nodeList) { for (const node of nodeList) { this.visit(node); } } } } module.exports = function(ast, parserOptions) { const options = { ignoreEval: true, optimistic: false, directive: false, nodejsScope: ast.sourceType === "script" && (parserOptions.ecmaFeatures && parserOptions.ecmaFeatures.globalReturn) === true, impliedStrict: false, sourceType: ast.sourceType, ecmaVersion: parserOptions.ecmaVersion || 2018, fallback, }; options.childVisitorKeys = childVisitorKeys; const scopeManager = new escope.ScopeManager(options); const referencer = new Referencer(options, scopeManager); referencer.visit(ast); return scopeManager; }; babel-eslint-10.1.0/lib/babylon-to-espree/000077500000000000000000000000001362533377300202435ustar00rootroot00000000000000babel-eslint-10.1.0/lib/babylon-to-espree/attachComments.js000066400000000000000000000040201362533377300235470ustar00rootroot00000000000000"use strict"; // comment fixes module.exports = function(ast, comments, tokens) { if (comments.length) { var firstComment = comments[0]; var lastComment = comments[comments.length - 1]; // fixup program start if (!tokens.length) { // if no tokens, the program starts at the end of the last comment ast.start = lastComment.end; ast.loc.start.line = lastComment.loc.end.line; ast.loc.start.column = lastComment.loc.end.column; if (ast.leadingComments === null && ast.innerComments.length) { ast.leadingComments = ast.innerComments; } } else if (firstComment.start < tokens[0].start) { // if there are comments before the first token, the program starts at the first token var token = tokens[0]; // ast.start = token.start; // ast.loc.start.line = token.loc.start.line; // ast.loc.start.column = token.loc.start.column; // estraverse do not put leading comments on first node when the comment // appear before the first token if (ast.body.length) { var node = ast.body[0]; node.leadingComments = []; var firstTokenStart = token.start; var len = comments.length; for (var i = 0; i < len && comments[i].start < firstTokenStart; i++) { node.leadingComments.push(comments[i]); } } } // fixup program end if (tokens.length) { var lastToken = tokens[tokens.length - 1]; if (lastComment.end > lastToken.end) { // If there is a comment after the last token, the program ends at the // last token and not the comment // ast.end = lastToken.end; ast.range[1] = lastToken.end; ast.loc.end.line = lastToken.loc.end.line; ast.loc.end.column = lastToken.loc.end.column; } } } else { if (!tokens.length) { ast.loc.start.line = 1; ast.loc.end.line = 1; } } if (ast.body && ast.body.length > 0) { ast.loc.start.line = ast.body[0].loc.start.line; ast.range[0] = ast.body[0].start; } }; babel-eslint-10.1.0/lib/babylon-to-espree/convertComments.js000066400000000000000000000007301362533377300237670ustar00rootroot00000000000000"use strict"; module.exports = function(comments) { for (var i = 0; i < comments.length; i++) { var comment = comments[i]; if (comment.type === "CommentBlock") { comment.type = "Block"; } else if (comment.type === "CommentLine") { comment.type = "Line"; } // sometimes comments don't get ranges computed, // even with options.ranges === true if (!comment.range) { comment.range = [comment.start, comment.end]; } } }; babel-eslint-10.1.0/lib/babylon-to-espree/convertTemplateType.js000066400000000000000000000033331362533377300246210ustar00rootroot00000000000000"use strict"; module.exports = function(tokens, tt) { let curlyBrace = null; let templateTokens = []; const result = []; function addTemplateType() { const start = templateTokens[0]; const end = templateTokens[templateTokens.length - 1]; const value = templateTokens.reduce((result, token) => { if (token.value) { result += token.value; } else if (token.type !== tt.template) { result += token.type.label; } return result; }, ""); result.push({ type: "Template", value: value, start: start.start, end: end.end, loc: { start: start.loc.start, end: end.loc.end, }, }); templateTokens = []; } tokens.forEach(token => { switch (token.type) { case tt.backQuote: if (curlyBrace) { result.push(curlyBrace); curlyBrace = null; } templateTokens.push(token); if (templateTokens.length > 1) { addTemplateType(); } break; case tt.dollarBraceL: templateTokens.push(token); addTemplateType(); break; case tt.braceR: if (curlyBrace) { result.push(curlyBrace); } curlyBrace = token; break; case tt.template: if (curlyBrace) { templateTokens.push(curlyBrace); curlyBrace = null; } templateTokens.push(token); break; case tt.eof: if (curlyBrace) { result.push(curlyBrace); } break; default: if (curlyBrace) { result.push(curlyBrace); curlyBrace = null; } result.push(token); } }); return result; }; babel-eslint-10.1.0/lib/babylon-to-espree/index.js000066400000000000000000000014131362533377300217070ustar00rootroot00000000000000"use strict"; var attachComments = require("./attachComments"); var convertComments = require("./convertComments"); var toTokens = require("./toTokens"); var toAST = require("./toAST"); module.exports = function(ast, traverse, tt, code) { // convert tokens ast.tokens = toTokens(ast.tokens, tt, code); // add comments convertComments(ast.comments); // transform esprima and acorn divergent nodes toAST(ast, traverse, code); // ast.program.tokens = ast.tokens; // ast.program.comments = ast.comments; // ast = ast.program; // remove File ast.type = "Program"; ast.sourceType = ast.program.sourceType; ast.directives = ast.program.directives; ast.body = ast.program.body; delete ast.program; attachComments(ast, ast.comments, ast.tokens); }; babel-eslint-10.1.0/lib/babylon-to-espree/toAST.js000066400000000000000000000051721362533377300216000ustar00rootroot00000000000000"use strict"; var t = require("@babel/types"); var convertComments = require("./convertComments"); module.exports = function(ast, traverse, code) { var state = { source: code }; // Monkey patch visitor keys in order to be able to traverse the estree nodes t.VISITOR_KEYS.Property = t.VISITOR_KEYS.ObjectProperty; t.VISITOR_KEYS.MethodDefinition = [ "key", "value", "decorators", "returnType", "typeParameters", ]; traverse(ast, astTransformVisitor, null, state); delete t.VISITOR_KEYS.Property; delete t.VISITOR_KEYS.MethodDefinition; }; var astTransformVisitor = { noScope: true, enter(path) { var node = path.node; // private var to track original node type node._babelType = node.type; if (node.innerComments) { node.trailingComments = node.innerComments; delete node.innerComments; } if (node.trailingComments) { convertComments(node.trailingComments); } if (node.leadingComments) { convertComments(node.leadingComments); } }, exit(path) { var node = path.node; if (path.isJSXText()) { node.type = "Literal"; } if ( path.isRestElement() && path.parent && path.parent.type === "ObjectPattern" ) { node.type = "ExperimentalRestProperty"; } if ( path.isSpreadElement() && path.parent && path.parent.type === "ObjectExpression" ) { node.type = "ExperimentalSpreadProperty"; } if (path.isTypeParameter()) { node.type = "Identifier"; node.typeAnnotation = node.bound; delete node.bound; } // flow: prevent "no-undef" // for "Component" in: "let x: React.Component" if (path.isQualifiedTypeIdentifier()) { delete node.id; } // for "b" in: "var a: { b: Foo }" if (path.isObjectTypeProperty()) { delete node.key; } // for "indexer" in: "var a: {[indexer: string]: number}" if (path.isObjectTypeIndexer()) { delete node.id; } // for "param" in: "var a: { func(param: Foo): Bar };" if (path.isFunctionTypeParam()) { delete node.name; } // modules if (path.isImportDeclaration()) { delete node.isType; } // template string range fixes if (path.isTemplateLiteral()) { for (var j = 0; j < node.quasis.length; j++) { var q = node.quasis[j]; q.range[0] -= 1; if (q.tail) { q.range[1] += 1; } else { q.range[1] += 2; } q.loc.start.column -= 1; if (q.tail) { q.loc.end.column += 1; } else { q.loc.end.column += 2; } } } }, }; babel-eslint-10.1.0/lib/babylon-to-espree/toToken.js000066400000000000000000000044621362533377300222320ustar00rootroot00000000000000"use strict"; module.exports = function(token, tt, source) { var type = token.type; token.range = [token.start, token.end]; if (type === tt.name) { token.type = "Identifier"; } else if ( type === tt.semi || type === tt.comma || type === tt.parenL || type === tt.parenR || type === tt.braceL || type === tt.braceR || type === tt.slash || type === tt.dot || type === tt.bracketL || type === tt.bracketR || type === tt.ellipsis || type === tt.arrow || type === tt.pipeline || type === tt.star || type === tt.incDec || type === tt.colon || type === tt.question || type === tt.questionDot || type === tt.template || type === tt.backQuote || type === tt.dollarBraceL || type === tt.at || type === tt.logicalOR || type === tt.logicalAND || type === tt.nullishCoalescing || type === tt.bitwiseOR || type === tt.bitwiseXOR || type === tt.bitwiseAND || type === tt.equality || type === tt.relational || type === tt.bitShift || type === tt.plusMin || type === tt.modulo || type === tt.exponent || type === tt.bang || type === tt.tilde || type === tt.doubleColon || type.isAssign ) { token.type = "Punctuator"; if (!token.value) token.value = type.label; } else if (type === tt.jsxTagStart) { token.type = "Punctuator"; token.value = "<"; } else if (type === tt.jsxTagEnd) { token.type = "Punctuator"; token.value = ">"; } else if (type === tt.jsxName) { token.type = "JSXIdentifier"; } else if (type === tt.jsxText) { token.type = "JSXText"; } else if (type.keyword === "null") { token.type = "Null"; } else if (type.keyword === "false" || type.keyword === "true") { token.type = "Boolean"; } else if (type.keyword) { token.type = "Keyword"; } else if (type === tt.num) { token.type = "Numeric"; token.value = source.slice(token.start, token.end); } else if (type === tt.string) { token.type = "String"; token.value = source.slice(token.start, token.end); } else if (type === tt.regexp) { token.type = "RegularExpression"; var value = token.value; token.regex = { pattern: value.pattern, flags: value.flags, }; token.value = `/${value.pattern}/${value.flags}`; } return token; }; babel-eslint-10.1.0/lib/babylon-to-espree/toTokens.js000066400000000000000000000004671362533377300224160ustar00rootroot00000000000000"use strict"; var convertTemplateType = require("./convertTemplateType"); var toToken = require("./toToken"); module.exports = function(tokens, tt, code) { return convertTemplateType(tokens, tt) .filter(t => t.type !== "CommentLine" && t.type !== "CommentBlock") .map(t => toToken(t, tt, code)); }; babel-eslint-10.1.0/lib/index.js000066400000000000000000000010411362533377300163550ustar00rootroot00000000000000"use strict"; exports.parse = function(code, options) { return exports.parseForESLint(code, options).ast; }; exports.parseForESLint = function(code, options) { options = options || {}; options.ecmaVersion = options.ecmaVersion || 2018; options.sourceType = options.sourceType || "module"; options.allowImportExportEverywhere = options.allowImportExportEverywhere || false; return require("./parse-with-scope")(code, options); }; exports.parseNoPatch = function(code, options) { return require("./parse")(code, options); }; babel-eslint-10.1.0/lib/parse-with-scope.js000066400000000000000000000005051362533377300204440ustar00rootroot00000000000000"use strict"; const visitorKeys = require("./visitor-keys"); const analyzeScope = require("./analyze-scope"); const parse = require("./parse"); module.exports = function(code, options) { const ast = parse(code, options); const scopeManager = analyzeScope(ast, options); return { ast, scopeManager, visitorKeys }; }; babel-eslint-10.1.0/lib/parse.js000066400000000000000000000047171362533377300163750ustar00rootroot00000000000000"use strict"; var babylonToEspree = require("./babylon-to-espree"); var parse = require("@babel/parser").parse; var tt = require("@babel/parser").tokTypes; var traverse = require("@babel/traverse").default; var codeFrameColumns = require("@babel/code-frame").codeFrameColumns; module.exports = function(code, options) { const legacyDecorators = options.ecmaFeatures && options.ecmaFeatures.legacyDecorators; var opts = { codeFrame: options.hasOwnProperty("codeFrame") ? options.codeFrame : true, sourceType: options.sourceType, allowImportExportEverywhere: options.allowImportExportEverywhere, // consistent with espree allowReturnOutsideFunction: true, allowSuperOutsideMethod: true, ranges: true, tokens: true, plugins: [ ["flow", { all: true, enums: true }], "jsx", "estree", "asyncFunctions", "asyncGenerators", "classConstructorCall", "classProperties", legacyDecorators ? "decorators-legacy" : ["decorators", { decoratorsBeforeExport: false }], "doExpressions", "exponentiationOperator", "exportDefaultFrom", "exportNamespaceFrom", "functionBind", "functionSent", "objectRestSpread", "trailingFunctionCommas", "dynamicImport", "numericSeparator", "optionalChaining", "importMeta", "classPrivateProperties", "bigInt", "optionalCatchBinding", "throwExpressions", ["pipelineOperator", { proposal: "minimal" }], "nullishCoalescingOperator", "logicalAssignment", ], }; var ast; try { ast = parse(code, opts); } catch (err) { if (err instanceof SyntaxError) { err.lineNumber = err.loc.line; err.column = err.loc.column; if (opts.codeFrame) { err.lineNumber = err.loc.line; err.column = err.loc.column + 1; // remove trailing "(LINE:COLUMN)" acorn message and add in esprima syntax error message start err.message = "Line " + err.lineNumber + ": " + err.message.replace(/ \((\d+):(\d+)\)$/, "") + // add codeframe "\n\n" + codeFrameColumns( code, { start: { line: err.lineNumber, column: err.column, }, }, { highlightCode: true } ); } } throw err; } babylonToEspree(ast, traverse, tt, code); return ast; }; babel-eslint-10.1.0/lib/require-from-eslint.js000066400000000000000000000003511362533377300211620ustar00rootroot00000000000000"use strict"; const resolve = require("resolve"); const eslintBase = require.resolve("eslint"); module.exports = function requireFromESLint(id) { const path = resolve.sync(id, { basedir: eslintBase }); return require(path); }; babel-eslint-10.1.0/lib/visitor-keys.js000066400000000000000000000006371362533377300177300ustar00rootroot00000000000000"use strict"; const BABEL_VISITOR_KEYS = require("@babel/types").VISITOR_KEYS; const ESLINT_VISITOR_KEYS = require("eslint-visitor-keys").KEYS; module.exports = Object.assign( { Literal: ESLINT_VISITOR_KEYS.Literal, MethodDefinition: ["decorators"].concat( ESLINT_VISITOR_KEYS.MethodDefinition ), Property: ["decorators"].concat(ESLINT_VISITOR_KEYS.Property), }, BABEL_VISITOR_KEYS ); babel-eslint-10.1.0/package.json000066400000000000000000000031751362533377300164420ustar00rootroot00000000000000{ "name": "babel-eslint", "version": "10.1.0", "description": "Custom parser for ESLint", "main": "lib/index.js", "files": [ "lib" ], "repository": { "type": "git", "url": "https://github.com/babel/babel-eslint.git" }, "dependencies": { "@babel/code-frame": "^7.0.0", "@babel/parser": "^7.7.0", "@babel/traverse": "^7.7.0", "@babel/types": "^7.7.0", "eslint-visitor-keys": "^1.0.0", "resolve": "^1.12.0" }, "scripts": { "test": "npm run lint && npm run test-only", "test-only": "mocha && mocha --require test/fixtures/preprocess-to-patch.js", "lint": "eslint lib test", "fix": "eslint lib test --fix", "precommit": "lint-staged", "preversion": "npm test", "changelog": "git log `git describe --tags --abbrev=0`..HEAD --pretty=format:' * %s (%an)' | grep -v 'Merge pull request'" }, "author": "Sebastian McKenzie ", "license": "MIT", "engines": { "node": ">=6" }, "bugs": { "url": "https://github.com/babel/babel-eslint/issues" }, "homepage": "https://github.com/babel/babel-eslint", "peerDependencies": { "eslint": ">= 4.12.1" }, "devDependencies": { "babel-eslint": "^8.2.6", "dedent": "^0.7.0", "eslint": "^5.6.0", "eslint-config-babel": "^7.0.1", "eslint-plugin-flowtype": "^2.30.3", "eslint-plugin-import": "^2.14.0", "eslint-plugin-prettier": "^2.1.2", "espree": "^3.5.2", "husky": "^1.0.0-rc.13", "lint-staged": "^7.2.2", "mocha": "^5.0.1", "prettier": "^1.4.4" }, "lint-staged": { "*.js": [ "eslint --format=codeframe --fix", "git add" ] } } babel-eslint-10.1.0/test/000077500000000000000000000000001362533377300151255ustar00rootroot00000000000000babel-eslint-10.1.0/test/babel-eslint.js000066400000000000000000000313411362533377300200260ustar00rootroot00000000000000var assert = require("assert"); var babelEslint = require(".."); var espree = require("espree"); var escope = require("eslint-scope"); var util = require("util"); var unpad = require("dedent"); var assertImplementsAST = require("./fixtures/assert-implements-ast"); function lookup(obj, keypath, backwardsDepth) { if (!keypath) { return obj; } return keypath .split(".") .slice(0, -1 * backwardsDepth) .reduce((base, segment) => { return base && base[segment], obj; }); } function parseAndAssertSame(code) { code = unpad(code); var esAST = espree.parse(code, { ecmaFeatures: { // enable JSX parsing jsx: true, // enable return in global scope globalReturn: true, // enable implied strict mode (if ecmaVersion >= 5) impliedStrict: true, // allow experimental object rest/spread experimentalObjectRestSpread: true, }, tokens: true, loc: true, range: true, comment: true, attachComment: true, ecmaVersion: 2018, sourceType: "module", }); var babylonAST = babelEslint.parseForESLint(code, { eslintVisitorKeys: true, eslintScopeManager: true, }).ast; try { assertImplementsAST(esAST, babylonAST); } catch (err) { var traversal = err.message.slice(3, err.message.indexOf(":")); err.message += unpad(` espree: ${util.inspect(lookup(esAST, traversal, 2), { depth: err.depth, colors: true, })} babel-eslint: ${util.inspect(lookup(babylonAST, traversal, 2), { depth: err.depth, colors: true, })} `); throw err; } //assert.equal(esAST, babylonAST); } describe("babylon-to-espree", () => { describe("compatibility", () => { it("should allow ast.analyze to be called without options", function() { var esAST = babelEslint.parseForESLint("`test`", { eslintScopeManager: true, eslintVisitorKeys: true, }).ast; assert.doesNotThrow( () => { escope.analyze(esAST); }, TypeError, "Should allow no options argument." ); }); }); describe("templates", () => { it("empty template string", () => { parseAndAssertSame("``"); }); it("template string", () => { parseAndAssertSame("`test`"); }); it("template string using $", () => { parseAndAssertSame("`$`"); }); it("template string with expression", () => { parseAndAssertSame("`${a}`"); }); it("template string with multiple expressions", () => { parseAndAssertSame("`${a}${b}${c}`"); }); it("template string with expression and strings", () => { parseAndAssertSame("`a${a}a`"); }); it("template string with binary expression", () => { parseAndAssertSame("`a${a + b}a`"); }); it("tagged template", () => { parseAndAssertSame("jsx``"); }); it("tagged template with expression", () => { parseAndAssertSame("jsx``"); }); it("tagged template with new operator", () => { parseAndAssertSame("new raw`42`"); }); it("template with nested function/object", () => { parseAndAssertSame( "`outer${{x: {y: 10}}}bar${`nested${function(){return 1;}}endnest`}end`" ); }); it("template with braces inside and outside of template string #96", () => { parseAndAssertSame( "if (a) { var target = `{}a:${webpackPort}{}}}}`; } else { app.use(); }" ); }); it("template also with braces #96", () => { parseAndAssertSame(` export default function f1() { function f2(foo) { const bar = 3; return \`\${foo} \${bar}\`; } return f2; } `); }); it("template with destructuring #31", () => { parseAndAssertSame(` module.exports = { render() { var {name} = this.props; return Math.max(null, \`Name: \${name}, Name: \${name}\`); } }; `); }); it("template with arrow returning template #603", () => { parseAndAssertSame(` var a = \`\${() => { \`\${''}\` }}\`; `); }); it("template string with object with template string inside", () => { parseAndAssertSame("`${ { a:`${2}` } }`"); }); }); it("simple expression", () => { parseAndAssertSame("a = 1"); }); it("logical NOT", () => { parseAndAssertSame("!0"); }); it("bitwise NOT", () => { parseAndAssertSame("~0"); }); it("class declaration", () => { parseAndAssertSame("class Foo {}"); }); it("class expression", () => { parseAndAssertSame("var a = class Foo {}"); }); it("jsx expression", () => { parseAndAssertSame(""); }); it("jsx expression with 'this' as identifier", () => { parseAndAssertSame(""); }); it("jsx expression with a dynamic attribute", () => { parseAndAssertSame(""); }); it("jsx expression with a member expression as identifier", () => { parseAndAssertSame(""); }); it("jsx expression with spread", () => { parseAndAssertSame("var myDivElement =
;"); }); it("empty jsx text", () => { parseAndAssertSame(""); }); it("jsx text with content", () => { parseAndAssertSame("Hello, world!"); }); it("nested jsx", () => { parseAndAssertSame("
\n

Wat

\n
"); }); it("default import", () => { parseAndAssertSame('import foo from "foo";'); }); it("import specifier", () => { parseAndAssertSame('import { foo } from "foo";'); }); it("import specifier with name", () => { parseAndAssertSame('import { foo as bar } from "foo";'); }); it("import bare", () => { parseAndAssertSame('import "foo";'); }); it("export default class declaration", () => { parseAndAssertSame("export default class Foo {}"); }); it("export default class expression", () => { parseAndAssertSame("export default class {}"); }); it("export default function declaration", () => { parseAndAssertSame("export default function Foo() {}"); }); it("export default function expression", () => { parseAndAssertSame("export default function () {}"); }); it("export all", () => { parseAndAssertSame('export * from "foo";'); }); it("export named", () => { parseAndAssertSame("const foo = 1; export { foo };"); }); it("export named alias", () => { parseAndAssertSame("const foo = 1; export { foo as bar };"); }); // Espree doesn't support the optional chaining operator yet it("optional chaining operator (token)", () => { const code = "foo?.bar"; var babylonAST = babelEslint.parseForESLint(code, { eslintVisitorKeys: true, eslintScopeManager: true, }).ast; assert.strictEqual(babylonAST.tokens[1].type, "Punctuator"); }); // Espree doesn't support the nullish coalescing operator yet it("nullish coalescing operator (token)", () => { const code = "foo ?? bar"; var babylonAST = babelEslint.parseForESLint(code, { eslintVisitorKeys: true, eslintScopeManager: true, }).ast; assert.strictEqual(babylonAST.tokens[1].type, "Punctuator"); }); // Espree doesn't support the pipeline operator yet it("pipeline operator (token)", () => { const code = "foo |> bar"; var babylonAST = babelEslint.parseForESLint(code, { eslintVisitorKeys: true, eslintScopeManager: true, }).ast; assert.strictEqual(babylonAST.tokens[1].type, "Punctuator"); }); // Espree doesn't support Flow enums it("flow enums", () => { const code = "enum E {A, B}"; const babylonAST = babelEslint.parseForESLint(code, { eslintVisitorKeys: true, eslintScopeManager: true, }).ast; assert.strictEqual(babylonAST.body[0].type, "EnumDeclaration"); }); it.skip("empty program with line comment", () => { parseAndAssertSame("// single comment"); }); it.skip("empty program with block comment", () => { parseAndAssertSame(" /* multiline\n * comment\n*/"); }); it("line comments", () => { parseAndAssertSame(` // single comment var foo = 15; // comment next to statement // second comment after statement `); }); it("block comments", () => { parseAndAssertSame(` /* single comment */ var foo = 15; /* comment next to statement */ /* * multiline * comment */ `); }); it("block comments #124", () => { parseAndAssertSame(` React.createClass({ render() { // return ( //
// ); // <-- this is the line that is reported } }); `); }); it("null", () => { parseAndAssertSame("null"); }); it("boolean", () => { parseAndAssertSame("if (true) {} else if (false) {}"); }); it("regexp", () => { parseAndAssertSame("/affix-top|affix-bottom|affix|[a-z]/"); }); it("regexp", () => { parseAndAssertSame("const foo = /foo/;"); }); it("regexp y flag", () => { parseAndAssertSame("const foo = /foo/y;"); }); it("regexp u flag", () => { parseAndAssertSame("const foo = /foo/u;"); }); it("regexp in a template string", () => { parseAndAssertSame('`${/\\d/.exec("1")[0]}`'); }); it("first line is empty", () => { parseAndAssertSame('\nimport Immutable from "immutable";'); }); it("empty", () => { parseAndAssertSame(""); }); it("jsdoc", () => { parseAndAssertSame(` /** * @param {object} options * @return {number} */ const test = function({ a, b, c }) { return a + b + c; }; module.exports = test; `); }); it("empty block with comment", () => { parseAndAssertSame(` function a () { try { b(); } catch (e) { // asdf } } `); }); describe("babel tests", () => { it("MethodDefinition", () => { parseAndAssertSame(` export default class A { a() {} } `); }); it("MethodDefinition 2", () => { parseAndAssertSame( "export default class Bar { get bar() { return 42; }}" ); }); it("ClassMethod", () => { parseAndAssertSame(` class A { constructor() { } } `); }); it("ClassMethod multiple params", () => { parseAndAssertSame(` class A { constructor(a, b, c) { } } `); }); it("ClassMethod multiline", () => { parseAndAssertSame(` class A { constructor ( a, b, c ) { } } `); }); it("ClassMethod oneline", () => { parseAndAssertSame("class A { constructor(a, b, c) {} }"); }); it("ObjectMethod", () => { parseAndAssertSame(` var a = { b(c) { } } `); }); it("do not allow import export everywhere", () => { assert.throws(() => { parseAndAssertSame('function F() { import a from "a"; }'); }, /SyntaxError: 'import' and 'export' may only appear at the top level/); }); it("return outside function", () => { parseAndAssertSame("return;"); }); it("super outside method", () => { parseAndAssertSame("function F() { super(); }"); }); it("StringLiteral", () => { parseAndAssertSame(""); parseAndAssertSame(""); parseAndAssertSame("a"); }); it("getters and setters", () => { parseAndAssertSame("class A { get x ( ) { ; } }"); parseAndAssertSame(` class A { get x( ) { ; } } `); parseAndAssertSame("class A { set x (a) { ; } }"); parseAndAssertSame(` class A { set x(a ) { ; } } `); parseAndAssertSame(` var B = { get x () { return this.ecks; }, set x (ecks) { this.ecks = ecks; } }; `); }); it("RestOperator", () => { parseAndAssertSame("var { a, ...b } = c"); parseAndAssertSame("var [ a, ...b ] = c"); parseAndAssertSame("var a = function (...b) {}"); }); it("SpreadOperator", () => { parseAndAssertSame("var a = { b, ...c }"); parseAndAssertSame("var a = [ a, ...b ]"); parseAndAssertSame("var a = sum(...b)"); }); it("Async/Await", () => { parseAndAssertSame(` async function a() { await 1; } `); }); }); }); describe("Public API", () => { it("exports a parseNoPatch function", () => { assertImplementsAST( espree.parse("foo"), babelEslint.parseNoPatch("foo", {}) ); }); }); babel-eslint-10.1.0/test/fixtures/000077500000000000000000000000001362533377300167765ustar00rootroot00000000000000babel-eslint-10.1.0/test/fixtures/assert-implements-ast.js000066400000000000000000000023251362533377300235770ustar00rootroot00000000000000// Checks if the source ast implements the target ast. Ignores extra keys on source ast module.exports = function assertImplementsAST(target, source, path) { if (!path) { path = []; } function error(text) { var err = new Error(`At ${path.join(".")}: ${text}:`); err.depth = path.length + 1; throw err; } var typeA = target === null ? "null" : typeof target; var typeB = source === null ? "null" : typeof source; if (typeA !== typeB) { error( `have different types (${typeA} !== ${typeB}) (${target} !== ${source})` ); } else if ( typeA === "object" && ["RegExp"].indexOf(target.constructor.name) !== -1 && target.constructor.name !== source.constructor.name ) { error( `object have different constructors (${target.constructor .name} !== ${source.constructor.name}` ); } else if (typeA === "object") { var keysTarget = Object.keys(target); for (var i in keysTarget) { var key = keysTarget[i]; path.push(key); assertImplementsAST(target[key], source[key], path); path.pop(); } } else if (target !== source) { error( `are different (${JSON.stringify(target)} !== ${JSON.stringify(source)})` ); } }; babel-eslint-10.1.0/test/fixtures/eslint-plugin-import/000077500000000000000000000000001362533377300231005ustar00rootroot00000000000000babel-eslint-10.1.0/test/fixtures/eslint-plugin-import/.eslintrc.yml000066400000000000000000000002541362533377300255250ustar00rootroot00000000000000root: true # babel-eslint parser: ../../../lib/index.js # use eslint-plugin-import plugins: - import rules: import/no-named-as-default: error no-unused-vars: error babel-eslint-10.1.0/test/fixtures/eslint-plugin-import/a.js000066400000000000000000000000421362533377300236520ustar00rootroot00000000000000export default function foo() { } babel-eslint-10.1.0/test/fixtures/eslint-plugin-import/b.js000066400000000000000000000000321362533377300236520ustar00rootroot00000000000000import foo from './a.js'; babel-eslint-10.1.0/test/fixtures/eslint-plugin-import/c.js000066400000000000000000000001031362533377300236520ustar00rootroot00000000000000// @flow type Foo = {}; const FlowTypeButton = ({ }: Foo) => { }; babel-eslint-10.1.0/test/fixtures/preprocess-to-patch.js000066400000000000000000000001711362533377300232350ustar00rootroot00000000000000"use strict" const babelEslint = require("../..") // Apply monkeypatch to eslint-scope. babelEslint.parse("var x = 0;") babel-eslint-10.1.0/test/fixtures/rules/000077500000000000000000000000001362533377300201305ustar00rootroot00000000000000babel-eslint-10.1.0/test/fixtures/rules/strict/000077500000000000000000000000001362533377300214405ustar00rootroot00000000000000babel-eslint-10.1.0/test/fixtures/rules/strict/function-with.js000066400000000000000000000000421362533377300245700ustar00rootroot00000000000000function x () { "use strict"; } babel-eslint-10.1.0/test/fixtures/rules/strict/function-without.js000066400000000000000000000000211362533377300253150ustar00rootroot00000000000000function x () {} babel-eslint-10.1.0/test/fixtures/rules/strict/global-with-function-with.js000066400000000000000000000000611362533377300270000ustar00rootroot00000000000000"use strict"; function x () { "use strict"; } babel-eslint-10.1.0/test/fixtures/rules/strict/global-with-function-without.js000066400000000000000000000000401362533377300275250ustar00rootroot00000000000000"use strict"; function x () {} babel-eslint-10.1.0/test/fixtures/rules/strict/global-with.js000066400000000000000000000003371362533377300242120ustar00rootroot00000000000000"use strict"; /* The empty statement is intentional. As of now, ESLint won't enforce string: [2, "global"] on a program with an empty body. A test for that without massaging the AST to ESlint's input format should fail. */ babel-eslint-10.1.0/test/fixtures/rules/strict/none.js000066400000000000000000000000321362533377300227300ustar00rootroot00000000000000"no use strict anywhere"; babel-eslint-10.1.0/test/fixtures/rules/syntax-error.js000066400000000000000000000000731362533377300231430ustar00rootroot00000000000000class ClassName { constructor() { }, aMethod() {} } babel-eslint-10.1.0/test/integration.js000066400000000000000000000155501362533377300200140ustar00rootroot00000000000000var assert = require("assert"); var eslint = require("eslint"); var fs = require("fs"); var path = require("path"); var paths = { fixtures: path.join(__dirname, "fixtures", "rules"), }; var encoding = "utf8"; var errorLevel = 2; var baseEslintOpts = { parser: require.resolve(".."), parserOptions: { sourceType: "script", }, }; /** * Load a fixture and run eslint.linter.verify() on it. * Pass the return value to done(). * @param object opts * @param function done */ function lint(opts, done) { readFixture(opts.fixture, (err, src) => { if (err) return done(err); done(null, eslint.linter.verify(src, opts.eslint)); }); } /** * Read a fixture file, passing the content to done(). * @param string|array id * @param function done */ function readFixture(id, done) { if (Array.isArray(id)) id = path.join.apply(path, id); if (!path.extname(id)) id += ".js"; fs.readFile(path.join(paths.fixtures, id), encoding, done); } // readFixture describe("Rules:", () => { describe("`strict`", strictSuite); }); // describe function strictSuite() { var ruleId = "strict"; describe("when set to 'never'", () => { var eslintOpts = Object.assign({}, baseEslintOpts, { rules: {}, }); eslintOpts.rules[ruleId] = [errorLevel, "never"]; ["global-with", "function-with"].forEach(fixture => { it(`should error on ${fixture.match(/^[^-]+/)[0]} directive`, done => { lint( { fixture: ["strict", fixture], eslint: eslintOpts, }, (err, report) => { if (err) return done(err); assert(report[0].ruleId === ruleId); done(); } ); }); // it }); }); // describe describe("when set to 'global'", () => { var eslintOpts = Object.assign({}, baseEslintOpts, { rules: {}, }); eslintOpts.rules[ruleId] = [errorLevel, "global"]; it("shouldn't error on single global directive", done => { lint( { fixture: ["strict", "global-with"], eslint: eslintOpts, }, (err, report) => { if (err) return done(err); assert(!report.length); done(); } ); }); // it it("should error twice on global directive: no and function directive: yes", done => { lint( { fixture: ["strict", "function-with"], eslint: eslintOpts, }, (err, report) => { if (err) return done(err); [0, 1].forEach(i => { assert(report[i].ruleId === ruleId); }); done(); } ); }); // it it("should error on function directive", done => { lint( { fixture: ["strict", "global-with-function-with"], eslint: eslintOpts, }, (err, report) => { if (err) return done(err); assert(report[0].ruleId === ruleId); // This is to make sure the test fails prior to adapting Babel AST // directive representation to ESLint format. Otherwise it reports an // error for missing global directive that masquerades as the expected // result of the previous assertion. assert(report[0].nodeType !== "Program"); done(); } ); }); // it it("should error on no directive", done => { lint( { fixture: ["strict", "none"], eslint: eslintOpts, }, (err, report) => { if (err) return done(err); assert(report[0].ruleId === ruleId); done(); } ); }); // it }); // describe describe("when set to 'function'", () => { var eslintOpts = Object.assign({}, baseEslintOpts, { rules: {}, }); eslintOpts.rules[ruleId] = [errorLevel, "function"]; it("shouldn't error on single function directive", done => { lint( { fixture: ["strict", "function-with"], eslint: eslintOpts, }, (err, report) => { if (err) return done(err); assert(!report.length); done(); } ); }); // it it("should error twice on function directive: no and global directive: yes", done => { lint( { fixture: ["strict", "global-with-function-without"], eslint: eslintOpts, }, (err, report) => { if (err) return done(err); [0, 1].forEach(i => { assert(report[i].ruleId === ruleId); }); done(); } ); }); // it it("should error on only global directive", done => { lint( { fixture: ["strict", "global-with"], eslint: eslintOpts, }, (err, report) => { if (err) return done(err); assert(report[0].ruleId === ruleId); done(); } ); }); // it it("should error on extraneous global directive", done => { lint( { fixture: ["strict", "global-with-function-with"], eslint: eslintOpts, }, (err, report) => { if (err) return done(err); assert(report[0].ruleId === ruleId); assert(report[0].nodeType.indexOf("Function") === -1); done(); } ); }); // it }); // describe describe('When "codeFrame"', () => { // Strip chalk colors, these are not relevant for the test const stripAnsi = str => str.replace( // eslint-disable-next-line no-control-regex /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, "" ); it("should display codeFrame when option is absent", done => { lint( { fixture: ["syntax-error"], eslint: baseEslintOpts, }, (err, report) => { if (err) return done(err); assert(stripAnsi(report[0].message).indexOf("^\n 5 |") > -1); done(); } ); }); it("should display codeFrame when option is true", done => { lint( { fixture: ["syntax-error"], eslint: Object.assign({}, baseEslintOpts, { parserOptions: { codeFrame: true, }, }), }, (err, report) => { if (err) return done(err); assert(stripAnsi(report[0].message).indexOf("^\n 5 |") > -1); done(); } ); }); it("should not display codeFrame when option is false", done => { lint( { fixture: ["syntax-error"], eslint: Object.assign({}, baseEslintOpts, { parserOptions: { codeFrame: false, }, }), }, (err, report) => { if (err) return done(err); assert(stripAnsi(report[0].message).indexOf("^\n 5 |") === -1); done(); } ); }); }); } babel-eslint-10.1.0/test/non-regression.js000066400000000000000000001313451362533377300204420ustar00rootroot00000000000000/*eslint-env mocha*/ "use strict"; var eslint = require("eslint"); var unpad = require("dedent"); function verifyAndAssertMessagesWithSpecificESLint( code, rules, expectedMessages, sourceType, overrideConfig, linter ) { var config = { parser: require.resolve(".."), rules, env: { node: true, es6: true, }, parserOptions: { ecmaVersion: 2018, ecmaFeatures: { jsx: true, experimentalObjectRestSpread: true, globalReturn: true, }, sourceType, }, }; if (overrideConfig) { for (var key in overrideConfig) { config[key] = overrideConfig[key]; } } var messages = linter.verify(code, config); if (messages.length !== expectedMessages.length) { throw new Error( `Expected ${expectedMessages.length} message(s), got ${ messages.length }\n${JSON.stringify(messages, null, 2)}` ); } messages.forEach((message, i) => { var formatedMessage = `${message.line}:${message.column} ${ message.message }${message.ruleId ? ` ${message.ruleId}` : ""}`; if (formatedMessage !== expectedMessages[i]) { throw new Error( ` Message ${i} does not match: Expected: ${expectedMessages[i]} Actual: ${formatedMessage} ` ); } }); } function verifyAndAssertMessages( code, rules, expectedMessages, sourceType, overrideConfig ) { verifyAndAssertMessagesWithSpecificESLint( unpad(`${code}`), rules || {}, expectedMessages || [], sourceType, overrideConfig, new eslint.Linter() ); } describe("verify", () => { it("arrow function support (issue #1)", () => { verifyAndAssertMessages("describe('stuff', () => {});"); }); it("EOL validation (issue #2)", () => { verifyAndAssertMessages( 'module.exports = "something";', { "eol-last": 1, semi: 1 }, ["1:30 Newline required at end of file but not found. eol-last"] ); }); xit("Readable error messages (issue #3)", () => { verifyAndAssertMessages("{ , res }", {}, [ "1:3 Parsing error: Unexpected token", ]); }); it("Modules support (issue #5)", () => { verifyAndAssertMessages( ` import Foo from 'foo'; export default Foo; export const c = 'c'; export class Store {} ` ); }); it("Rest parameters (issue #7)", () => { verifyAndAssertMessages("function foo(...args) { return args; }", { "no-undef": 1, }); }); it("Exported classes should be used (issue #8)", () => { verifyAndAssertMessages("class Foo {} module.exports = Foo;", { "no-unused-vars": 1, }); }); it("super keyword in class (issue #10)", () => { verifyAndAssertMessages("class Foo { constructor() { super() } }", { "no-undef": 1, }); }); it("Rest parameter in destructuring assignment (issue #11)", () => { verifyAndAssertMessages( "const [a, ...rest] = ['1', '2', '3']; module.exports = rest;", { "no-undef": 1 } ); }); it("JSX attribute names marked as variables (issue #12)", () => { verifyAndAssertMessages('module.exports =
', { "no-undef": 1, }); }); it("Multiple destructured assignment with compound properties (issue #16)", () => { verifyAndAssertMessages("module.exports = { ...a.a, ...a.b };", { "no-dupe-keys": 1, }); }); it("Arrow function with non-block bodies (issue #20)", () => { verifyAndAssertMessages( '"use strict"; () => 1', { strict: [1, "global"] }, [], "script" ); }); it("#242", () => { verifyAndAssertMessages('"use strict"; asdf;', { "no-irregular-whitespace": 1, }); }); it("await keyword (issue #22)", () => { verifyAndAssertMessages("async function foo() { await bar(); }", { "no-unused-expressions": 1, }); }); it("arrow functions (issue #27)", () => { verifyAndAssertMessages("[1, 2, 3].map(i => i * 2);", { "func-names": 1, "space-before-blocks": 1, }); }); it("comment with padded-blocks (issue #33)", () => { verifyAndAssertMessages( ` if (a) { // i'm a comment! let b = c } `, { "padded-blocks": [1, "never"] } ); }); describe("flow", () => { it("check regular function", () => { verifyAndAssertMessages( "function a(b, c) { b += 1; c += 1; return b + c; } a;", { "no-unused-vars": 1, "no-undef": 1 } ); }); it("type alias", () => { verifyAndAssertMessages("type SomeNewType = any;", { "no-undef": 1 }); }); it("type cast expression #102", () => { verifyAndAssertMessages("for (let a of (a: Array)) {}"); }); it("multiple nullable type annotations and return #108", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; import type Foo3 from 'foo'; function log(foo: ?Foo, foo2: ?Foo2): ?Foo3 { console.log(foo, foo2); } log(1, 2); `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("interface declaration", () => { verifyAndAssertMessages( ` interface Foo {}; interface Bar { foo: Foo, }; `, { "no-unused-vars": 1, "no-undef": 1 }, ["2:11 'Bar' is defined but never used. no-unused-vars"] ); }); it("enum declaration", () => { verifyAndAssertMessages( ` enum E { A, B, } E.A; enum UnusedEnum { A, B, } `, { "no-unused-vars": 1, "no-undef": 1 }, ["6:6 'UnusedEnum' is defined but never used. no-unused-vars"] ); }); it("type parameter bounds (classes)", () => { verifyAndAssertMessages( ` import type {Foo, Foo2} from 'foo'; import Base from 'base'; class Log extends Base { messages: {[T1]: T2}; } new Log(); `, { "no-unused-vars": 1, "no-undef": 1 }, ["3:34 'T4' is defined but never used. no-unused-vars"] ); }); it("type parameter scope (classes)", () => { verifyAndAssertMessages( ` T; class Foo {} T; new Foo(); `, { "no-unused-vars": 1, "no-undef": 1 }, [ "1:1 'T' is not defined. no-undef", "2:11 'T' is defined but never used. no-unused-vars", "3:1 'T' is not defined. no-undef", ] ); }); it("type parameter bounds (interfaces)", () => { verifyAndAssertMessages( ` import type {Foo, Foo2, Bar} from ''; interface Log extends Bar { messages: {[T1]: T2}; } `, { "no-unused-vars": 1, "no-undef": 1 }, [ "2:11 'Log' is defined but never used. no-unused-vars", "2:38 'T4' is defined but never used. no-unused-vars", ] ); }); it("type parameter scope (interfaces)", () => { verifyAndAssertMessages( ` T; interface Foo {}; T; Foo; `, { "no-unused-vars": 1, "no-undef": 1 }, [ "1:1 'T' is not defined. no-undef", "2:15 'T' is defined but never used. no-unused-vars", "3:1 'T' is not defined. no-undef", ] ); }); it("type parameter bounds (type aliases)", () => { verifyAndAssertMessages( ` import type {Foo, Foo2, Foo3} from 'foo'; type Log = { messages: {[T1]: T2}; delay: Foo3; }; `, { "no-unused-vars": 1, "no-undef": 1 }, [ "2:6 'Log' is defined but never used. no-unused-vars", "2:29 'T3' is defined but never used. no-unused-vars", ] ); }); it("type parameter scope (type aliases)", () => { verifyAndAssertMessages( ` T; type Foo = {}; T; Foo; `, { "no-unused-vars": 1, "no-undef": 1 }, [ "1:1 'T' is not defined. no-undef", "2:10 'T' is defined but never used. no-unused-vars", "3:1 'T' is not defined. no-undef", ] ); }); it("type parameter bounds (functions)", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; function log(a: T1, b: T2): T3 { return a + b; } log(1, 2); `, { "no-unused-vars": 1, "no-undef": 1 }, ["3:37 'T4' is defined but never used. no-unused-vars"] ); }); it("type parameter scope (functions)", () => { verifyAndAssertMessages( ` T; function log() {} T; log; `, { "no-unused-vars": 1, "no-undef": 1 }, [ "1:1 'T' is not defined. no-undef", "2:14 'T' is defined but never used. no-unused-vars", "3:1 'T' is not defined. no-undef", ] ); }); it("nested type annotations", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; function foo(callback: () => Foo) { return callback(); } foo(); `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("type in var declaration", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; var x: Foo = 1; x; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("object type annotation", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; var a: {numVal: Foo}; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("object property types", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; var a = { circle: (null : ?{ setNativeProps(props: Foo): Foo2 }) }; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("namespaced types", () => { verifyAndAssertMessages( ` var React = require('react-native'); var b = { openExternalExample: (null: ?React.Component) }; var c = { render(): React.Component {} }; b; c; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("ArrayTypeAnnotation", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; var x: Foo[]; x; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("ClassImplements", () => { verifyAndAssertMessages( ` import type Bar from 'foo'; export default class Foo implements Bar {} `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("type alias creates declaration + usage", () => { verifyAndAssertMessages( ` type Foo = any; var x : Foo = 1; x; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("type alias with type parameters", () => { verifyAndAssertMessages( ` import type Bar from 'foo'; import type Foo3 from 'foo'; type Foo = Bar var x : Foo = 1; x; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("export type alias", () => { verifyAndAssertMessages( ` import type Foo2 from 'foo'; export type Foo = Foo2; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("polymorphic types #109", () => { verifyAndAssertMessages( "export default function groupByEveryN(array: Array, n: number): Array> { n; }", { "no-unused-vars": 1, "no-undef": 1 } ); }); it("types definition from import", () => { verifyAndAssertMessages( ` import type Promise from 'bluebird'; type Operation = () => Promise; x: Operation; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("polymorphic/generic types for class #123", () => { verifyAndAssertMessages( ` class Box { value: T; } var box = new Box(); console.log(box.value); `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("polymorphic/generic types for function #123", () => { verifyAndAssertMessages( ` export function identity(value) { var a: T = value; a; } `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("polymorphic/generic types for type alias #123", () => { verifyAndAssertMessages( ` import Bar from './Bar'; type Foo = Bar; var x: Foo = 1; console.log(x); `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("polymorphic/generic types - outside of fn scope #123", () => { verifyAndAssertMessages( ` export function foo(value) { value; }; var b: T = 1; b; `, { "no-unused-vars": 1, "no-undef": 1 }, [ "1:21 'T' is defined but never used. no-unused-vars", "2:8 'T' is not defined. no-undef", ] ); }); it("polymorphic/generic types - extending unknown #123", () => { verifyAndAssertMessages( ` import Bar from 'bar'; export class Foo extends Bar {} `, { "no-unused-vars": 1, "no-undef": 1 }, ["2:30 'T' is not defined. no-undef"] ); }); it("polymorphic/generic types - function calls", () => { verifyAndAssertMessages( ` function f(): T {} f(); `, { "no-unused-vars": 1, "no-undef": 1 }, ["2:3 'T' is not defined. no-undef"] ); }); it("polymorphic/generic types - function calls #644", () => { verifyAndAssertMessages( ` import type {Type} from 'Type'; function f(): T {} f(); `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("support declarations #132", () => { verifyAndAssertMessages( ` declare class A { static () : number } declare module B { declare var x: number; } declare function foo(): void; declare var bar A; B; foo(); bar; `, { "no-undef": 1, "no-unused-vars": 1 } ); }); it("supports type spreading", () => { verifyAndAssertMessages( ` type U = {}; type T = {a: number, ...U, ...V}; `, { "no-undef": 1, "no-unused-vars": 1 }, [ "2:6 'T' is defined but never used. no-unused-vars", "2:31 'V' is not defined. no-undef", ] ); }); it("1", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; export default function(a: Foo, b: ?Foo2, c){ a; b; c; } `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("2", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; export default function(a: () => Foo){ a; } `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("3", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; export default function(a: (_:Foo) => Foo2){ a; } `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("4", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; import type Foo3 from 'foo'; export default function(a: (_1:Foo, _2:Foo2) => Foo3){ a; } `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("5", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; export default function(a: (_1:Foo, ...foo:Array) => number){ a; } `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("6", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; export default function(): Foo {} `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("7", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; export default function():() => Foo {} `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("8", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; export default function():(_?:Foo) => Foo2{} `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("9", () => { verifyAndAssertMessages( "export default function (a: T1, b: T2) { b; }", { "no-unused-vars": 1, "no-undef": 1 } ); }); it("10", () => { verifyAndAssertMessages( "var a=function(a: T1, b: T2) {return a + b;}; a;", { "no-unused-vars": 1, "no-undef": 1 } ); }); it("11", () => { verifyAndAssertMessages("var a={*id(x: T): T { x; }}; a;", { "no-unused-vars": 1, "no-undef": 1, }); }); it("12", () => { verifyAndAssertMessages("var a={async id(x: T): T { x; }}; a;", { "no-unused-vars": 1, "no-undef": 1, }); }); it("13", () => { verifyAndAssertMessages("var a={123(x: T): T { x; }}; a;", { "no-unused-vars": 1, "no-undef": 1, }); }); it("14", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; export default class Bar {set fooProp(value:Foo):Foo2{ value; }} `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("15", () => { verifyAndAssertMessages( ` import type Foo2 from 'foo'; export default class Foo {get fooProp(): Foo2{}} `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("16", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; var numVal:Foo; numVal; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("17", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; var a: {numVal: Foo;}; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("18", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; import type Foo3 from 'foo'; var a: ?{numVal: Foo; [indexer: Foo2]: Foo3}; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("19", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; var a: {numVal: Foo; subObj?: ?{strVal: Foo2}}; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("20", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; import type Foo3 from 'foo'; import type Foo4 from 'foo'; var a: { [a: Foo]: Foo2; [b: Foo3]: Foo4; }; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("21", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; import type Foo3 from 'foo'; var a: {add(x:Foo, ...y:Array): Foo3}; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("22", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; import type Foo3 from 'foo'; var a: { id(x: Foo2): Foo3; }; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("23", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; var a:Array = [1, 2, 3]; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("24", () => { verifyAndAssertMessages( ` import type Baz from 'baz'; export default class Bar extends Baz { }; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("25", () => { verifyAndAssertMessages( "export default class Bar { bar(): T { return 42; }}", { "no-unused-vars": 1, "no-undef": 1 } ); }); it("26", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; export default class Bar { static prop1:Foo; prop2:Foo2; } `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("27", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; var x : Foo | Foo2 = 4; x; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("28", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; var x : () => Foo | () => Foo2; x; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("29", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; var x: typeof Foo | number = Foo2; x; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("30", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; var {x}: {x: Foo; } = { x: 'hello' }; x; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("31", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; var [x]: Array = [ 'hello' ]; x; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("32", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; export default function({x}: { x: Foo; }) { x; } `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("33", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; function foo([x]: Array) { x; } foo(); `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("34", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; var a: Map >; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("35", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; var a: ?Promise[]; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("36", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; var a:(...rest:Array) => Foo2; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("37", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; import type Foo3 from 'foo'; import type Foo4 from 'foo'; var a: (x: Foo2, ...y:Foo3[]) => Foo4; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("38", () => { verifyAndAssertMessages( ` import type {foo, bar} from 'baz'; foo; bar; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("39", () => { verifyAndAssertMessages( ` import type {foo as bar} from 'baz'; bar; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("40", () => { verifyAndAssertMessages( ` import type from 'foo'; type; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("41", () => { verifyAndAssertMessages( ` import type, {foo} from 'bar'; type; foo; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("43", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; var a: Foo[]; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("44", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; var a: ?Foo[]; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("45", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; var a: (?Foo)[]; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("46", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; var a: () => Foo[]; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("47", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; var a: (() => Foo)[]; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("48", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; var a: typeof Foo[]; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("49", () => { verifyAndAssertMessages( ` import type Foo from 'foo'; import type Foo2 from 'foo'; import type Foo3 from 'foo'; var a : [Foo, Foo2,] = [123, 'duck',]; a; `, { "no-unused-vars": 1, "no-undef": 1 } ); }); }); it("class usage", () => { verifyAndAssertMessages("class Lol {} module.exports = Lol;", { "no-unused-vars": 1, }); }); it("class definition: gaearon/redux#24", () => { verifyAndAssertMessages( ` export default function root(stores) { return DecoratedComponent => class ReduxRootDecorator { a() { DecoratedComponent; stores; } }; } `, { "no-undef": 1, "no-unused-vars": 1 } ); }); it("class properties #71", () => { verifyAndAssertMessages("class Lol { foo = 'bar'; }", { "no-undef": 1 }); }); it("template strings #31", () => { verifyAndAssertMessages("console.log(`${a}, b`);", { "comma-spacing": 1 }); }); it("template with destructuring #31", () => { verifyAndAssertMessages( ` module.exports = { render() { var {name} = this.props; return Math.max(null, \`Name: \${name}, Name: \${name}\`); } }; `, { "comma-spacing": 1 } ); }); it("template with arrow returning template #603", () => { verifyAndAssertMessages( ` var a = \`\${() => { \`\${''}\` }}\`; `, { indent: 1 }, [] ); }); describe("decorators #72 (legacy)", () => { function verifyDecoratorsLegacyAndAssertMessages( code, rules, expectedMessages, sourceType ) { const overrideConfig = { parserOptions: { ecmaFeatures: { legacyDecorators: true, }, sourceType, }, }; return verifyAndAssertMessages( code, rules, expectedMessages, sourceType, overrideConfig ); } it("class declaration", () => { verifyDecoratorsLegacyAndAssertMessages( ` import classDeclaration from 'decorator'; import decoratorParameter from 'decorator'; @classDeclaration((parameter) => parameter) @classDeclaration(decoratorParameter) @classDeclaration export class TextareaAutosize {} `, { "no-unused-vars": 1 } ); }); it("method definition", () => { verifyDecoratorsLegacyAndAssertMessages( ` import classMethodDeclarationA from 'decorator'; import decoratorParameter from 'decorator'; export class TextareaAutosize { @classMethodDeclarationA((parameter) => parameter) @classMethodDeclarationA(decoratorParameter) @classMethodDeclarationA methodDeclaration(e) { e(); } } `, { "no-unused-vars": 1 } ); }); it("method definition get/set", () => { verifyDecoratorsLegacyAndAssertMessages( ` import classMethodDeclarationA from 'decorator'; import decoratorParameter from 'decorator'; export class TextareaAutosize { @classMethodDeclarationA((parameter) => parameter) @classMethodDeclarationA(decoratorParameter) @classMethodDeclarationA get bar() { } @classMethodDeclarationA((parameter) => parameter) @classMethodDeclarationA(decoratorParameter) @classMethodDeclarationA set bar(val) { val; } } `, { "no-unused-vars": 1 } ); }); it("object property", () => { verifyDecoratorsLegacyAndAssertMessages( ` import classMethodDeclarationA from 'decorator'; import decoratorParameter from 'decorator'; var obj = { @classMethodDeclarationA((parameter) => parameter) @classMethodDeclarationA(decoratorParameter) @classMethodDeclarationA methodDeclaration(e) { e(); } }; obj; `, { "no-unused-vars": 1 } ); }); it("object property get/set", () => { verifyDecoratorsLegacyAndAssertMessages( ` import classMethodDeclarationA from 'decorator'; import decoratorParameter from 'decorator'; var obj = { @classMethodDeclarationA((parameter) => parameter) @classMethodDeclarationA(decoratorParameter) @classMethodDeclarationA get bar() { }, @classMethodDeclarationA((parameter) => parameter) @classMethodDeclarationA(decoratorParameter) @classMethodDeclarationA set bar(val) { val; } }; obj; `, { "no-unused-vars": 1 } ); }); }); describe("decorators #72", () => { it("class declaration", () => { verifyAndAssertMessages( ` import classDeclaration from 'decorator'; import decoratorParameter from 'decorator'; export @classDeclaration((parameter) => parameter) @classDeclaration(decoratorParameter) @classDeclaration class TextareaAutosize {} `, { "no-unused-vars": 1 } ); }); it("method definition", () => { verifyAndAssertMessages( ` import classMethodDeclarationA from 'decorator'; import decoratorParameter from 'decorator'; export class TextareaAutosize { @classMethodDeclarationA((parameter) => parameter) @classMethodDeclarationA(decoratorParameter) @classMethodDeclarationA methodDeclaration(e) { e(); } } `, { "no-unused-vars": 1 } ); }); it("method definition get/set", () => { verifyAndAssertMessages( ` import classMethodDeclarationA from 'decorator'; import decoratorParameter from 'decorator'; export class TextareaAutosize { @classMethodDeclarationA((parameter) => parameter) @classMethodDeclarationA(decoratorParameter) @classMethodDeclarationA get bar() { } @classMethodDeclarationA((parameter) => parameter) @classMethodDeclarationA(decoratorParameter) @classMethodDeclarationA set bar(val) { val; } } `, { "no-unused-vars": 1 } ); }); }); it("detects minimal no-unused-vars case #120", () => { verifyAndAssertMessages("var unused;", { "no-unused-vars": 1 }, [ "1:5 'unused' is defined but never used. no-unused-vars", ]); }); // This two tests are disabled, as the feature to visit properties when // there is a spread/rest operator has been removed as it caused problems // with other rules #249 it.skip("visits excluded properties left of spread #95", () => { verifyAndAssertMessages( "var originalObject = {}; var {field1, field2, ...clone} = originalObject;", { "no-unused-vars": 1 } ); }); it.skip("visits excluded properties left of spread #210", () => { verifyAndAssertMessages( "const props = { yo: 'yo' }; const { ...otherProps } = props;", { "no-unused-vars": 1 } ); }); it("does not mark spread variables false-positive", () => { verifyAndAssertMessages( "var originalObject = {}; var {field1, field2, ...clone} = originalObject;", { "no-undef": 1, "no-redeclare": 1 } ); }); it("does not mark spread variables false-positive", () => { verifyAndAssertMessages( "const props = { yo: 'yo' }; const { ...otherProps } = props;", { "no-undef": 1, "no-redeclare": 1 } ); }); it("does not mark spread variables as use-before-define #249", () => { verifyAndAssertMessages( "var originalObject = {}; var {field1, field2, ...clone} = originalObject;", { "no-use-before-define": 1 } ); }); it("detects no-unused-vars with object destructuring #142", () => { verifyAndAssertMessages( "const {Bacona} = require('baconjs')", { "no-undef": 1, "no-unused-vars": 1 }, ["1:8 'Bacona' is assigned a value but never used. no-unused-vars"] ); }); it("don't warn no-unused-vars with spread #142", () => { verifyAndAssertMessages( ` export default function test(data) { return { foo: 'bar', ...data }; } `, { "no-undef": 1, "no-unused-vars": 1 } ); }); it("excludes comment tokens #153", () => { verifyAndAssertMessages( ` var a = [ 1, 2, // a trailing comment makes this line fail comma-dangle (always-multiline) ]; `, { "comma-dangle": [2, "always-multiline"] } ); verifyAndAssertMessages( ` switch (a) { // A comment here makes the above line fail brace-style case 1: console.log(a); } `, { "brace-style": 2 } ); }); it("ternary and parens #149", () => { verifyAndAssertMessages("true ? (true) : false;", { "space-infix-ops": 1 }); }); it("line comment space-in-parens #124", () => { verifyAndAssertMessages( ` React.createClass({ render() { // return ( //
// ); // <-- this is the line that is reported } }); `, { "space-in-parens": 1 } ); }); it("block comment space-in-parens #124", () => { verifyAndAssertMessages( ` React.createClass({ render() { /* return (
); // <-- this is the line that is reported */ } }); `, { "space-in-parens": 1 } ); }); it("no no-undef error with rest #11", () => { verifyAndAssertMessages("const [a, ...rest] = ['1', '2', '3']; a; rest;", { "no-undef": 1, "no-unused-vars": 1, }); }); it("async function with space-before-function-paren #168", () => { verifyAndAssertMessages("it('handles updates', async function() {});", { "space-before-function-paren": [1, "never"], }); }); it("default param flow type no-unused-vars #184", () => { verifyAndAssertMessages( ` type ResolveOptionType = { depth?: number, identifier?: string }; export default function resolve( options: ResolveOptionType = {} ): Object { options; } `, { "no-unused-vars": 1, "no-undef": 1 } ); }); it("no-use-before-define #192", () => { verifyAndAssertMessages( ` console.log(x); var x = 1; `, { "no-use-before-define": 1 }, ["1:13 'x' was used before it was defined. no-use-before-define"] ); }); it("jsx and stringliteral #216", () => { verifyAndAssertMessages("
"); }); it("getter/setter #218", () => { verifyAndAssertMessages( ` class Person { set a (v) { } } `, { "space-before-function-paren": 1, "keyword-spacing": [1, { before: true }], indent: 1, } ); }); it("getter/setter #220", () => { verifyAndAssertMessages( ` var B = { get x () { return this.ecks; }, set x (ecks) { this.ecks = ecks; } }; `, { "no-dupe-keys": 1 } ); }); it("fixes issues with flow types and ObjectPattern", () => { verifyAndAssertMessages( ` import type Foo from 'bar'; export default class Foobar { foo({ bar }: Foo) { bar; } bar({ foo }: Foo) { foo; } } `, { "no-unused-vars": 1, "no-shadow": 1 } ); }); it("correctly detects redeclares if in script mode #217", () => { verifyAndAssertMessages( ` var a = 321; var a = 123; `, { "no-redeclare": 1 }, ["2:5 'a' is already defined. no-redeclare"], "script" ); }); it("correctly detects redeclares if in module mode #217", () => { verifyAndAssertMessages( ` var a = 321; var a = 123; `, { "no-redeclare": 1 }, ["2:5 'a' is already defined. no-redeclare"], "module" ); }); it("no-implicit-globals in script", () => { verifyAndAssertMessages( "var leakedGlobal = 1;", { "no-implicit-globals": 1 }, [ "1:5 Implicit global variable, assign as global property instead. no-implicit-globals", ], "script", { env: {}, parserOptions: { ecmaVersion: 6, sourceType: "script" }, } ); }); it("no-implicit-globals in module", () => { verifyAndAssertMessages( "var leakedGlobal = 1;", { "no-implicit-globals": 1 }, [], "module", { env: {}, parserOptions: { ecmaVersion: 6, sourceType: "module" }, } ); }); it("no-implicit-globals in default", () => { verifyAndAssertMessages( "var leakedGlobal = 1;", { "no-implicit-globals": 1 }, [], null, { env: {}, parserOptions: { ecmaVersion: 6 }, } ); }); it("allowImportExportEverywhere option (#327)", () => { verifyAndAssertMessages( ` if (true) { import Foo from 'foo'; } function foo() { import Bar from 'bar'; } switch (a) { case 1: import FooBar from 'foobar'; } `, {}, [], "module", { env: {}, parserOptions: { ecmaVersion: 6, sourceType: "module", allowImportExportEverywhere: true, }, } ); }); it("with does not crash parsing in script mode (strict off) #171", () => { verifyAndAssertMessages("with (arguments) { length; }", {}, [], "script"); }); xit("with does crash parsing in module mode (strict on) #171", () => { verifyAndAssertMessages("with (arguments) { length; }", {}, [ "1:1 Parsing error: 'with' in strict mode", ]); }); it("new.target is not reported as undef #235", () => { verifyAndAssertMessages("function foo () { return new.target }", { "no-undef": 1, }); }); it("decorator does not create TypeError #229", () => { verifyAndAssertMessages( ` class A { @test f() {} } `, { "no-undef": 1 }, ["2:4 'test' is not defined. no-undef"] ); }); it("Flow definition does not trigger warnings #223", () => { verifyAndAssertMessages( ` import { Map as $Map } from 'immutable'; function myFunction($state: $Map, { a, b, c } : { a: ?Object, b: ?Object, c: $Map }) {} `, { "no-dupe-args": 1, "no-redeclare": 1, "no-shadow": 1 } ); }); it("newline-before-return with comments #289", () => { verifyAndAssertMessages( ` function a() { if (b) { /* eslint-disable no-console */ console.log('test'); /* eslint-enable no-console */ } return hasGlobal; } `, { "newline-before-return": 1 } ); }); it("spaced-comment with shebang #163", () => { verifyAndAssertMessages( ` #!/usr/bin/env babel-node import {spawn} from 'foobar'; `, { "spaced-comment": 1 } ); }); describe("Class Property Declarations", () => { it("no-redeclare false positive 1", () => { verifyAndAssertMessages( ` class Group { static propTypes = {}; } class TypicalForm { static propTypes = {}; } `, { "no-redeclare": 1 } ); }); it("no-redeclare false positive 2", () => { verifyAndAssertMessages( ` function validate() {} class MyComponent { static validate = validate; } `, { "no-redeclare": 1 } ); }); it("check references", () => { verifyAndAssertMessages( ` var a; class A { prop1; prop2 = a; prop3 = b; } new A `, { "no-undef": 1, "no-unused-vars": 1, "no-redeclare": 1 }, ["5:11 'b' is not defined. no-undef"] ); }); }); it("dynamic import support", () => { verifyAndAssertMessages("import('test-module').then(() => {})"); }); it("regex with es6 unicodeCodePointEscapes", () => { verifyAndAssertMessages( "string.replace(/[\u{0000A0}-\u{10FFFF}<>&]/gmiu, (char) => `&#x${char.codePointAt(0).toString(16)};`);" ); }); describe("private class properties", () => { it("should not be undefined", () => { verifyAndAssertMessages( ` class C { #d = 1; } `, { "no-undef": 1 } ); }); it("should not be unused", () => { verifyAndAssertMessages( ` export class C { #d = 1; } `, { "no-unused-vars": 1 } ); }); }); describe("optional chaining operator", () => { it("should not be undefined #595", () => { verifyAndAssertMessages( ` const foo = {}; foo?.bar; `, { "no-undef": 1 } ); }); }); it("flow types on class method should be visited correctly", () => { verifyAndAssertMessages( ` import type NodeType from 'foo'; class NodeUtils { finishNodeAt(node: T): T { return node; } } new NodeUtils(); `, { "no-unused-vars": 1 } ); }); it("works with dynamicImport", () => { verifyAndAssertMessages( ` import('a'); ` ); }); it("works with numericSeparator", () => { verifyAndAssertMessages( ` 1_000 ` ); }); it("works with optionalChaining", () => { verifyAndAssertMessages( ` a?.b ` ); }); it("works with import.meta", () => { verifyAndAssertMessages( ` import.meta ` ); }); it("works with classPrivateProperties", () => { verifyAndAssertMessages( ` class A { #a = 1; } ` ); }); it("works with optionalCatchBinding", () => { verifyAndAssertMessages( ` try {} catch {} try {} catch {} finally {} ` ); }); it("exportDefaultFrom", () => { verifyAndAssertMessages( ` export v from "mod" ` ); }); it("exportNamespaceFrom", () => { verifyAndAssertMessages( ` export * as ns from "mod" ` ); }); it("ignore eval in scope analysis", () => { verifyAndAssertMessages( ` const a = 1; console.log(a); eval(''); `, { "no-unused-vars": 1, "no-undef": 1 } ); }); }); babel-eslint-10.1.0/test/z_parser-for-eslint-after-patched.js000066400000000000000000000030771362533377300241040ustar00rootroot00000000000000"use strict"; const eslint = require("eslint"); const assert = require("assert"); const babelEslint = require(".."); const espree = require("espree"); var assertImplementsAST = require("./fixtures/assert-implements-ast"); describe("https://github.com/babel/babel-eslint/issues/558", () => { it("don't crash with eslint-plugin-import", () => { const engine = new eslint.CLIEngine({ ignore: false }); engine.executeOnFiles([ "test/fixtures/eslint-plugin-import/a.js", "test/fixtures/eslint-plugin-import/b.js", "test/fixtures/eslint-plugin-import/c.js", ]); }); /* * This test ensures that the enhanced referencer does not get used if eslint-scope has already been * monkeypatched, because this causes some correctness issues. For example, if the enhanced referencer * is used after the original referencer is monkeypatched, type annotation references are counted twice. */ it("does not visit type annotations multiple times after monkeypatching and calling parseForESLint()", () => { assertImplementsAST( espree.parse("foo", { sourceType: "module" }), babelEslint.parse("foo", {}) ); const parseResult = babelEslint.parseForESLint( "type Foo = {}; function x(): Foo {}", { eslintVisitorKeys: true, eslintScopeManager: true, } ); assert(parseResult.visitorKeys); assert(parseResult.scopeManager); const fooVariable = parseResult.scopeManager.getDeclaredVariables( parseResult.ast.body[0] )[0]; assert.strictEqual(fooVariable.references.length, 1); }); }); babel-eslint-10.1.0/yarn.lock000066400000000000000000002370161362533377300160020ustar00rootroot00000000000000# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. # yarn lockfile v1 "@babel/code-frame@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" dependencies: "@babel/highlight" "7.0.0-beta.44" "@babel/code-frame@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" dependencies: "@babel/highlight" "^7.0.0" "@babel/code-frame@^7.5.5": version "7.5.5" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== dependencies: "@babel/highlight" "^7.0.0" "@babel/generator@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.44.tgz#c7e67b9b5284afcf69b309b50d7d37f3e5033d42" dependencies: "@babel/types" "7.0.0-beta.44" jsesc "^2.5.1" lodash "^4.2.0" source-map "^0.5.0" trim-right "^1.0.1" "@babel/generator@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.4.tgz#db651e2840ca9aa66f327dcec1dc5f5fa9611369" integrity sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg== dependencies: "@babel/types" "^7.7.4" jsesc "^2.5.1" lodash "^4.17.13" source-map "^0.5.0" "@babel/helper-function-name@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz#e18552aaae2231100a6e485e03854bc3532d44dd" dependencies: "@babel/helper-get-function-arity" "7.0.0-beta.44" "@babel/template" "7.0.0-beta.44" "@babel/types" "7.0.0-beta.44" "@babel/helper-function-name@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ== dependencies: "@babel/helper-get-function-arity" "^7.7.4" "@babel/template" "^7.7.4" "@babel/types" "^7.7.4" "@babel/helper-get-function-arity@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz#d03ca6dd2b9f7b0b1e6b32c56c72836140db3a15" dependencies: "@babel/types" "7.0.0-beta.44" "@babel/helper-get-function-arity@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" integrity sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA== dependencies: "@babel/types" "^7.7.4" "@babel/helper-split-export-declaration@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz#c0b351735e0fbcb3822c8ad8db4e583b05ebd9dc" dependencies: "@babel/types" "7.0.0-beta.44" "@babel/helper-split-export-declaration@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug== dependencies: "@babel/types" "^7.7.4" "@babel/highlight@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" dependencies: chalk "^2.0.0" esutils "^2.0.2" js-tokens "^3.0.0" "@babel/highlight@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" dependencies: chalk "^2.0.0" esutils "^2.0.2" js-tokens "^4.0.0" "@babel/parser@^7.7.0", "@babel/parser@^7.7.4": version "7.7.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.5.tgz#cbf45321619ac12d83363fcf9c94bb67fa646d71" integrity sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig== "@babel/template@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.44.tgz#f8832f4fdcee5d59bf515e595fc5106c529b394f" dependencies: "@babel/code-frame" "7.0.0-beta.44" "@babel/types" "7.0.0-beta.44" babylon "7.0.0-beta.44" lodash "^4.2.0" "@babel/template@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw== dependencies: "@babel/code-frame" "^7.0.0" "@babel/parser" "^7.7.4" "@babel/types" "^7.7.4" "@babel/traverse@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.44.tgz#a970a2c45477ad18017e2e465a0606feee0d2966" dependencies: "@babel/code-frame" "7.0.0-beta.44" "@babel/generator" "7.0.0-beta.44" "@babel/helper-function-name" "7.0.0-beta.44" "@babel/helper-split-export-declaration" "7.0.0-beta.44" "@babel/types" "7.0.0-beta.44" babylon "7.0.0-beta.44" debug "^3.1.0" globals "^11.1.0" invariant "^2.2.0" lodash "^4.2.0" "@babel/traverse@^7.7.0": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw== dependencies: "@babel/code-frame" "^7.5.5" "@babel/generator" "^7.7.4" "@babel/helper-function-name" "^7.7.4" "@babel/helper-split-export-declaration" "^7.7.4" "@babel/parser" "^7.7.4" "@babel/types" "^7.7.4" debug "^4.1.0" globals "^11.1.0" lodash "^4.17.13" "@babel/types@7.0.0-beta.44": version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.44.tgz#6b1b164591f77dec0a0342aca995f2d046b3a757" dependencies: esutils "^2.0.2" lodash "^4.2.0" to-fast-properties "^2.0.0" "@babel/types@^7.7.0", "@babel/types@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== dependencies: esutils "^2.0.2" lodash "^4.17.13" to-fast-properties "^2.0.0" "@samverschueren/stream-to-observable@^0.3.0": version "0.3.0" resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" dependencies: any-observable "^0.3.0" acorn-jsx@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" dependencies: acorn "^3.0.4" acorn-jsx@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-4.1.1.tgz#e8e41e48ea2fe0c896740610ab6a4ffd8add225e" dependencies: acorn "^5.0.3" acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" acorn@^5.0.3, acorn@^5.6.0: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" acorn@^5.4.0: version "5.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.4.1.tgz#fdc58d9d17f4a4e98d102ded826a9b9759125102" ajv-keywords@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" ajv@^6.0.1, ajv@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.4.tgz#247d5274110db653706b550fcc2b797ca28cfc59" 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" ansi-escapes@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" ansi-escapes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 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: color-convert "^1.9.0" any-observable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" dependencies: sprintf-js "~1.0.2" arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" arrify@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" atob@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" babel-eslint@^8.2.6: version "8.2.6" resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.2.6.tgz#6270d0c73205628067c0f7ae1693a9e797acefd9" dependencies: "@babel/code-frame" "7.0.0-beta.44" "@babel/traverse" "7.0.0-beta.44" "@babel/types" "7.0.0-beta.44" babylon "7.0.0-beta.44" eslint-scope "3.7.1" eslint-visitor-keys "^1.0.0" babylon@7.0.0-beta.44: version "7.0.0-beta.44" resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.44.tgz#89159e15e6e30c5096e22d738d8c0af8a0e8ca1d" balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" dependencies: cache-base "^1.0.1" class-utils "^0.3.5" component-emitter "^1.2.1" define-property "^1.0.0" isobject "^3.0.1" mixin-deep "^1.2.0" pascalcase "^0.1.1" brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" dependencies: balanced-match "^1.0.0" concat-map "0.0.1" braces@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" dependencies: arr-flatten "^1.1.0" array-unique "^0.3.2" extend-shallow "^2.0.1" fill-range "^4.0.0" isobject "^3.0.1" repeat-element "^1.1.2" snapdragon "^0.8.1" snapdragon-node "^2.0.1" split-string "^3.0.2" to-regex "^3.0.1" browser-stdout@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" dependencies: collection-visit "^1.0.0" component-emitter "^1.2.1" get-value "^2.0.6" has-value "^1.0.0" isobject "^3.0.1" set-value "^2.0.0" to-object-path "^0.3.0" union-value "^1.0.0" unset-value "^1.0.0" caller-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" dependencies: callsites "^0.2.0" callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/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.0.1, chalk@^2.1.0, chalk@^2.3.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" dependencies: ansi-styles "^3.2.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" ci-info@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.4.0.tgz#4841d53cad49f11b827b648ebde27a6e189b412f" circular-json@^0.3.1: version "0.3.3" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" dependencies: arr-union "^3.1.0" define-property "^0.2.5" isobject "^3.0.0" static-extend "^0.1.1" cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" dependencies: restore-cursor "^1.0.1" cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" dependencies: restore-cursor "^2.0.0" cli-spinners@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" dependencies: slice-ansi "0.0.4" string-width "^1.0.1" cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" dependencies: map-visit "^1.0.0" object-visit "^1.0.0" color-convert@^1.9.0: version "1.9.2" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.2.tgz#49881b8fba67df12a96bdf3f56c0aab9e7913147" dependencies: color-name "1.1.1" color-name@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689" commander@2.11.0: version "2.11.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" commander@^2.14.1, commander@^2.9.0: version "2.17.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" cosmiconfig@^5.0.2: version "5.0.6" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39" dependencies: is-directory "^0.3.1" js-yaml "^3.9.0" parse-json "^4.0.0" cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" which "^1.2.9" cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" dependencies: nice-try "^1.0.4" path-key "^2.0.1" semver "^5.5.0" shebang-command "^1.2.0" which "^1.2.9" date-fns@^1.27.2: version "1.29.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" debug@3.1.0, debug@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" debug@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" dedent@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" dependencies: is-descriptor "^1.0.2" isobject "^3.0.1" del@^2.0.2: version "2.2.2" resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" dependencies: globby "^5.0.0" is-path-cwd "^1.0.0" is-path-in-cwd "^1.0.0" object-assign "^4.0.1" pify "^2.0.0" pinkie-promise "^2.0.0" rimraf "^2.2.8" diff@3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" dependencies: esutils "^2.0.2" isarray "^1.0.0" doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" dependencies: esutils "^2.0.2" elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" error-ex@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" dependencies: is-arrayish "^0.2.1" error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" dependencies: is-arrayish "^0.2.1" escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, 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" eslint-config-babel@^7.0.1: version "7.0.2" resolved "https://registry.yarnpkg.com/eslint-config-babel/-/eslint-config-babel-7.0.2.tgz#cbde74f61cee087d8cd6e607fcfa087869a02d99" eslint-import-resolver-node@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" dependencies: debug "^2.6.9" resolve "^1.5.0" eslint-module-utils@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" dependencies: debug "^2.6.8" pkg-dir "^1.0.0" eslint-plugin-flowtype@^2.30.3: version "2.45.0" resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.45.0.tgz#20d8b15d1e1e71ea4e9498e8be3fc62c0752fcbf" dependencies: lodash "^4.15.0" eslint-plugin-import@^2.14.0: version "2.14.0" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8" dependencies: contains-path "^0.1.0" debug "^2.6.8" doctrine "1.5.0" eslint-import-resolver-node "^0.3.1" eslint-module-utils "^2.2.0" has "^1.0.1" lodash "^4.17.4" minimatch "^3.0.3" read-pkg-up "^2.0.0" resolve "^1.6.0" eslint-plugin-prettier@^2.1.2: version "2.6.0" resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz#33e4e228bdb06142d03c560ce04ec23f6c767dd7" dependencies: fast-diff "^1.1.1" jest-docblock "^21.0.0" eslint-scope@3.7.1: version "3.7.1" resolved "http://registry.npm.taobao.org/eslint-scope/download/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" eslint-scope@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" eslint-utils@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" eslint@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.6.0.tgz#b6f7806041af01f71b3f1895cbb20971ea4b6223" dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.5.3" chalk "^2.1.0" cross-spawn "^6.0.5" debug "^3.1.0" doctrine "^2.1.0" eslint-scope "^4.0.0" eslint-utils "^1.3.1" eslint-visitor-keys "^1.0.0" espree "^4.0.0" esquery "^1.0.1" esutils "^2.0.2" file-entry-cache "^2.0.0" functional-red-black-tree "^1.0.1" glob "^7.1.2" globals "^11.7.0" ignore "^4.0.6" imurmurhash "^0.1.4" inquirer "^6.1.0" is-resolvable "^1.1.0" js-yaml "^3.12.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" lodash "^4.17.5" minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.2" path-is-inside "^1.0.2" pluralize "^7.0.0" progress "^2.0.0" regexpp "^2.0.0" require-uncached "^1.0.3" semver "^5.5.1" strip-ansi "^4.0.0" strip-json-comments "^2.0.1" table "^4.0.3" text-table "^0.2.0" espree@^3.5.2: version "3.5.3" resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.3.tgz#931e0af64e7fbbed26b050a29daad1fc64799fa6" dependencies: acorn "^5.4.0" acorn-jsx "^3.0.0" espree@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/espree/-/espree-4.0.0.tgz#253998f20a0f82db5d866385799d912a83a36634" dependencies: acorn "^5.6.0" acorn-jsx "^4.1.1" esprima@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" esquery@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" 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" dependencies: estraverse "^4.1.0" estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" execa@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.9.0.tgz#adb7ce62cf985071f60580deb4a88b9e34712d01" dependencies: cross-spawn "^5.0.1" get-stream "^3.0.0" is-stream "^1.1.0" npm-run-path "^2.0.0" p-finally "^1.0.0" signal-exit "^3.0.0" strip-eof "^1.0.0" exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" dependencies: debug "^2.3.3" define-property "^0.2.5" extend-shallow "^2.0.1" posix-character-classes "^0.1.0" regex-not "^1.0.0" snapdragon "^0.8.1" to-regex "^3.0.1" extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" external-editor@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" 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" dependencies: array-unique "^0.3.2" define-property "^1.0.0" expand-brackets "^2.1.4" extend-shallow "^2.0.1" fragment-cache "^0.2.1" regex-not "^1.0.0" 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" fast-diff@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.2.tgz#4b62c42b8e03de3f848460b639079920695d0154" 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" fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" dependencies: escape-string-regexp "^1.0.5" object-assign "^4.1.0" 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" file-entry-cache@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" dependencies: flat-cache "^1.2.1" object-assign "^4.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" dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" repeat-string "^1.6.1" to-regex-range "^2.1.0" find-parent-dir@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" find-up@^2.0.0: version "2.1.0" resolved "http://registry.npm.taobao.org/find-up/download/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" dependencies: locate-path "^2.0.0" find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" dependencies: locate-path "^3.0.0" flat-cache@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" dependencies: circular-json "^0.3.1" del "^2.0.2" graceful-fs "^4.1.2" write "^0.2.1" for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" dependencies: map-cache "^0.2.2" fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" function-bind@^1.0.2: 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" get-own-enumerable-property-symbols@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b" get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" glob@7.1.2, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 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" globals@^11.1.0, globals@^11.7.0: version "11.7.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" globby@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" dependencies: array-union "^1.0.1" arrify "^1.0.0" glob "^7.0.3" object-assign "^4.0.1" pify "^2.0.0" pinkie-promise "^2.0.0" graceful-fs@^4.1.2: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" growl@1.10.3: version "1.10.3" resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" 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" has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" dependencies: get-value "^2.0.3" has-values "^0.1.4" isobject "^2.0.0" has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" dependencies: get-value "^2.0.6" has-values "^1.0.0" isobject "^3.0.0" has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" dependencies: is-number "^3.0.0" kind-of "^4.0.0" has@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" dependencies: function-bind "^1.0.2" he@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" hosted-git-info@^2.1.4: version "2.5.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" husky@^1.0.0-rc.13: version "1.0.0-rc.13" resolved "https://registry.yarnpkg.com/husky/-/husky-1.0.0-rc.13.tgz#49c3cc210bfeac24d4ad272f770b7505c9091828" dependencies: cosmiconfig "^5.0.2" execa "^0.9.0" find-up "^3.0.0" get-stdin "^6.0.0" is-ci "^1.1.0" pkg-dir "^3.0.0" please-upgrade-node "^3.1.1" read-pkg "^4.0.1" run-node "^1.0.0" slash "^2.0.0" iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" dependencies: safer-buffer ">= 2.1.2 < 3" ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" indent-string@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" dependencies: repeating "^2.0.0" indent-string@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" dependencies: once "^1.3.0" wrappy "1" inherits@2: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" inquirer@^6.1.0: version "6.2.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8" dependencies: ansi-escapes "^3.0.0" chalk "^2.0.0" cli-cursor "^2.1.0" cli-width "^2.0.0" external-editor "^3.0.0" figures "^2.0.0" lodash "^4.17.10" mute-stream "0.0.7" run-async "^2.2.0" rxjs "^6.1.0" string-width "^2.1.0" strip-ansi "^4.0.0" through "^2.3.6" invariant@^2.2.0: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" dependencies: loose-envify "^1.0.0" is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" dependencies: kind-of "^6.0.0" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" is-builtin-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" dependencies: builtin-modules "^1.0.0" is-ci@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.0.tgz#3f4a08d6303a09882cef3f0fb97439c5f5ce2d53" dependencies: ci-info "^1.3.0" is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" dependencies: kind-of "^6.0.0" is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" dependencies: is-accessor-descriptor "^0.1.6" is-data-descriptor "^0.1.4" kind-of "^5.0.0" is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" dependencies: is-accessor-descriptor "^1.0.0" is-data-descriptor "^1.0.0" kind-of "^6.0.2" is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" is-extendable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" dependencies: is-plain-object "^2.0.4" is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" dependencies: number-is-nan "^1.0.0" 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-glob@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" dependencies: is-extglob "^2.1.1" is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" dependencies: kind-of "^3.0.2" is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" is-observable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" dependencies: symbol-observable "^1.1.0" is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" is-path-in-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" dependencies: is-path-inside "^1.0.0" is-path-inside@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" dependencies: path-is-inside "^1.0.1" is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" dependencies: isobject "^3.0.1" is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" is-resolvable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" isarray@1.0.0, isarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" jest-docblock@^21.0.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" jest-get-type@^22.1.0: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" jest-validate@^23.5.0: version "23.5.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.5.0.tgz#f5df8f761cf43155e1b2e21d6e9de8a2852d0231" dependencies: chalk "^2.0.1" jest-get-type "^22.1.0" leven "^2.1.0" pretty-format "^23.5.0" js-tokens@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" js-yaml@^3.12.0, js-yaml@^3.9.0: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" dependencies: argparse "^1.0.7" esprima "^4.0.0" jsesc@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 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" 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" kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" dependencies: is-buffer "^1.1.5" kind-of@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" lint-staged@^7.2.2: version "7.2.2" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-7.2.2.tgz#0983d55d497f19f36d11ff2c8242b2f56cc2dd05" dependencies: chalk "^2.3.1" commander "^2.14.1" cosmiconfig "^5.0.2" debug "^3.1.0" dedent "^0.7.0" execa "^0.9.0" find-parent-dir "^0.3.0" is-glob "^4.0.0" is-windows "^1.0.2" jest-validate "^23.5.0" listr "^0.14.1" lodash "^4.17.5" log-symbols "^2.2.0" micromatch "^3.1.8" npm-which "^3.0.1" p-map "^1.1.1" path-is-inside "^1.0.2" pify "^3.0.0" please-upgrade-node "^3.0.2" staged-git-files "1.1.1" string-argv "^0.0.2" stringify-object "^3.2.2" listr-silent-renderer@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" listr-update-renderer@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7" dependencies: chalk "^1.1.3" cli-truncate "^0.2.1" elegant-spinner "^1.0.1" figures "^1.7.0" indent-string "^3.0.0" log-symbols "^1.0.2" log-update "^1.0.2" strip-ansi "^3.0.1" listr-verbose-renderer@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" dependencies: chalk "^1.1.3" cli-cursor "^1.0.2" date-fns "^1.27.2" figures "^1.7.0" listr@^0.14.1: version "0.14.1" resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.1.tgz#8a7afa4a7135cee4c921d128e0b7dfc6e522d43d" dependencies: "@samverschueren/stream-to-observable" "^0.3.0" cli-truncate "^0.2.1" figures "^1.7.0" indent-string "^2.1.0" is-observable "^1.1.0" is-promise "^2.1.0" is-stream "^1.1.0" listr-silent-renderer "^1.1.1" listr-update-renderer "^0.4.0" listr-verbose-renderer "^0.4.0" log-symbols "^1.0.2" log-update "^1.0.2" ora "^0.2.3" p-map "^1.1.1" rxjs "^6.1.0" strip-ansi "^3.0.1" load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" pify "^2.0.0" strip-bom "^3.0.0" locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" dependencies: p-locate "^2.0.0" path-exists "^3.0.0" locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" dependencies: p-locate "^3.0.0" path-exists "^3.0.0" lodash@^4.15.0: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" lodash@^4.17.10, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0: version "4.17.10" resolved "http://registry.npm.taobao.org/lodash/download/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" lodash@^4.17.13: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== log-symbols@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" dependencies: chalk "^1.0.0" log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" dependencies: chalk "^2.0.1" log-update@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" dependencies: ansi-escapes "^1.0.0" cli-cursor "^1.0.2" loose-envify@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" dependencies: js-tokens "^3.0.0 || ^4.0.0" lru-cache@^4.0.1: version "4.1.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" dependencies: pseudomap "^1.0.2" yallist "^2.1.2" map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" dependencies: object-visit "^1.0.0" micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" braces "^2.3.1" define-property "^2.0.2" extend-shallow "^3.0.2" extglob "^2.0.4" fragment-cache "^0.2.1" kind-of "^6.0.2" nanomatch "^1.2.9" object.pick "^1.3.0" regex-not "^1.0.0" snapdragon "^0.8.1" to-regex "^3.0.2" mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: brace-expansion "^1.1.7" minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" mixin-deep@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" dependencies: for-in "^1.0.2" is-extendable "^1.0.1" mkdirp@0.5.1, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" mocha@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/mocha/-/mocha-5.0.1.tgz#759b62c836b0732382a62b6b1fb245ec1bc943ac" dependencies: browser-stdout "1.3.0" commander "2.11.0" debug "3.1.0" diff "3.3.1" escape-string-regexp "1.0.5" glob "7.1.2" growl "1.10.3" he "1.1.1" mkdirp "0.5.1" supports-color "4.4.0" ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== mute-stream@0.0.7: version "0.0.7" resolved "http://registry.npm.taobao.org/mute-stream/download/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" define-property "^2.0.2" extend-shallow "^3.0.2" fragment-cache "^0.2.1" is-windows "^1.0.2" kind-of "^6.0.2" object.pick "^1.3.0" regex-not "^1.0.0" 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" nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" normalize-package-data@^2.3.2: version "2.4.0" resolved "http://registry.npm.taobao.org/normalize-package-data/download/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: hosted-git-info "^2.1.4" is-builtin-module "^1.0.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" npm-path@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" dependencies: which "^1.2.10" npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" dependencies: path-key "^2.0.0" npm-which@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" dependencies: commander "^2.9.0" npm-path "^2.0.2" which "^1.2.10" number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" object-assign@^4.0.1, object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" dependencies: isobject "^3.0.0" object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" dependencies: isobject "^3.0.1" once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: wrappy "1" onetime@^1.0.0: version "1.1.0" resolved "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" dependencies: mimic-fn "^1.0.0" optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" dependencies: deep-is "~0.1.3" fast-levenshtein "~2.0.4" levn "~0.3.0" prelude-ls "~1.1.2" type-check "~0.3.2" wordwrap "~1.0.0" ora@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" dependencies: chalk "^1.1.1" cli-cursor "^1.0.2" cli-spinners "^0.1.2" object-assign "^4.0.1" os-tmpdir@~1.0.2: version "1.0.2" resolved "http://registry.npm.taobao.org/os-tmpdir/download/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" p-limit@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" dependencies: p-try "^1.0.0" p-limit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" dependencies: p-try "^2.0.0" p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" dependencies: p-limit "^1.1.0" p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" dependencies: p-limit "^2.0.0" p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" p-try@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" dependencies: error-ex "^1.2.0" parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" dependencies: pinkie-promise "^2.0.0" path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" dependencies: pify "^2.0.0" pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" pkg-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" dependencies: find-up "^1.0.0" pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" dependencies: find-up "^3.0.0" please-upgrade-node@^3.0.2, please-upgrade-node@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz#ed320051dfcc5024fae696712c8288993595e8ac" dependencies: semver-compare "^1.0.0" pluralize@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" 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" prettier@^1.4.4: version "1.14.2" resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.2.tgz#0ac1c6e1a90baa22a62925f41963c841983282f9" pretty-format@^23.5.0: version "23.5.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.5.0.tgz#0f9601ad9da70fe690a269cd3efca732c210687c" dependencies: ansi-regex "^3.0.0" ansi-styles "^3.2.0" progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" punycode@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" dependencies: find-up "^2.0.0" read-pkg "^2.0.0" read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" dependencies: load-json-file "^2.0.0" normalize-package-data "^2.3.2" path-type "^2.0.0" read-pkg@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" dependencies: normalize-package-data "^2.3.2" parse-json "^4.0.0" pify "^3.0.0" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" dependencies: extend-shallow "^3.0.2" safe-regex "^1.1.0" regexpp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.0.tgz#b2a7534a85ca1b033bcf5ce9ff8e56d4e0755365" repeat-element@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" dependencies: is-finite "^1.0.0" require-uncached@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" dependencies: caller-path "^0.1.0" resolve-from "^1.0.0" resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" resolve@^1.12.0: version "1.12.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.12.0.tgz#3fc644a35c84a48554609ff26ec52b66fa577df6" integrity sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w== dependencies: path-parse "^1.0.6" resolve@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" dependencies: path-parse "^1.0.5" resolve@^1.6.0: version "1.8.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" dependencies: path-parse "^1.0.5" restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" dependencies: exit-hook "^1.0.0" onetime "^1.0.0" restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" dependencies: onetime "^2.0.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: version "2.6.2" resolved "http://registry.npm.taobao.org/rimraf/download/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: glob "^7.0.5" run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" dependencies: is-promise "^2.1.0" run-node@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/run-node/-/run-node-1.0.0.tgz#46b50b946a2aa2d4947ae1d886e9856fd9cabe5e" rxjs@^6.1.0: version "6.2.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.2.2.tgz#eb75fa3c186ff5289907d06483a77884586e1cf9" dependencies: tslib "^1.9.0" safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" dependencies: ret "~0.1.10" "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" semver-compare@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" "semver@2 || 3 || 4 || 5": version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" semver@^5.5.0, semver@^5.5.1: version "5.5.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" set-value@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" is-plain-object "^2.0.1" to-object-path "^0.3.0" set-value@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" is-plain-object "^2.0.3" split-string "^3.0.1" shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" slash@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" slice-ansi@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" dependencies: is-fullwidth-code-point "^2.0.0" snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" dependencies: define-property "^1.0.0" isobject "^3.0.0" snapdragon-util "^3.0.1" snapdragon-util@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" dependencies: kind-of "^3.2.0" snapdragon@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" dependencies: base "^0.11.1" debug "^2.2.0" define-property "^0.2.5" extend-shallow "^2.0.1" map-cache "^0.2.2" source-map "^0.5.6" source-map-resolve "^0.5.0" use "^3.1.0" source-map-resolve@^0.5.0: version "0.5.2" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" dependencies: atob "^2.1.1" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" urix "^0.1.0" source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" source-map@^0.5.0, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" spdx-correct@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" dependencies: spdx-license-ids "^1.0.2" spdx-expression-parse@~1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" spdx-license-ids@^1.0.2: version "1.2.2" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" dependencies: extend-shallow "^3.0.0" sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" staged-git-files@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-1.1.1.tgz#37c2218ef0d6d26178b1310719309a16a59f8f7b" static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" dependencies: define-property "^0.2.5" object-copy "^0.1.0" string-argv@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.0.2.tgz#dac30408690c21f3c3630a3ff3a05877bdcbd736" string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" stringify-object@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.2.tgz#9853052e5a88fb605a44cd27445aa257ad7ffbcd" dependencies: get-own-enumerable-property-symbols "^2.0.1" is-obj "^1.0.1" is-regexp "^1.0.0" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" dependencies: ansi-regex "^3.0.0" strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 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" supports-color@4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" dependencies: has-flag "^2.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@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" dependencies: has-flag "^3.0.0" symbol-observable@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" table@^4.0.3: version "4.0.3" resolved "http://registry.npmjs.org/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" dependencies: ajv "^6.0.1" ajv-keywords "^3.0.0" chalk "^2.1.0" lodash "^4.17.4" slice-ansi "1.0.0" string-width "^2.1.1" text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" through@^2.3.6: version "2.3.8" resolved "http://registry.npm.taobao.org/through/download/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" dependencies: os-tmpdir "~1.0.2" to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" dependencies: is-number "^3.0.0" repeat-string "^1.6.1" to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" dependencies: define-property "^2.0.2" extend-shallow "^3.0.2" regex-not "^1.0.2" safe-regex "^1.1.0" trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" tslib@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" dependencies: prelude-ls "~1.1.2" union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" dependencies: arr-union "^3.1.0" get-value "^2.0.6" is-extendable "^0.1.1" set-value "^0.4.3" unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" dependencies: has-value "^0.3.1" isobject "^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" 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" use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" dependencies: spdx-correct "~1.0.0" spdx-expression-parse "~1.0.0" which@^1.2.10, which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: isexe "^2.0.0" wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" dependencies: mkdirp "^0.5.1" yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"