├── .gitignore ├── .travis.yml ├── README.md ├── docs └── rules │ ├── no-constructor-bind.md │ └── no-constructor-state.md ├── lib ├── index.js └── rules │ ├── no-constructor-bind.js │ └── no-constructor-state.js ├── package-lock.json ├── package.json └── tests └── lib └── rules ├── no-constructor-bind.js └── no-constructor-state.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | node_js: 3 | - "8" 4 | after_success: 5 | - npm run coveralls 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # eslint-plugin-no-constructor-bind 2 | 3 | [![Build Status](https://travis-ci.org/markalfred/eslint-plugin-no-constructor-bind.svg?branch=master)](https://travis-ci.org/markalfred/eslint-plugin-no-constructor-bind) 4 | [![Coverage Status](https://coveralls.io/repos/github/markalfred/eslint-plugin-no-constructor-bind/badge.svg?branch=master)](https://coveralls.io/github/markalfred/eslint-plugin-no-constructor-bind?branch=master) 5 | [![Known Vulnerabilities](https://snyk.io/test/github/markalfred/eslint-plugin-no-constructor-bind/badge.svg?targetFile=package.json)](https://snyk.io/test/github/markalfred/eslint-plugin-no-constructor-bind?targetFile=package.json) 6 | 7 | Prefer class properties to equivalent setup steps taken in a class' constructor method. 8 | 9 | ```js 10 | // Bad: 11 | class User { 12 | constructor() { 13 | this.greet = this.greet.bind(this) 14 | } 15 | greet() { return 'Hello' } 16 | } 17 | 18 | // Good: 19 | class User { 20 | greet = () => 'hello' 21 | } 22 | ``` 23 | 24 | Use `no-constructor-bind` to eliminate bound functions in your constructor. 25 | Use `no-constructor-state` to eliminate initial state setting in your constructor. 26 | Doing this, most likely you'll be able to use ESLint's builtin `no-useless-constructor` to remove many constructors in your app. 27 | 28 | ## Installation 29 | 30 | You'll first need to install [ESLint](http://eslint.org): 31 | 32 | ``` 33 | $ npm i eslint --save-dev 34 | ``` 35 | 36 | Next, install `eslint-plugin-no-constructor-bind`: 37 | 38 | ``` 39 | $ npm install eslint-plugin-no-constructor-bind --save-dev 40 | ``` 41 | 42 | **Note:** If you installed ESLint globally (using the `-g` flag) then you must also install `eslint-plugin-no-constructor-bind` globally. 43 | 44 | ## Usage 45 | 46 | Add `no-constructor-bind` to the plugins section of your `.eslintrc` configuration file. You can omit the `eslint-plugin-` prefix: 47 | 48 | ```json 49 | { 50 | "plugins": ["no-constructor-bind"] 51 | } 52 | ``` 53 | 54 | Then configure the rules you want to use under the rules section. 55 | 56 | ```json 57 | { 58 | "rules": { 59 | "no-constructor-bind/no-constructor-bind": "error", 60 | "no-constructor-bind/no-constructor-state": "error" 61 | } 62 | } 63 | ``` 64 | 65 | ## Supported Rules 66 | 67 | * no-constructor-bind (:wrench:) — Use class arrow functions instead of binding in the constructor 68 | * no-constructor-state (:wrench:) — Use class property instead of setting initial state in the constructor 69 | -------------------------------------------------------------------------------- /docs/rules/no-constructor-bind.md: -------------------------------------------------------------------------------- 1 | # Use class arrow functions instead of binding in the constructor (no-constructor-bind) 2 | 3 | Binding functions to `this` in the constructor is annoying and verbose. Let's use arrow functions instead. 4 | 5 | ## Rule Details 6 | 7 | Examples of **incorrect** code for this rule: 8 | 9 | ```js 10 | class myClass { 11 | constructor() { 12 | super() 13 | this.myFunction = this.myFunction.bind(this) 14 | } 15 | 16 | myFunction() { 17 | doSomething() 18 | } 19 | } 20 | ``` 21 | 22 | Examples of **correct** code for this rule: 23 | 24 | ```js 25 | class myClass { 26 | myFunction = () => { 27 | doSomething() 28 | } 29 | } 30 | ``` 31 | 32 | ## When Not To Use It 33 | 34 | If you dislike arrow functions or if you don't use ES7 proposed syntax. 35 | -------------------------------------------------------------------------------- /docs/rules/no-constructor-state.md: -------------------------------------------------------------------------------- 1 | # Use class property instead of setting initial state in the constructor (no-constructor-state) 2 | 3 | We can use class properties to define a component's initial state, rather than doing it in the constructor. 4 | 5 | ## Rule Details 6 | 7 | Examples of **incorrect** code for this rule: 8 | 9 | ```js 10 | class myClass { 11 | constructor() { 12 | super() 13 | this.state = { myValue: null } 14 | } 15 | } 16 | ``` 17 | 18 | Examples of **correct** code for this rule: 19 | 20 | ```js 21 | class myClass { 22 | state = { myValue: null } 23 | } 24 | ``` 25 | 26 | ## When Not To Use It 27 | 28 | If you dislike class properties or if you don't use ES7 proposed syntax. 29 | -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileoverview prefer class arrows to constructor binds 3 | * @author Mark Battersby 4 | */ 5 | 'use strict' 6 | 7 | //------------------------------------------------------------------------------ 8 | // Requirements 9 | //------------------------------------------------------------------------------ 10 | 11 | var requireIndex = require('requireindex') 12 | 13 | //------------------------------------------------------------------------------ 14 | // Plugin Definition 15 | //------------------------------------------------------------------------------ 16 | 17 | // import all rules in lib/rules 18 | module.exports.rules = requireIndex(__dirname + '/rules') 19 | -------------------------------------------------------------------------------- /lib/rules/no-constructor-bind.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileoverview Use class arrow functions instead of binding in the constructor 3 | * @author Mark Battersby 4 | */ 5 | 'use strict' 6 | 7 | //------------------------------------------------------------------------------ 8 | // Rule Definition 9 | //------------------------------------------------------------------------------ 10 | 11 | module.exports = { 12 | meta: { 13 | docs: { 14 | description: 15 | 'Use class arrow functions instead of binding in the constructor', 16 | category: 'ECMAScript 7', 17 | recommended: false 18 | }, 19 | fixable: 'code', 20 | schema: [] 21 | }, 22 | 23 | create: function(context) { 24 | let stack = [] 25 | 26 | //---------------------------------------------------------------------- 27 | // Helpers 28 | //---------------------------------------------------------------------- 29 | 30 | function assigningToThis(node) { 31 | return ( 32 | node.left && 33 | node.left.type === 'MemberExpression' && 34 | node.left.object && 35 | node.left.object.type === 'ThisExpression' 36 | ) 37 | } 38 | 39 | function assigningFromThis(node) { 40 | return ( 41 | node.right && 42 | node.right.type === 'CallExpression' && 43 | node.right.callee && 44 | node.right.callee.object && 45 | node.right.callee.object.object && 46 | node.right.callee.object.object.type === 'ThisExpression' 47 | ) 48 | } 49 | 50 | function callingBind(node) { 51 | return ( 52 | node.right && 53 | node.right.type === 'CallExpression' && 54 | node.right.callee && 55 | node.right.callee.property && 56 | node.right.callee.property.name === 'bind' 57 | ) 58 | } 59 | 60 | function passingThis(node) { 61 | return ( 62 | node.right && 63 | node.right.arguments && 64 | node.right.arguments.length === 1 && 65 | node.right.arguments[0].type === 'ThisExpression' 66 | ) 67 | } 68 | 69 | function methodNameFromCall(node) { 70 | return node.right.callee.object.property.name 71 | } 72 | 73 | function findMethodDef(name) { 74 | const thisClass = stack[stack.length - 1] 75 | return thisClass.classMethods[name] 76 | } 77 | 78 | function getParamsText(params) { 79 | if (params.length) { 80 | const sourceCode = context.getSourceCode() 81 | 82 | const openParen = sourceCode.getTokenBefore(params[0]) 83 | const closeParen = sourceCode.getTokenAfter(params[params.length - 1]) 84 | 85 | return sourceCode.text.slice(openParen.start, closeParen.end) 86 | } else { 87 | return '()' 88 | } 89 | } 90 | 91 | function convertToArrowFunction(node) { 92 | const { params, body } = node.value 93 | const sourceCode = context.getSourceCode() 94 | 95 | const paramsText = getParamsText(params) 96 | 97 | const bodyText = 98 | body.type === 'BlockStatement' ? sourceCode.getText(body) : null 99 | 100 | const name = node.key.name 101 | const isAsync = node.value.async 102 | 103 | return `${name} = ${isAsync ? 'async ' : ''}${paramsText} => ${bodyText}` 104 | } 105 | 106 | //---------------------------------------------------------------------- 107 | // Public 108 | //---------------------------------------------------------------------- 109 | 110 | function checkAssignment(node) { 111 | if ( 112 | assigningToThis(node) && 113 | assigningFromThis(node) && 114 | callingBind(node) && 115 | passingThis(node) 116 | ) { 117 | logBoundMethod(node) 118 | } 119 | } 120 | 121 | function logBoundMethod(node) { 122 | const thisClass = stack[stack.length - 1] 123 | thisClass.boundMethods.push(node) 124 | } 125 | 126 | function logMethodDefinition(node) { 127 | const thisClass = stack[stack.length - 1] 128 | thisClass.classMethods[node.key.name] = node 129 | } 130 | 131 | function init() { 132 | stack.push({ boundMethods: [], classMethods: {} }) 133 | } 134 | 135 | function report() { 136 | const thisClass = stack[stack.length - 1] 137 | thisClass.boundMethods.forEach(node => { 138 | context.report({ 139 | node: node, 140 | message: 'use arrow functions instead of binding in the constructor', 141 | fix: fixer => { 142 | const definition = findMethodDef(methodNameFromCall(node)) 143 | if (!definition) return 144 | 145 | return [ 146 | fixer.remove(node.parent), 147 | fixer.replaceText(definition, convertToArrowFunction(definition)) 148 | ] 149 | } 150 | }) 151 | }) 152 | 153 | stack.pop() 154 | } 155 | 156 | const constructorDefinition = [ 157 | 'MethodDefinition[kind="constructor"]', 158 | 'ExpressionStatement', 159 | 'AssignmentExpression' 160 | ].join(' ') 161 | 162 | return { 163 | [constructorDefinition]: checkAssignment, 164 | MethodDefinition: logMethodDefinition, 165 | 'ClassDeclaration': init, 166 | 'ClassDeclaration:exit': report, 167 | 'ClassExpression': init, 168 | 'ClassExpression:exit': report 169 | } 170 | } 171 | } 172 | -------------------------------------------------------------------------------- /lib/rules/no-constructor-state.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileoverview Use class arrow functions instead of binding in the constructor 3 | * @author Mark Battersby 4 | */ 5 | 'use strict' 6 | 7 | //------------------------------------------------------------------------------ 8 | // Rule Definition 9 | //------------------------------------------------------------------------------ 10 | 11 | module.exports = { 12 | meta: { 13 | docs: { 14 | description: 15 | 'Use class property instead of setting initial state in the constructor', 16 | category: 'ECMAScript 7', 17 | recommended: false 18 | }, 19 | fixable: 'code', 20 | schema: [] 21 | }, 22 | 23 | create: function(context) { 24 | //---------------------------------------------------------------------- 25 | // Helpers 26 | //---------------------------------------------------------------------- 27 | 28 | function assigningToThis(node) { 29 | return ( 30 | node.left && 31 | node.left.type === 'MemberExpression' && 32 | node.left.object && 33 | node.left.object.type === 'ThisExpression' 34 | ) 35 | } 36 | 37 | function assigningToState(node) { 38 | return ( 39 | node.left && 40 | node.left.type === 'MemberExpression' && 41 | node.left.property && 42 | node.left.property.name === 'state' 43 | ) 44 | } 45 | 46 | function assigningSimpleValue(node) { 47 | return node.right && isSimple(node.right) 48 | } 49 | 50 | function isSimple(node) { 51 | return ( 52 | isLiteral(node) || 53 | isMagicIdentifier(node) || 54 | isSimpleObject(node) || 55 | isSimpleArray(node) 56 | ) 57 | } 58 | 59 | function isLiteral(node) { 60 | return node.type === 'Literal' 61 | } 62 | 63 | function isMagicIdentifier(node) { 64 | return ( 65 | node.type === 'Identifier' && 66 | node.name === 'undefined' || 67 | node.name === 'Infinity' || 68 | node.name === 'NaN' 69 | ) 70 | } 71 | 72 | function isSimpleObject(node) { 73 | return ( 74 | node.type === 'ObjectExpression' && 75 | node.properties.every(p => p.value && isSimple(p.value)) 76 | ) 77 | } 78 | 79 | function isSimpleArray(node) { 80 | return ( 81 | node.type === 'ArrayExpression' && 82 | node.elements.every(isSimple) 83 | ) 84 | } 85 | 86 | function reconstructState(node) { 87 | const constructorNode = findConstructor(node) 88 | const newline = 89 | constructorNode.loc.start.line !== constructorNode.loc.end.line 90 | const indent = constructorNode.loc.start.column 91 | 92 | const sourceCode = context.getSourceCode() 93 | 94 | let leftText = ' state = ' 95 | if (newline) { 96 | leftText = '\n\n' + ' '.repeat(indent) + 'state = ' 97 | } 98 | 99 | const rightText = sourceCode.getText(node.right) 100 | return leftText + rightText 101 | } 102 | 103 | function findConstructor(node) { 104 | // this seems... maybe brittle 105 | return node.parent.parent.parent.parent 106 | } 107 | 108 | //---------------------------------------------------------------------- 109 | // Public 110 | //---------------------------------------------------------------------- 111 | 112 | function checkAssignment(node) { 113 | if ( 114 | assigningToThis(node) && 115 | assigningToState(node) && 116 | assigningSimpleValue(node) 117 | ) { 118 | context.report({ 119 | node: node, 120 | message: "Don't set initial state in the constructor", 121 | fix: fixer => [ 122 | fixer.insertTextAfter(findConstructor(node), reconstructState(node)), 123 | fixer.remove(node) 124 | ] 125 | }) 126 | } 127 | } 128 | 129 | const constructorDefinition = [ 130 | 'MethodDefinition[kind="constructor"]', 131 | 'ExpressionStatement', 132 | 'AssignmentExpression' 133 | ].join(' ') 134 | 135 | return { 136 | [constructorDefinition]: checkAssignment 137 | } 138 | } 139 | } 140 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-plugin-no-constructor-bind", 3 | "version": "2.0.4", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.0.0", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", 10 | "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.0.0" 14 | } 15 | }, 16 | "@babel/generator": { 17 | "version": "7.8.6", 18 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.6.tgz", 19 | "integrity": "sha512-4bpOR5ZBz+wWcMeVtcf7FbjcFzCp+817z2/gHNncIRcM9MmKzUhtWCYAq27RAfUrAFwb+OCG1s9WEaVxfi6cjg==", 20 | "dev": true, 21 | "requires": { 22 | "@babel/types": "^7.8.6", 23 | "jsesc": "^2.5.1", 24 | "lodash": "^4.17.13", 25 | "source-map": "^0.5.0" 26 | } 27 | }, 28 | "@babel/helper-function-name": { 29 | "version": "7.8.3", 30 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz", 31 | "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==", 32 | "dev": true, 33 | "requires": { 34 | "@babel/helper-get-function-arity": "^7.8.3", 35 | "@babel/template": "^7.8.3", 36 | "@babel/types": "^7.8.3" 37 | } 38 | }, 39 | "@babel/helper-get-function-arity": { 40 | "version": "7.8.3", 41 | "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", 42 | "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", 43 | "dev": true, 44 | "requires": { 45 | "@babel/types": "^7.8.3" 46 | } 47 | }, 48 | "@babel/helper-split-export-declaration": { 49 | "version": "7.8.3", 50 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", 51 | "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", 52 | "dev": true, 53 | "requires": { 54 | "@babel/types": "^7.8.3" 55 | } 56 | }, 57 | "@babel/highlight": { 58 | "version": "7.0.0", 59 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", 60 | "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", 61 | "dev": true, 62 | "requires": { 63 | "chalk": "^2.0.0", 64 | "esutils": "^2.0.2", 65 | "js-tokens": "^4.0.0" 66 | }, 67 | "dependencies": { 68 | "js-tokens": { 69 | "version": "4.0.0", 70 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 71 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 72 | "dev": true 73 | } 74 | } 75 | }, 76 | "@babel/parser": { 77 | "version": "7.8.6", 78 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.6.tgz", 79 | "integrity": "sha512-trGNYSfwq5s0SgM1BMEB8hX3NDmO7EP2wsDGDexiaKMB92BaRpS+qZfpkMqUBhcsOTBwNy9B/jieo4ad/t/z2g==", 80 | "dev": true 81 | }, 82 | "@babel/template": { 83 | "version": "7.8.6", 84 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", 85 | "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", 86 | "dev": true, 87 | "requires": { 88 | "@babel/code-frame": "^7.8.3", 89 | "@babel/parser": "^7.8.6", 90 | "@babel/types": "^7.8.6" 91 | }, 92 | "dependencies": { 93 | "@babel/code-frame": { 94 | "version": "7.8.3", 95 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", 96 | "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", 97 | "dev": true, 98 | "requires": { 99 | "@babel/highlight": "^7.8.3" 100 | } 101 | }, 102 | "@babel/highlight": { 103 | "version": "7.8.3", 104 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", 105 | "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", 106 | "dev": true, 107 | "requires": { 108 | "chalk": "^2.0.0", 109 | "esutils": "^2.0.2", 110 | "js-tokens": "^4.0.0" 111 | } 112 | } 113 | } 114 | }, 115 | "@babel/traverse": { 116 | "version": "7.8.6", 117 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.6.tgz", 118 | "integrity": "sha512-2B8l0db/DPi8iinITKuo7cbPznLCEk0kCxDoB9/N6gGNg/gxOXiR/IcymAFPiBwk5w6TtQ27w4wpElgp9btR9A==", 119 | "dev": true, 120 | "requires": { 121 | "@babel/code-frame": "^7.8.3", 122 | "@babel/generator": "^7.8.6", 123 | "@babel/helper-function-name": "^7.8.3", 124 | "@babel/helper-split-export-declaration": "^7.8.3", 125 | "@babel/parser": "^7.8.6", 126 | "@babel/types": "^7.8.6", 127 | "debug": "^4.1.0", 128 | "globals": "^11.1.0", 129 | "lodash": "^4.17.13" 130 | }, 131 | "dependencies": { 132 | "@babel/code-frame": { 133 | "version": "7.8.3", 134 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", 135 | "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", 136 | "dev": true, 137 | "requires": { 138 | "@babel/highlight": "^7.8.3" 139 | } 140 | }, 141 | "@babel/highlight": { 142 | "version": "7.8.3", 143 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz", 144 | "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==", 145 | "dev": true, 146 | "requires": { 147 | "chalk": "^2.0.0", 148 | "esutils": "^2.0.2", 149 | "js-tokens": "^4.0.0" 150 | } 151 | } 152 | } 153 | }, 154 | "@babel/types": { 155 | "version": "7.8.6", 156 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.6.tgz", 157 | "integrity": "sha512-wqz7pgWMIrht3gquyEFPVXeXCti72Rm8ep9b5tQKz9Yg9LzJA3HxosF1SB3Kc81KD1A3XBkkVYtJvCKS2Z/QrA==", 158 | "dev": true, 159 | "requires": { 160 | "esutils": "^2.0.2", 161 | "lodash": "^4.17.13", 162 | "to-fast-properties": "^2.0.0" 163 | } 164 | }, 165 | "@types/color-name": { 166 | "version": "1.1.1", 167 | "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", 168 | "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", 169 | "dev": true 170 | }, 171 | "abbrev": { 172 | "version": "1.0.9", 173 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz", 174 | "integrity": "sha1-kbR5JYinc4wl813W9jdSovh3YTU=", 175 | "dev": true 176 | }, 177 | "acorn": { 178 | "version": "7.1.1", 179 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", 180 | "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", 181 | "dev": true 182 | }, 183 | "acorn-jsx": { 184 | "version": "5.2.0", 185 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", 186 | "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", 187 | "dev": true 188 | }, 189 | "ajv": { 190 | "version": "6.10.0", 191 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", 192 | "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", 193 | "dev": true, 194 | "requires": { 195 | "fast-deep-equal": "^2.0.1", 196 | "fast-json-stable-stringify": "^2.0.0", 197 | "json-schema-traverse": "^0.4.1", 198 | "uri-js": "^4.2.2" 199 | } 200 | }, 201 | "amdefine": { 202 | "version": "1.0.1", 203 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", 204 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", 205 | "dev": true, 206 | "optional": true 207 | }, 208 | "ansi-colors": { 209 | "version": "3.2.3", 210 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", 211 | "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", 212 | "dev": true 213 | }, 214 | "ansi-escapes": { 215 | "version": "4.3.1", 216 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", 217 | "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", 218 | "dev": true, 219 | "requires": { 220 | "type-fest": "^0.11.0" 221 | }, 222 | "dependencies": { 223 | "type-fest": { 224 | "version": "0.11.0", 225 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", 226 | "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", 227 | "dev": true 228 | } 229 | } 230 | }, 231 | "ansi-regex": { 232 | "version": "5.0.0", 233 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 234 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 235 | "dev": true 236 | }, 237 | "ansi-styles": { 238 | "version": "4.2.1", 239 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", 240 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", 241 | "dev": true, 242 | "requires": { 243 | "@types/color-name": "^1.1.1", 244 | "color-convert": "^2.0.1" 245 | }, 246 | "dependencies": { 247 | "color-convert": { 248 | "version": "2.0.1", 249 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 250 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 251 | "dev": true, 252 | "requires": { 253 | "color-name": "~1.1.4" 254 | } 255 | }, 256 | "color-name": { 257 | "version": "1.1.4", 258 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 259 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 260 | "dev": true 261 | } 262 | } 263 | }, 264 | "anymatch": { 265 | "version": "3.1.1", 266 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 267 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 268 | "dev": true, 269 | "requires": { 270 | "normalize-path": "^3.0.0", 271 | "picomatch": "^2.0.4" 272 | } 273 | }, 274 | "argparse": { 275 | "version": "1.0.10", 276 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 277 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 278 | "dev": true, 279 | "requires": { 280 | "sprintf-js": "~1.0.2" 281 | } 282 | }, 283 | "asn1": { 284 | "version": "0.2.4", 285 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", 286 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", 287 | "dev": true, 288 | "requires": { 289 | "safer-buffer": "~2.1.0" 290 | } 291 | }, 292 | "assert-plus": { 293 | "version": "1.0.0", 294 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 295 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", 296 | "dev": true 297 | }, 298 | "astral-regex": { 299 | "version": "1.0.0", 300 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", 301 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", 302 | "dev": true 303 | }, 304 | "async": { 305 | "version": "1.5.2", 306 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", 307 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", 308 | "dev": true 309 | }, 310 | "asynckit": { 311 | "version": "0.4.0", 312 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 313 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", 314 | "dev": true 315 | }, 316 | "aws-sign2": { 317 | "version": "0.7.0", 318 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 319 | "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", 320 | "dev": true 321 | }, 322 | "aws4": { 323 | "version": "1.10.0", 324 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz", 325 | "integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==", 326 | "dev": true 327 | }, 328 | "babel-eslint": { 329 | "version": "10.1.0", 330 | "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", 331 | "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", 332 | "dev": true, 333 | "requires": { 334 | "@babel/code-frame": "^7.0.0", 335 | "@babel/parser": "^7.7.0", 336 | "@babel/traverse": "^7.7.0", 337 | "@babel/types": "^7.7.0", 338 | "eslint-visitor-keys": "^1.0.0", 339 | "resolve": "^1.12.0" 340 | }, 341 | "dependencies": { 342 | "resolve": { 343 | "version": "1.15.1", 344 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", 345 | "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", 346 | "dev": true, 347 | "requires": { 348 | "path-parse": "^1.0.6" 349 | } 350 | } 351 | } 352 | }, 353 | "balanced-match": { 354 | "version": "1.0.0", 355 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 356 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 357 | "dev": true 358 | }, 359 | "bcrypt-pbkdf": { 360 | "version": "1.0.2", 361 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 362 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", 363 | "dev": true, 364 | "requires": { 365 | "tweetnacl": "^0.14.3" 366 | } 367 | }, 368 | "binary-extensions": { 369 | "version": "2.0.0", 370 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", 371 | "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", 372 | "dev": true 373 | }, 374 | "brace-expansion": { 375 | "version": "1.1.11", 376 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 377 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 378 | "dev": true, 379 | "requires": { 380 | "balanced-match": "^1.0.0", 381 | "concat-map": "0.0.1" 382 | } 383 | }, 384 | "braces": { 385 | "version": "3.0.2", 386 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 387 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 388 | "dev": true, 389 | "requires": { 390 | "fill-range": "^7.0.1" 391 | } 392 | }, 393 | "browser-stdout": { 394 | "version": "1.3.1", 395 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 396 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 397 | "dev": true 398 | }, 399 | "callsites": { 400 | "version": "3.1.0", 401 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 402 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 403 | "dev": true 404 | }, 405 | "camelcase": { 406 | "version": "5.3.1", 407 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 408 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 409 | "dev": true 410 | }, 411 | "caseless": { 412 | "version": "0.12.0", 413 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 414 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", 415 | "dev": true 416 | }, 417 | "chalk": { 418 | "version": "2.4.0", 419 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.0.tgz", 420 | "integrity": "sha512-Wr/w0f4o9LuE7K53cD0qmbAMM+2XNLzR29vFn5hqko4sxGlUsyy363NvmyGIyk5tpe9cjTr9SJYbysEyPkRnFw==", 421 | "dev": true, 422 | "requires": { 423 | "ansi-styles": "^3.2.1", 424 | "escape-string-regexp": "^1.0.5", 425 | "supports-color": "^5.3.0" 426 | }, 427 | "dependencies": { 428 | "ansi-styles": { 429 | "version": "3.2.1", 430 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 431 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 432 | "dev": true, 433 | "requires": { 434 | "color-convert": "^1.9.0" 435 | } 436 | }, 437 | "supports-color": { 438 | "version": "5.4.0", 439 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", 440 | "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", 441 | "dev": true, 442 | "requires": { 443 | "has-flag": "^3.0.0" 444 | } 445 | } 446 | } 447 | }, 448 | "chardet": { 449 | "version": "0.7.0", 450 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", 451 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", 452 | "dev": true 453 | }, 454 | "chokidar": { 455 | "version": "3.3.0", 456 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", 457 | "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", 458 | "dev": true, 459 | "requires": { 460 | "anymatch": "~3.1.1", 461 | "braces": "~3.0.2", 462 | "fsevents": "~2.1.1", 463 | "glob-parent": "~5.1.0", 464 | "is-binary-path": "~2.1.0", 465 | "is-glob": "~4.0.1", 466 | "normalize-path": "~3.0.0", 467 | "readdirp": "~3.2.0" 468 | } 469 | }, 470 | "cli-cursor": { 471 | "version": "3.1.0", 472 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", 473 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", 474 | "dev": true, 475 | "requires": { 476 | "restore-cursor": "^3.1.0" 477 | } 478 | }, 479 | "cli-width": { 480 | "version": "2.2.0", 481 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", 482 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", 483 | "dev": true 484 | }, 485 | "cliui": { 486 | "version": "5.0.0", 487 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", 488 | "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", 489 | "dev": true, 490 | "requires": { 491 | "string-width": "^3.1.0", 492 | "strip-ansi": "^5.2.0", 493 | "wrap-ansi": "^5.1.0" 494 | }, 495 | "dependencies": { 496 | "emoji-regex": { 497 | "version": "7.0.3", 498 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 499 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 500 | "dev": true 501 | }, 502 | "is-fullwidth-code-point": { 503 | "version": "2.0.0", 504 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 505 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 506 | "dev": true 507 | }, 508 | "string-width": { 509 | "version": "3.1.0", 510 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 511 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 512 | "dev": true, 513 | "requires": { 514 | "emoji-regex": "^7.0.1", 515 | "is-fullwidth-code-point": "^2.0.0", 516 | "strip-ansi": "^5.1.0" 517 | } 518 | } 519 | } 520 | }, 521 | "color-convert": { 522 | "version": "1.9.1", 523 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", 524 | "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", 525 | "dev": true, 526 | "requires": { 527 | "color-name": "^1.1.1" 528 | } 529 | }, 530 | "color-name": { 531 | "version": "1.1.3", 532 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 533 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 534 | "dev": true 535 | }, 536 | "combined-stream": { 537 | "version": "1.0.8", 538 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 539 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 540 | "dev": true, 541 | "requires": { 542 | "delayed-stream": "~1.0.0" 543 | } 544 | }, 545 | "commander": { 546 | "version": "2.17.1", 547 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", 548 | "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", 549 | "dev": true, 550 | "optional": true 551 | }, 552 | "concat-map": { 553 | "version": "0.0.1", 554 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 555 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 556 | "dev": true 557 | }, 558 | "core-util-is": { 559 | "version": "1.0.2", 560 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 561 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 562 | "dev": true 563 | }, 564 | "coveralls": { 565 | "version": "3.1.0", 566 | "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.0.tgz", 567 | "integrity": "sha512-sHxOu2ELzW8/NC1UP5XVLbZDzO4S3VxfFye3XYCznopHy02YjNkHcj5bKaVw2O7hVaBdBjEdQGpie4II1mWhuQ==", 568 | "dev": true, 569 | "requires": { 570 | "js-yaml": "^3.13.1", 571 | "lcov-parse": "^1.0.0", 572 | "log-driver": "^1.2.7", 573 | "minimist": "^1.2.5", 574 | "request": "^2.88.2" 575 | }, 576 | "dependencies": { 577 | "minimist": { 578 | "version": "1.2.5", 579 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 580 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 581 | "dev": true 582 | } 583 | } 584 | }, 585 | "cross-spawn": { 586 | "version": "6.0.5", 587 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 588 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 589 | "dev": true, 590 | "requires": { 591 | "nice-try": "^1.0.4", 592 | "path-key": "^2.0.1", 593 | "semver": "^5.5.0", 594 | "shebang-command": "^1.2.0", 595 | "which": "^1.2.9" 596 | }, 597 | "dependencies": { 598 | "semver": { 599 | "version": "5.7.1", 600 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 601 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 602 | "dev": true 603 | } 604 | } 605 | }, 606 | "dashdash": { 607 | "version": "1.14.1", 608 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 609 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", 610 | "dev": true, 611 | "requires": { 612 | "assert-plus": "^1.0.0" 613 | } 614 | }, 615 | "debug": { 616 | "version": "4.1.1", 617 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 618 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 619 | "dev": true, 620 | "requires": { 621 | "ms": "^2.1.1" 622 | } 623 | }, 624 | "decamelize": { 625 | "version": "1.2.0", 626 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 627 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 628 | "dev": true 629 | }, 630 | "deep-is": { 631 | "version": "0.1.3", 632 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 633 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 634 | "dev": true 635 | }, 636 | "define-properties": { 637 | "version": "1.1.3", 638 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", 639 | "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", 640 | "dev": true, 641 | "requires": { 642 | "object-keys": "^1.0.12" 643 | } 644 | }, 645 | "delayed-stream": { 646 | "version": "1.0.0", 647 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 648 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 649 | "dev": true 650 | }, 651 | "diff": { 652 | "version": "3.5.0", 653 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 654 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", 655 | "dev": true 656 | }, 657 | "doctrine": { 658 | "version": "3.0.0", 659 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 660 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 661 | "dev": true, 662 | "requires": { 663 | "esutils": "^2.0.2" 664 | } 665 | }, 666 | "ecc-jsbn": { 667 | "version": "0.1.2", 668 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 669 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", 670 | "dev": true, 671 | "requires": { 672 | "jsbn": "~0.1.0", 673 | "safer-buffer": "^2.1.0" 674 | } 675 | }, 676 | "emoji-regex": { 677 | "version": "8.0.0", 678 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 679 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 680 | "dev": true 681 | }, 682 | "es-abstract": { 683 | "version": "1.17.6", 684 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", 685 | "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", 686 | "dev": true, 687 | "requires": { 688 | "es-to-primitive": "^1.2.1", 689 | "function-bind": "^1.1.1", 690 | "has": "^1.0.3", 691 | "has-symbols": "^1.0.1", 692 | "is-callable": "^1.2.0", 693 | "is-regex": "^1.1.0", 694 | "object-inspect": "^1.7.0", 695 | "object-keys": "^1.1.1", 696 | "object.assign": "^4.1.0", 697 | "string.prototype.trimend": "^1.0.1", 698 | "string.prototype.trimstart": "^1.0.1" 699 | } 700 | }, 701 | "es-to-primitive": { 702 | "version": "1.2.1", 703 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 704 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 705 | "dev": true, 706 | "requires": { 707 | "is-callable": "^1.1.4", 708 | "is-date-object": "^1.0.1", 709 | "is-symbol": "^1.0.2" 710 | } 711 | }, 712 | "escape-string-regexp": { 713 | "version": "1.0.5", 714 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 715 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 716 | "dev": true 717 | }, 718 | "escodegen": { 719 | "version": "1.8.1", 720 | "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz", 721 | "integrity": "sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=", 722 | "dev": true, 723 | "requires": { 724 | "esprima": "^2.7.1", 725 | "estraverse": "^1.9.1", 726 | "esutils": "^2.0.2", 727 | "optionator": "^0.8.1", 728 | "source-map": "~0.2.0" 729 | }, 730 | "dependencies": { 731 | "esprima": { 732 | "version": "2.7.3", 733 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", 734 | "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", 735 | "dev": true 736 | }, 737 | "estraverse": { 738 | "version": "1.9.3", 739 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", 740 | "integrity": "sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=", 741 | "dev": true 742 | }, 743 | "source-map": { 744 | "version": "0.2.0", 745 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz", 746 | "integrity": "sha1-2rc/vPwrqBm03gO9b26qSBZLP50=", 747 | "dev": true, 748 | "optional": true, 749 | "requires": { 750 | "amdefine": ">=0.0.4" 751 | } 752 | } 753 | } 754 | }, 755 | "eslint": { 756 | "version": "6.8.0", 757 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.8.0.tgz", 758 | "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", 759 | "dev": true, 760 | "requires": { 761 | "@babel/code-frame": "^7.0.0", 762 | "ajv": "^6.10.0", 763 | "chalk": "^2.1.0", 764 | "cross-spawn": "^6.0.5", 765 | "debug": "^4.0.1", 766 | "doctrine": "^3.0.0", 767 | "eslint-scope": "^5.0.0", 768 | "eslint-utils": "^1.4.3", 769 | "eslint-visitor-keys": "^1.1.0", 770 | "espree": "^6.1.2", 771 | "esquery": "^1.0.1", 772 | "esutils": "^2.0.2", 773 | "file-entry-cache": "^5.0.1", 774 | "functional-red-black-tree": "^1.0.1", 775 | "glob-parent": "^5.0.0", 776 | "globals": "^12.1.0", 777 | "ignore": "^4.0.6", 778 | "import-fresh": "^3.0.0", 779 | "imurmurhash": "^0.1.4", 780 | "inquirer": "^7.0.0", 781 | "is-glob": "^4.0.0", 782 | "js-yaml": "^3.13.1", 783 | "json-stable-stringify-without-jsonify": "^1.0.1", 784 | "levn": "^0.3.0", 785 | "lodash": "^4.17.14", 786 | "minimatch": "^3.0.4", 787 | "mkdirp": "^0.5.1", 788 | "natural-compare": "^1.4.0", 789 | "optionator": "^0.8.3", 790 | "progress": "^2.0.0", 791 | "regexpp": "^2.0.1", 792 | "semver": "^6.1.2", 793 | "strip-ansi": "^5.2.0", 794 | "strip-json-comments": "^3.0.1", 795 | "table": "^5.2.3", 796 | "text-table": "^0.2.0", 797 | "v8-compile-cache": "^2.0.3" 798 | }, 799 | "dependencies": { 800 | "eslint-visitor-keys": { 801 | "version": "1.1.0", 802 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", 803 | "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", 804 | "dev": true 805 | }, 806 | "globals": { 807 | "version": "12.4.0", 808 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", 809 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", 810 | "dev": true, 811 | "requires": { 812 | "type-fest": "^0.8.1" 813 | } 814 | }, 815 | "optionator": { 816 | "version": "0.8.3", 817 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", 818 | "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", 819 | "dev": true, 820 | "requires": { 821 | "deep-is": "~0.1.3", 822 | "fast-levenshtein": "~2.0.6", 823 | "levn": "~0.3.0", 824 | "prelude-ls": "~1.1.2", 825 | "type-check": "~0.3.2", 826 | "word-wrap": "~1.2.3" 827 | } 828 | } 829 | } 830 | }, 831 | "eslint-scope": { 832 | "version": "5.0.0", 833 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", 834 | "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", 835 | "dev": true, 836 | "requires": { 837 | "esrecurse": "^4.1.0", 838 | "estraverse": "^4.1.1" 839 | } 840 | }, 841 | "eslint-utils": { 842 | "version": "1.4.3", 843 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", 844 | "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", 845 | "dev": true, 846 | "requires": { 847 | "eslint-visitor-keys": "^1.1.0" 848 | }, 849 | "dependencies": { 850 | "eslint-visitor-keys": { 851 | "version": "1.1.0", 852 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", 853 | "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", 854 | "dev": true 855 | } 856 | } 857 | }, 858 | "eslint-visitor-keys": { 859 | "version": "1.0.0", 860 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", 861 | "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", 862 | "dev": true 863 | }, 864 | "espree": { 865 | "version": "6.2.1", 866 | "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", 867 | "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", 868 | "dev": true, 869 | "requires": { 870 | "acorn": "^7.1.1", 871 | "acorn-jsx": "^5.2.0", 872 | "eslint-visitor-keys": "^1.1.0" 873 | }, 874 | "dependencies": { 875 | "eslint-visitor-keys": { 876 | "version": "1.1.0", 877 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", 878 | "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", 879 | "dev": true 880 | } 881 | } 882 | }, 883 | "esprima": { 884 | "version": "4.0.1", 885 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 886 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 887 | "dev": true 888 | }, 889 | "esquery": { 890 | "version": "1.1.0", 891 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.1.0.tgz", 892 | "integrity": "sha512-MxYW9xKmROWF672KqjO75sszsA8Mxhw06YFeS5VHlB98KDHbOSurm3ArsjO60Eaf3QmGMCP1yn+0JQkNLo/97Q==", 893 | "dev": true, 894 | "requires": { 895 | "estraverse": "^4.0.0" 896 | } 897 | }, 898 | "esrecurse": { 899 | "version": "4.2.1", 900 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 901 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 902 | "dev": true, 903 | "requires": { 904 | "estraverse": "^4.1.0" 905 | } 906 | }, 907 | "estraverse": { 908 | "version": "4.3.0", 909 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 910 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 911 | "dev": true 912 | }, 913 | "esutils": { 914 | "version": "2.0.2", 915 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 916 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", 917 | "dev": true 918 | }, 919 | "extend": { 920 | "version": "3.0.2", 921 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 922 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 923 | "dev": true 924 | }, 925 | "external-editor": { 926 | "version": "3.1.0", 927 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", 928 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", 929 | "dev": true, 930 | "requires": { 931 | "chardet": "^0.7.0", 932 | "iconv-lite": "^0.4.24", 933 | "tmp": "^0.0.33" 934 | } 935 | }, 936 | "extsprintf": { 937 | "version": "1.3.0", 938 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 939 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", 940 | "dev": true 941 | }, 942 | "fast-deep-equal": { 943 | "version": "2.0.1", 944 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", 945 | "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", 946 | "dev": true 947 | }, 948 | "fast-json-stable-stringify": { 949 | "version": "2.0.0", 950 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", 951 | "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", 952 | "dev": true 953 | }, 954 | "fast-levenshtein": { 955 | "version": "2.0.6", 956 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 957 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 958 | "dev": true 959 | }, 960 | "figures": { 961 | "version": "3.2.0", 962 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", 963 | "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", 964 | "dev": true, 965 | "requires": { 966 | "escape-string-regexp": "^1.0.5" 967 | } 968 | }, 969 | "file-entry-cache": { 970 | "version": "5.0.1", 971 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", 972 | "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", 973 | "dev": true, 974 | "requires": { 975 | "flat-cache": "^2.0.1" 976 | } 977 | }, 978 | "fill-range": { 979 | "version": "7.0.1", 980 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 981 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 982 | "dev": true, 983 | "requires": { 984 | "to-regex-range": "^5.0.1" 985 | } 986 | }, 987 | "find-up": { 988 | "version": "3.0.0", 989 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", 990 | "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", 991 | "dev": true, 992 | "requires": { 993 | "locate-path": "^3.0.0" 994 | } 995 | }, 996 | "flat": { 997 | "version": "4.1.0", 998 | "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", 999 | "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", 1000 | "dev": true, 1001 | "requires": { 1002 | "is-buffer": "~2.0.3" 1003 | } 1004 | }, 1005 | "flat-cache": { 1006 | "version": "2.0.1", 1007 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", 1008 | "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", 1009 | "dev": true, 1010 | "requires": { 1011 | "flatted": "^2.0.0", 1012 | "rimraf": "2.6.3", 1013 | "write": "1.0.3" 1014 | } 1015 | }, 1016 | "flatted": { 1017 | "version": "2.0.1", 1018 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", 1019 | "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", 1020 | "dev": true 1021 | }, 1022 | "forever-agent": { 1023 | "version": "0.6.1", 1024 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 1025 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", 1026 | "dev": true 1027 | }, 1028 | "form-data": { 1029 | "version": "2.3.3", 1030 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 1031 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 1032 | "dev": true, 1033 | "requires": { 1034 | "asynckit": "^0.4.0", 1035 | "combined-stream": "^1.0.6", 1036 | "mime-types": "^2.1.12" 1037 | } 1038 | }, 1039 | "fs.realpath": { 1040 | "version": "1.0.0", 1041 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1042 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1043 | "dev": true 1044 | }, 1045 | "fsevents": { 1046 | "version": "2.1.3", 1047 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", 1048 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", 1049 | "dev": true, 1050 | "optional": true 1051 | }, 1052 | "function-bind": { 1053 | "version": "1.1.1", 1054 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1055 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1056 | "dev": true 1057 | }, 1058 | "functional-red-black-tree": { 1059 | "version": "1.0.1", 1060 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 1061 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 1062 | "dev": true 1063 | }, 1064 | "get-caller-file": { 1065 | "version": "2.0.5", 1066 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1067 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 1068 | "dev": true 1069 | }, 1070 | "getpass": { 1071 | "version": "0.1.7", 1072 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 1073 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", 1074 | "dev": true, 1075 | "requires": { 1076 | "assert-plus": "^1.0.0" 1077 | } 1078 | }, 1079 | "glob": { 1080 | "version": "7.1.6", 1081 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 1082 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 1083 | "dev": true, 1084 | "requires": { 1085 | "fs.realpath": "^1.0.0", 1086 | "inflight": "^1.0.4", 1087 | "inherits": "2", 1088 | "minimatch": "^3.0.4", 1089 | "once": "^1.3.0", 1090 | "path-is-absolute": "^1.0.0" 1091 | } 1092 | }, 1093 | "glob-parent": { 1094 | "version": "5.1.2", 1095 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1096 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1097 | "dev": true, 1098 | "requires": { 1099 | "is-glob": "^4.0.1" 1100 | } 1101 | }, 1102 | "globals": { 1103 | "version": "11.12.0", 1104 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1105 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1106 | "dev": true 1107 | }, 1108 | "growl": { 1109 | "version": "1.10.5", 1110 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 1111 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 1112 | "dev": true 1113 | }, 1114 | "handlebars": { 1115 | "version": "4.7.7", 1116 | "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", 1117 | "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", 1118 | "dev": true, 1119 | "requires": { 1120 | "minimist": "^1.2.5", 1121 | "neo-async": "^2.6.0", 1122 | "source-map": "^0.6.1", 1123 | "uglify-js": "^3.1.4", 1124 | "wordwrap": "^1.0.0" 1125 | }, 1126 | "dependencies": { 1127 | "source-map": { 1128 | "version": "0.6.1", 1129 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1130 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1131 | "dev": true 1132 | } 1133 | } 1134 | }, 1135 | "har-schema": { 1136 | "version": "2.0.0", 1137 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 1138 | "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", 1139 | "dev": true 1140 | }, 1141 | "har-validator": { 1142 | "version": "5.1.3", 1143 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", 1144 | "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", 1145 | "dev": true, 1146 | "requires": { 1147 | "ajv": "^6.5.5", 1148 | "har-schema": "^2.0.0" 1149 | } 1150 | }, 1151 | "has": { 1152 | "version": "1.0.3", 1153 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1154 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1155 | "dev": true, 1156 | "requires": { 1157 | "function-bind": "^1.1.1" 1158 | } 1159 | }, 1160 | "has-flag": { 1161 | "version": "3.0.0", 1162 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1163 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1164 | "dev": true 1165 | }, 1166 | "has-symbols": { 1167 | "version": "1.0.1", 1168 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", 1169 | "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", 1170 | "dev": true 1171 | }, 1172 | "he": { 1173 | "version": "1.2.0", 1174 | "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", 1175 | "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", 1176 | "dev": true 1177 | }, 1178 | "http-signature": { 1179 | "version": "1.2.0", 1180 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 1181 | "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", 1182 | "dev": true, 1183 | "requires": { 1184 | "assert-plus": "^1.0.0", 1185 | "jsprim": "^1.2.2", 1186 | "sshpk": "^1.7.0" 1187 | } 1188 | }, 1189 | "iconv-lite": { 1190 | "version": "0.4.24", 1191 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1192 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1193 | "dev": true, 1194 | "requires": { 1195 | "safer-buffer": ">= 2.1.2 < 3" 1196 | } 1197 | }, 1198 | "ignore": { 1199 | "version": "4.0.6", 1200 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 1201 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 1202 | "dev": true 1203 | }, 1204 | "import-fresh": { 1205 | "version": "3.2.1", 1206 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", 1207 | "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", 1208 | "dev": true, 1209 | "requires": { 1210 | "parent-module": "^1.0.0", 1211 | "resolve-from": "^4.0.0" 1212 | } 1213 | }, 1214 | "imurmurhash": { 1215 | "version": "0.1.4", 1216 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1217 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1218 | "dev": true 1219 | }, 1220 | "inflight": { 1221 | "version": "1.0.6", 1222 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1223 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1224 | "dev": true, 1225 | "requires": { 1226 | "once": "^1.3.0", 1227 | "wrappy": "1" 1228 | } 1229 | }, 1230 | "inherits": { 1231 | "version": "2.0.3", 1232 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1233 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", 1234 | "dev": true 1235 | }, 1236 | "inquirer": { 1237 | "version": "7.1.0", 1238 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.1.0.tgz", 1239 | "integrity": "sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg==", 1240 | "dev": true, 1241 | "requires": { 1242 | "ansi-escapes": "^4.2.1", 1243 | "chalk": "^3.0.0", 1244 | "cli-cursor": "^3.1.0", 1245 | "cli-width": "^2.0.0", 1246 | "external-editor": "^3.0.3", 1247 | "figures": "^3.0.0", 1248 | "lodash": "^4.17.15", 1249 | "mute-stream": "0.0.8", 1250 | "run-async": "^2.4.0", 1251 | "rxjs": "^6.5.3", 1252 | "string-width": "^4.1.0", 1253 | "strip-ansi": "^6.0.0", 1254 | "through": "^2.3.6" 1255 | }, 1256 | "dependencies": { 1257 | "chalk": { 1258 | "version": "3.0.0", 1259 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", 1260 | "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", 1261 | "dev": true, 1262 | "requires": { 1263 | "ansi-styles": "^4.1.0", 1264 | "supports-color": "^7.1.0" 1265 | } 1266 | }, 1267 | "strip-ansi": { 1268 | "version": "6.0.0", 1269 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1270 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1271 | "dev": true, 1272 | "requires": { 1273 | "ansi-regex": "^5.0.0" 1274 | } 1275 | } 1276 | } 1277 | }, 1278 | "is-binary-path": { 1279 | "version": "2.1.0", 1280 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1281 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1282 | "dev": true, 1283 | "requires": { 1284 | "binary-extensions": "^2.0.0" 1285 | } 1286 | }, 1287 | "is-buffer": { 1288 | "version": "2.0.4", 1289 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", 1290 | "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", 1291 | "dev": true 1292 | }, 1293 | "is-callable": { 1294 | "version": "1.2.0", 1295 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", 1296 | "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", 1297 | "dev": true 1298 | }, 1299 | "is-date-object": { 1300 | "version": "1.0.2", 1301 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", 1302 | "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", 1303 | "dev": true 1304 | }, 1305 | "is-extglob": { 1306 | "version": "2.1.1", 1307 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1308 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1309 | "dev": true 1310 | }, 1311 | "is-fullwidth-code-point": { 1312 | "version": "3.0.0", 1313 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1314 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1315 | "dev": true 1316 | }, 1317 | "is-glob": { 1318 | "version": "4.0.1", 1319 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1320 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1321 | "dev": true, 1322 | "requires": { 1323 | "is-extglob": "^2.1.1" 1324 | } 1325 | }, 1326 | "is-number": { 1327 | "version": "7.0.0", 1328 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1329 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1330 | "dev": true 1331 | }, 1332 | "is-promise": { 1333 | "version": "2.1.0", 1334 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 1335 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", 1336 | "dev": true 1337 | }, 1338 | "is-regex": { 1339 | "version": "1.1.0", 1340 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", 1341 | "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", 1342 | "dev": true, 1343 | "requires": { 1344 | "has-symbols": "^1.0.1" 1345 | } 1346 | }, 1347 | "is-symbol": { 1348 | "version": "1.0.3", 1349 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", 1350 | "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", 1351 | "dev": true, 1352 | "requires": { 1353 | "has-symbols": "^1.0.1" 1354 | } 1355 | }, 1356 | "is-typedarray": { 1357 | "version": "1.0.0", 1358 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 1359 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", 1360 | "dev": true 1361 | }, 1362 | "isexe": { 1363 | "version": "2.0.0", 1364 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1365 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1366 | "dev": true 1367 | }, 1368 | "isstream": { 1369 | "version": "0.1.2", 1370 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 1371 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", 1372 | "dev": true 1373 | }, 1374 | "istanbul": { 1375 | "version": "0.4.5", 1376 | "resolved": "https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz", 1377 | "integrity": "sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=", 1378 | "dev": true, 1379 | "requires": { 1380 | "abbrev": "1.0.x", 1381 | "async": "1.x", 1382 | "escodegen": "1.8.x", 1383 | "esprima": "2.7.x", 1384 | "glob": "^5.0.15", 1385 | "handlebars": "^4.0.1", 1386 | "js-yaml": "3.x", 1387 | "mkdirp": "0.5.x", 1388 | "nopt": "3.x", 1389 | "once": "1.x", 1390 | "resolve": "1.1.x", 1391 | "supports-color": "^3.1.0", 1392 | "which": "^1.1.1", 1393 | "wordwrap": "^1.0.0" 1394 | }, 1395 | "dependencies": { 1396 | "esprima": { 1397 | "version": "2.7.3", 1398 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", 1399 | "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", 1400 | "dev": true 1401 | }, 1402 | "glob": { 1403 | "version": "5.0.15", 1404 | "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", 1405 | "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", 1406 | "dev": true, 1407 | "requires": { 1408 | "inflight": "^1.0.4", 1409 | "inherits": "2", 1410 | "minimatch": "2 || 3", 1411 | "once": "^1.3.0", 1412 | "path-is-absolute": "^1.0.0" 1413 | } 1414 | }, 1415 | "has-flag": { 1416 | "version": "1.0.0", 1417 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", 1418 | "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", 1419 | "dev": true 1420 | }, 1421 | "supports-color": { 1422 | "version": "3.2.3", 1423 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", 1424 | "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", 1425 | "dev": true, 1426 | "requires": { 1427 | "has-flag": "^1.0.0" 1428 | } 1429 | } 1430 | } 1431 | }, 1432 | "js-tokens": { 1433 | "version": "4.0.0", 1434 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1435 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1436 | "dev": true 1437 | }, 1438 | "js-yaml": { 1439 | "version": "3.13.1", 1440 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", 1441 | "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", 1442 | "dev": true, 1443 | "requires": { 1444 | "argparse": "^1.0.7", 1445 | "esprima": "^4.0.0" 1446 | } 1447 | }, 1448 | "jsbn": { 1449 | "version": "0.1.1", 1450 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 1451 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", 1452 | "dev": true 1453 | }, 1454 | "jsesc": { 1455 | "version": "2.5.2", 1456 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 1457 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 1458 | "dev": true 1459 | }, 1460 | "json-schema": { 1461 | "version": "0.2.3", 1462 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", 1463 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", 1464 | "dev": true 1465 | }, 1466 | "json-schema-traverse": { 1467 | "version": "0.4.1", 1468 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1469 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1470 | "dev": true 1471 | }, 1472 | "json-stable-stringify-without-jsonify": { 1473 | "version": "1.0.1", 1474 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1475 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1476 | "dev": true 1477 | }, 1478 | "json-stringify-safe": { 1479 | "version": "5.0.1", 1480 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 1481 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", 1482 | "dev": true 1483 | }, 1484 | "jsprim": { 1485 | "version": "1.4.1", 1486 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", 1487 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", 1488 | "dev": true, 1489 | "requires": { 1490 | "assert-plus": "1.0.0", 1491 | "extsprintf": "1.3.0", 1492 | "json-schema": "0.2.3", 1493 | "verror": "1.10.0" 1494 | } 1495 | }, 1496 | "lcov-parse": { 1497 | "version": "1.0.0", 1498 | "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", 1499 | "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", 1500 | "dev": true 1501 | }, 1502 | "levn": { 1503 | "version": "0.3.0", 1504 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", 1505 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", 1506 | "dev": true, 1507 | "requires": { 1508 | "prelude-ls": "~1.1.2", 1509 | "type-check": "~0.3.2" 1510 | } 1511 | }, 1512 | "locate-path": { 1513 | "version": "3.0.0", 1514 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", 1515 | "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", 1516 | "dev": true, 1517 | "requires": { 1518 | "p-locate": "^3.0.0", 1519 | "path-exists": "^3.0.0" 1520 | } 1521 | }, 1522 | "lodash": { 1523 | "version": "4.17.21", 1524 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1525 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1526 | "dev": true 1527 | }, 1528 | "log-driver": { 1529 | "version": "1.2.7", 1530 | "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", 1531 | "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", 1532 | "dev": true 1533 | }, 1534 | "log-symbols": { 1535 | "version": "3.0.0", 1536 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", 1537 | "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", 1538 | "dev": true, 1539 | "requires": { 1540 | "chalk": "^2.4.2" 1541 | }, 1542 | "dependencies": { 1543 | "ansi-styles": { 1544 | "version": "3.2.1", 1545 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1546 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1547 | "dev": true, 1548 | "requires": { 1549 | "color-convert": "^1.9.0" 1550 | } 1551 | }, 1552 | "chalk": { 1553 | "version": "2.4.2", 1554 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1555 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1556 | "dev": true, 1557 | "requires": { 1558 | "ansi-styles": "^3.2.1", 1559 | "escape-string-regexp": "^1.0.5", 1560 | "supports-color": "^5.3.0" 1561 | } 1562 | }, 1563 | "supports-color": { 1564 | "version": "5.5.0", 1565 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1566 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1567 | "dev": true, 1568 | "requires": { 1569 | "has-flag": "^3.0.0" 1570 | } 1571 | } 1572 | } 1573 | }, 1574 | "mime-db": { 1575 | "version": "1.44.0", 1576 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", 1577 | "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", 1578 | "dev": true 1579 | }, 1580 | "mime-types": { 1581 | "version": "2.1.27", 1582 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", 1583 | "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", 1584 | "dev": true, 1585 | "requires": { 1586 | "mime-db": "1.44.0" 1587 | } 1588 | }, 1589 | "mimic-fn": { 1590 | "version": "2.1.0", 1591 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 1592 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 1593 | "dev": true 1594 | }, 1595 | "minimatch": { 1596 | "version": "3.0.4", 1597 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1598 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1599 | "dev": true, 1600 | "requires": { 1601 | "brace-expansion": "^1.1.7" 1602 | } 1603 | }, 1604 | "minimist": { 1605 | "version": "1.2.5", 1606 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1607 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1608 | "dev": true 1609 | }, 1610 | "mkdirp": { 1611 | "version": "0.5.5", 1612 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 1613 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 1614 | "dev": true, 1615 | "requires": { 1616 | "minimist": "^1.2.5" 1617 | } 1618 | }, 1619 | "mocha": { 1620 | "version": "7.2.0", 1621 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.2.0.tgz", 1622 | "integrity": "sha512-O9CIypScywTVpNaRrCAgoUnJgozpIofjKUYmJhiCIJMiuYnLI6otcb1/kpW9/n/tJODHGZ7i8aLQoDVsMtOKQQ==", 1623 | "dev": true, 1624 | "requires": { 1625 | "ansi-colors": "3.2.3", 1626 | "browser-stdout": "1.3.1", 1627 | "chokidar": "3.3.0", 1628 | "debug": "3.2.6", 1629 | "diff": "3.5.0", 1630 | "escape-string-regexp": "1.0.5", 1631 | "find-up": "3.0.0", 1632 | "glob": "7.1.3", 1633 | "growl": "1.10.5", 1634 | "he": "1.2.0", 1635 | "js-yaml": "3.13.1", 1636 | "log-symbols": "3.0.0", 1637 | "minimatch": "3.0.4", 1638 | "mkdirp": "0.5.5", 1639 | "ms": "2.1.1", 1640 | "node-environment-flags": "1.0.6", 1641 | "object.assign": "4.1.0", 1642 | "strip-json-comments": "2.0.1", 1643 | "supports-color": "6.0.0", 1644 | "which": "1.3.1", 1645 | "wide-align": "1.1.3", 1646 | "yargs": "13.3.2", 1647 | "yargs-parser": "13.1.2", 1648 | "yargs-unparser": "1.6.0" 1649 | }, 1650 | "dependencies": { 1651 | "debug": { 1652 | "version": "3.2.6", 1653 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", 1654 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", 1655 | "dev": true, 1656 | "requires": { 1657 | "ms": "^2.1.1" 1658 | } 1659 | }, 1660 | "glob": { 1661 | "version": "7.1.3", 1662 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", 1663 | "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", 1664 | "dev": true, 1665 | "requires": { 1666 | "fs.realpath": "^1.0.0", 1667 | "inflight": "^1.0.4", 1668 | "inherits": "2", 1669 | "minimatch": "^3.0.4", 1670 | "once": "^1.3.0", 1671 | "path-is-absolute": "^1.0.0" 1672 | } 1673 | }, 1674 | "minimist": { 1675 | "version": "1.2.5", 1676 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1677 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1678 | "dev": true 1679 | }, 1680 | "mkdirp": { 1681 | "version": "0.5.5", 1682 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 1683 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 1684 | "dev": true, 1685 | "requires": { 1686 | "minimist": "^1.2.5" 1687 | } 1688 | }, 1689 | "strip-json-comments": { 1690 | "version": "2.0.1", 1691 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1692 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1693 | "dev": true 1694 | }, 1695 | "supports-color": { 1696 | "version": "6.0.0", 1697 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", 1698 | "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", 1699 | "dev": true, 1700 | "requires": { 1701 | "has-flag": "^3.0.0" 1702 | } 1703 | } 1704 | } 1705 | }, 1706 | "mocha-lcov-reporter": { 1707 | "version": "1.3.0", 1708 | "resolved": "https://registry.npmjs.org/mocha-lcov-reporter/-/mocha-lcov-reporter-1.3.0.tgz", 1709 | "integrity": "sha1-Rpve9PivyaEWBW8HnfYYLQr7A4Q=", 1710 | "dev": true 1711 | }, 1712 | "ms": { 1713 | "version": "2.1.1", 1714 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", 1715 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", 1716 | "dev": true 1717 | }, 1718 | "mute-stream": { 1719 | "version": "0.0.8", 1720 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 1721 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", 1722 | "dev": true 1723 | }, 1724 | "natural-compare": { 1725 | "version": "1.4.0", 1726 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1727 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1728 | "dev": true 1729 | }, 1730 | "neo-async": { 1731 | "version": "2.6.1", 1732 | "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", 1733 | "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", 1734 | "dev": true 1735 | }, 1736 | "nice-try": { 1737 | "version": "1.0.5", 1738 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 1739 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", 1740 | "dev": true 1741 | }, 1742 | "node-environment-flags": { 1743 | "version": "1.0.6", 1744 | "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", 1745 | "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", 1746 | "dev": true, 1747 | "requires": { 1748 | "object.getownpropertydescriptors": "^2.0.3", 1749 | "semver": "^5.7.0" 1750 | }, 1751 | "dependencies": { 1752 | "semver": { 1753 | "version": "5.7.1", 1754 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1755 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1756 | "dev": true 1757 | } 1758 | } 1759 | }, 1760 | "nopt": { 1761 | "version": "3.0.6", 1762 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", 1763 | "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", 1764 | "dev": true, 1765 | "requires": { 1766 | "abbrev": "1" 1767 | } 1768 | }, 1769 | "normalize-path": { 1770 | "version": "3.0.0", 1771 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1772 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1773 | "dev": true 1774 | }, 1775 | "oauth-sign": { 1776 | "version": "0.9.0", 1777 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 1778 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", 1779 | "dev": true 1780 | }, 1781 | "object-inspect": { 1782 | "version": "1.7.0", 1783 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", 1784 | "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", 1785 | "dev": true 1786 | }, 1787 | "object-keys": { 1788 | "version": "1.1.1", 1789 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1790 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1791 | "dev": true 1792 | }, 1793 | "object.assign": { 1794 | "version": "4.1.0", 1795 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", 1796 | "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", 1797 | "dev": true, 1798 | "requires": { 1799 | "define-properties": "^1.1.2", 1800 | "function-bind": "^1.1.1", 1801 | "has-symbols": "^1.0.0", 1802 | "object-keys": "^1.0.11" 1803 | } 1804 | }, 1805 | "object.getownpropertydescriptors": { 1806 | "version": "2.1.0", 1807 | "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", 1808 | "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", 1809 | "dev": true, 1810 | "requires": { 1811 | "define-properties": "^1.1.3", 1812 | "es-abstract": "^1.17.0-next.1" 1813 | } 1814 | }, 1815 | "once": { 1816 | "version": "1.4.0", 1817 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1818 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1819 | "dev": true, 1820 | "requires": { 1821 | "wrappy": "1" 1822 | } 1823 | }, 1824 | "onetime": { 1825 | "version": "5.1.0", 1826 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", 1827 | "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", 1828 | "dev": true, 1829 | "requires": { 1830 | "mimic-fn": "^2.1.0" 1831 | } 1832 | }, 1833 | "optionator": { 1834 | "version": "0.8.2", 1835 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", 1836 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", 1837 | "dev": true, 1838 | "requires": { 1839 | "deep-is": "~0.1.3", 1840 | "fast-levenshtein": "~2.0.4", 1841 | "levn": "~0.3.0", 1842 | "prelude-ls": "~1.1.2", 1843 | "type-check": "~0.3.2", 1844 | "wordwrap": "~1.0.0" 1845 | } 1846 | }, 1847 | "os-tmpdir": { 1848 | "version": "1.0.2", 1849 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 1850 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 1851 | "dev": true 1852 | }, 1853 | "p-limit": { 1854 | "version": "2.3.0", 1855 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 1856 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 1857 | "dev": true, 1858 | "requires": { 1859 | "p-try": "^2.0.0" 1860 | } 1861 | }, 1862 | "p-locate": { 1863 | "version": "3.0.0", 1864 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", 1865 | "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", 1866 | "dev": true, 1867 | "requires": { 1868 | "p-limit": "^2.0.0" 1869 | } 1870 | }, 1871 | "p-try": { 1872 | "version": "2.2.0", 1873 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1874 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1875 | "dev": true 1876 | }, 1877 | "parent-module": { 1878 | "version": "1.0.1", 1879 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1880 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1881 | "dev": true, 1882 | "requires": { 1883 | "callsites": "^3.0.0" 1884 | } 1885 | }, 1886 | "path-exists": { 1887 | "version": "3.0.0", 1888 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 1889 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", 1890 | "dev": true 1891 | }, 1892 | "path-is-absolute": { 1893 | "version": "1.0.1", 1894 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1895 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1896 | "dev": true 1897 | }, 1898 | "path-key": { 1899 | "version": "2.0.1", 1900 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 1901 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 1902 | "dev": true 1903 | }, 1904 | "path-parse": { 1905 | "version": "1.0.7", 1906 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1907 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1908 | "dev": true 1909 | }, 1910 | "performance-now": { 1911 | "version": "2.1.0", 1912 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1913 | "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", 1914 | "dev": true 1915 | }, 1916 | "picomatch": { 1917 | "version": "2.2.2", 1918 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 1919 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", 1920 | "dev": true 1921 | }, 1922 | "prelude-ls": { 1923 | "version": "1.1.2", 1924 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", 1925 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", 1926 | "dev": true 1927 | }, 1928 | "progress": { 1929 | "version": "2.0.3", 1930 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 1931 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 1932 | "dev": true 1933 | }, 1934 | "psl": { 1935 | "version": "1.8.0", 1936 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", 1937 | "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", 1938 | "dev": true 1939 | }, 1940 | "punycode": { 1941 | "version": "2.1.1", 1942 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 1943 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 1944 | "dev": true 1945 | }, 1946 | "qs": { 1947 | "version": "6.5.2", 1948 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", 1949 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", 1950 | "dev": true 1951 | }, 1952 | "readdirp": { 1953 | "version": "3.2.0", 1954 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", 1955 | "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", 1956 | "dev": true, 1957 | "requires": { 1958 | "picomatch": "^2.0.4" 1959 | } 1960 | }, 1961 | "regexpp": { 1962 | "version": "2.0.1", 1963 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", 1964 | "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", 1965 | "dev": true 1966 | }, 1967 | "request": { 1968 | "version": "2.88.2", 1969 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", 1970 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", 1971 | "dev": true, 1972 | "requires": { 1973 | "aws-sign2": "~0.7.0", 1974 | "aws4": "^1.8.0", 1975 | "caseless": "~0.12.0", 1976 | "combined-stream": "~1.0.6", 1977 | "extend": "~3.0.2", 1978 | "forever-agent": "~0.6.1", 1979 | "form-data": "~2.3.2", 1980 | "har-validator": "~5.1.3", 1981 | "http-signature": "~1.2.0", 1982 | "is-typedarray": "~1.0.0", 1983 | "isstream": "~0.1.2", 1984 | "json-stringify-safe": "~5.0.1", 1985 | "mime-types": "~2.1.19", 1986 | "oauth-sign": "~0.9.0", 1987 | "performance-now": "^2.1.0", 1988 | "qs": "~6.5.2", 1989 | "safe-buffer": "^5.1.2", 1990 | "tough-cookie": "~2.5.0", 1991 | "tunnel-agent": "^0.6.0", 1992 | "uuid": "^3.3.2" 1993 | } 1994 | }, 1995 | "require-directory": { 1996 | "version": "2.1.1", 1997 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1998 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 1999 | "dev": true 2000 | }, 2001 | "require-main-filename": { 2002 | "version": "2.0.0", 2003 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 2004 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", 2005 | "dev": true 2006 | }, 2007 | "requireindex": { 2008 | "version": "1.2.0", 2009 | "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", 2010 | "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==" 2011 | }, 2012 | "resolve": { 2013 | "version": "1.1.7", 2014 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", 2015 | "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", 2016 | "dev": true 2017 | }, 2018 | "resolve-from": { 2019 | "version": "4.0.0", 2020 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2021 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2022 | "dev": true 2023 | }, 2024 | "restore-cursor": { 2025 | "version": "3.1.0", 2026 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", 2027 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", 2028 | "dev": true, 2029 | "requires": { 2030 | "onetime": "^5.1.0", 2031 | "signal-exit": "^3.0.2" 2032 | } 2033 | }, 2034 | "rimraf": { 2035 | "version": "2.6.3", 2036 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 2037 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 2038 | "dev": true, 2039 | "requires": { 2040 | "glob": "^7.1.3" 2041 | } 2042 | }, 2043 | "run-async": { 2044 | "version": "2.4.0", 2045 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.0.tgz", 2046 | "integrity": "sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg==", 2047 | "dev": true, 2048 | "requires": { 2049 | "is-promise": "^2.1.0" 2050 | } 2051 | }, 2052 | "rxjs": { 2053 | "version": "6.5.4", 2054 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.4.tgz", 2055 | "integrity": "sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q==", 2056 | "dev": true, 2057 | "requires": { 2058 | "tslib": "^1.9.0" 2059 | } 2060 | }, 2061 | "safe-buffer": { 2062 | "version": "5.2.1", 2063 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2064 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2065 | "dev": true 2066 | }, 2067 | "safer-buffer": { 2068 | "version": "2.1.2", 2069 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2070 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 2071 | "dev": true 2072 | }, 2073 | "semver": { 2074 | "version": "6.3.0", 2075 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 2076 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 2077 | "dev": true 2078 | }, 2079 | "set-blocking": { 2080 | "version": "2.0.0", 2081 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 2082 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 2083 | "dev": true 2084 | }, 2085 | "shebang-command": { 2086 | "version": "1.2.0", 2087 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 2088 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 2089 | "dev": true, 2090 | "requires": { 2091 | "shebang-regex": "^1.0.0" 2092 | } 2093 | }, 2094 | "shebang-regex": { 2095 | "version": "1.0.0", 2096 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 2097 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 2098 | "dev": true 2099 | }, 2100 | "signal-exit": { 2101 | "version": "3.0.2", 2102 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 2103 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 2104 | "dev": true 2105 | }, 2106 | "slice-ansi": { 2107 | "version": "2.1.0", 2108 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", 2109 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", 2110 | "dev": true, 2111 | "requires": { 2112 | "ansi-styles": "^3.2.0", 2113 | "astral-regex": "^1.0.0", 2114 | "is-fullwidth-code-point": "^2.0.0" 2115 | }, 2116 | "dependencies": { 2117 | "ansi-styles": { 2118 | "version": "3.2.1", 2119 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 2120 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 2121 | "dev": true, 2122 | "requires": { 2123 | "color-convert": "^1.9.0" 2124 | } 2125 | }, 2126 | "is-fullwidth-code-point": { 2127 | "version": "2.0.0", 2128 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2129 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 2130 | "dev": true 2131 | } 2132 | } 2133 | }, 2134 | "source-map": { 2135 | "version": "0.5.7", 2136 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2137 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 2138 | "dev": true 2139 | }, 2140 | "sprintf-js": { 2141 | "version": "1.0.3", 2142 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 2143 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 2144 | "dev": true 2145 | }, 2146 | "sshpk": { 2147 | "version": "1.16.1", 2148 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", 2149 | "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", 2150 | "dev": true, 2151 | "requires": { 2152 | "asn1": "~0.2.3", 2153 | "assert-plus": "^1.0.0", 2154 | "bcrypt-pbkdf": "^1.0.0", 2155 | "dashdash": "^1.12.0", 2156 | "ecc-jsbn": "~0.1.1", 2157 | "getpass": "^0.1.1", 2158 | "jsbn": "~0.1.0", 2159 | "safer-buffer": "^2.0.2", 2160 | "tweetnacl": "~0.14.0" 2161 | } 2162 | }, 2163 | "string-width": { 2164 | "version": "4.2.0", 2165 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", 2166 | "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", 2167 | "dev": true, 2168 | "requires": { 2169 | "emoji-regex": "^8.0.0", 2170 | "is-fullwidth-code-point": "^3.0.0", 2171 | "strip-ansi": "^6.0.0" 2172 | }, 2173 | "dependencies": { 2174 | "strip-ansi": { 2175 | "version": "6.0.0", 2176 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 2177 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 2178 | "dev": true, 2179 | "requires": { 2180 | "ansi-regex": "^5.0.0" 2181 | } 2182 | } 2183 | } 2184 | }, 2185 | "string.prototype.trimend": { 2186 | "version": "1.0.1", 2187 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", 2188 | "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", 2189 | "dev": true, 2190 | "requires": { 2191 | "define-properties": "^1.1.3", 2192 | "es-abstract": "^1.17.5" 2193 | } 2194 | }, 2195 | "string.prototype.trimstart": { 2196 | "version": "1.0.1", 2197 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", 2198 | "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", 2199 | "dev": true, 2200 | "requires": { 2201 | "define-properties": "^1.1.3", 2202 | "es-abstract": "^1.17.5" 2203 | } 2204 | }, 2205 | "strip-ansi": { 2206 | "version": "5.2.0", 2207 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 2208 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 2209 | "dev": true, 2210 | "requires": { 2211 | "ansi-regex": "^4.1.0" 2212 | }, 2213 | "dependencies": { 2214 | "ansi-regex": { 2215 | "version": "4.1.0", 2216 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 2217 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 2218 | "dev": true 2219 | } 2220 | } 2221 | }, 2222 | "strip-json-comments": { 2223 | "version": "3.0.1", 2224 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", 2225 | "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", 2226 | "dev": true 2227 | }, 2228 | "supports-color": { 2229 | "version": "7.1.0", 2230 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", 2231 | "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", 2232 | "dev": true, 2233 | "requires": { 2234 | "has-flag": "^4.0.0" 2235 | }, 2236 | "dependencies": { 2237 | "has-flag": { 2238 | "version": "4.0.0", 2239 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2240 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2241 | "dev": true 2242 | } 2243 | } 2244 | }, 2245 | "table": { 2246 | "version": "5.4.6", 2247 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", 2248 | "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", 2249 | "dev": true, 2250 | "requires": { 2251 | "ajv": "^6.10.2", 2252 | "lodash": "^4.17.14", 2253 | "slice-ansi": "^2.1.0", 2254 | "string-width": "^3.0.0" 2255 | }, 2256 | "dependencies": { 2257 | "ajv": { 2258 | "version": "6.12.0", 2259 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", 2260 | "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", 2261 | "dev": true, 2262 | "requires": { 2263 | "fast-deep-equal": "^3.1.1", 2264 | "fast-json-stable-stringify": "^2.0.0", 2265 | "json-schema-traverse": "^0.4.1", 2266 | "uri-js": "^4.2.2" 2267 | } 2268 | }, 2269 | "emoji-regex": { 2270 | "version": "7.0.3", 2271 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 2272 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 2273 | "dev": true 2274 | }, 2275 | "fast-deep-equal": { 2276 | "version": "3.1.1", 2277 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", 2278 | "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==", 2279 | "dev": true 2280 | }, 2281 | "is-fullwidth-code-point": { 2282 | "version": "2.0.0", 2283 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2284 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 2285 | "dev": true 2286 | }, 2287 | "string-width": { 2288 | "version": "3.1.0", 2289 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 2290 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 2291 | "dev": true, 2292 | "requires": { 2293 | "emoji-regex": "^7.0.1", 2294 | "is-fullwidth-code-point": "^2.0.0", 2295 | "strip-ansi": "^5.1.0" 2296 | } 2297 | } 2298 | } 2299 | }, 2300 | "text-table": { 2301 | "version": "0.2.0", 2302 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 2303 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 2304 | "dev": true 2305 | }, 2306 | "through": { 2307 | "version": "2.3.8", 2308 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 2309 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 2310 | "dev": true 2311 | }, 2312 | "tmp": { 2313 | "version": "0.0.33", 2314 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", 2315 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", 2316 | "dev": true, 2317 | "requires": { 2318 | "os-tmpdir": "~1.0.2" 2319 | } 2320 | }, 2321 | "to-fast-properties": { 2322 | "version": "2.0.0", 2323 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 2324 | "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", 2325 | "dev": true 2326 | }, 2327 | "to-regex-range": { 2328 | "version": "5.0.1", 2329 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2330 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2331 | "dev": true, 2332 | "requires": { 2333 | "is-number": "^7.0.0" 2334 | } 2335 | }, 2336 | "tough-cookie": { 2337 | "version": "2.5.0", 2338 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 2339 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 2340 | "dev": true, 2341 | "requires": { 2342 | "psl": "^1.1.28", 2343 | "punycode": "^2.1.1" 2344 | } 2345 | }, 2346 | "tslib": { 2347 | "version": "1.11.1", 2348 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", 2349 | "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==", 2350 | "dev": true 2351 | }, 2352 | "tunnel-agent": { 2353 | "version": "0.6.0", 2354 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 2355 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 2356 | "dev": true, 2357 | "requires": { 2358 | "safe-buffer": "^5.0.1" 2359 | } 2360 | }, 2361 | "tweetnacl": { 2362 | "version": "0.14.5", 2363 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 2364 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", 2365 | "dev": true 2366 | }, 2367 | "type-check": { 2368 | "version": "0.3.2", 2369 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", 2370 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", 2371 | "dev": true, 2372 | "requires": { 2373 | "prelude-ls": "~1.1.2" 2374 | } 2375 | }, 2376 | "type-fest": { 2377 | "version": "0.8.1", 2378 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 2379 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 2380 | "dev": true 2381 | }, 2382 | "uglify-js": { 2383 | "version": "3.4.9", 2384 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", 2385 | "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", 2386 | "dev": true, 2387 | "optional": true, 2388 | "requires": { 2389 | "commander": "~2.17.1", 2390 | "source-map": "~0.6.1" 2391 | }, 2392 | "dependencies": { 2393 | "source-map": { 2394 | "version": "0.6.1", 2395 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2396 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2397 | "dev": true, 2398 | "optional": true 2399 | } 2400 | } 2401 | }, 2402 | "uri-js": { 2403 | "version": "4.2.2", 2404 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 2405 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 2406 | "dev": true, 2407 | "requires": { 2408 | "punycode": "^2.1.0" 2409 | } 2410 | }, 2411 | "uuid": { 2412 | "version": "3.4.0", 2413 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 2414 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", 2415 | "dev": true 2416 | }, 2417 | "v8-compile-cache": { 2418 | "version": "2.1.0", 2419 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", 2420 | "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", 2421 | "dev": true 2422 | }, 2423 | "verror": { 2424 | "version": "1.10.0", 2425 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 2426 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", 2427 | "dev": true, 2428 | "requires": { 2429 | "assert-plus": "^1.0.0", 2430 | "core-util-is": "1.0.2", 2431 | "extsprintf": "^1.2.0" 2432 | } 2433 | }, 2434 | "which": { 2435 | "version": "1.3.1", 2436 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2437 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2438 | "dev": true, 2439 | "requires": { 2440 | "isexe": "^2.0.0" 2441 | } 2442 | }, 2443 | "which-module": { 2444 | "version": "2.0.0", 2445 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 2446 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", 2447 | "dev": true 2448 | }, 2449 | "wide-align": { 2450 | "version": "1.1.3", 2451 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", 2452 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", 2453 | "dev": true, 2454 | "requires": { 2455 | "string-width": "^1.0.2 || 2" 2456 | }, 2457 | "dependencies": { 2458 | "ansi-regex": { 2459 | "version": "3.0.0", 2460 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 2461 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 2462 | "dev": true 2463 | }, 2464 | "is-fullwidth-code-point": { 2465 | "version": "2.0.0", 2466 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2467 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 2468 | "dev": true 2469 | }, 2470 | "string-width": { 2471 | "version": "2.1.1", 2472 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 2473 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 2474 | "dev": true, 2475 | "requires": { 2476 | "is-fullwidth-code-point": "^2.0.0", 2477 | "strip-ansi": "^4.0.0" 2478 | } 2479 | }, 2480 | "strip-ansi": { 2481 | "version": "4.0.0", 2482 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 2483 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 2484 | "dev": true, 2485 | "requires": { 2486 | "ansi-regex": "^3.0.0" 2487 | } 2488 | } 2489 | } 2490 | }, 2491 | "word-wrap": { 2492 | "version": "1.2.3", 2493 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 2494 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 2495 | "dev": true 2496 | }, 2497 | "wordwrap": { 2498 | "version": "1.0.0", 2499 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", 2500 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", 2501 | "dev": true 2502 | }, 2503 | "wrap-ansi": { 2504 | "version": "5.1.0", 2505 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", 2506 | "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", 2507 | "dev": true, 2508 | "requires": { 2509 | "ansi-styles": "^3.2.0", 2510 | "string-width": "^3.0.0", 2511 | "strip-ansi": "^5.0.0" 2512 | }, 2513 | "dependencies": { 2514 | "ansi-styles": { 2515 | "version": "3.2.1", 2516 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 2517 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 2518 | "dev": true, 2519 | "requires": { 2520 | "color-convert": "^1.9.0" 2521 | } 2522 | }, 2523 | "emoji-regex": { 2524 | "version": "7.0.3", 2525 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 2526 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 2527 | "dev": true 2528 | }, 2529 | "is-fullwidth-code-point": { 2530 | "version": "2.0.0", 2531 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2532 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 2533 | "dev": true 2534 | }, 2535 | "string-width": { 2536 | "version": "3.1.0", 2537 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 2538 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 2539 | "dev": true, 2540 | "requires": { 2541 | "emoji-regex": "^7.0.1", 2542 | "is-fullwidth-code-point": "^2.0.0", 2543 | "strip-ansi": "^5.1.0" 2544 | } 2545 | } 2546 | } 2547 | }, 2548 | "wrappy": { 2549 | "version": "1.0.2", 2550 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2551 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2552 | "dev": true 2553 | }, 2554 | "write": { 2555 | "version": "1.0.3", 2556 | "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", 2557 | "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", 2558 | "dev": true, 2559 | "requires": { 2560 | "mkdirp": "^0.5.1" 2561 | } 2562 | }, 2563 | "y18n": { 2564 | "version": "4.0.3", 2565 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", 2566 | "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", 2567 | "dev": true 2568 | }, 2569 | "yargs": { 2570 | "version": "13.3.2", 2571 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", 2572 | "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", 2573 | "dev": true, 2574 | "requires": { 2575 | "cliui": "^5.0.0", 2576 | "find-up": "^3.0.0", 2577 | "get-caller-file": "^2.0.1", 2578 | "require-directory": "^2.1.1", 2579 | "require-main-filename": "^2.0.0", 2580 | "set-blocking": "^2.0.0", 2581 | "string-width": "^3.0.0", 2582 | "which-module": "^2.0.0", 2583 | "y18n": "^4.0.0", 2584 | "yargs-parser": "^13.1.2" 2585 | }, 2586 | "dependencies": { 2587 | "emoji-regex": { 2588 | "version": "7.0.3", 2589 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 2590 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 2591 | "dev": true 2592 | }, 2593 | "is-fullwidth-code-point": { 2594 | "version": "2.0.0", 2595 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2596 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 2597 | "dev": true 2598 | }, 2599 | "string-width": { 2600 | "version": "3.1.0", 2601 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 2602 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 2603 | "dev": true, 2604 | "requires": { 2605 | "emoji-regex": "^7.0.1", 2606 | "is-fullwidth-code-point": "^2.0.0", 2607 | "strip-ansi": "^5.1.0" 2608 | } 2609 | } 2610 | } 2611 | }, 2612 | "yargs-parser": { 2613 | "version": "13.1.2", 2614 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", 2615 | "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", 2616 | "dev": true, 2617 | "requires": { 2618 | "camelcase": "^5.0.0", 2619 | "decamelize": "^1.2.0" 2620 | } 2621 | }, 2622 | "yargs-unparser": { 2623 | "version": "1.6.0", 2624 | "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", 2625 | "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", 2626 | "dev": true, 2627 | "requires": { 2628 | "flat": "^4.1.0", 2629 | "lodash": "^4.17.15", 2630 | "yargs": "^13.3.0" 2631 | } 2632 | } 2633 | } 2634 | } 2635 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eslint-plugin-no-constructor-bind", 3 | "version": "2.0.4", 4 | "description": "Prefer class arrow methods to binding in the constructor", 5 | "main": "lib/index.js", 6 | "repository": { 7 | "type": "git", 8 | "url": "https://github.com/markalfred/eslint-plugin-no-constructor-bind.git" 9 | }, 10 | "bugs": { 11 | "url": "https://github.com/markalfred/eslint-plugin-no-constructor-bind/issues" 12 | }, 13 | "directories": { 14 | "doc": "docs", 15 | "lib": "lib", 16 | "test": "tests" 17 | }, 18 | "dependencies": { 19 | "requireindex": "~1.2.0" 20 | }, 21 | "devDependencies": { 22 | "babel-eslint": "^10.0.0", 23 | "coveralls": "^3.1.0", 24 | "eslint": "^6.8.0", 25 | "istanbul": "^0.4.5", 26 | "mocha": "^7.2.0", 27 | "mocha-lcov-reporter": "^1.3.0" 28 | }, 29 | "scripts": { 30 | "test": "mocha tests --recursive", 31 | "coverage": "istanbul cover _mocha -- tests --recursive", 32 | "precoveralls": "npm run coverage -- --report lcovonly", 33 | "coveralls": "cat ./coverage/lcov.info | coveralls", 34 | "postcoveralls": "rm -rf ./coverage" 35 | }, 36 | "keywords": [ 37 | "eslint", 38 | "eslintplugin", 39 | "eslint-plugin" 40 | ], 41 | "engines": { 42 | "node": ">=8.0.0" 43 | }, 44 | "author": "Mark Battersby", 45 | "license": "ISC" 46 | } 47 | -------------------------------------------------------------------------------- /tests/lib/rules/no-constructor-bind.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileoverview Use class arrow methods instead of binding in the constructor 3 | * @author Mark Battersby 4 | */ 5 | 'use strict' 6 | 7 | //------------------------------------------------------------------------------ 8 | // Requirements 9 | //------------------------------------------------------------------------------ 10 | 11 | var rule = require('../../../lib/rules/no-constructor-bind'), 12 | RuleTester = require('eslint').RuleTester 13 | 14 | RuleTester.setDefaultConfig({ parser: require.resolve('babel-eslint') }) 15 | 16 | //------------------------------------------------------------------------------ 17 | // Tests 18 | //------------------------------------------------------------------------------ 19 | 20 | var error = { 21 | type: 'AssignmentExpression', 22 | message: 'use arrow functions instead of binding in the constructor' 23 | } 24 | 25 | var ruleTester = new RuleTester() 26 | ruleTester.run('no-constructor-bind', rule, { 27 | valid: [ 28 | 'class myClass { myFunction = () => {} }', 29 | 'myClass = class { myFunction = () => {} }', 30 | 31 | 'class myClass { constructor() { this.myFunction = this.myFunction.bind({ foo: "bar" }) } }', 32 | 'myClass = class { constructor() { this.myFunction = this.myFunction.bind({ foo: "bar" }) } }', 33 | 34 | 'class firstClass { myFunction = () => {} } class secondClass { myFunction = () => {} }', 35 | 'firstClass = class { myFunction = () => {} }; class secondClass { myFunction = () => {} }', 36 | 'firstClass = class { myFunction = () => {} }; secondClass = class { myFunction = () => {} }', 37 | 38 | 'class myClass { constructor() { this.myFn = this.fns.myFn.bind(this) } fns = { myFn: function() {} } }', 39 | 'class myClass { constructor() { this.myFunction = myFunction.bind(this) } }', 40 | 41 | 'class myClass { myFunction() { return class { constructor() {} } } }' 42 | ], 43 | 44 | invalid: [ 45 | { 46 | code: 47 | 'class myClass { constructor() { this.myFunction = this.myFunction.bind(this) } myFunction() {} }', 48 | output: 49 | 'class myClass { constructor() { } myFunction = () => {} }', 50 | errors: [error] 51 | }, 52 | { 53 | code: 54 | 'myClass = class { constructor() { this.myFunction = this.myFunction.bind(this) } myFunction() {} }', 55 | output: 56 | 'myClass = class { constructor() { } myFunction = () => {} }', 57 | errors: [error] 58 | }, 59 | { 60 | code: 61 | 'class myClass { constructor() { this.myFunction = this.myFunction.bind(this) } myFunction(arg1) {} }', 62 | output: 63 | 'class myClass { constructor() { } myFunction = (arg1) => {} }', 64 | errors: [error] 65 | }, 66 | { 67 | code: 68 | 'class myClass { constructor() { this.myFunction = this.myFunction.bind(this) } async myFunction() {} }', 69 | output: 70 | 'class myClass { constructor() { } myFunction = async () => {} }', 71 | errors: [error] 72 | }, 73 | { 74 | // Method cannot be converted to arrow function because it doesn't exist. So bind should not be removed. 75 | code: 76 | 'class myClass { constructor() { this.myFunction = this.myFunction.bind(this) } }', 77 | output: 78 | 'class myClass { constructor() { this.myFunction = this.myFunction.bind(this) } }', 79 | errors: [error] 80 | }, 81 | { 82 | // Method is already an arrow function. Maybe bind should not be removed? 83 | code: 84 | 'class myClass { constructor() { this.myFunction = this.myFunction.bind(this) } myFunction = () => {} }', 85 | output: 86 | 'class myClass { constructor() { this.myFunction = this.myFunction.bind(this) } myFunction = () => {} }', 87 | errors: [error] 88 | }, 89 | { 90 | // Should handle multiple classes. 91 | code: 92 | `class firstClass { constructor() { this.myFunction = this.myFunction.bind(this) } myFunction() {} } 93 | class secondClass { constructor() { this.myFunction = this.myFunction.bind(this) } myFunction() {} }`, 94 | output: 95 | `class firstClass { constructor() { } myFunction = () => {} } 96 | class secondClass { constructor() { } myFunction = () => {} }`, 97 | errors: [error, error] 98 | }, 99 | { 100 | // Should handle semicolons. 101 | code: 102 | 'class myClass { constructor() { this.myFunction = this.myFunction.bind(this); }; myFunction() {}; };', 103 | output: 104 | 'class myClass { constructor() { }; myFunction = () => {}; };', 105 | errors: [error] 106 | }, 107 | // Should handle multi-line params 108 | { 109 | code: 110 | `class myClass { 111 | constructor() { this.myFunction = this.myFunction.bind(this) } 112 | myFunction( 113 | arg1, 114 | arg2, 115 | arg3 116 | ) {} 117 | }`, 118 | output: 119 | `class myClass { 120 | constructor() { } 121 | myFunction = ( 122 | arg1, 123 | arg2, 124 | arg3 125 | ) => {} 126 | }`, 127 | errors: [error] 128 | }, 129 | { 130 | // Should handle anonymous classes 131 | code: 132 | 'class myClass { constructor() { return class { constructor() { this.myFunction = this.myFunction.bind(this) } myFunction() {} } } }', 133 | output: 134 | 'class myClass { constructor() { return class { constructor() { } myFunction = () => {} } } }', 135 | errors: [error] 136 | } 137 | ] 138 | }) 139 | -------------------------------------------------------------------------------- /tests/lib/rules/no-constructor-state.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileoverview Use class arrow methods instead of binding in the constructor 3 | * @author Mark Battersby 4 | */ 5 | 'use strict' 6 | 7 | //------------------------------------------------------------------------------ 8 | // Requirements 9 | //------------------------------------------------------------------------------ 10 | 11 | var rule = require('../../../lib/rules/no-constructor-state'), 12 | RuleTester = require('eslint').RuleTester 13 | 14 | RuleTester.setDefaultConfig({ parser: require.resolve('babel-eslint') }) 15 | 16 | //------------------------------------------------------------------------------ 17 | // Tests 18 | //------------------------------------------------------------------------------ 19 | 20 | var error = { 21 | type: 'AssignmentExpression', 22 | message: "Don't set initial state in the constructor" 23 | } 24 | 25 | var ruleTester = new RuleTester() 26 | ruleTester.run('no-constructor-state', rule, { 27 | valid: [ 28 | 'class myClass { state = { foo: "bar" } }', 29 | 'class myClass { constructor() { this.notState = { foo: "bar" } } }', 30 | 'class myClass { constructor() { this.notState = { foo: "bar" } } state = { foo: "bar" } }', 31 | // Shouldn't flag on complex state creation in constructor 32 | 'class myClass { constructor() { const bar = 1; this.state = { foo: bar } } }', 33 | 'class myClass { constructor(props) { this.state = { ...props } } }', 34 | 'class myClass { constructor(props) { this.state = [ ...props ] } }', 35 | 'class myClass { constructor(props) { this.state = { foo: { ...props } } } }', 36 | 'class myClass { constructor(props) { this.state = { foo: [ ...props ] } } }', 37 | 'class myClass { constructor(props) { this.state = { foo: props.foo } } }', 38 | 'class myClass { constructor(props) { this.state = { foo: _.defaults(props, { bar: "baz" }) } } }' 39 | ], 40 | 41 | invalid: [ 42 | { 43 | // Should handle simple literals 44 | code: 45 | 'class myClass { constructor() { this.state = { foo: "bar" } } }', 46 | output: 47 | 'class myClass { constructor() { } state = { foo: "bar" } }', 48 | errors: [error] 49 | }, 50 | { 51 | // Should handle nested literals 52 | code: 53 | 'class myClass { constructor() { this.state = { foo: { bar: "baz" } } } }', 54 | output: 55 | 'class myClass { constructor() { } state = { foo: { bar: "baz" } } }', 56 | errors: [error] 57 | }, 58 | { 59 | // Should handle deeply nested literals 60 | code: 61 | 'class myClass { constructor() { this.state = { foo: { bar: { baz: "buzz" } } } } }', 62 | output: 63 | 'class myClass { constructor() { } state = { foo: { bar: { baz: "buzz" } } } }', 64 | errors: [error] 65 | }, 66 | { 67 | // Should handle arrays made up of literals 68 | code: 69 | 'class myClass { constructor() { this.state = { foo: [0, 1, "", "foo", true, false, null, undefined, NaN, Infinity] } } }', 70 | output: 71 | 'class myClass { constructor() { } state = { foo: [0, 1, "", "foo", true, false, null, undefined, NaN, Infinity] } }', 72 | errors: [error] 73 | }, 74 | { 75 | // Should handle multiple classes. 76 | code: 77 | `class firstClass { constructor() { this.state = { foo: "bar" } } } 78 | class secondClass { constructor() { this.state = { foo: "bar" } } }`, 79 | output: 80 | `class firstClass { constructor() { } state = { foo: "bar" } } 81 | class secondClass { constructor() { } state = { foo: "bar" } }`, 82 | errors: [error, error] 83 | }, 84 | { 85 | // Infers that state should be separated by a newline. 86 | code: 87 | `class myClass { 88 | constructor() { 89 | super() 90 | this.state = { foo: "bar" } 91 | } 92 | }`, 93 | 94 | output: 95 | `class myClass { 96 | constructor() { 97 | super() 98 | ` + ` 99 | } 100 | 101 | state = { foo: "bar" } 102 | }`, 103 | errors: [error] 104 | } 105 | ] 106 | }) 107 | --------------------------------------------------------------------------------