diff --git a/.eslintrc.js b/.eslintrc.js index 9670ee74a4..2692f24c76 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -42,10 +42,10 @@ module.exports = { // possible errors "array-callback-return": "error", "consistent-return": "error", - // "default-case": "error", // to be enabled after fixing issues in our code + "default-case": "error", "dot-notation": "error", "eqeqeq": "error", - // "for-direction": "error", // to be enabled after we upgrade eslint + "for-direction": "error", "no-alert": "error", "no-caller": "error", "no-eval": "error", @@ -58,8 +58,7 @@ module.exports = { "no-self-compare": "error", "no-throw-literal": "error", "no-unmodified-loop-condition": "error", - // "no-unused-expression": "error", // to be enabled after we upgrade eslint - // "no-use-before-define": "error", // to be enabled after fixing issues in our code + "no-unused-expressions": "error", "no-useless-call": "error", "no-useless-computed-key": "error", "no-useless-concat": "error", @@ -70,8 +69,8 @@ module.exports = { "no-void": "error", "no-with": "error", "prefer-const": "error", - // "prefer-promise-reject-errors": "error", // to be enabled after fixing issues in our code - // "prefer-rest-params": "error", // to be enabled after fixing issues in our code + "prefer-promise-reject-errors": "error", + "prefer-rest-params": "error", "prefer-spread": "error", }, "settings": { diff --git a/package.json b/package.json index 50dc9bdf4b..98c544ab92 100644 --- a/package.json +++ b/package.json @@ -98,13 +98,12 @@ "babel-preset-react-hmre": "^1.1.1", "css-loader": "^0.28.4", "devtools-license-check": "^0.2.0", - "eslint": "^3.10.2", - "eslint-config-google": "^0.6.0", - "eslint-config-prettier": "^2.2.0", + "eslint": "^4.1.1", + "eslint-config-prettier": "^2.3.0", "eslint-plugin-flowtype": "^2.34.1", "eslint-plugin-import": "^2.6.1", "eslint-plugin-prettier": "^2.1.2", - "eslint-plugin-react": "^6.4.0", + "eslint-plugin-react": "^7.1.0", "express": "^4.15.3", "fake-indexeddb": "^1.0.12", "file-loader": "^0.11.2", diff --git a/src/actions/icons.js b/src/actions/icons.js index 77fef5d90d..faaa73f19d 100644 --- a/src/actions/icons.js +++ b/src/actions/icons.js @@ -56,7 +56,10 @@ export function iconStartLoading(icon: string): ThunkAction> { dispatch(iconIsInError(icon)); break; case 'cached': - // nothing to do + // nothing to do + break; + default: + throw new Error(`Unknown icon load result ${result}`); } }); }; diff --git a/src/components/app/Home.js b/src/components/app/Home.js index d9eead738d..22dbf05dc3 100644 --- a/src/components/app/Home.js +++ b/src/components/app/Home.js @@ -251,7 +251,7 @@ class Home extends PureComponent { Gecko Profiler Add-on . Then use the button added to the browser, or use - the following shortcuts to record a profile. The button's icon is + the following shortcuts to record a profile. The button’s icon is blue when a profile is recording. Hit Capture Profile to load the data into perf.html.

diff --git a/src/components/app/Root.js b/src/components/app/Root.js index a6e4d12a24..ad2f679790 100644 --- a/src/components/app/Root.js +++ b/src/components/app/Root.js @@ -93,6 +93,8 @@ class ProfileViewWhenReadyImpl extends PureComponent { case 'from-url': retrieveProfileFromUrl(profileURL); break; + default: + throw new Error(`Unknown datasource ${dataSource}`); } } diff --git a/src/components/calltree/ProfileCallTreeContextMenu.js b/src/components/calltree/ProfileCallTreeContextMenu.js index 052403e481..075a7f2477 100644 --- a/src/components/calltree/ProfileCallTreeContextMenu.js +++ b/src/components/calltree/ProfileCallTreeContextMenu.js @@ -24,6 +24,7 @@ type Props = { }; class ProfileCallTreeContextMenu extends PureComponent { + props: Props; constructor(props: Props) { super(props); (this: any).handleClick = this.handleClick.bind(this); @@ -63,7 +64,10 @@ class ProfileCallTreeContextMenu extends PureComponent { copy(stack); } - handleClick(event: SyntheticEvent, data: { type: string }): void { + handleClick( + event: SyntheticEvent, + data: { type: 'copyFunctionName' | 'copyStack' } + ): void { switch (data.type) { case 'copyFunctionName': this.copyFunctionName(); @@ -71,6 +75,8 @@ class ProfileCallTreeContextMenu extends PureComponent { case 'copyStack': this.copyStack(); break; + default: + throw new Error(`Unknown type ${data.type}`); } } diff --git a/src/components/header/ThreadStackGraph.js b/src/components/header/ThreadStackGraph.js index f5e0fc10ec..0d058e1fd7 100644 --- a/src/components/header/ThreadStackGraph.js +++ b/src/components/header/ThreadStackGraph.js @@ -14,6 +14,7 @@ class ThreadStackGraph extends PureComponent { this._requestedAnimationFrame = false; this._onMouseUp = this._onMouseUp.bind(this); this._onMarkerSelected = this._onMarkerSelected.bind(this); + this._canvas = null; } _scheduleDraw() { @@ -21,9 +22,9 @@ class ThreadStackGraph extends PureComponent { this._requestedAnimationFrame = true; window.requestAnimationFrame(() => { this._requestedAnimationFrame = false; - if (this.refs.canvas) { + if (this._canvas) { timeCode('ThreadStackGraph render', () => { - this.drawCanvas(this.refs.canvas); + this.drawCanvas(this._canvas); }); } }); @@ -31,13 +32,13 @@ class ThreadStackGraph extends PureComponent { } componentDidMount() { - const win = this.refs.canvas.ownerDocument.defaultView; + const win = this._canvas.ownerDocument.defaultView; win.addEventListener('resize', this._resizeListener); this.forceUpdate(); // for initial size } componentWillUnmount() { - const win = this.refs.canvas.ownerDocument.defaultView; + const win = this._canvas.ownerDocument.defaultView; win.removeEventListener('resize', this._resizeListener); } @@ -121,7 +122,7 @@ class ThreadStackGraph extends PureComponent { _onMouseUp(e) { if (this.props.onClick) { const { rangeStart, rangeEnd } = this.props; - const r = this.refs.canvas.getBoundingClientRect(); + const r = this._canvas.getBoundingClientRect(); const x = e.pageX - r.left; const time = rangeStart + x / r.width * (rangeEnd - rangeStart); @@ -145,7 +146,7 @@ class ThreadStackGraph extends PureComponent { `${this.props.className}Canvas`, 'threadStackGraphCanvas' )} - ref="canvas" + ref={ref => (this._canvas = ref)} onMouseUp={this._onMouseUp} /> diff --git a/src/components/markers/ProfileMarkersView.js b/src/components/markers/ProfileMarkersView.js index 60ea0aa5ce..1b46707cb9 100644 --- a/src/components/markers/ProfileMarkersView.js +++ b/src/components/markers/ProfileMarkersView.js @@ -99,6 +99,7 @@ class ProfileMarkersView extends PureComponent { this._expandedNodeIds = []; this._onExpandedNodeIdsChange = () => {}; this._onSelectionChange = this._onSelectionChange.bind(this); + this._treeView = null; } componentDidMount() { @@ -106,7 +107,7 @@ class ProfileMarkersView extends PureComponent { } focus() { - this.refs.treeView.focus(); + this._treeView.focus(); } _onSelectionChange(selectedMarker) { @@ -127,7 +128,7 @@ class ProfileMarkersView extends PureComponent { onExpandedNodesChange={this._onExpandedNodeIdsChange} selectedNodeId={selectedMarker} expandedNodeIds={this._expandedNodeIds} - ref="treeView" + ref={ref => (this._treeView = ref)} /> ); diff --git a/src/components/summary/SummarizeLineGraph.js b/src/components/summary/SummarizeLineGraph.js index 73353c22f6..407b56be14 100644 --- a/src/components/summary/SummarizeLineGraph.js +++ b/src/components/summary/SummarizeLineGraph.js @@ -87,11 +87,13 @@ class SummarizeLineGraph extends PureComponent { x2="0%" y2="100%" > - // Red - // Dark Green - // Light Green - // - Transparent + + + + ; } diff --git a/src/components/timeline/TimelineMarkerCanvas.js b/src/components/timeline/TimelineMarkerCanvas.js index 8c82929d7c..d7e42a77f8 100644 --- a/src/components/timeline/TimelineMarkerCanvas.js +++ b/src/components/timeline/TimelineMarkerCanvas.js @@ -320,7 +320,9 @@ class TimelineMarkerCanvas extends PureComponent { switch (data.type) { case 'UserTiming': { tooltipName = data.name; + break; } + default: } } diff --git a/src/components/timeline/TimelineViewport.js b/src/components/timeline/TimelineViewport.js index 51902f0c7a..74ea55afb7 100644 --- a/src/components/timeline/TimelineViewport.js +++ b/src/components/timeline/TimelineViewport.js @@ -574,6 +574,7 @@ function getNormalizedScrollDelta( return delta * pageHeight; case DOM_DELTA_LINE: return delta * SCROLL_LINE_SIZE; + default: } // Scroll by pixel. return delta; diff --git a/src/profile-logic/marker-timing.js b/src/profile-logic/marker-timing.js index e0b3ed5c07..000ae59d75 100644 --- a/src/profile-logic/marker-timing.js +++ b/src/profile-logic/marker-timing.js @@ -129,6 +129,7 @@ function computeMarkerLabel(data: MarkerPayload): string { switch (data.type) { case 'UserTiming': return (data: UserTimingMarkerPayload).name; + default: } } diff --git a/src/profile-logic/profile-data.js b/src/profile-logic/profile-data.js index 9009f028f7..6605249c43 100644 --- a/src/profile-logic/profile-data.js +++ b/src/profile-logic/profile-data.js @@ -198,8 +198,9 @@ export function filterThreadByImplementation( thread, funcIndex => funcTable.isJS[funcIndex] ); + default: + return thread; } - return thread; } function _filterThreadByFunc( @@ -937,8 +938,11 @@ export function getFriendlyThreadName( case 'plugin': label = 'Plugin'; break; + default: + // should we throw here ? } break; + default: } if (!label) { diff --git a/src/profile-logic/profile-store.js b/src/profile-logic/profile-store.js index 3bc7ea2855..6269105eb1 100644 --- a/src/profile-logic/profile-store.js +++ b/src/profile-logic/profile-store.js @@ -14,13 +14,17 @@ export function uploadBinaryProfileData( resolve(xhr.responseText); } else { reject( - `xhr onload with status != 200, xhr.statusText: ${xhr.statusText}` + new Error( + `xhr onload with status != 200, xhr.statusText: ${xhr.statusText}` + ) ); } }; xhr.onerror = () => { - reject(`xhr onerror was called, xhr.statusText: ${xhr.statusText}`); + reject( + new Error(`xhr onerror was called, xhr.statusText: ${xhr.statusText}`) + ); }; xhr.upload.onprogress = e => { diff --git a/src/reducers/flame-chart.js b/src/reducers/flame-chart.js index 371c6c5d2c..9efde28f38 100644 --- a/src/reducers/flame-chart.js +++ b/src/reducers/flame-chart.js @@ -18,16 +18,18 @@ function categoryColorStrategy( switch (action.type) { case 'CHANGE_FLAME_CHART_COLOR_STRATEGY': return action.getCategory; + default: + return state; } - return state; } function labelingStrategy(state: GetLabel = getFunctionName, action: Action) { switch (action.type) { case 'CHANGE_FLAME_CHART_LABELING_STRATEGY': return action.getLabel; + default: + return state; } - return state; } export default combineReducers({ categoryColorStrategy, labelingStrategy }); diff --git a/src/reducers/timeline-view.js b/src/reducers/timeline-view.js index c23f59947b..a204bd0ac9 100644 --- a/src/reducers/timeline-view.js +++ b/src/reducers/timeline-view.js @@ -27,8 +27,9 @@ function isFlameChartExpanded( newState.set(action.threadIndex, action.isExpanded); return newState; } + default: + return state; } - return state; } function areMarkersExpanded( @@ -41,8 +42,9 @@ function areMarkersExpanded( newState.set(action.threadIndex, action.isExpanded); return newState; } + default: + return state; } - return state; } function hasZoomedViaMousewheel(state: boolean = false, action: Action) { @@ -50,8 +52,9 @@ function hasZoomedViaMousewheel(state: boolean = false, action: Action) { case 'HAS_ZOOMED_VIA_MOUSEWHEEL': { return true; } + default: + return state; } - return state; } export default combineReducers({ diff --git a/src/test/fixtures/fake-symbol-store.js b/src/test/fixtures/fake-symbol-store.js index 8b2bac0ec6..9e5cd2d1fd 100644 --- a/src/test/fixtures/fake-symbol-store.js +++ b/src/test/fixtures/fake-symbol-store.js @@ -19,7 +19,7 @@ export class FakeSymbolStore { if (lib.debugName in this._symbolTables) { return Promise.resolve(this._symbolTables[lib.debugName].addrs); } - return Promise.reject(); + return Promise.reject(new Error()); } getSymbolsForAddressesInLib(requestedAddressesIndices, lib) { @@ -29,6 +29,6 @@ export class FakeSymbolStore { requestedAddressesIndices.map(index => syms[index]) ); } - return Promise.reject(); + return Promise.reject(new Error()); } } diff --git a/src/url-handling.js b/src/url-handling.js index eec6b5e308..7be54c8971 100644 --- a/src/url-handling.js +++ b/src/url-handling.js @@ -91,6 +91,7 @@ export function urlFromState(urlState: URLState) { ? null : undefined; break; + default: } const qString = queryString.stringify(query); return pathname + (qString ? '?' + qString : ''); @@ -106,9 +107,9 @@ function toDataSourceEnum(str: string): DataSource { case 'public': case 'from-url': return str; + default: + throw new Error(`Unexpected data source ${str}`); } - - throw new Error('unexpected data source'); } /** diff --git a/src/utils/async-storage.js b/src/utils/async-storage.js index 1baf7ddc1e..ebe6e97fbb 100644 --- a/src/utils/async-storage.js +++ b/src/utils/async-storage.js @@ -87,7 +87,9 @@ export function getStore(dbName) { }; req = store.get(key); req.onerror = function getItemOnError() { - reject('Error in asyncStorage.getItem(): ', req.error.name); + reject( + new Error(`Error in asyncStorage.getItem(): ${req.error.name}`) + ); }; }, reject @@ -103,7 +105,9 @@ export function getStore(dbName) { store.transaction.oncomplete = resolve; const req = store.put(value, key); req.onerror = function setItemOnError() { - reject('Error in asyncStorage.setItem(): ', req.error.name); + reject( + new Error(`Error in asyncStorage.setItem(): ${req.error.name}`) + ); }; }, reject @@ -119,7 +123,9 @@ export function getStore(dbName) { store.transaction.oncomplete = resolve; const req = store.delete(key); req.onerror = function removeItemOnError() { - reject('Error in asyncStorage.removeItem(): ', req.error.name); + reject( + new Error(`Error in asyncStorage.removeItem(): ${req.error.name}`) + ); }; }, reject @@ -135,7 +141,9 @@ export function getStore(dbName) { store.transaction.oncomplete = resolve; const req = store.clear(); req.onerror = function clearOnError() { - reject('Error in asyncStorage.clear(): ', req.error.name); + reject( + new Error(`Error in asyncStorage.clear(): ${req.error.name}`) + ); }; }, reject @@ -154,7 +162,9 @@ export function getStore(dbName) { }; req = store.count(); req.onerror = function lengthOnError() { - reject('Error in asyncStorage.length(): ', req.error.name); + reject( + new Error(`Error in asyncStorage.length(): ${req.error.name}`) + ); }; }, reject @@ -196,7 +206,7 @@ export function getStore(dbName) { cursor.advance(n); }; req.onerror = function keyOnError() { - reject('Error in asyncStorage.key(): ', req.error.name); + reject(new Error(`Error in asyncStorage.key(): ${req.error.name}`)); }; }, reject diff --git a/src/utils/promise-worker.js b/src/utils/promise-worker.js index 2c32de62bf..f43638d247 100644 --- a/src/utils/promise-worker.js +++ b/src/utils/promise-worker.js @@ -4,9 +4,7 @@ import Worker from './worker-factory'; export function provideHostSide(workerFilename, methods) { - return function HostClass() { - const constructorArguments = Array.from(arguments); - + return function HostClass(...constructorArguments) { const worker = new Worker(workerFilename); const callbacks = new Map(); // msgID -> { resolve, reject } let nextMessageID = 0; diff --git a/yarn.lock b/yarn.lock index 6268790590..e662675369 100644 --- a/yarn.lock +++ b/yarn.lock @@ -107,10 +107,14 @@ ansi-escape-sequences@^3.0.0: dependencies: array-back "^1.0.3" -ansi-escapes@^1.0.0, ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: +ansi-escapes@^1.0.0, ansi-escapes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" +ansi-escapes@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-2.0.0.tgz#5bae52be424878dd9783e8910e3fc2922e83c81b" + ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" @@ -256,13 +260,6 @@ array.prototype.find@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-1.0.0.tgz#52d81768eb1c5692577ee29d96ca603dc76eb3a6" -array.prototype.find@^2.0.1: - version "2.0.4" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.4.tgz#556a5c5362c08648323ddaeb9de9d14bc1864c90" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - array.prototype.findindex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array.prototype.findindex/-/array.prototype.findindex-1.0.0.tgz#1966efa59f7cd281114d37ef542f51201e72b8fd" @@ -363,7 +360,7 @@ babel-cli@^6.24.0: optionalDependencies: chokidar "^1.6.1" -babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: +babel-code-frame@^6.11.0, babel-code-frame@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" dependencies: @@ -1345,12 +1342,18 @@ clean-css@4.1.x: dependencies: source-map "0.5.x" -cli-cursor@^1.0.1, cli-cursor@^1.0.2: +cli-cursor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" dependencies: restore-cursor "^1.0.1" +cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + cli-spinners@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" @@ -1519,7 +1522,7 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@^1.5.2: +concat-stream@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -1984,7 +1987,7 @@ dns-txt@^2.0.2: dependencies: buffer-indexof "^1.0.0" -doctrine@1.5.0, doctrine@^1.2.2: +doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" dependencies: @@ -2150,7 +2153,7 @@ error-stack-parser@^1.3.6: dependencies: stackframe "^0.3.1" -es-abstract@^1.4.3, es-abstract@^1.5.0, es-abstract@^1.7.0: +es-abstract@^1.4.3, es-abstract@^1.5.0: version "1.7.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" dependencies: @@ -2247,22 +2250,12 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-config-google@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/eslint-config-google/-/eslint-config-google-0.6.0.tgz#c542ec18fb3247983ac16bba31662d01625b763f" - dependencies: - eslint-config-xo "^0.13.0" - -eslint-config-prettier@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.2.0.tgz#ca47663852789a75c10feba673e802cc1eff085f" +eslint-config-prettier@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-2.3.0.tgz#b75b1eabea0c8b97b34403647ee25db349b9d8a0" dependencies: get-stdin "^5.0.1" -eslint-config-xo@^0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/eslint-config-xo/-/eslint-config-xo-0.13.0.tgz#f916765432ba67d2fc7a7177b8bcfef3f6eb0564" - eslint-import-resolver-node@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz#4422574cde66a9a7b099938ee4d508a199e0e3cc" @@ -2305,57 +2298,60 @@ eslint-plugin-prettier@^2.1.2: fast-diff "^1.1.1" jest-docblock "^20.0.1" -eslint-plugin-react@^6.4.0: - version "6.10.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz#c5435beb06774e12c7db2f6abaddcbf900cd3f78" +eslint-plugin-react@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.1.0.tgz#27770acf39f5fd49cd0af4083ce58104eb390d4c" dependencies: - array.prototype.find "^2.0.1" - doctrine "^1.2.2" + doctrine "^2.0.0" has "^1.0.1" - jsx-ast-utils "^1.3.4" - object.assign "^4.0.4" + jsx-ast-utils "^1.4.1" -eslint@^3.10.2: - version "3.19.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" +eslint-scope@^3.7.1: + version "3.7.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" dependencies: - babel-code-frame "^6.16.0" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.1.1.tgz#facbdfcfe3e0facd3a8b80dc98c4e6c13ae582df" + dependencies: + babel-code-frame "^6.22.0" chalk "^1.1.3" - concat-stream "^1.5.2" - debug "^2.1.1" + concat-stream "^1.6.0" + debug "^2.6.8" doctrine "^2.0.0" - escope "^3.6.0" - espree "^3.4.0" + eslint-scope "^3.7.1" + espree "^3.4.3" esquery "^1.0.0" estraverse "^4.2.0" esutils "^2.0.2" file-entry-cache "^2.0.0" - glob "^7.0.3" - globals "^9.14.0" - ignore "^3.2.0" + glob "^7.1.2" + globals "^9.17.0" + ignore "^3.3.3" imurmurhash "^0.1.4" - inquirer "^0.12.0" - is-my-json-valid "^2.10.0" + inquirer "^3.0.6" + is-my-json-valid "^2.16.0" is-resolvable "^1.0.0" - js-yaml "^3.5.1" - json-stable-stringify "^1.0.0" + js-yaml "^3.8.4" + json-stable-stringify "^1.0.1" levn "^0.3.0" - lodash "^4.0.0" - mkdirp "^0.5.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.2" - path-is-inside "^1.0.1" - pluralize "^1.2.1" - progress "^1.1.8" - require-uncached "^1.0.2" - shelljs "^0.7.5" - strip-bom "^3.0.0" + path-is-inside "^1.0.2" + pluralize "^4.0.0" + progress "^2.0.0" + require-uncached "^1.0.3" strip-json-comments "~2.0.1" - table "^3.7.8" + table "^4.0.1" text-table "~0.2.0" - user-home "^2.0.0" -espree@^3.4.0: +espree@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.3.tgz#2910b5ccd49ce893c2ffffaab4fd8b3a31b82374" dependencies: @@ -2509,6 +2505,14 @@ extend@~3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" +external-editor@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.4.tgz#1ed9199da9cbfe2ef2f7a31b2fde8b0d12368972" + dependencies: + iconv-lite "^0.4.17" + jschardet "^1.4.2" + tmp "^0.0.31" + extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" @@ -2590,13 +2594,19 @@ fetch-jsonp@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/fetch-jsonp/-/fetch-jsonp-1.1.1.tgz#b7b9fd7d3a4f74d38389f5ea2f2d0f46c34510e4" -figures@^1.3.5, figures@^1.7.0: +figures@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" dependencies: escape-string-regexp "^1.0.5" object-assign "^4.1.0" +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.5" + file-entry-cache@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" @@ -2900,7 +2910,7 @@ glob@7.0.5: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -2918,7 +2928,7 @@ global@^4.3.0: min-document "^2.19.0" process "~0.5.1" -globals@^9.0.0, globals@^9.14.0: +globals@^9.0.0, globals@^9.17.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -3210,6 +3220,10 @@ iconv-lite@0.4.13, iconv-lite@~0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" +iconv-lite@^0.4.17: + version "0.4.18" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2" + icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" @@ -3224,7 +3238,7 @@ ieee754@^1.1.4: version "1.1.8" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" -ignore@^3.2.0: +ignore@^3.3.3: version "3.3.3" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d" @@ -3273,21 +3287,22 @@ ini@~1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" -inquirer@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" +inquirer@^3.0.6: + version "3.1.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.1.1.tgz#87621c4fba4072f48a8dd71c9f9df6f100b2d534" dependencies: - ansi-escapes "^1.1.0" - ansi-regex "^2.0.0" + ansi-escapes "^2.0.0" chalk "^1.0.0" - cli-cursor "^1.0.1" + cli-cursor "^2.1.0" cli-width "^2.0.0" - figures "^1.3.5" + external-editor "^2.0.4" + figures "^2.0.0" lodash "^4.3.0" - readline2 "^1.0.1" - run-async "^0.1.0" - rx-lite "^3.1.2" - string-width "^1.0.1" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.0.0" strip-ansi "^3.0.0" through "^2.3.6" @@ -3411,7 +3426,7 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-my-json-valid@^2.10.0: +is-my-json-valid@^2.16.0: version "2.16.0" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" dependencies: @@ -3817,7 +3832,7 @@ js-tokens@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.4.3, js-yaml@^3.5.1, js-yaml@^3.7.0: +js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.8.4: version "3.8.4" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6" dependencies: @@ -3835,6 +3850,10 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +jschardet@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.4.2.tgz#2aa107f142af4121d145659d44f50830961e699a" + jsdom@^9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" @@ -3885,7 +3904,7 @@ json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" -json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: +json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" dependencies: @@ -3930,7 +3949,7 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.3.6" -jsx-ast-utils@^1.3.4: +jsx-ast-utils@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" @@ -4327,7 +4346,7 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@^4.0.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1: +lodash@^4.0.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.6.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -4506,6 +4525,10 @@ mime@1.3.4, mime@^1.2.11, mime@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" +mimic-fn@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + min-document@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" @@ -4540,7 +4563,7 @@ minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -mkdirp@0.5, mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5, mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -4583,9 +4606,9 @@ multicast-dns@^6.0.1: dns-packet "^1.0.1" thunky "^0.1.0" -mute-stream@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" mz@^2.1.0, mz@^2.3.1: version "2.6.0" @@ -4809,18 +4832,10 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-keys@^1.0.10, object-keys@^1.0.8: +object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" -object.assign@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.0" - object-keys "^1.0.10" - object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -4862,6 +4877,12 @@ onetime@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + only@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" @@ -4924,7 +4945,7 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -5026,7 +5047,7 @@ path-is-absolute@1.0.1, path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-is-inside@^1.0.1: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" @@ -5116,9 +5137,9 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" -pluralize@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" +pluralize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-4.0.0.tgz#59b708c1c0190a2f692f1c7618c446b052fd1762" portfinder@0.4.x: version "0.4.0" @@ -5431,9 +5452,9 @@ process@~0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" -progress@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" +progress@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" promise@^7.1.1: version "7.3.1" @@ -5761,26 +5782,12 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" -readline2@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - mute-stream "0.0.5" - realistic-structured-clone@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/realistic-structured-clone/-/realistic-structured-clone-1.0.1.tgz#1abe82af0b80cd7b109fdaf5d29308032852d45d" dependencies: lodash.isplainobject "^3.0.2" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - dependencies: - resolve "^1.1.6" - redbox-react@^1.2.2: version "1.4.2" resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.4.2.tgz#7fe35d3c567301e97938cc7fd6a10918f424c6b4" @@ -5958,7 +5965,7 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" -require-uncached@^1.0.2: +require-uncached@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" dependencies: @@ -5988,7 +5995,7 @@ resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.2.0, resolve@^1.3.2: +resolve@^1.2.0, resolve@^1.3.2: version "1.3.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" dependencies: @@ -6001,6 +6008,13 @@ restore-cursor@^1.0.1: exit-hook "^1.0.0" onetime "^1.0.0" +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" @@ -6024,15 +6038,21 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^2.0.0" inherits "^2.0.1" -run-async@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" +run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" dependencies: - once "^1.3.0" + is-promise "^2.1.0" -rx-lite@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + dependencies: + rx-lite "*" + +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" rxjs@^5.0.0-beta.11: version "5.4.1" @@ -6168,19 +6188,11 @@ shell-quote@^1.6.1: array-reduce "~0.0.0" jsonify "~0.0.0" -shelljs@^0.7.5: - version "0.7.8" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.8.tgz#decbcf874b0d1e5fb72e14b164a9683048e9acb3" - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - shellwords@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" -signal-exit@^3.0.0: +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -6565,6 +6577,17 @@ table@^3.7.8: slice-ansi "0.0.4" string-width "^2.0.0" +table@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.1.tgz#a8116c133fac2c61f4a420ab6cdf5c4d61f0e435" + dependencies: + ajv "^4.7.0" + ajv-keywords "^1.0.0" + chalk "^1.1.1" + lodash "^4.0.0" + slice-ansi "0.0.4" + string-width "^2.0.0" + tapable@^0.2.5, tapable@~0.2.5: version "0.2.6" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.6.tgz#206be8e188860b514425375e6f1ae89bfb01fd8d" @@ -6659,6 +6682,12 @@ timers-browserify@^2.0.2: dependencies: setimmediate "^1.0.4" +tmp@^0.0.31: + version "0.0.31" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" + dependencies: + os-tmpdir "~1.0.1" + tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" @@ -6852,12 +6881,6 @@ user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" -user-home@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" - dependencies: - os-homedir "^1.0.0" - util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"