diff --git a/.babelrc b/.babelrc index 9174f63d3e..751318c9c1 100644 --- a/.babelrc +++ b/.babelrc @@ -7,10 +7,7 @@ "chai-assert-async", "transform-object-rest-spread", "transform-es2015-modules-commonjs", - "transform-decorators-legacy", // must come before class-properties "transform-class-properties", - "transform-es2015-destructuring", // https://github.com/babel/babel/issues/4074 - "transform-es2015-parameters", // same ], "presets": [ "react", diff --git a/.eslintrc b/.eslintrc index 5459b9f220..9ba2e4bb2d 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,10 +1,9 @@ { "root": true, - "parser": "babel-eslint", "parserOptions": { + "ecmaVersion": 2018, "ecmaFeatures": { "jsx": true, - "experimentalDecorators": true, } }, "settings": { diff --git a/lib/atom-items/issueish-pane-item.js b/lib/atom-items/issueish-pane-item.js index f3e6a3d4bd..6677a7d139 100644 --- a/lib/atom-items/issueish-pane-item.js +++ b/lib/atom-items/issueish-pane-item.js @@ -2,8 +2,8 @@ import {Emitter} from 'event-kit'; import React, {Component} from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; +import {autobind} from '../helpers'; import IssueishPaneItemController from '../controllers/issueish-pane-item-controller'; import GithubLoginModel from '../models/github-login-model'; @@ -28,6 +28,7 @@ export default class IssueishPaneItem extends Component { constructor(props) { super(props); + autobind(this, 'switchToIssueish', 'handleTitleChanged'); this.emitter = new Emitter(); this.title = `${this.props.owner}/${this.props.repo}#${this.props.issueishNumber}`; @@ -59,12 +60,10 @@ export default class IssueishPaneItem extends Component { ); } - @autobind switchToIssueish(owner, repo, issueishNumber) { this.setState({owner, repo, issueishNumber}); } - @autobind handleTitleChanged(title) { if (this.title !== title) { this.title = title; diff --git a/lib/atom/atom-text-editor.js b/lib/atom/atom-text-editor.js index 81db12407e..01cdbdc4f2 100644 --- a/lib/atom/atom-text-editor.js +++ b/lib/atom/atom-text-editor.js @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import {CompositeDisposable} from 'event-kit'; import RefHolder from '../models/ref-holder'; +import {autobind} from '../helpers'; const editorProps = { autoIndent: PropTypes.bool, @@ -52,6 +52,7 @@ export default class AtomTextEditor extends React.PureComponent { constructor(props, context) { super(props, context); + autobind(this, 'didChange', 'didChangeCursorPosition'); this.subs = new CompositeDisposable(); this.suppressChange = false; @@ -108,7 +109,6 @@ export default class AtomTextEditor extends React.PureComponent { } } - @autobind didChange() { if (this.suppressChange) { return; @@ -117,7 +117,6 @@ export default class AtomTextEditor extends React.PureComponent { this.props.didChange(this.getModel()); } - @autobind didChangeCursorPosition() { this.props.didChangeCursorPosition(this.getModel()); } diff --git a/lib/containers/issueish-pane-item-container.js b/lib/containers/issueish-pane-item-container.js index fd00ab6008..eac4c49228 100644 --- a/lib/containers/issueish-pane-item-container.js +++ b/lib/containers/issueish-pane-item-container.js @@ -2,7 +2,6 @@ import React from 'react'; import {graphql, createRefetchContainer} from 'react-relay'; import PropTypes from 'prop-types'; import cx from 'classnames'; -import {autobind} from 'core-decorators'; import IssueTimelineContainer from './issue-timeline-container'; import PrTimelineContainer from './pr-timeline-container'; @@ -11,6 +10,7 @@ import Octicon from '../atom/octicon'; import IssueishBadge from '../views/issueish-badge'; import GithubDotcomMarkdown from '../views/github-dotcom-markdown'; import PeriodicRefresher from '../periodic-refresher'; +import {autobind} from '../helpers'; const reactionTypeToEmoji = { THUMBS_UP: '👍', @@ -62,6 +62,11 @@ export class IssueishPaneItemView extends React.Component { refreshing: false, } + constructor(props) { + super(props); + autobind(this, 'handleRefreshClick', 'refresh'); + } + componentDidMount() { this.refresher = new PeriodicRefresher(IssueishPaneItemView, { interval: () => 5 * 60 * 1000, @@ -141,13 +146,11 @@ export class IssueishPaneItemView extends React.Component { ); } - @autobind handleRefreshClick(e) { e.preventDefault(); this.refresher.refreshNow(true); } - @autobind refresh() { if (this.state.refreshing) { return; diff --git a/lib/containers/pr-info-container.js b/lib/containers/pr-info-container.js index ed2648de85..659e7e9267 100644 --- a/lib/containers/pr-info-container.js +++ b/lib/containers/pr-info-container.js @@ -2,14 +2,13 @@ import React from 'react'; import {graphql, createRefetchContainer} from 'react-relay'; import PropTypes from 'prop-types'; import cx from 'classnames'; -import {autobind} from 'core-decorators'; +import tinycolor from 'tinycolor2'; import Octicon from '../atom/octicon'; import IssueishBadge from '../views/issueish-badge'; import PeriodicRefresher from '../periodic-refresher'; -import tinycolor from 'tinycolor2'; - import PrStatusesContainer from './pr-statuses-container'; +import {autobind} from '../helpers'; const reactionTypeToEmoji = { THUMBS_UP: '👍', @@ -57,8 +56,13 @@ export class PrInfo extends React.Component { }).isRequired, } - state = { - refreshing: false, + constructor(props) { + super(props); + autobind(this, 'handleRefreshClick', 'refresh', 'handleClickPrLink', 'handleUnpinClick'); + + this.state = { + refreshing: false, + }; } componentDidMount() { @@ -75,13 +79,11 @@ export class PrInfo extends React.Component { this.refresher.destroy(); } - @autobind handleRefreshClick(e) { e.preventDefault(); this.refresher.refreshNow(true); } - @autobind refresh() { if (this.state.refreshing) { return; @@ -172,7 +174,6 @@ export class PrInfo extends React.Component { ); } - @autobind handleClickPrLink(event) { event.nativeEvent.preventDefault(); event.nativeEvent.stopPropagation(); @@ -181,7 +182,6 @@ export class PrInfo extends React.Component { atom.workspace.open(`atom-github://issueish/https%3A%2F%2Fapi.github.com/${repo.owner.login}/${repo.name}/${pr.number}`); } - @autobind handleUnpinClick(event) { event.preventDefault(); this.props.onUnpinPr && this.props.onUnpinPr(); diff --git a/lib/containers/pr-selection-by-branch-container.js b/lib/containers/pr-selection-by-branch-container.js index a0f68d3f7a..1874b0434c 100644 --- a/lib/containers/pr-selection-by-branch-container.js +++ b/lib/containers/pr-selection-by-branch-container.js @@ -1,12 +1,12 @@ import React from 'react'; import {graphql, createFragmentContainer} from 'react-relay'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import PrInfoContainer from './pr-info-container'; import PrUrlInputBox from '../views/pr-url-input-box'; import Octicon from '../atom/octicon'; import {RemotePropType, BranchSetPropType} from '../prop-types'; +import {autobind} from '../helpers'; export class PrSelectionByBranch extends React.Component { static propTypes = { @@ -44,6 +44,7 @@ export class PrSelectionByBranch extends React.Component { constructor(props, context) { super(props, context); + autobind(this, 'renderPrItem', 'toggleInputBoxVisibility', 'setPr', 'selectPullRequest'); this.state = {displayInputBox: false}; } @@ -222,7 +223,6 @@ export class PrSelectionByBranch extends React.Component { ); } - @autobind renderPrItem({node}) { return (
  • this.selectPullRequest(e, node)}> @@ -231,17 +231,14 @@ export class PrSelectionByBranch extends React.Component { ); } - @autobind toggleInputBoxVisibility() { this.setState({displayInputBox: !this.state.displayInputBox}); } - @autobind setPr(prLink) { this.props.onSelectPr(prLink); } - @autobind selectPullRequest(event, node) { event.preventDefault(); this.setPr(node.url); diff --git a/lib/containers/pr-statuses-container.js b/lib/containers/pr-statuses-container.js index 98a7e8b7fc..8ada4762cf 100644 --- a/lib/containers/pr-statuses-container.js +++ b/lib/containers/pr-statuses-container.js @@ -1,9 +1,8 @@ import React from 'react'; import {createRefetchContainer, graphql} from 'react-relay'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; -import {toSentence} from '../helpers'; +import {toSentence, autobind} from '../helpers'; import PrStatusContextContainer from './pr-status-context-container'; import Octicon from '../atom/octicon'; import DonutChart from '../views/donut-chart'; @@ -83,6 +82,11 @@ export class PrStatuses extends React.Component { static PENDING_REFRESH_TIMEOUT = 30 * 1000 static MINIMUM_REFRESH_INTERVAL = 15 * 1000 + constructor(props) { + super(props); + autobind(this, 'refresh'); + } + componentDidMount() { this.refresher = new PeriodicRefresher(PrStatuses, { interval: () => { @@ -103,7 +107,6 @@ export class PrStatuses extends React.Component { this.refresher.destroy(); } - @autobind refresh() { this.props.relay.refetch({ id: this.props.pullRequest.id, diff --git a/lib/controllers/commit-controller.js b/lib/controllers/commit-controller.js index c96925f985..3aa490d25b 100644 --- a/lib/controllers/commit-controller.js +++ b/lib/controllers/commit-controller.js @@ -3,12 +3,12 @@ import path from 'path'; import React from 'react'; import ReactDom from 'react-dom'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import {CompositeDisposable} from 'event-kit'; import fs from 'fs-extra'; import CommitView from '../views/commit-view'; import {AuthorPropType} from '../prop-types'; +import {autobind} from '../helpers'; export const COMMIT_GRAMMAR_SCOPE = 'text.git-commit'; @@ -41,6 +41,7 @@ export default class CommitController extends React.Component { constructor(props, context) { super(props, context); + autobind(this, 'commit', 'handleMessageChange', 'toggleExpandedCommitMessageEditor', 'grammarAdded'); this.subscriptions = new CompositeDisposable(); this.refCommitView = null; @@ -121,7 +122,6 @@ export default class CommitController extends React.Component { this.subscriptions.dispose(); } - @autobind commit(message, coAuthors = [], amend) { let msg; if (this.isCommitMessageEditorExpanded()) { @@ -149,7 +149,6 @@ export default class CommitController extends React.Component { return path.join(this.props.repository.getGitDirectoryPath(), 'ATOM_COMMIT_EDITMSG'); } - @autobind handleMessageChange(newMessage) { if (!this.props.repository.isPresent()) { return; @@ -164,7 +163,6 @@ export default class CommitController extends React.Component { return this.props.workspace.getTextEditors().filter(editor => editor.getPath() === this.getCommitMessagePath()); } - @autobind async toggleExpandedCommitMessageEditor(messageFromBox) { if (this.isCommitMessageEditorExpanded()) { if (this.commitMessageEditorIsInForeground()) { @@ -226,7 +224,6 @@ export default class CommitController extends React.Component { } } - @autobind grammarAdded(grammar) { if (grammar.scopeName !== COMMIT_GRAMMAR_SCOPE) { return; } diff --git a/lib/controllers/conflict-controller.js b/lib/controllers/conflict-controller.js index b005d968dd..1a73fcd0c8 100644 --- a/lib/controllers/conflict-controller.js +++ b/lib/controllers/conflict-controller.js @@ -3,7 +3,7 @@ import PropTypes from 'prop-types'; import {remote} from 'electron'; const {Menu, MenuItem} = remote; -import {autobind} from 'core-decorators'; +import {autobind} from '../helpers'; import {OURS, BASE, THEIRS} from '../models/conflicts/source'; import Decoration from '../atom/decoration'; import Octicon from '../atom/octicon'; @@ -23,6 +23,7 @@ export default class ConflictController extends React.Component { constructor(props, context) { super(props, context); + autobind(this, 'showResolveMenu'); this.state = { chosenSide: this.props.conflict.getChosenSide(), @@ -42,7 +43,6 @@ export default class ConflictController extends React.Component { side.isBannerModified() && side.revertBanner(); } - @autobind showResolveMenu(event) { event.preventDefault(); diff --git a/lib/controllers/editor-conflict-controller.js b/lib/controllers/editor-conflict-controller.js index e894dde90f..728cfc5021 100644 --- a/lib/controllers/editor-conflict-controller.js +++ b/lib/controllers/editor-conflict-controller.js @@ -1,13 +1,13 @@ import {CompositeDisposable} from 'event-kit'; import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import compareSets from 'compare-sets'; import Commands, {Command} from '../atom/commands'; import Conflict from '../models/conflicts/conflict'; import ConflictController from './conflict-controller'; import {OURS, THEIRS, BASE} from '../models/conflicts/source'; +import {autobind} from '../helpers'; /** * Render a `ConflictController` for each conflict marker within an open TextEditor. @@ -27,6 +27,7 @@ export default class EditorConflictController extends React.Component { constructor(props, context) { super(props, context); + autobind(this, 'resolveAsCurrent', 'revertConflictModifications', 'dismissCurrent'); // this.layer = props.editor.addMarkerLayer({ // maintainHistory: true, @@ -147,7 +148,6 @@ export default class EditorConflictController extends React.Component { }; } - @autobind resolveAsCurrent() { this.getCurrentConflicts().forEach(match => { if (match.sides.size === 1) { @@ -157,7 +157,6 @@ export default class EditorConflictController extends React.Component { }); } - @autobind revertConflictModifications() { this.getCurrentConflicts().forEach(match => { match.sides.forEach(side => { @@ -167,7 +166,6 @@ export default class EditorConflictController extends React.Component { }); } - @autobind dismissCurrent() { this.dismissConflicts(this.getCurrentConflicts().map(match => match.conflict)); } diff --git a/lib/controllers/file-patch-controller.js b/lib/controllers/file-patch-controller.js index 9045ded601..d4982c5f8f 100644 --- a/lib/controllers/file-patch-controller.js +++ b/lib/controllers/file-patch-controller.js @@ -2,14 +2,13 @@ import path from 'path'; import React from 'react'; import PropTypes from 'prop-types'; - import {Point} from 'atom'; import {Emitter, CompositeDisposable} from 'event-kit'; -import {autobind} from 'core-decorators'; import Switchboard from '../switchboard'; import FilePatchView from '../views/file-patch-view'; import ModelObserver from '../models/model-observer'; +import {autobind} from '../helpers'; export default class FilePatchController extends React.Component { static propTypes = { @@ -52,6 +51,12 @@ export default class FilePatchController extends React.Component { constructor(props, context) { super(props, context); + autobind( + this, + 'onRepoRefresh', 'handleShowDiffClick', 'attemptHunkStageOperation', 'attemptFileStageOperation', + 'attemptModeStageOperation', 'attemptSymlinkStageOperation', 'attemptLineStageOperation', 'didSurfaceFile', + 'diveIntoCorrespondingFilePatch', 'focus', 'openCurrentFile', 'discardLines', 'undoLastDiscard', 'hasUndoHistory', + ); this.stagingOperationInProgress = false; this.emitter = new Emitter(); @@ -128,7 +133,6 @@ export default class FilePatchController extends React.Component { return this.emitter.on('did-terminate-pending-state', callback); } - @autobind async onRepoRefresh(repository) { const staged = this.isStaged(); let filePatch = await this.getFilePatchForPath(this.props.filePath, staged); @@ -263,7 +267,6 @@ export default class FilePatchController extends React.Component { return this.emitter.on('did-change-title', callback); } - @autobind handleShowDiffClick() { if (this.repositoryObserver.getActiveModel()) { const fullPath = path.join(this.getWorkingDirectory(), this.props.filePath); @@ -395,7 +398,6 @@ export default class FilePatchController extends React.Component { } } - @autobind attemptHunkStageOperation(hunk) { if (this.stagingOperationInProgress) { return; @@ -409,7 +411,6 @@ export default class FilePatchController extends React.Component { this.stageOrUnstageHunk(hunk); } - @autobind attemptFileStageOperation() { if (this.stagingOperationInProgress) { return; @@ -423,7 +424,6 @@ export default class FilePatchController extends React.Component { this.stageOrUnstageFile(); } - @autobind attemptModeStageOperation() { if (this.stagingOperationInProgress) { return; @@ -437,7 +437,6 @@ export default class FilePatchController extends React.Component { this.stageOrUnstageModeChange(); } - @autobind attemptSymlinkStageOperation() { if (this.stagingOperationInProgress) { return; @@ -482,7 +481,6 @@ export default class FilePatchController extends React.Component { } } - @autobind attemptLineStageOperation(lines) { if (this.stagingOperationInProgress) { return; @@ -496,14 +494,12 @@ export default class FilePatchController extends React.Component { this.stageOrUnstageLines(lines); } - @autobind didSurfaceFile() { if (this.props.didSurfaceFile) { this.props.didSurfaceFile(this.props.filePath, this.state.stagingStatus); } } - @autobind async diveIntoCorrespondingFilePatch() { const stagingStatus = this.isStaged() ? 'unstaged' : 'staged'; const filePatch = await this.getFilePatchForPath(this.props.filePath, stagingStatus === 'staged'); @@ -519,7 +515,6 @@ export default class FilePatchController extends React.Component { return !this.state.filePatch || this.state.filePatch.getHunks().length === 0; } - @autobind focus() { if (this.filePatchView) { this.filePatchView.focus(); @@ -532,7 +527,6 @@ export default class FilePatchController extends React.Component { }); } - @autobind async openCurrentFile({lineNumber} = {}) { const [textEditor] = await this.props.openFiles([this.props.filePath]); const position = new Point(lineNumber ? lineNumber - 1 : 0, 0); @@ -541,17 +535,14 @@ export default class FilePatchController extends React.Component { return textEditor; } - @autobind discardLines(lines) { return this.props.discardLines(this.state.filePatch, lines, this.repositoryObserver.getActiveModel()); } - @autobind undoLastDiscard() { return this.props.undoLastDiscard(this.props.filePath, this.repositoryObserver.getActiveModel()); } - @autobind hasUndoHistory() { return this.repositoryObserver.getActiveModel().hasDiscardHistory(this.props.filePath); } diff --git a/lib/controllers/git-tab-controller.js b/lib/controllers/git-tab-controller.js index 5e20d40797..ae29186998 100644 --- a/lib/controllers/git-tab-controller.js +++ b/lib/controllers/git-tab-controller.js @@ -2,7 +2,6 @@ import path from 'path'; import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import yubikiri from 'yubikiri'; @@ -11,6 +10,7 @@ import ObserveModel from '../views/observe-model'; import UserStore from '../models/user-store'; import {nullBranch} from '../models/branch'; import {nullCommit} from '../models/commit'; +import {autobind} from '../helpers'; const DEFAULT_REPO_DATA = { lastCommit: nullCommit, @@ -55,6 +55,12 @@ export default class GitTabController extends React.Component { constructor(props, context) { super(props, context); + autobind( + this, + 'unstageFilePatch', 'attemptStageAllOperation', 'attemptFileStageOperation', 'unstageFiles', 'prepareToCommit', + 'commit', 'updateSelectedCoAuthors', 'undoLastCommit', 'abortMerge', 'resolveAsOurs', 'resolveAsTheirs', + 'checkout', 'rememberLastFocus', 'quietlySelectItem', + ); this.stagingOperationInProgress = false; this.lastFocus = GitTabView.focus.STAGING; @@ -251,17 +257,14 @@ export default class GitTabController extends React.Component { } } - @autobind unstageFilePatch(filePatch) { return this.props.repository.applyPatchToIndex(filePatch.getUnstagePatch()); } - @autobind attemptStageAllOperation(stageStatus) { return this.attemptFileStageOperation(['.'], stageStatus); } - @autobind attemptFileStageOperation(filePaths, stageStatus) { if (this.stagingOperationInProgress) { return { @@ -312,22 +315,18 @@ export default class GitTabController extends React.Component { return this.props.repository.stageFiles(Array.from(pathsToStage)); } - @autobind unstageFiles(filePaths) { return this.props.repository.unstageFiles(filePaths); } - @autobind async prepareToCommit() { return !await this.props.ensureGitTab(); } - @autobind commit(message, options) { return this.props.repository.commit(message, options); } - @autobind updateSelectedCoAuthors(selectedCoAuthors, newAuthor) { if (newAuthor) { this.userStore.addUsers({[newAuthor.email]: newAuthor.name}); @@ -336,7 +335,6 @@ export default class GitTabController extends React.Component { this.setState({selectedCoAuthors}); } - @autobind async undoLastCommit() { const repo = this.props.repository; const lastCommit = await repo.getLastCommit(); @@ -346,7 +344,6 @@ export default class GitTabController extends React.Component { return repo.undoLastCommit(); } - @autobind async abortMerge() { const choice = this.props.confirm({ message: 'Abort merge', @@ -369,7 +366,6 @@ export default class GitTabController extends React.Component { } } - @autobind async resolveAsOurs(paths) { if (this.lastRepoData.fetchInProgress) { return; @@ -380,7 +376,6 @@ export default class GitTabController extends React.Component { this.refreshResolutionProgress(false, true); } - @autobind async resolveAsTheirs(paths) { if (this.lastRepoData.fetchInProgress) { return; @@ -391,12 +386,10 @@ export default class GitTabController extends React.Component { this.refreshResolutionProgress(false, true); } - @autobind checkout(branchName, options) { return this.props.repository.checkout(branchName, options); } - @autobind rememberLastFocus(event) { this.lastFocus = this.refView.rememberFocus(event) || GitTabView.focus.STAGING; } @@ -419,7 +412,6 @@ export default class GitTabController extends React.Component { return this.refView.focusAndSelectStagingItem(filePath, stagingStatus); } - @autobind quietlySelectItem(filePath, stagingStatus) { return this.refView.quietlySelectItem(filePath, stagingStatus); } diff --git a/lib/controllers/github-tab-controller.js b/lib/controllers/github-tab-controller.js index 5af4cdc65a..2f7c603076 100644 --- a/lib/controllers/github-tab-controller.js +++ b/lib/controllers/github-tab-controller.js @@ -1,12 +1,12 @@ import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import yubikiri from 'yubikiri'; import RemotePrController from './remote-pr-controller'; import GithubLoginModel from '../models/github-login-model'; import ObserveModel from '../views/observe-model'; import {RemotePropType, BranchPropType} from '../prop-types'; +import {autobind} from '../helpers'; class RemoteSelector extends React.Component { static propTypes = { @@ -44,6 +44,11 @@ export default class GithubTabController extends React.Component { loginModel: PropTypes.instanceOf(GithubLoginModel), } + constructor(props) { + super(props); + autobind(this, 'handleRemoteSelect'); + } + fetchModelData(repo) { return yubikiri({ remotes: repo.getRemotes().then(remotes => remotes.filter(remote => remote.isGithubRepo())), @@ -176,7 +181,6 @@ export default class GithubTabController extends React.Component { ); } - @autobind handleRemoteSelect(e, remote) { e.preventDefault(); this.props.repository.setConfig('atomGithub.currentRemote', remote.getName()); diff --git a/lib/controllers/issueish-pane-item-controller.js b/lib/controllers/issueish-pane-item-controller.js index fad2342e78..22606855af 100644 --- a/lib/controllers/issueish-pane-item-controller.js +++ b/lib/controllers/issueish-pane-item-controller.js @@ -1,7 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; import yubikiri from 'yubikiri'; -import {autobind} from 'core-decorators'; import {QueryRenderer, graphql} from 'react-relay'; import RelayNetworkLayerManager from '../relay-network-layer-manager'; @@ -11,6 +10,7 @@ import GithubLoginView from '../views/github-login-view'; import ObserveModel from '../views/observe-model'; import IssueishLookupByNumberContainer from '../containers/issueish-lookup-by-number-container'; import RelayEnvironment from '../views/relay-environment'; +import {autobind} from '../helpers'; export default class IssueishPaneItemController extends React.Component { static propTypes = { @@ -27,7 +27,11 @@ export default class IssueishPaneItemController extends React.Component { host: 'api.github.com', } - @autobind + constructor(props) { + super(props); + autobind(this, 'fetchData', 'renderWithToken', 'handleLogin', 'handleLogout'); + } + fetchData(loginModel) { return yubikiri({ token: loginModel.getToken(this.props.host), @@ -42,7 +46,6 @@ export default class IssueishPaneItemController extends React.Component { ); } - @autobind renderWithToken(data) { if (!data) { return null; } if (data.token === UNAUTHENTICATED) { @@ -130,12 +133,10 @@ export default class IssueishPaneItemController extends React.Component { ); } - @autobind handleLogin(token) { this.props.loginModel.setToken(this.props.host, token); } - @autobind handleLogout() { this.props.loginModel.removeToken(this.props.host); } diff --git a/lib/controllers/pr-info-controller.js b/lib/controllers/pr-info-controller.js index 431dfab4fb..7bcf20048e 100644 --- a/lib/controllers/pr-info-controller.js +++ b/lib/controllers/pr-info-controller.js @@ -1,7 +1,6 @@ import React from 'react'; import PropTypes from 'prop-types'; import {QueryRenderer, graphql} from 'react-relay'; -import {autobind} from 'core-decorators'; import {RemotePropType, BranchSetPropType} from '../prop-types'; import PrSelectionByUrlContainer from '../containers/pr-selection-by-url-container'; @@ -9,6 +8,7 @@ import PrSelectionByBranchContainer from '../containers/pr-selection-by-branch-c import GithubLoginView from '../views/github-login-view'; import RelayNetworkLayerManager from '../relay-network-layer-manager'; import {UNAUTHENTICATED} from '../shared/keytar-strategy'; +import {autobind} from '../helpers'; export default class PrInfoController extends React.Component { static propTypes = { @@ -29,6 +29,11 @@ export default class PrInfoController extends React.Component { onCreatePr: PropTypes.func.isRequired, } + constructor(props) { + super(props); + autobind(this, 'renderLoading', 'renderSpecificPrFailure', 'renderFailure'); + } + render() { if (this.props.token === UNAUTHENTICATED) { return null; @@ -128,7 +133,6 @@ export default class PrInfoController extends React.Component { ); } - @autobind renderLoading() { return (
    @@ -137,7 +141,6 @@ export default class PrInfoController extends React.Component { ); } - @autobind renderSpecificPrFailure(err, retry) { if (this.isNotFoundError(err)) { return ( @@ -153,7 +156,6 @@ export default class PrInfoController extends React.Component { } } - @autobind renderFailure(err, retry) { if (err.response && err.response.status === 401) { return ( diff --git a/lib/controllers/remote-pr-controller.js b/lib/controllers/remote-pr-controller.js index f6a642a8b8..5c10783454 100644 --- a/lib/controllers/remote-pr-controller.js +++ b/lib/controllers/remote-pr-controller.js @@ -1,6 +1,5 @@ import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import yubikiri from 'yubikiri'; import {shell} from 'electron'; @@ -10,6 +9,7 @@ import ObserveModel from '../views/observe-model'; import {UNAUTHENTICATED} from '../shared/keytar-strategy'; import {nullRemote} from '../models/remote'; import PrInfoController from './pr-info-controller'; +import {autobind} from '../helpers'; export default class RemotePrController extends React.Component { static propTypes = { @@ -30,7 +30,12 @@ export default class RemotePrController extends React.Component { remote: nullRemote, } - fetchData = loginModel => { + constructor(props) { + super(props); + autobind(this, 'fetchData', 'handleLogin', 'handleLogout', 'handleCreatePr'); + } + + fetchData(loginModel) { return yubikiri({ token: loginModel.getToken(this.props.host), }); @@ -69,17 +74,14 @@ export default class RemotePrController extends React.Component { ); } - @autobind handleLogin(token) { this.props.loginModel.setToken(this.props.host, token); } - @autobind handleLogout() { this.props.loginModel.removeToken(this.props.host); } - @autobind async handleCreatePr() { const currentBranch = this.props.branches.getHeadBranch(); const upstream = currentBranch.getUpstream(); diff --git a/lib/controllers/root-controller.js b/lib/controllers/root-controller.js index 215770f173..504a93b457 100644 --- a/lib/controllers/root-controller.js +++ b/lib/controllers/root-controller.js @@ -3,7 +3,6 @@ import path from 'path'; import React, {Fragment} from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import {CompositeDisposable} from 'event-kit'; import StatusBar from '../atom/status-bar'; @@ -27,7 +26,7 @@ import GitCacheView from '../views/git-cache-view'; import Conflict from '../models/conflicts/conflict'; import RefHolder from '../models/ref-holder'; import Switchboard from '../switchboard'; -import {destroyFilePatchPaneItems, destroyEmptyFilePatchPaneItems} from '../helpers'; +import {destroyFilePatchPaneItems, destroyEmptyFilePatchPaneItems, autobind} from '../helpers'; import {GitError} from '../git-shell-out-strategy'; export default class RootController extends React.Component { @@ -63,6 +62,15 @@ export default class RootController extends React.Component { constructor(props, context) { super(props, context); + autobind( + this, + 'installReactDevTools', 'getRepositoryForWorkdir', 'clearGithubToken', 'initializeRepo', 'showOpenIssueishDialog', + 'showWaterfallDiagnostics', 'showCacheDiagnostics', 'acceptClone', 'cancelClone', 'acceptInit', 'cancelInit', + 'acceptOpenIssueish', 'cancelOpenIssueish', 'surfaceFromFileAtPath', 'destroyFilePatchPaneItems', + 'destroyEmptyFilePatchPaneItems', 'openCloneDialog', 'quietlySelectItem', 'viewUnstagedChangesForCurrentFile', + 'viewStagedChangesForCurrentFile', 'openFiles', 'getUnsavedFiles', 'ensureNoUnsavedFiles', + 'discardWorkDirChangesForPaths', 'discardLines', 'undoLastDiscard', 'refreshResolutionProgress', + ); this.loginModel = GithubLoginModel.get(); @@ -352,7 +360,6 @@ export default class RootController extends React.Component { ); } - @autobind installReactDevTools() { // Prevent electron-link from attempting to descend into electron-devtools-installer, which is not available // when we're bundled in Atom. @@ -361,7 +368,6 @@ export default class RootController extends React.Component { devTools.default(devTools.REACT_DEVELOPER_TOOLS); } - @autobind getRepositoryForWorkdir(workdir) { return this.props.getRepositoryForWorkdir(workdir); } @@ -383,12 +389,10 @@ export default class RootController extends React.Component { } } - @autobind clearGithubToken() { return this.loginModel.removeToken('https://api.github.com'); } - @autobind initializeRepo(initDialogPath) { if (this.state.initDialogActive) { return null; @@ -399,22 +403,18 @@ export default class RootController extends React.Component { }); } - @autobind showOpenIssueishDialog() { this.setState({openIssueishDialogActive: true}); } - @autobind showWaterfallDiagnostics() { this.props.workspace.open(GitTimingsView.buildURI()); } - @autobind showCacheDiagnostics() { this.props.workspace.open(GitCacheView.buildURI()); } - @autobind async acceptClone(remoteUrl, projectPath) { this.setState({cloneDialogInProgress: true}); try { @@ -429,12 +429,10 @@ export default class RootController extends React.Component { } } - @autobind cancelClone() { this.setState({cloneDialogActive: false}); } - @autobind async acceptInit(projectPath) { try { await this.props.createRepositoryForProjectPath(projectPath); @@ -449,47 +447,39 @@ export default class RootController extends React.Component { } } - @autobind cancelInit() { if (this.state.initDialogResolve) { this.state.initDialogResolve(false); } this.setState({initDialogActive: false, initDialogPath: null, initDialogResolve: null}); } - @autobind acceptOpenIssueish({repoOwner, repoName, issueishNumber}) { const uri = `atom-github://issueish/https%3A%2F%2Fapi.github.com/${repoOwner}/${repoName}/${issueishNumber}`; this.setState({openIssueishDialogActive: false}); this.props.workspace.open(uri); } - @autobind cancelOpenIssueish() { this.setState({openIssueishDialogActive: false}); } - @autobind surfaceFromFileAtPath(filePath, stagingStatus) { this.refGitTabController.map(c => { return c.focusAndSelectStagingItem(filePath, stagingStatus); }); } - @autobind destroyFilePatchPaneItems() { destroyFilePatchPaneItems({onlyStaged: false}, this.props.workspace); } - @autobind destroyEmptyFilePatchPaneItems() { destroyEmptyFilePatchPaneItems(this.props.workspace); } - @autobind openCloneDialog() { this.setState({cloneDialogActive: true}); } - @autobind quietlySelectItem(filePath, stagingStatus) { return this.refGitTabController.map(c => { return c.quietlySelectItem(filePath, stagingStatus); @@ -548,17 +538,14 @@ export default class RootController extends React.Component { } } - @autobind viewUnstagedChangesForCurrentFile() { return this.viewChangesForCurrentFile('unstaged'); } - @autobind viewStagedChangesForCurrentFile() { return this.viewChangesForCurrentFile('staged'); } - @autobind openFiles(filePaths, repository = this.props.repository) { return Promise.all(filePaths.map(filePath => { const absolutePath = path.join(repository.getWorkingDirectoryPath(), filePath); @@ -566,7 +553,6 @@ export default class RootController extends React.Component { })); } - @autobind getUnsavedFiles(filePaths, workdirPath) { const isModifiedByPath = new Map(); this.props.workspace.getTextEditors().forEach(editor => { @@ -578,7 +564,6 @@ export default class RootController extends React.Component { }); } - @autobind ensureNoUnsavedFiles(filePaths, message, workdirPath = this.props.repository.getWorkingDirectoryPath()) { const unsavedFiles = this.getUnsavedFiles(filePaths, workdirPath).map(filePath => `\`${filePath}\``).join('
    '); if (unsavedFiles.length) { @@ -595,7 +580,6 @@ export default class RootController extends React.Component { } } - @autobind async discardWorkDirChangesForPaths(filePaths) { const destructiveAction = () => { return this.props.repository.discardWorkDirChangesForPaths(filePaths); @@ -607,7 +591,6 @@ export default class RootController extends React.Component { ); } - @autobind async discardLines(filePatch, lines, repository = this.props.repository) { const filePath = filePatch.getPath(); const destructiveAction = async () => { @@ -630,7 +613,6 @@ export default class RootController extends React.Component { return lastSnapshots.map(snapshot => snapshot.filePath); } - @autobind async undoLastDiscard(partialDiscardFilePath = null, repository = this.props.repository) { const filePaths = this.getFilePathsForLastDiscard(partialDiscardFilePath); try { @@ -714,7 +696,6 @@ export default class RootController extends React.Component { /* * Asynchronously count the conflict markers present in a file specified by full path. */ - @autobind refreshResolutionProgress(fullPath) { const readStream = fs.createReadStream(fullPath, {encoding: 'utf8'}); return new Promise(resolve => { @@ -743,6 +724,7 @@ export default class RootController extends React.Component { class TabTracker { constructor(name, {getController, getWorkspace, uri}) { + autobind(this, 'toggle', 'toggleFocus', 'ensureVisible'); this.name = name; this.getWorkspace = getWorkspace; @@ -760,7 +742,6 @@ class TabTracker { return controller; } - @autobind async toggle() { const focusToRestore = document.activeElement; let shouldRestoreFocus = false; @@ -786,7 +767,6 @@ class TabTracker { } } - @autobind async toggleFocus() { await this.ensureVisible(); @@ -801,7 +781,6 @@ class TabTracker { } } - @autobind async ensureVisible() { if (!this.isVisible()) { await this.reveal(); diff --git a/lib/github-package.js b/lib/github-package.js index 2b6b9c8e76..e73ac7a7e2 100644 --- a/lib/github-package.js +++ b/lib/github-package.js @@ -5,9 +5,8 @@ import fs from 'fs-extra'; import React from 'react'; import ReactDom from 'react-dom'; -import {autobind} from 'core-decorators'; -import {fileExists} from './helpers'; +import {fileExists, autobind} from './helpers'; import WorkdirCache from './models/workdir-cache'; import WorkdirContext from './models/workdir-context'; import WorkdirContextPool from './models/workdir-context-pool'; @@ -29,6 +28,13 @@ const defaultState = { export default class GithubPackage { constructor(workspace, project, commandRegistry, notificationManager, tooltips, styles, grammars, confirm, config, deserializers, configDirPath, getLoadSettings) { + autobind( + this, + 'consumeStatusBar', 'createGitTimingsView', 'createIssueishPaneItemStub', 'createDockItemStub', + 'createFilePatchControllerStub', 'destroyGitTabItem', 'destroyGithubTabItem', 'createRepositoryForProjectPath', + 'cloneRepositoryForProjectPath', 'getRepositoryForWorkdir', 'scheduleActiveContextUpdate', + ); + this.workspace = workspace; this.project = project; this.commandRegistry = commandRegistry; @@ -298,27 +304,23 @@ export default class GithubPackage { await yardstick.flush(); } - @autobind consumeStatusBar(statusBar) { this.statusBar = statusBar; this.rerender(); } - @autobind createGitTimingsView() { return StubItem.create('git-timings-view', { title: 'GitHub Package Timings View', }, GitTimingsView.buildURI()); } - @autobind createIssueishPaneItemStub({uri}) { return StubItem.create('issueish-pane-item', { title: 'Issueish', }, uri); } - @autobind createDockItemStub({uri}) { let item; switch (uri) { @@ -355,7 +357,6 @@ export default class GithubPackage { }, uri); } - @autobind createFilePatchControllerStub({uri} = {}) { const item = StubItem.create('git-file-patch-controller', { title: 'Diff', @@ -366,7 +367,6 @@ export default class GithubPackage { return item; } - @autobind destroyGitTabItem() { if (this.gitTabStubItem) { this.gitTabStubItem.destroy(); @@ -377,7 +377,6 @@ export default class GithubPackage { } } - @autobind destroyGithubTabItem() { if (this.githubTabStubItem) { this.githubTabStubItem.destroy(); @@ -388,7 +387,6 @@ export default class GithubPackage { } } - @autobind async createRepositoryForProjectPath(projectPath) { await fs.mkdirs(projectPath); @@ -403,7 +401,6 @@ export default class GithubPackage { await this.scheduleActiveContextUpdate(); } - @autobind async cloneRepositoryForProjectPath(remoteUrl, projectPath) { const context = this.contextPool.getContext(projectPath); let repository; @@ -423,7 +420,6 @@ export default class GithubPackage { await this.scheduleActiveContextUpdate(); } - @autobind getRepositoryForWorkdir(projectPath) { const loadingGuessRepo = Repository.loadingGuess({pipelineManager: this.pipelineManager}); return this.guessedContext ? loadingGuessRepo : this.contextPool.getContext(projectPath).getRepository(); @@ -449,7 +445,6 @@ export default class GithubPackage { return this.switchboard; } - @autobind async scheduleActiveContextUpdate(savedState = {}) { this.switchboard.didScheduleActiveContextUpdate(); await this.activeContextQueue.push(this.updateActiveContext.bind(this, savedState), {parallel: false}); diff --git a/lib/helpers.js b/lib/helpers.js index 6ed37088f1..8cdebf1f21 100644 --- a/lib/helpers.js +++ b/lib/helpers.js @@ -8,6 +8,12 @@ import FilePatchController from './controllers/file-patch-controller'; export const LINE_ENDING_REGEX = /\r?\n/; export const CO_AUTHOR_REGEX = /^co-authored-by. (.+?) <(.+?)>$/i; +export function autobind(self, ...methods) { + for (const method of methods) { + self[method] = self[method].bind(self); + } +} + export function getPackageRoot() { const {resourcePath} = atom.getLoadSettings(); const currentFileWasRequiredFromSnapshot = !path.isAbsolute(__dirname); diff --git a/lib/models/branch-set.js b/lib/models/branch-set.js index afd8c41df0..54e4683620 100644 --- a/lib/models/branch-set.js +++ b/lib/models/branch-set.js @@ -63,7 +63,7 @@ export default class BranchSet { return this.byPushRef.get(`${remoteName}\0${remoteRefName}`) || []; } - [util.inspect.custom](depth, options) { + inspect(depth, options) { return `BranchSet {${util.inspect(this.all)}}`; } } diff --git a/lib/models/branch.js b/lib/models/branch.js index 2f7307cfee..daa6b04508 100644 --- a/lib/models/branch.js +++ b/lib/models/branch.js @@ -1,5 +1,3 @@ -import util from 'util'; - const DETACHED = Symbol('detached'); const REMOTE_TRACKING = Symbol('remote-tracking'); @@ -135,7 +133,7 @@ export const nullBranch = { return false; }, - [util.inspect.custom](depth, options) { + inspect(depth, options) { return '{nullBranch}'; }, }; diff --git a/lib/models/list-selection.js b/lib/models/list-selection.js index 8792a06dc5..be33907af8 100644 --- a/lib/models/list-selection.js +++ b/lib/models/list-selection.js @@ -1,9 +1,11 @@ -import {autobind} from 'core-decorators'; +import {autobind} from '../helpers'; const COPY = Symbol('copy'); export default class ListSelection { constructor(options = {}) { + autobind(this, 'isItemSelectable'); + if (options._copy !== COPY) { this.options = { isItemSelectable: options.isItemSelectable || (item => !!item), @@ -29,7 +31,6 @@ export default class ListSelection { }); } - @autobind isItemSelectable(item) { return this.options.isItemSelectable(item); } diff --git a/lib/models/repository-states/index.js b/lib/models/repository-states/index.js index 48b82ed911..9d7434bb36 100644 --- a/lib/models/repository-states/index.js +++ b/lib/models/repository-states/index.js @@ -1,5 +1,3 @@ -export {expectedDelegates} from './state'; - // Load and export possible initial states export {default as Loading} from './loading'; export {default as LoadingGuess} from './loading-guess'; diff --git a/lib/models/repository-states/present.js b/lib/models/repository-states/present.js index 4e02cf4f16..195a4f55b3 100644 --- a/lib/models/repository-states/present.js +++ b/lib/models/repository-states/present.js @@ -16,30 +16,6 @@ import Remote from '../remote'; import Commit from '../commit'; import OperationStates from '../operation-states'; -/** - * Decorator for an async method that invalidates the cache after execution (regardless of success or failure). - * Optionally parameterized by a function that accepts the same arguments as the function that returns the list of cache - * keys to invalidate. - */ -function invalidate(spec) { - return function(target, name, descriptor) { - const original = descriptor.value; - descriptor.value = function(...args) { - return original.apply(this, args).then( - result => { - this.acceptInvalidation(spec, args); - return result; - }, - err => { - this.acceptInvalidation(spec, args); - return Promise.reject(err); - }, - ); - }; - return descriptor; - }; -} - /** * State used when the working directory contains a valid git repository and can be interacted with. Performs * actual git operations, caching the results, and broadcasts `onDidUpdate` events when write actions are @@ -97,9 +73,8 @@ export default class Present extends State { return true; } - acceptInvalidation(spec, args) { - const keys = spec(...args); - this.cache.invalidate(keys); + acceptInvalidation(spec) { + this.cache.invalidate(spec()); this.didUpdate(); } @@ -194,77 +169,101 @@ export default class Present extends State { // Staging and unstaging - @invalidate(paths => Keys.cacheOperationKeys(paths)) stageFiles(paths) { - return this.git().stageFiles(paths); + return this.invalidate( + () => Keys.cacheOperationKeys(paths), + () => this.git().stageFiles(paths), + ); } - @invalidate(paths => Keys.cacheOperationKeys(paths)) unstageFiles(paths) { - return this.git().unstageFiles(paths); + return this.invalidate( + () => Keys.cacheOperationKeys(paths), + () => this.git().unstageFiles(paths), + ); } - @invalidate(paths => Keys.cacheOperationKeys(paths)) stageFilesFromParentCommit(paths) { - return this.git().unstageFiles(paths, 'HEAD~'); + return this.invalidate( + () => Keys.cacheOperationKeys(paths), + () => this.git().unstageFiles(paths, 'HEAD~'), + ); } - @invalidate(filePath => Keys.cacheOperationKeys([filePath])) stageFileModeChange(filePath, fileMode) { - return this.git().stageFileModeChange(filePath, fileMode); + return this.invalidate( + () => Keys.cacheOperationKeys([filePath]), + () => this.git().stageFileModeChange(filePath, fileMode), + ); } - @invalidate(filePath => Keys.cacheOperationKeys([filePath])) stageFileSymlinkChange(filePath) { - return this.git().stageFileSymlinkChange(filePath); + return this.invalidate( + () => Keys.cacheOperationKeys([filePath]), + () => this.git().stageFileSymlinkChange(filePath), + ); } - @invalidate(filePatch => Keys.cacheOperationKeys([filePatch.getOldPath(), filePatch.getNewPath()])) applyPatchToIndex(filePatch) { - const patchStr = filePatch.toString(); - return this.git().applyPatch(patchStr, {index: true}); + return this.invalidate( + () => Keys.cacheOperationKeys([filePatch.getOldPath(), filePatch.getNewPath()]), + () => { + const patchStr = filePatch.toString(); + return this.git().applyPatch(patchStr, {index: true}); + }, + ); } - @invalidate(filePatch => Keys.workdirOperationKeys([filePatch.getOldPath(), filePatch.getNewPath()])) applyPatchToWorkdir(filePatch) { - const patchStr = filePatch.toString(); - return this.git().applyPatch(patchStr); + return this.invalidate( + () => Keys.workdirOperationKeys([filePatch.getOldPath(), filePatch.getNewPath()]), + () => { + const patchStr = filePatch.toString(); + return this.git().applyPatch(patchStr); + }, + ); } // Committing - @invalidate(() => [ - ...Keys.headOperationKeys(), - ...Keys.filePatch.eachWithOpts({staged: true}), - Keys.headDescription, - Keys.branches, - ]) commit(message, options) { - // eslint-disable-next-line no-shadow - return this.executePipelineAction('COMMIT', (message, options) => { - return this.git().commit(message, options); - }, message, options); + return this.invalidate( + () => [ + ...Keys.headOperationKeys(), + ...Keys.filePatch.eachWithOpts({staged: true}), + Keys.headDescription, + Keys.branches, + ], + // eslint-disable-next-line no-shadow + () => this.executePipelineAction('COMMIT', (message, options) => { + return this.git().commit(message, options); + }, message, options), + ); } // Merging - @invalidate(() => [ - ...Keys.headOperationKeys(), - Keys.index.all, - Keys.headDescription, - ]) merge(branchName) { - return this.git().merge(branchName); + return this.invalidate( + () => [ + ...Keys.headOperationKeys(), + Keys.index.all, + Keys.headDescription, + ], + () => this.git().merge(branchName), + ); } - @invalidate(() => [ - Keys.statusBundle, - Keys.stagedChangesSinceParentCommit, - Keys.filePatch.all, - Keys.index.all, - ]) abortMerge() { - return this.git().abortMerge(); + return this.invalidate( + () => [ + Keys.statusBundle, + Keys.stagedChangesSinceParentCommit, + Keys.filePatch.all, + Keys.index.all, + ], + () => this.git().abortMerge(), + ); } checkoutSide(side, paths) { @@ -275,126 +274,144 @@ export default class Present extends State { return this.git().mergeFile(oursPath, commonBasePath, theirsPath, resultPath); } - @invalidate(filePath => [ - Keys.statusBundle, - Keys.stagedChangesSinceParentCommit, - ...Keys.filePatch.eachWithFileOpts([filePath], [{staged: false}, {staged: true}]), - Keys.index.oneWith(filePath), - ]) writeMergeConflictToIndex(filePath, commonBaseSha, oursSha, theirsSha) { - return this.git().writeMergeConflictToIndex(filePath, commonBaseSha, oursSha, theirsSha); + return this.invalidate( + () => [ + Keys.statusBundle, + Keys.stagedChangesSinceParentCommit, + ...Keys.filePatch.eachWithFileOpts([filePath], [{staged: false}, {staged: true}]), + Keys.index.oneWith(filePath), + ], + () => this.git().writeMergeConflictToIndex(filePath, commonBaseSha, oursSha, theirsSha), + ); } // Checkout - @invalidate(() => [ - Keys.stagedChangesSinceParentCommit, - Keys.lastCommit, - Keys.recentCommits, - Keys.authors, - Keys.statusBundle, - Keys.index.all, - ...Keys.filePatch.eachWithOpts({staged: true}), - Keys.headDescription, - Keys.branches, - ]) checkout(revision, options = {}) { - // eslint-disable-next-line no-shadow - return this.executePipelineAction('CHECKOUT', (revision, options) => { - return this.git().checkout(revision, options); - }, revision, options); + return this.invalidate( + () => [ + Keys.stagedChangesSinceParentCommit, + Keys.lastCommit, + Keys.recentCommits, + Keys.authors, + Keys.statusBundle, + Keys.index.all, + ...Keys.filePatch.eachWithOpts({staged: true}), + Keys.headDescription, + Keys.branches, + ], + // eslint-disable-next-line no-shadow + () => this.executePipelineAction('CHECKOUT', (revision, options) => { + return this.git().checkout(revision, options); + }, revision, options), + ); } - @invalidate(paths => [ - Keys.statusBundle, - Keys.stagedChangesSinceParentCommit, - ...paths.map(fileName => Keys.index.oneWith(fileName)), - ...Keys.filePatch.eachWithFileOpts(paths, [{staged: true}]), - ]) checkoutPathsAtRevision(paths, revision = 'HEAD') { - return this.git().checkoutFiles(paths, revision); + return this.invalidate( + () => [ + Keys.statusBundle, + Keys.stagedChangesSinceParentCommit, + ...paths.map(fileName => Keys.index.oneWith(fileName)), + ...Keys.filePatch.eachWithFileOpts(paths, [{staged: true}]), + ], + () => this.git().checkoutFiles(paths, revision), + ); } // Reset - @invalidate(() => [ - Keys.stagedChangesSinceParentCommit, - Keys.lastCommit, - Keys.recentCommits, - Keys.authors, - Keys.statusBundle, - Keys.index.all, - ...Keys.filePatch.eachWithOpts({staged: true}), - Keys.headDescription, - ]) undoLastCommit() { - return this.git().reset('soft', 'HEAD~'); + return this.invalidate( + () => [ + Keys.stagedChangesSinceParentCommit, + Keys.lastCommit, + Keys.recentCommits, + Keys.authors, + Keys.statusBundle, + Keys.index.all, + ...Keys.filePatch.eachWithOpts({staged: true}), + Keys.headDescription, + ], + () => this.git().reset('soft', 'HEAD~'), + ); } // Remote interactions - @invalidate(branchName => [ - Keys.statusBundle, - Keys.headDescription, - ]) fetch(branchName) { - // eslint-disable-next-line no-shadow - return this.executePipelineAction('FETCH', async branchName => { - const remote = await this.getRemoteForBranch(branchName); - if (!remote.isPresent()) { - return null; - } - return this.git().fetch(remote.getName(), branchName); - }, branchName); + return this.invalidate( + () => [ + Keys.statusBundle, + Keys.headDescription, + ], + // eslint-disable-next-line no-shadow + () => this.executePipelineAction('FETCH', async branchName => { + const remote = await this.getRemoteForBranch(branchName); + if (!remote.isPresent()) { + return null; + } + return this.git().fetch(remote.getName(), branchName); + }, branchName), + ); } - @invalidate(() => [ - ...Keys.headOperationKeys(), - Keys.index.all, - Keys.headDescription, - Keys.branches, - ]) pull(branchName) { - // eslint-disable-next-line no-shadow - return this.executePipelineAction('PULL', async branchName => { - const remote = await this.getRemoteForBranch(branchName); - if (!remote.isPresent()) { - return null; - } - return this.git().pull(remote.getName(), branchName); - }, branchName); + return this.invalidate( + () => [ + ...Keys.headOperationKeys(), + Keys.index.all, + Keys.headDescription, + Keys.branches, + ], + // eslint-disable-next-line no-shadow + () => this.executePipelineAction('PULL', async branchName => { + const remote = await this.getRemoteForBranch(branchName); + if (!remote.isPresent()) { + return null; + } + return this.git().pull(remote.getName(), branchName); + }, branchName), + ); } - @invalidate((branchName, options = {}) => { - const keys = [ - Keys.statusBundle, - Keys.headDescription, - ]; - - if (options.setUpstream) { - keys.push(...Keys.config.eachWithSetting(`branch.${branchName}.remote`)); - } - - return keys; - }) push(branchName, options = {}) { - // eslint-disable-next-line no-shadow - return this.executePipelineAction('PUSH', async (branchName, options) => { - const remote = options.remote || await this.getRemoteForBranch(branchName); - return this.git().push(remote.getNameOr('origin'), branchName, options); - }, branchName, options); + return this.invalidate( + () => { + const keys = [ + Keys.statusBundle, + Keys.headDescription, + ]; + + if (options.setUpstream) { + keys.push(...Keys.config.eachWithSetting(`branch.${branchName}.remote`)); + } + + return keys; + }, + // eslint-disable-next-line no-shadow + () => this.executePipelineAction('PUSH', async (branchName, options) => { + const remote = options.remote || await this.getRemoteForBranch(branchName); + return this.git().push(remote.getNameOr('origin'), branchName, options); + }, branchName, options), + ); } // Configuration - @invalidate(setting => Keys.config.eachWithSetting(setting)) setConfig(setting, value, options) { - return this.git().setConfig(setting, value, options); + return this.invalidate( + () => Keys.config.eachWithSetting(setting), + () => this.git().setConfig(setting, value, options), + ); } - @invalidate(setting => Keys.config.eachWithSetting(setting)) unsetConfig(setting) { - return this.git().unsetConfig(setting); + return this.invalidate( + () => Keys.config.eachWithSetting(setting), + () => this.git().unsetConfig(setting), + ); } // Direct blob interactions @@ -447,18 +464,22 @@ export default class Present extends State { return this.saveDiscardHistory(); } - @invalidate(paths => [ - Keys.statusBundle, - ...paths.map(filePath => Keys.filePatch.oneWith(filePath, {staged: false})), - ]) - async discardWorkDirChangesForPaths(paths) { - const untrackedFiles = await this.git().getUntrackedFiles(); - const [filesToRemove, filesToCheckout] = partition(paths, f => untrackedFiles.includes(f)); - await this.git().checkoutFiles(filesToCheckout); - await Promise.all(filesToRemove.map(filePath => { - const absPath = path.join(this.workdir(), filePath); - return fs.remove(absPath); - })); + discardWorkDirChangesForPaths(paths) { + return this.invalidate( + () => [ + Keys.statusBundle, + ...paths.map(filePath => Keys.filePatch.oneWith(filePath, {staged: false})), + ], + async () => { + const untrackedFiles = await this.git().getUntrackedFiles(); + const [filesToRemove, filesToCheckout] = partition(paths, f => untrackedFiles.includes(f)); + await this.git().checkoutFiles(filesToCheckout); + await Promise.all(filesToRemove.map(filePath => { + const absPath = path.join(this.workdir(), filePath); + return fs.remove(absPath); + })); + }, + ); } // Accessors ///////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -703,9 +724,23 @@ export default class Present extends State { } // Cache + getCache() { return this.cache; } + + invalidate(spec, body) { + return body().then( + result => { + this.acceptInvalidation(spec); + return result; + }, + err => { + this.acceptInvalidation(spec); + return Promise.reject(err); + }, + ); + } } State.register(Present); @@ -1033,7 +1068,7 @@ const Keys = { oneWith: sha => `blob:${sha}`, }, - // Common collections of keys and patterns for use with @invalidate(). + // Common collections of keys and patterns for use with invalidate(). workdirOperationKeys: fileNames => [ Keys.statusBundle, diff --git a/lib/models/repository-states/state.js b/lib/models/repository-states/state.js index 6ac1a85cca..aa1756107e 100644 --- a/lib/models/repository-states/state.js +++ b/lib/models/repository-states/state.js @@ -2,23 +2,12 @@ import {nullCommit} from '../commit'; import BranchSet from '../branch-set'; import {nullOperationStates} from '../operation-states'; -export const expectedDelegates = []; - /** * Map of registered subclasses to allow states to transition to one another without circular dependencies. * Subclasses of State should call `State.register` to add themselves here. */ const stateConstructors = new Map(); -/** - * Methods marked with this decorator on State should be delegated from a Repository to its current state. This will - * be verified by a unit test in `repository.test.js`. - */ -function shouldDelegate(target, name, descriptor) { - expectedDelegates.push(name); - return descriptor; -} - /** * Base class for Repository states. Implements default "null" behavior. */ @@ -39,42 +28,34 @@ export default class State { // State probe predicates //////////////////////////////////////////////////////////////////////////////////////////// // Allow external callers to identify which state a Repository is in if necessary. - @shouldDelegate isLoadingGuess() { return false; } - @shouldDelegate isAbsentGuess() { return false; } - @shouldDelegate isAbsent() { return false; } - @shouldDelegate isLoading() { return false; } - @shouldDelegate isEmpty() { return false; } - @shouldDelegate isPresent() { return false; } - @shouldDelegate isTooLarge() { return false; } - @shouldDelegate isDestroyed() { return false; } @@ -82,32 +63,26 @@ export default class State { // Behavior probe predicates ///////////////////////////////////////////////////////////////////////////////////////// // Determine specific rendering behavior based on the current state. - @shouldDelegate isUndetermined() { return false; } - @shouldDelegate showGitTabInit() { return false; } - @shouldDelegate showGitTabInitInProgress() { return false; } - @shouldDelegate showGitTabLoading() { return false; } - @shouldDelegate showStatusBarTiles() { return false; } - @shouldDelegate hasDirectory() { return true; } @@ -115,27 +90,22 @@ export default class State { // Lifecycle actions ///////////////////////////////////////////////////////////////////////////////////////////////// // These generally default to rejecting a Promise with an error. - @shouldDelegate init() { return unsupportedOperationPromise(this, 'init'); } - @shouldDelegate clone(remoteUrl) { return unsupportedOperationPromise(this, 'clone'); } - @shouldDelegate destroy() { return this.transitionTo('Destroyed'); } - @shouldDelegate refresh() { // No-op } - @shouldDelegate observeFilesystemChange(events) { this.repository.refresh(); } @@ -146,158 +116,130 @@ export default class State { // Staging and unstaging - @shouldDelegate stageFiles(paths) { return unsupportedOperationPromise(this, 'stageFiles'); } - @shouldDelegate unstageFiles(paths) { return unsupportedOperationPromise(this, 'unstageFiles'); } - @shouldDelegate stageFilesFromParentCommit(paths) { return unsupportedOperationPromise(this, 'stageFilesFromParentCommit'); } - @shouldDelegate applyPatchToIndex(patch) { return unsupportedOperationPromise(this, 'applyPatchToIndex'); } - @shouldDelegate applyPatchToWorkdir(patch) { return unsupportedOperationPromise(this, 'applyPatchToWorkdir'); } // Committing - @shouldDelegate commit(message, options) { return unsupportedOperationPromise(this, 'commit'); } // Merging - @shouldDelegate merge(branchName) { return unsupportedOperationPromise(this, 'merge'); } - @shouldDelegate abortMerge() { return unsupportedOperationPromise(this, 'abortMerge'); } - @shouldDelegate checkoutSide(side, paths) { return unsupportedOperationPromise(this, 'checkoutSide'); } - @shouldDelegate mergeFile(oursPath, commonBasePath, theirsPath, resultPath) { return unsupportedOperationPromise(this, 'mergeFile'); } - @shouldDelegate writeMergeConflictToIndex(filePath, commonBaseSha, oursSha, theirsSha) { return unsupportedOperationPromise(this, 'writeMergeConflictToIndex'); } // Checkout - @shouldDelegate checkout(revision, options = {}) { return unsupportedOperationPromise(this, 'checkout'); } - @shouldDelegate checkoutPathsAtRevision(paths, revision = 'HEAD') { return unsupportedOperationPromise(this, 'checkoutPathsAtRevision'); } // Reset - @shouldDelegate undoLastCommit() { return unsupportedOperationPromise(this, 'undoLastCommit'); } // Remote interactions - @shouldDelegate fetch(branchName) { return unsupportedOperationPromise(this, 'fetch'); } - @shouldDelegate pull(branchName) { return unsupportedOperationPromise(this, 'pull'); } - @shouldDelegate push(branchName) { return unsupportedOperationPromise(this, 'push'); } // Configuration - @shouldDelegate setConfig(option, value, {replaceAll} = {}) { return unsupportedOperationPromise(this, 'setConfig'); } - @shouldDelegate unsetConfig(option) { return unsupportedOperationPromise(this, 'unsetConfig'); } // Direct blob interactions - @shouldDelegate createBlob({filePath, stdin} = {}) { return unsupportedOperationPromise(this, 'createBlob'); } - @shouldDelegate expandBlobToFile(absFilePath, sha) { return unsupportedOperationPromise(this, 'expandBlobToFile'); } // Discard history - @shouldDelegate createDiscardHistoryBlob() { return unsupportedOperationPromise(this, 'createDiscardHistoryBlob'); } - @shouldDelegate updateDiscardHistory() { return unsupportedOperationPromise(this, 'updateDiscardHistory'); } - @shouldDelegate storeBeforeAndAfterBlobs(filePaths, isSafe, destructiveAction, partialDiscardFilePath = null) { return unsupportedOperationPromise(this, 'storeBeforeAndAfterBlobs'); } - @shouldDelegate restoreLastDiscardInTempFiles(isSafe, partialDiscardFilePath = null) { return unsupportedOperationPromise(this, 'restoreLastDiscardInTempFiles'); } - @shouldDelegate popDiscardHistory(partialDiscardFilePath = null) { return unsupportedOperationPromise(this, 'popDiscardHistory'); } - @shouldDelegate clearDiscardHistory(partialDiscardFilePath = null) { return unsupportedOperationPromise(this, 'clearDiscardHistory'); } - @shouldDelegate discardWorkDirChangesForPaths(paths) { return unsupportedOperationPromise(this, 'discardWorkDirChangesForPaths'); } @@ -308,7 +250,6 @@ export default class State { // Index queries - @shouldDelegate getStatusBundle() { return Promise.resolve({ stagedFiles: {}, @@ -323,7 +264,6 @@ export default class State { }); } - @shouldDelegate getStatusesForChangedFiles() { return Promise.resolve({ stagedFiles: [], @@ -332,125 +272,104 @@ export default class State { }); } - @shouldDelegate getFilePatchForPath(filePath, options = {}) { return Promise.resolve(null); } - @shouldDelegate readFileFromIndex(filePath) { return Promise.reject(new Error(`fatal: Path ${filePath} does not exist (neither on disk nor in the index).`)); } // Commit access - @shouldDelegate getLastCommit() { return Promise.resolve(nullCommit); } - @shouldDelegate getRecentCommits() { return Promise.resolve([]); } // Author information - @shouldDelegate getAuthors() { return Promise.resolve({}); } // Branches - @shouldDelegate getBranches() { return Promise.resolve(new BranchSet()); } - @shouldDelegate getHeadDescription() { return Promise.resolve('(no repository)'); } // Merging and rebasing status - @shouldDelegate isMerging() { return Promise.resolve(false); } - @shouldDelegate isRebasing() { return Promise.resolve(false); } // Remotes - @shouldDelegate getRemotes() { return Promise.resolve([]); } - @shouldDelegate getAheadCount(branchName) { return Promise.resolve(null); } - @shouldDelegate getBehindCount(branchName) { return Promise.resolve(null); } - @shouldDelegate getConfig(option, {local} = {}) { return Promise.resolve(null); } // Direct blob access - @shouldDelegate getBlobContents(sha) { return Promise.reject(new Error(`fatal: Not a valid object name ${sha}`)); } // Discard history - @shouldDelegate hasDiscardHistory(partialDiscardFilePath = null) { return false; } - @shouldDelegate getDiscardHistory(partialDiscardFilePath = null) { return []; } - @shouldDelegate getLastHistorySnapshots(partialDiscardFilePath = null) { return null; } // Atom repo state - @shouldDelegate getOperationStates() { return nullOperationStates; } - @shouldDelegate setCommitMessage(message) { return unsupportedOperationPromise(this, 'setCommitMessage'); } - @shouldDelegate getCommitMessage() { return ''; } // Cache - @shouldDelegate getCache() { return null; } diff --git a/lib/models/repository.js b/lib/models/repository.js index e09bac85cd..7a3d58ca5a 100644 --- a/lib/models/repository.js +++ b/lib/models/repository.js @@ -247,9 +247,6 @@ export default class Repository { // The methods named here will be delegated to the current State. // -// This list should match the methods decorated with @shouldDelegate in `lib/models/repository-states/state.js`. A test -// case in `test/models/repository.test.js` ensures that these sets match. -// // Duplicated here rather than just using `expectedDelegates` directly so that this file is grep-friendly for answering // the question of "what all can a Repository do exactly". const delegates = [ diff --git a/lib/models/style-calculator.js b/lib/models/style-calculator.js index 9c72022ed0..33a849dbcc 100644 --- a/lib/models/style-calculator.js +++ b/lib/models/style-calculator.js @@ -1,9 +1,11 @@ import {CompositeDisposable} from 'event-kit'; -import {autobind} from 'core-decorators'; +import {autobind} from '../helpers'; export default class StyleCalculator { constructor(styles, config) { + autobind(this, 'updateStyles'); + this.styles = styles; this.config = config; } @@ -22,7 +24,6 @@ export default class StyleCalculator { return subscriptions; } - @autobind updateStyles(sourcePath, getStylesheetFn) { const stylesheet = getStylesheetFn(this.config); this.styles.addStyleSheet(stylesheet, {sourcePath, priority: 0}); diff --git a/lib/models/workdir-context.js b/lib/models/workdir-context.js index f6baa469e5..b7a5ed749b 100644 --- a/lib/models/workdir-context.js +++ b/lib/models/workdir-context.js @@ -1,10 +1,10 @@ import {Emitter, CompositeDisposable} from 'event-kit'; -import {autobind} from 'core-decorators'; import Repository from './repository'; import ResolutionProgress from './conflicts/resolution-progress'; import FileSystemChangeObserver from './file-system-change-observer'; import WorkspaceChangeObserver from './workspace-change-observer'; +import {autobind} from '../helpers'; const createRepoSym = Symbol('createRepo'); @@ -27,6 +27,8 @@ export default class WorkdirContext { * - `options.promptCallback`: Callback used to collect information interactively through Atom. */ constructor(directory, options = {}) { + autobind(this, 'repositoryChangedState'); + this.directory = directory; const {window: theWindow, workspace, promptCallback, pipelineManager} = options; @@ -90,7 +92,6 @@ export default class WorkdirContext { * The ResolutionProgress will be loaded before the change event is re-broadcast, but change observer modifications * will not be complete. */ - @autobind repositoryChangedState(payload) { if (this.destroyed) { return; diff --git a/lib/models/workspace-change-observer.js b/lib/models/workspace-change-observer.js index 03e50c5f85..00546f8d65 100644 --- a/lib/models/workspace-change-observer.js +++ b/lib/models/workspace-change-observer.js @@ -1,15 +1,16 @@ import path from 'path'; import {CompositeDisposable, Disposable, Emitter} from 'event-kit'; - import {watchPath} from 'atom'; -import {autobind} from 'core-decorators'; import EventLogger from './event-logger'; +import {autobind} from '../helpers'; export const FOCUS = Symbol('focus'); export default class WorkspaceChangeObserver { constructor(window, workspace, repository) { + autobind(this, 'observeTextEditor'); + this.window = window; this.repository = repository; this.workspace = workspace; @@ -134,7 +135,6 @@ export default class WorkspaceChangeObserver { } } - @autobind observeTextEditor(editor) { const buffer = editor.getBuffer(); if (!this.observedBuffers.has(buffer)) { diff --git a/lib/periodic-refresher.js b/lib/periodic-refresher.js index d546a3a7bd..806bd0def4 100644 --- a/lib/periodic-refresher.js +++ b/lib/periodic-refresher.js @@ -1,4 +1,4 @@ -import {autobind} from 'core-decorators'; +import {autobind} from './helpers'; const refreshMapPerUniqueId = new WeakMap(); @@ -14,6 +14,8 @@ export default class PeriodicRefresher { } constructor(uniqueId, options) { + autobind(this, 'refreshNow'); + this.options = options; this._refreshesPerId = PeriodicRefresher.getRefreshMap(uniqueId); } @@ -35,7 +37,6 @@ export default class PeriodicRefresher { this._timer = setTimeout(this.refreshNow, this.options.interval()); } - @autobind refreshNow(force = false) { const currentId = this.options.getCurrentId(); const lastRefreshForId = this._refreshesPerId.get(currentId) || 0; diff --git a/lib/views/branch-menu-view.js b/lib/views/branch-menu-view.js index 01517d52a7..0672fd5b92 100644 --- a/lib/views/branch-menu-view.js +++ b/lib/views/branch-menu-view.js @@ -1,11 +1,11 @@ import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import cx from 'classnames'; import Commands, {Command} from '../atom/commands'; import {BranchPropType, BranchSetPropType} from '../prop-types'; import {GitError} from '../git-shell-out-strategy'; +import {autobind} from '../helpers'; export default class BranchMenuView extends React.Component { static propTypes = { @@ -24,6 +24,7 @@ export default class BranchMenuView extends React.Component { constructor(props, context) { super(props, context); + autobind(this, 'didSelectItem', 'createBranch', 'checkout', 'cancelCreateNewBranch'); this.state = { createNew: false, @@ -109,13 +110,11 @@ export default class BranchMenuView extends React.Component { } } - @autobind async didSelectItem(event) { const branchName = event.target.value; await this.checkout(branchName); } - @autobind async createBranch() { if (this.state.createNew) { const branchName = this.editorElement.innerText.trim(); @@ -127,7 +126,6 @@ export default class BranchMenuView extends React.Component { } } - @autobind async checkout(branchName, options) { this.editorElement.classList.remove('is-focused'); this.setState({checkedOutBranch: branchName}); @@ -145,7 +143,6 @@ export default class BranchMenuView extends React.Component { } } - @autobind cancelCreateNewBranch() { this.setState({createNew: false}); } diff --git a/lib/views/clone-dialog.js b/lib/views/clone-dialog.js index 038e818198..68d41854be 100644 --- a/lib/views/clone-dialog.js +++ b/lib/views/clone-dialog.js @@ -1,11 +1,11 @@ import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import {CompositeDisposable} from 'event-kit'; import url from 'url'; import path from 'path'; import Commands, {Command} from '../atom/commands'; +import {autobind} from '../helpers'; export default class CloneDialog extends React.Component { static propTypes = { @@ -24,6 +24,7 @@ export default class CloneDialog extends React.Component { constructor(props, context) { super(props, context); + autobind(this, 'clone', 'cancel', 'didChangeRemoteUrl', 'didChangeProjectPath', 'editorRefs'); this.state = { cloneDisabled: false, @@ -98,7 +99,6 @@ export default class CloneDialog extends React.Component { ); } - @autobind clone() { if (this.getRemoteUrl().length === 0 || this.getProjectPath().length === 0) { return; @@ -107,12 +107,10 @@ export default class CloneDialog extends React.Component { this.props.didAccept(this.getRemoteUrl(), this.getProjectPath()); } - @autobind cancel() { this.props.didCancel(); } - @autobind didChangeRemoteUrl() { if (!this.projectPathModified) { const name = path.basename(url.parse(this.getRemoteUrl()).pathname, '.git') || ''; @@ -127,13 +125,11 @@ export default class CloneDialog extends React.Component { this.setCloneEnablement(); } - @autobind didChangeProjectPath() { this.projectPathModified = true; this.setCloneEnablement(); } - @autobind editorRefs(baseName) { const elementName = `${baseName}Element`; const modelName = `${baseName}Editor`; diff --git a/lib/views/co-author-form.js b/lib/views/co-author-form.js index 290be2dfb8..a4aa6b0bbf 100644 --- a/lib/views/co-author-form.js +++ b/lib/views/co-author-form.js @@ -1,8 +1,8 @@ import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import Commands, {Command} from '../atom/commands'; +import {autobind} from '../helpers'; export default class CoAuthorForm extends React.Component { static propTypes = { @@ -19,6 +19,7 @@ export default class CoAuthorForm extends React.Component { constructor(props, context) { super(props, context); + autobind(this, 'confirm', 'cancel', 'onNameChange', 'onEmailChange', 'validate', 'focusFirstInput'); this.state = { name: this.props.name, @@ -72,29 +73,24 @@ export default class CoAuthorForm extends React.Component { ); } - @autobind confirm() { if (this.isInputValid()) { this.props.onSubmit({name: this.state.name, email: this.state.email}); } } - @autobind cancel() { this.props.onCancel(); } - @autobind onNameChange(e) { this.setState({name: e.target.value}, this.validate); } - @autobind onEmailChange(e) { this.setState({email: e.target.value}, this.validate); } - @autobind validate() { if (this.isInputValid()) { this.setState({submitDisabled: false}); @@ -109,7 +105,6 @@ export default class CoAuthorForm extends React.Component { return this.state.name && this.state.email.includes('@'); } - @autobind focusFirstInput() { this.nameInput.focus(); } diff --git a/lib/views/commit-view.js b/lib/views/commit-view.js index ac47d778a6..0a81f1f7b0 100644 --- a/lib/views/commit-view.js +++ b/lib/views/commit-view.js @@ -1,15 +1,14 @@ import React from 'react'; import PropTypes from 'prop-types'; import {CompositeDisposable} from 'event-kit'; -import {autobind} from 'core-decorators'; import cx from 'classnames'; import Select from 'react-select'; -import CoAuthorForm from './co-author-form'; import Tooltip from '../atom/tooltip'; import AtomTextEditor from '../atom/atom-text-editor'; +import CoAuthorForm from './co-author-form'; import RefHolder from '../models/ref-holder'; -import {LINE_ENDING_REGEX} from '../helpers'; +import {LINE_ENDING_REGEX, autobind} from '../helpers'; import {AuthorPropType} from '../prop-types'; const TOOLTIP_DELAY = 200; @@ -52,6 +51,12 @@ export default class CommitView extends React.Component { constructor(props, context) { super(props, context); + autobind( + this, + 'submitNewCoAuthor', 'cancelNewCoAuthor', 'didChangeCommitMessage', 'didMoveCursor', 'toggleHardWrap', + 'toggleCoAuthorInput', 'abortMerge', 'commit', 'amendLastCommit', 'toggleExpandedCommitMessageEditor', + 'renderCoAuthorListItem', 'onSelectedCoAuthorsChanged', + ); this.state = { showWorking: false, @@ -327,13 +332,11 @@ export default class CommitView extends React.Component { ); } - @autobind submitNewCoAuthor(newAuthor) { this.props.updateSelectedCoAuthors(this.props.selectedCoAuthors, newAuthor); this.hideNewAuthorForm(); } - @autobind cancelNewCoAuthor() { this.hideNewAuthorForm(); } @@ -352,23 +355,19 @@ export default class CommitView extends React.Component { this.subscriptions.dispose(); } - @autobind didChangeCommitMessage(editor) { this.props.onChangeMessage(editor.getText()); } - @autobind didMoveCursor() { this.forceUpdate(); } - @autobind toggleHardWrap() { const currentSetting = this.props.config.get('github.automaticCommitMessageWrapping'); this.props.config.set('github.automaticCommitMessageWrapping', !currentSetting); } - @autobind toggleCoAuthorInput() { this.setState({ showCoAuthorInput: !this.state.showCoAuthorInput, @@ -382,12 +381,10 @@ export default class CommitView extends React.Component { }); } - @autobind abortMerge() { this.props.abortMerge(); } - @autobind async commit(event, amend) { if (await this.props.prepareToCommit() && this.commitIsEnabled(amend)) { try { @@ -403,7 +400,6 @@ export default class CommitView extends React.Component { } } - @autobind amendLastCommit() { this.commit(null, true); } @@ -462,7 +458,6 @@ export default class CommitView extends React.Component { } } - @autobind toggleExpandedCommitMessageEditor() { return this.props.toggleExpandedCommitMessageEditor(this.editor && this.editor.getText()); } @@ -487,7 +482,6 @@ export default class CommitView extends React.Component { ); } - @autobind renderCoAuthorListItem(author) { return (
    @@ -503,7 +497,6 @@ export default class CommitView extends React.Component { ); } - @autobind onSelectedCoAuthorsChanged(selectedCoAuthors) { const newAuthor = selectedCoAuthors.find(author => author.isNew); diff --git a/lib/views/credential-dialog.js b/lib/views/credential-dialog.js index c791facdf5..0694857b79 100644 --- a/lib/views/credential-dialog.js +++ b/lib/views/credential-dialog.js @@ -1,8 +1,8 @@ import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import Commands, {Command} from '../atom/commands'; +import {autobind} from '../helpers'; export default class CredentialDialog extends React.Component { static propTypes = { @@ -23,6 +23,7 @@ export default class CredentialDialog extends React.Component { constructor(props, context) { super(props, context); + autobind(this, 'confirm', 'cancel', 'onUsernameChange', 'onPasswordChange', 'onRememberChange', 'focusFirstInput'); this.state = { username: '', @@ -88,7 +89,6 @@ export default class CredentialDialog extends React.Component { ); } - @autobind confirm() { const payload = {password: this.state.password}; @@ -103,27 +103,22 @@ export default class CredentialDialog extends React.Component { this.props.onSubmit(payload); } - @autobind cancel() { this.props.onCancel(); } - @autobind onUsernameChange(e) { this.setState({username: e.target.value}); } - @autobind onPasswordChange(e) { this.setState({password: e.target.value}); } - @autobind onRememberChange(e) { this.setState({remember: e.target.checked}); } - @autobind focusFirstInput() { (this.usernameInput || this.passwordInput).focus(); } diff --git a/lib/views/donut-chart.js b/lib/views/donut-chart.js index d0b82230fa..3f3e7783a2 100644 --- a/lib/views/donut-chart.js +++ b/lib/views/donut-chart.js @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; + +import {autobind} from '../helpers'; export default class DonutChart extends React.Component { static propTypes = { @@ -18,6 +19,11 @@ export default class DonutChart extends React.Component { baseOffset: 25, } + constructor(props) { + super(props); + autobind(this, 'renderArc'); + } + render() { const {slices, baseOffset, ...others} = this.props; // eslint-disable-line no-unused-vars const arcs = this.calculateArcs(slices); @@ -44,7 +50,6 @@ export default class DonutChart extends React.Component { }); } - @autobind renderArc({length, position, type, className}) { return ( 100644', @@ -58,6 +58,14 @@ export default class FilePatchView extends React.Component { constructor(props, context) { super(props, context); + autobind( + this, + 'registerCommands', 'renderButtonGroup', 'renderExecutableModeChange', 'renderSymlinkChange', 'contextMenuOnItem', + 'mousedownOnLine', 'mousemoveOnLine', 'mouseup', 'togglePatchSelectionMode', 'selectNext', 'selectNextElement', + 'selectToNext', 'selectPrevious', 'selectPreviousElement', 'selectToPrevious', 'selectFirst', 'selectToFirst', + 'selectLast', 'selectToLast', 'selectAll', 'didConfirm', 'didMoveRight', 'focus', 'openFile', 'stageOrUnstageAll', + 'stageOrUnstageModeChange', 'stageOrUnstageSymlinkChange', 'discardSelection', + ); this.mouseSelectionInProgress = false; this.disposables = new CompositeDisposable(); @@ -228,7 +236,6 @@ export default class FilePatchView extends React.Component { ); } - @autobind registerCommands() { return (
    @@ -280,7 +287,6 @@ export default class FilePatchView extends React.Component { ); } - @autobind renderButtonGroup() { const unstaged = this.props.stagingStatus === 'unstaged'; @@ -322,7 +328,6 @@ export default class FilePatchView extends React.Component { ); } - @autobind renderExecutableModeChange(unstaged) { const {executableModeChange} = this.props; return ( @@ -352,7 +357,6 @@ export default class FilePatchView extends React.Component { ); } - @autobind renderSymlinkChange(unstaged) { const {symlinkChange} = this.props; const {oldSymlink, newSymlink} = symlinkChange; @@ -445,7 +449,6 @@ export default class FilePatchView extends React.Component { this.disposables.dispose(); } - @autobind contextMenuOnItem(event, hunk, line) { const resend = () => { const newEvent = new MouseEvent(event.type, event); @@ -509,7 +512,6 @@ export default class FilePatchView extends React.Component { }); } - @autobind mousedownOnLine(event, hunk, line) { if (event.button !== 0) { return; } const windows = process.platform === 'win32'; @@ -543,7 +545,6 @@ export default class FilePatchView extends React.Component { }); } - @autobind mousemoveOnLine(event, hunk, line) { if (!this.mouseSelectionInProgress) { return; } @@ -558,7 +559,6 @@ export default class FilePatchView extends React.Component { }); } - @autobind mouseup() { this.mouseSelectionInProgress = false; this.setState(prevState => { @@ -566,7 +566,6 @@ export default class FilePatchView extends React.Component { }); } - @autobind togglePatchSelectionMode() { this.setState(prevState => ({selection: prevState.selection.toggleMode()})); } @@ -583,12 +582,10 @@ export default class FilePatchView extends React.Component { return this.state.selection.getSelectedLines(); } - @autobind selectNext() { this.setState(prevState => ({selection: prevState.selection.selectNext()})); } - @autobind selectNextElement() { if (this.state.selection.isEmpty() && this.props.didSurfaceFile) { this.props.didSurfaceFile(); @@ -597,19 +594,16 @@ export default class FilePatchView extends React.Component { } } - @autobind selectToNext() { this.setState(prevState => { return {selection: prevState.selection.selectNext(true).coalesce()}; }); } - @autobind selectPrevious() { this.setState(prevState => ({selection: prevState.selection.selectPrevious()})); } - @autobind selectPreviousElement() { if (this.state.selection.isEmpty() && this.props.didSurfaceFile) { this.props.didSurfaceFile(); @@ -618,34 +612,28 @@ export default class FilePatchView extends React.Component { } } - @autobind selectToPrevious() { this.setState(prevState => { return {selection: prevState.selection.selectPrevious(true).coalesce()}; }); } - @autobind selectFirst() { this.setState(prevState => ({selection: prevState.selection.selectFirst()})); } - @autobind selectToFirst() { this.setState(prevState => ({selection: prevState.selection.selectFirst(true)})); } - @autobind selectLast() { this.setState(prevState => ({selection: prevState.selection.selectLast()})); } - @autobind selectToLast() { this.setState(prevState => ({selection: prevState.selection.selectLast(true)})); } - @autobind selectAll() { return new Promise(resolve => { this.setState(prevState => ({selection: prevState.selection.selectAll()}), resolve); @@ -676,24 +664,20 @@ export default class FilePatchView extends React.Component { } } - @autobind didConfirm() { return this.didClickStageButtonForHunk([...this.state.selection.getSelectedHunks()][0]); } - @autobind didMoveRight() { if (this.props.didSurfaceFile) { this.props.didSurfaceFile(); } } - @autobind focus() { this.refElement.get().focus(); } - @autobind openFile() { let lineNumber = 0; const firstSelectedLine = Array.from(this.state.selection.getSelectedLines())[0]; @@ -706,22 +690,18 @@ export default class FilePatchView extends React.Component { return this.props.openCurrentFile({lineNumber}); } - @autobind stageOrUnstageAll() { this.props.attemptFileStageOperation(); } - @autobind stageOrUnstageModeChange() { this.props.attemptModeStageOperation(); } - @autobind stageOrUnstageSymlinkChange() { this.props.attemptSymlinkStageOperation(); } - @autobind discardSelection() { const selectedLines = this.state.selection.getSelectedLines(); return selectedLines.size ? this.props.discardLines(selectedLines) : null; diff --git a/lib/views/git-cache-view.js b/lib/views/git-cache-view.js index 0998b8ca85..e99925c857 100644 --- a/lib/views/git-cache-view.js +++ b/lib/views/git-cache-view.js @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import {inspect} from 'util'; import ObserveModel from './observe-model'; +import {autobind} from '../helpers'; const sortOrders = { 'by key': (a, b) => a.key.localeCompare(b.key), @@ -26,6 +26,7 @@ export default class GitCacheView extends React.Component { constructor(props, context) { super(props, context); + autobind(this, 'fetchRepositoryData', 'fetchCacheData', 'renderCache', 'didSelectItem', 'clearCache'); this.state = { order: 'by key', @@ -44,12 +45,10 @@ export default class GitCacheView extends React.Component { return null; } - @autobind fetchRepositoryData(repository) { return repository.getCache(); } - @autobind fetchCacheData(cache) { const cached = {}; const promises = []; @@ -86,7 +85,6 @@ export default class GitCacheView extends React.Component { ); } - @autobind renderCache(contents) { const rows = Object.keys(contents || {}).map(key => { return { @@ -190,7 +188,6 @@ export default class GitCacheView extends React.Component { return parts.slice(parts.length - 2).join(' '); } - @autobind didSelectItem(event) { this.setState({order: event.target.value}); } @@ -204,7 +201,6 @@ export default class GitCacheView extends React.Component { cache.removePrimary(key); } - @autobind clearCache() { const cache = this.props.repository.getCache(); if (!cache) { diff --git a/lib/views/git-tab-view.js b/lib/views/git-tab-view.js index 1cfc239adb..ac75712030 100644 --- a/lib/views/git-tab-view.js +++ b/lib/views/git-tab-view.js @@ -1,6 +1,5 @@ import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import cx from 'classnames'; import {CompositeDisposable} from 'atom'; @@ -8,7 +7,7 @@ import StagingView from './staging-view'; import GitLogo from './git-logo'; import CommitController from '../controllers/commit-controller'; import RecentCommitsController from '../controllers/recent-commits-controller'; -import {isValidWorkdir} from '../helpers'; +import {isValidWorkdir, autobind} from '../helpers'; import {AuthorPropType} from '../prop-types'; export default class GitTabView extends React.Component { @@ -62,6 +61,7 @@ export default class GitTabView extends React.Component { constructor(props, context) { super(props, context); + autobind(this, 'initializeRepo', 'blur', 'advanceFocus', 'retreatFocus', 'quietlySelectItem'); this.subscriptions = new CompositeDisposable(); @@ -203,7 +203,6 @@ export default class GitTabView extends React.Component { this.subscriptions.dispose(); } - @autobind initializeRepo(event) { event.preventDefault(); let initPath = null; @@ -247,12 +246,10 @@ export default class GitTabView extends React.Component { return false; } - @autobind blur() { this.props.workspace.getActivePane().activate(); } - @autobind async advanceFocus(evt) { // The commit controller manages its own focus if (this.refCommitController.hasFocus()) { return; } @@ -265,7 +262,6 @@ export default class GitTabView extends React.Component { } } - @autobind async retreatFocus(evt) { const stagingView = this.refStagingView; const commitController = this.refCommitController; @@ -291,7 +287,6 @@ export default class GitTabView extends React.Component { return this.refRoot.contains(document.activeElement); } - @autobind quietlySelectItem(filePath, stagingStatus) { return this.refStagingView.quietlySelectItem(filePath, stagingStatus); } diff --git a/lib/views/git-timings-view.js b/lib/views/git-timings-view.js index 0067a3424c..6f1b6b88ce 100644 --- a/lib/views/git-timings-view.js +++ b/lib/views/git-timings-view.js @@ -2,15 +2,14 @@ import {TextBuffer} from 'atom'; import {Emitter, CompositeDisposable} from 'event-kit'; import {remote} from 'electron'; const {dialog} = remote; - import React from 'react'; import ReactDom from 'react-dom'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import memoize from 'lodash.memoize'; import fs from 'fs-extra'; import Octicon from '../atom/octicon'; +import {autobind} from '../helpers'; const genArray = memoize(function genArray(interval, count) { const arr = []; @@ -105,6 +104,11 @@ class MarkerSpan extends React.Component { marker: PropTypes.instanceOf(Marker).isRequired, } + constructor(props) { + super(props); + autobind(this, 'handleMouseOver', 'handleMouseOut'); + } + render() { const {marker, ...others} = this.props; const timings = marker.getTimings(); @@ -130,7 +134,6 @@ class MarkerSpan extends React.Component { ); } - @autobind handleMouseOver(e) { const elem = document.createElement('div'); ReactDom.render(, elem); @@ -146,7 +149,6 @@ class MarkerSpan extends React.Component { this.tooltipDisposable = null; } - @autobind handleMouseOut(e) { this.closeTooltip(); } @@ -165,6 +167,7 @@ class Waterfall extends React.Component { constructor(props, context) { super(props, context); + autobind(this, 'renderMarker'); this.state = this.getNextState(props); } @@ -236,7 +239,6 @@ class Waterfall extends React.Component { ); } - @autobind renderMarker(marker, i) { if (marker.getStart() === null || marker.getEnd() === null) { return
    ; } @@ -266,13 +268,13 @@ class WaterfallWidget extends React.Component { constructor(props, context) { super(props, context); + autobind(this, 'handleZoomFactorChange', 'handleCollapseClick', 'handleExportClick'); this.state = { zoomFactor: 0.3, collapsed: false, }; } - render() { const {markers} = this.props; const firstMarker = markers[0]; @@ -312,17 +314,14 @@ class WaterfallWidget extends React.Component { ); } - @autobind handleZoomFactorChange(e) { this.setState({zoomFactor: parseFloat(e.target.value)}); } - @autobind handleCollapseClick(e) { this.setState(s => ({collapsed: !s.collapsed})); } - @autobind handleExportClick(e) { e.preventDefault(); const json = JSON.stringify(this.props.markers.map(m => m.serialize()), null, ' '); @@ -392,6 +391,11 @@ export default class GitTimingsView extends React.Component { return GitTimingsView.emitter.on('did-update', callback); } + constructor(props) { + super(props); + autobind(this, 'handleImportClick'); + } + componentDidMount() { this.subscriptions = new CompositeDisposable( GitTimingsView.onDidUpdate(() => this.forceUpdate()), @@ -415,7 +419,6 @@ export default class GitTimingsView extends React.Component { ); } - @autobind handleImportClick(e) { e.preventDefault(); dialog.showOpenDialog({ diff --git a/lib/views/github-dotcom-markdown.js b/lib/views/github-dotcom-markdown.js index 2556991d5d..f21b9f354b 100644 --- a/lib/views/github-dotcom-markdown.js +++ b/lib/views/github-dotcom-markdown.js @@ -3,12 +3,11 @@ import {CompositeDisposable, Disposable} from 'event-kit'; import React from 'react'; import ReactDom from 'react-dom'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import {handleClickEvent, openIssueishLinkInNewTab, openLinkInBrowser, getDataFromGithubUrl} from './issueish-link'; import UserMentionTooltipItem from '../atom-items/user-mention-tooltip-item'; import IssueishTooltipItem from '../atom-items/issueish-tooltip-item'; - +import {autobind} from '../helpers'; export default class GithubDotcomMarkdown extends React.Component { static propTypes = { @@ -21,6 +20,11 @@ export default class GithubDotcomMarkdown extends React.Component { relayEnvironment: PropTypes.object.isRequired, } + constructor(props) { + super(props); + autobind(this, 'handleClick', 'openLinkInNewTab', 'openLinkInThisTab', 'openLinkInBrowser'); + } + componentDidMount() { this.commandSubscriptions = atom.commands.add(ReactDom.findDOMNode(this), { 'github:open-link-in-new-tab': this.openLinkInNewTab, @@ -99,25 +103,21 @@ export default class GithubDotcomMarkdown extends React.Component { return 'WARNING: cannot yet convert markdown to HTML 😅'; } - @autobind handleClick(event) { if (event.target.dataset.url) { handleClickEvent(event, event.target.dataset.url); } } - @autobind openLinkInNewTab(event) { return openIssueishLinkInNewTab(event.target.dataset.url); } - @autobind openLinkInThisTab(event) { const {repoOwner, repoName, issueishNumber} = getDataFromGithubUrl(event.target.dataset.url); this.props.switchToIssueish(repoOwner, repoName, issueishNumber); } - @autobind openLinkInBrowser(event) { return openLinkInBrowser(event.target.getAttribute('href')); } diff --git a/lib/views/github-login-view.js b/lib/views/github-login-view.js index ff13261e1d..e959d06576 100644 --- a/lib/views/github-login-view.js +++ b/lib/views/github-login-view.js @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; + +import {autobind} from '../helpers'; export default class GithubLoginView extends React.Component { static propTypes = { @@ -15,6 +16,10 @@ export default class GithubLoginView extends React.Component { constructor(props, context) { super(props, context); + autobind( + this, + 'handleLoginClick', 'handleCancelTokenClick', 'handleSubmitTokenClick', 'handleSubmitToken', 'handleTokenChange', + ); this.state = { loggingIn: false, token: '', @@ -78,29 +83,24 @@ export default class GithubLoginView extends React.Component { ); } - @autobind handleLoginClick() { this.setState({loggingIn: true}); } - @autobind handleCancelTokenClick(e) { e.preventDefault(); this.setState({loggingIn: false}); } - @autobind handleSubmitTokenClick(e) { e.preventDefault(); this.handleSubmitToken(); } - @autobind handleSubmitToken() { this.props.onLogin(this.state.token); } - @autobind handleTokenChange(e) { this.setState({token: e.target.value}); } diff --git a/lib/views/hunk-view.js b/lib/views/hunk-view.js index f793274113..794f4887f2 100644 --- a/lib/views/hunk-view.js +++ b/lib/views/hunk-view.js @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import SimpleTooltip from '../atom/simple-tooltip'; import ContextMenuInterceptor from '../context-menu-interceptor'; +import {autobind} from '../helpers'; export default class HunkView extends React.Component { static propTypes = { @@ -27,6 +27,7 @@ export default class HunkView extends React.Component { constructor(props, context) { super(props, context); + autobind(this, 'mousedownOnLine', 'mousemoveOnLine', 'registerLineElement'); this.lineElements = new WeakMap(); this.lastMousemoveLine = null; @@ -76,12 +77,10 @@ export default class HunkView extends React.Component { ); } - @autobind mousedownOnLine(event, line) { this.props.mousedownOnLine(event, this.props.hunk, line); } - @autobind mousemoveOnLine(event, line) { if (line !== this.lastMousemoveLine) { this.lastMousemoveLine = line; @@ -89,7 +88,6 @@ export default class HunkView extends React.Component { } } - @autobind registerLineElement(line, element) { this.lineElements.set(line, element); } diff --git a/lib/views/init-dialog.js b/lib/views/init-dialog.js index e5186857eb..43985985e8 100644 --- a/lib/views/init-dialog.js +++ b/lib/views/init-dialog.js @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import {CompositeDisposable} from 'event-kit'; import Commands, {Command} from '../atom/commands'; +import {autobind} from '../helpers'; export default class InitDialog extends React.Component { static propTypes = { @@ -21,6 +21,7 @@ export default class InitDialog extends React.Component { constructor(props, context) { super(props, context); + autobind(this, 'init', 'cancel', 'editorRef', 'setInitEnablement'); this.state = { initDisabled: false, @@ -69,7 +70,6 @@ export default class InitDialog extends React.Component { ); } - @autobind init() { if (this.getProjectPath().length === 0) { return; @@ -78,12 +78,10 @@ export default class InitDialog extends React.Component { this.props.didAccept(this.getProjectPath()); } - @autobind cancel() { this.props.didCancel(); } - @autobind editorRef() { return element => { if (!element) { @@ -114,7 +112,6 @@ export default class InitDialog extends React.Component { return this.remoteUrlEditor ? this.remoteUrlEditor.getText() : ''; } - @autobind setInitEnablement() { this.setState({initDisabled: this.getProjectPath().length === 0}); } diff --git a/lib/views/issueish-timeline-view.js b/lib/views/issueish-timeline-view.js index 5fbd4624ad..68794e0e24 100644 --- a/lib/views/issueish-timeline-view.js +++ b/lib/views/issueish-timeline-view.js @@ -1,8 +1,8 @@ import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import {RelayConnectionPropType} from '../prop-types'; +import {autobind} from '../helpers'; import Octicon from '../atom/octicon'; import CommitsContainer from './../containers/timeline-items/commits-container.js'; import IssueCommentContainer from './../containers/timeline-items/issue-comment-container.js'; @@ -26,11 +26,15 @@ function collectionRenderer(Component, styleAsTimelineItem = true) { return Component.getFragment(frag, ...args); } + constructor(props) { + super(props); + autobind(this, 'renderNode'); + } + render() { return
    {this.props.nodes.map(this.renderNode)}
    ; } - @autobind renderNode(node, i) { return ( { this.forceUpdate(); diff --git a/lib/views/observe-model.js b/lib/views/observe-model.js index 0ed1ae0857..5bd8eb5e21 100644 --- a/lib/views/observe-model.js +++ b/lib/views/observe-model.js @@ -1,8 +1,8 @@ import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import ModelObserver from '../models/model-observer'; +import {autobind} from '../helpers'; export default class ObserveModel extends React.Component { static propTypes = { @@ -15,6 +15,7 @@ export default class ObserveModel extends React.Component { constructor(props, context) { super(props, context); + autobind(this, 'fetchData', 'didUpdate'); this.state = {data: null}; this.modelObserver = new ModelObserver({fetchData: this.fetchData, didUpdate: this.didUpdate}); } @@ -28,12 +29,10 @@ export default class ObserveModel extends React.Component { this.modelObserver.setActiveModel(nextProps.model); } - @autobind fetchData(model) { return this.props.fetchData(model); } - @autobind didUpdate(model) { if (this.mounted) { const data = this.modelObserver.getActiveModelData(); diff --git a/lib/views/open-issueish-dialog.js b/lib/views/open-issueish-dialog.js index 2a21f0e8fb..dbd21ff04d 100644 --- a/lib/views/open-issueish-dialog.js +++ b/lib/views/open-issueish-dialog.js @@ -1,9 +1,9 @@ import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; import {CompositeDisposable} from 'event-kit'; import Commands, {Command} from '../atom/commands'; +import {autobind} from '../helpers'; const ISSUEISH_URL_REGEX = /^(?:https?:\/\/)?github.com\/([^/]+)\/([^/]+)\/(?:issues|pull)\/(\d+)/; @@ -21,6 +21,7 @@ export default class OpenIssueishDialog extends React.Component { constructor(props, context) { super(props, context); + autobind(this, 'accept', 'cancel', 'editorRefs', 'didChangeIssueishUrl'); this.state = { cloneDisabled: false, @@ -69,7 +70,6 @@ export default class OpenIssueishDialog extends React.Component { ); } - @autobind accept() { if (this.getIssueishUrl().length === 0) { return; @@ -87,12 +87,10 @@ export default class OpenIssueishDialog extends React.Component { this.props.didAccept({repoOwner, repoName, issueishNumber}); } - @autobind cancel() { this.props.didCancel(); } - @autobind editorRefs(baseName) { const elementName = `${baseName}Element`; const modelName = `${baseName}Editor`; @@ -120,12 +118,10 @@ export default class OpenIssueishDialog extends React.Component { }; } - @autobind didChangeIssueishUrl() { this.setState({error: null}); } - parseUrl() { const url = this.getIssueishUrl(); const matches = url.match(ISSUEISH_URL_REGEX); diff --git a/lib/views/pr-url-input-box.js b/lib/views/pr-url-input-box.js index 47f739423c..790bf151ff 100644 --- a/lib/views/pr-url-input-box.js +++ b/lib/views/pr-url-input-box.js @@ -1,6 +1,7 @@ import React from 'react'; import PropTypes from 'prop-types'; -import {autobind} from 'core-decorators'; + +import {autobind} from '../helpers'; export default class PrUrlInputBox extends React.Component { static propTypes = { @@ -10,6 +11,7 @@ export default class PrUrlInputBox extends React.Component { constructor(props, context) { super(props, context); + autobind(this, 'handleSubmitUrlClick', 'handleSubmitUrl', 'handleUrlChange'); this.state = { url: '', }; @@ -37,18 +39,15 @@ export default class PrUrlInputBox extends React.Component { ); } - @autobind handleSubmitUrlClick(e) { e.preventDefault(); this.handleSubmitUrl(); } - @autobind handleSubmitUrl() { this.props.onSubmit(this.state.url); } - @autobind handleUrlChange(e) { this.setState({url: e.target.value}); } diff --git a/lib/views/staging-view.js b/lib/views/staging-view.js index 465289b639..86796f5757 100644 --- a/lib/views/staging-view.js +++ b/lib/views/staging-view.js @@ -4,9 +4,7 @@ const {Menu, MenuItem} = remote; import {File} from 'atom'; import React, {Fragment} from 'react'; import PropTypes from 'prop-types'; - import path from 'path'; -import {autobind} from 'core-decorators'; import {FilePatchItemPropType, MergeConflictItemPropType} from '../prop-types'; import FilePatchListItemView from './file-patch-list-item-view'; @@ -16,6 +14,7 @@ import CompositeListSelection from '../models/composite-list-selection'; import ResolutionProgress from '../models/conflicts/resolution-progress'; import FilePatchController from '../controllers/file-patch-controller'; import Commands, {Command} from '../atom/commands'; +import {autobind} from '../helpers'; const debounce = (fn, wait) => { let timeout; @@ -77,6 +76,15 @@ export default class StagingView extends React.Component { constructor(props) { super(props); + autobind( + this, + 'dblclickOnItem', 'contextMenuOnItem', 'mousedownOnItem', 'mousemoveOnItem', 'mouseup', 'registerItemElement', + 'renderBody', 'openFile', 'discardChanges', 'activateNextList', 'activatePreviousList', 'activateLastList', + 'stageAll', 'unstageAll', 'stageAllMergeConflicts', 'discardAll', 'confirmSelectedItems', 'selectAll', + 'selectFirst', 'selectLast', 'diveIntoSelection', 'showDiffView', 'showBulkResolveMenu', + 'resolveCurrentAsOurs', 'resolveCurrentAsTheirs', 'quietlySelectItem', 'didChangeSelectedItems', + 'undoLastDiscard', + ); this.subs = new CompositeDisposable( atom.config.observe('github.keyboardNavigationDelay', value => { @@ -179,7 +187,7 @@ export default class StagingView extends React.Component { ); } - renderBody = () => { + renderBody() { const selectedItems = this.state.selection.getSelectedItems(); return ( @@ -382,17 +390,17 @@ export default class StagingView extends React.Component { return Array.from(this.state.selection.getSelectedItems(), item => item.filePath); } - openFile = () => { + openFile() { const filePaths = Array.from(this.state.selection.getSelectedItems(), item => item.filePath); return this.props.openFiles(filePaths); } - discardChanges = () => { + discardChanges() { const filePaths = Array.from(this.state.selection.getSelectedItems(), item => item.filePath); return this.props.discardWorkDirChangesForPaths(filePaths); } - activateNextList = () => { + activateNextList() { return new Promise(resolve => { let advanced = false; @@ -408,7 +416,7 @@ export default class StagingView extends React.Component { }); } - activatePreviousList = () => { + activatePreviousList() { return new Promise(resolve => { let retreated = false; this.setState(prevState => { @@ -423,7 +431,7 @@ export default class StagingView extends React.Component { }); } - activateLastList = () => { + activateLastList() { return new Promise(resolve => { let emptySelection = false; this.setState(prevState => { @@ -439,23 +447,23 @@ export default class StagingView extends React.Component { }); } - stageAll = () => { + stageAll() { if (this.props.unstagedChanges.length === 0) { return null; } return this.props.attemptStageAllOperation('unstaged'); } - unstageAll = () => { + unstageAll() { if (this.props.stagedChanges.length === 0) { return null; } return this.props.attemptStageAllOperation('staged'); } - stageAllMergeConflicts = () => { + stageAllMergeConflicts() { if (this.props.mergeConflicts.length === 0) { return null; } const filePaths = this.props.mergeConflicts.map(conflict => conflict.filePath); return this.props.attemptFileStageOperation(filePaths, 'unstaged'); } - discardAll = () => { + discardAll() { if (this.props.unstagedChanges.length === 0) { return null; } const filePaths = this.props.unstagedChanges.map(filePatch => filePatch.filePath); return this.props.discardWorkDirChangesForPaths(filePaths); @@ -489,7 +497,7 @@ export default class StagingView extends React.Component { }); } - selectAll = () => { + selectAll() { return new Promise(resolve => { this.setState(prevState => ({ selection: prevState.selection.selectAllItems().coalesce(), @@ -497,7 +505,7 @@ export default class StagingView extends React.Component { }); } - selectFirst = (preserveTail = false) => { + selectFirst(preserveTail = false) { return new Promise(resolve => { this.setState(prevState => ({ selection: prevState.selection.selectFirstItem(preserveTail).coalesce(), @@ -505,7 +513,7 @@ export default class StagingView extends React.Component { }); } - selectLast = (preserveTail = false) => { + selectLast(preserveTail = false) { return new Promise(resolve => { this.setState(prevState => ({ selection: prevState.selection.selectLastItem(preserveTail).coalesce(), @@ -513,7 +521,7 @@ export default class StagingView extends React.Component { }); } - diveIntoSelection = async () => { + async diveIntoSelection() { const selectedItems = this.state.selection.getSelectedItems(); if (selectedItems.size !== 1) { return; @@ -548,7 +556,7 @@ export default class StagingView extends React.Component { } } - showDiffView = async () => { + async showDiffView() { const selectedItems = this.state.selection.getSelectedItems(); if (selectedItems.size !== 1) { return; @@ -564,7 +572,7 @@ export default class StagingView extends React.Component { } } - showBulkResolveMenu = event => { + showBulkResolveMenu(event) { const conflictPaths = this.props.mergeConflicts.map(c => c.filePath); event.preventDefault(); @@ -584,18 +592,18 @@ export default class StagingView extends React.Component { menu.popup(remote.getCurrentWindow()); } - resolveCurrentAsOurs = () => { + resolveCurrentAsOurs() { this.props.resolveAsOurs(this.getSelectedConflictPaths()); } - resolveCurrentAsTheirs = () => { + resolveCurrentAsTheirs() { this.props.resolveAsTheirs(this.getSelectedConflictPaths()); } // Directly modify the selection to include only the item identified by the file path and stagingStatus tuple. // Re-render the component, but don't notify didSelectSingleItem() or other callback functions. This is useful to // avoid circular callback loops for actions originating in FilePatchView or TextEditors with merge conflicts. - quietlySelectItem = (filePath, stagingStatus) => { + quietlySelectItem(filePath, stagingStatus) { return new Promise(resolve => { this.setState(prevState => { const item = this.state.selection.findItem((each, key) => each.filePath === filePath && key === stagingStatus); @@ -621,7 +629,7 @@ export default class StagingView extends React.Component { }); } - didChangeSelectedItems = openNew => { + didChangeSelectedItems(openNew) { const selectedItems = Array.from(this.state.selection.getSelectedItems()); if (selectedItems.length === 1) { this.didSelectSingleItem(selectedItems[0], openNew); @@ -716,12 +724,10 @@ export default class StagingView extends React.Component { return new File(absolutePath).exists(); } - @autobind dblclickOnItem(event, item) { return this.props.attemptFileStageOperation([item.filePath], this.state.selection.listKeyForItem(item)); } - @autobind async contextMenuOnItem(event, item) { if (!this.state.selection.getSelectedItems().has(item)) { event.stopPropagation(); @@ -740,7 +746,6 @@ export default class StagingView extends React.Component { } } - @autobind async mousedownOnItem(event, item) { const windows = process.platform === 'win32'; if (event.ctrlKey && !windows) { return; } // simply open context menu @@ -762,7 +767,6 @@ export default class StagingView extends React.Component { } } - @autobind async mousemoveOnItem(event, item) { if (this.mouseSelectionInProgress) { await new Promise(resolve => { @@ -773,7 +777,6 @@ export default class StagingView extends React.Component { } } - @autobind async mouseup() { await new Promise(resolve => { this.setState(prevState => ({ @@ -786,7 +789,7 @@ export default class StagingView extends React.Component { this.mouseSelectionInProgress = false; } - undoLastDiscard = () => { + undoLastDiscard() { if (!this.props.hasUndoHistory) { return; } @@ -798,7 +801,6 @@ export default class StagingView extends React.Component { return this.state.selection.getActiveListKey() === listKey ? 'is-focused' : ''; } - @autobind registerItemElement(item, element) { this.listElementsByItem.set(item, element); } diff --git a/lib/worker-manager.js b/lib/worker-manager.js index 3a56d67b84..e6811314c4 100644 --- a/lib/worker-manager.js +++ b/lib/worker-manager.js @@ -4,9 +4,8 @@ import querystring from 'querystring'; import {remote, ipcRenderer as ipc} from 'electron'; const {BrowserWindow} = remote; import {Emitter, Disposable, CompositeDisposable} from 'event-kit'; -import {autobind} from 'core-decorators'; -import {getPackageRoot} from './helpers'; +import {getPackageRoot, autobind} from './helpers'; export default class WorkerManager { static instance = null; @@ -24,6 +23,8 @@ export default class WorkerManager { } constructor() { + autobind(this, 'onDestroyed', 'onCrashed', 'onSick'); + this.workers = new Set(); this.activeWorker = null; this.createNewWorker(); @@ -58,12 +59,10 @@ export default class WorkerManager { this.workers.add(this.activeWorker); } - @autobind onDestroyed(destroyedWorker) { this.workers.delete(destroyedWorker); } - @autobind onCrashed(crashedWorker) { if (crashedWorker === this.getActiveWorker()) { this.createNewWorker({operationCountLimit: crashedWorker.getOperationCountLimit()}); @@ -71,7 +70,6 @@ export default class WorkerManager { crashedWorker.getRemainingOperations().forEach(operation => this.activeWorker.executeOperation(operation)); } - @autobind onSick(sickWorker) { if (!atom.inSpecMode()) { // eslint-disable-next-line no-console @@ -110,6 +108,12 @@ export class Worker { static channelName = 'github:renderer-ipc'; constructor({operationCountLimit, onSick, onCrashed, onDestroyed}) { + autobind( + this, + 'handleDataReceived', 'onOperationComplete', 'handleCancelled', 'handleExecStarted', 'handleSpawnError', + 'handleStdinError', 'handleSick', 'handleCrashed', + ); + this.operationCountLimit = operationCountLimit; this.onSick = onSick; this.onCrashed = onCrashed; @@ -162,7 +166,6 @@ export class Worker { return this.rendererProcess.cancelOperation(operation); } - @autobind handleDataReceived({id, results}) { const operation = this.operationsById.get(id); operation.complete(results, data => { @@ -174,7 +177,6 @@ export class Worker { }); } - @autobind onOperationComplete(operation) { this.completedOperationCount++; this.operationsById.delete(operation.id); @@ -184,7 +186,6 @@ export class Worker { } } - @autobind handleCancelled({id}) { const operation = this.operationsById.get(id); if (operation) { @@ -193,31 +194,26 @@ export class Worker { } } - @autobind handleExecStarted({id}) { const operation = this.operationsById.get(id); operation.setInProgress(); } - @autobind handleSpawnError({id, err}) { const operation = this.operationsById.get(id); operation.error(err); } - @autobind handleStdinError({id, stdin, err}) { const operation = this.operationsById.get(id); operation.error(err); } - @autobind handleSick() { this.sick = true; this.onSick(this); } - @autobind handleCrashed() { this.onCrashed(this); this.destroy(); @@ -261,6 +257,7 @@ Sends operations to renderer processes export class RendererProcess { constructor({loadUrl, onDestroyed, onCrashed, onSick, onData, onCancelled, onSpawnError, onStdinError, onExecStarted}) { + autobind(this, 'handleDestroy'); this.onDestroyed = onDestroyed; this.onCrashed = onCrashed; this.onSick = onSick; @@ -300,7 +297,6 @@ export class RendererProcess { return this.ready; } - @autobind handleDestroy(...args) { this.destroy(); this.onCrashed(...args); diff --git a/package-lock.json b/package-lock.json index 634dadb1f6..9b89d88a36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,6 +43,12 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true } } }, @@ -106,6 +112,18 @@ "supports-color": "^5.3.0" } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", @@ -184,6 +202,15 @@ "requires": { "loose-envify": "^1.0.0" } + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "^3.0.0" + } } } }, @@ -198,6 +225,12 @@ "to-fast-properties": "^2.0.0" }, "dependencies": { + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, "to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -267,14 +300,6 @@ "integrity": "sha1-9zIHu4EgfXX9bIPxJa8m7qN4yjA=", "dev": true }, - "ansi-regex": { - "version": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" - }, - "ansi-styles": { - "version": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" - }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", @@ -298,48 +323,23 @@ "sprintf-js": "~1.0.2" } }, - "aria-query": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-0.7.1.tgz", - "integrity": "sha1-Jsu1r/ZBRLCoJb4YRuCxbPoAsR4=", - "dev": true, - "requires": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" - }, - "dependencies": { - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha1-30boZ9D8Kuxmo0ZitAapzK//Ww8=", - "dev": true - } - } - }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=" + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "dev": true }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" - }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", - "dev": true, - "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" - } + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true }, "array-union": { "version": "1.0.2", @@ -359,7 +359,8 @@ "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true }, "array.prototype.find": { "version": "2.0.4", @@ -401,18 +402,14 @@ "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" - }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true }, "async-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true }, "asynckit": { "version": "0.4.0", @@ -460,6 +457,12 @@ "graceful-readlink": ">= 1.0.0" } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "etch": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/etch/-/etch-0.8.0.tgz", @@ -469,6 +472,12 @@ "virtual-dom": "^2.0.1" } }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, "glob": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", @@ -492,12 +501,43 @@ "event-kit": "^2.0.0" } }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, "has-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", "dev": true }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, "mocha": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", @@ -526,6 +566,21 @@ } } }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, "supports-color": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", @@ -534,6 +589,12 @@ "requires": { "has-flag": "^1.0.0" } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true } } }, @@ -547,15 +608,6 @@ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz", "integrity": "sha1-1NDpudv8p3vwjusKikcVUP454ok=" }, - "axobject-query": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-0.1.0.tgz", - "integrity": "sha1-YvWdvFnJ+SQnWco0mWDnov48NsA=", - "dev": true, - "requires": { - "ast-types-flow": "0.0.7" - } - }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -564,6 +616,61 @@ "chalk": "^1.1.3", "esutils": "^2.0.2", "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } } }, "babel-core": { @@ -592,6 +699,16 @@ "source-map": "^0.5.6" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -602,6 +719,14 @@ "js-tokens": "^3.0.2" } }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", @@ -655,14 +780,75 @@ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha1-ry87iPpvXB5MY00aD46sT1WzleM=" }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, "lodash": { "version": "https://registry.npmjs.org/lodash/-/lodash-4.17.4.tgz", "integrity": "sha512-6X37Sq9KCpLSXEh8uM12AKYlviHPNNk4RxiGBn4cmKGJinbXBneWIV7iE/nXkM928O7ytHcHb6+X6Svl0f4hXg==" }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha1-vgWtf5v30i4Fb5cmzuUBf78Z4uk=" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" } } }, @@ -703,6 +889,14 @@ "trim-right": "^1.0.1" }, "dependencies": { + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", @@ -723,6 +917,11 @@ "to-fast-properties": "^1.0.3" } }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", @@ -732,6 +931,16 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" } } }, @@ -765,10 +974,20 @@ "to-fast-properties": "^1.0.3" } }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" } } }, @@ -776,6 +995,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, "requires": { "babel-helper-hoist-variables": "^6.24.1", "babel-runtime": "^6.22.0", @@ -787,6 +1007,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, "requires": { "babel-helper-function-name": "^6.24.1", "babel-runtime": "^6.26.0", @@ -794,6 +1015,27 @@ "lodash": "^4.17.4" }, "dependencies": { + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", @@ -814,36 +1056,28 @@ "to-fast-properties": "^1.0.3" } }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" } } }, - "babel-helper-function-name": { - "version": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", - "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", - "requires": { - "babel-helper-get-function-arity": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, - "babel-helper-get-function-arity": { - "version": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", - "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", - "requires": { - "babel-runtime": "^6.22.0", - "babel-types": "^6.24.1" - } - }, "babel-helper-hoist-variables": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" @@ -853,27 +1087,17 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, - "babel-helper-remap-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", - "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", - "requires": { - "babel-helper-function-name": "^6.24.1", - "babel-runtime": "^6.22.0", - "babel-template": "^6.24.1", - "babel-traverse": "^6.24.1", - "babel-types": "^6.24.1" - } - }, "babel-helper-replace-supers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, "requires": { "babel-helper-optimise-call-expression": "^6.24.1", "babel-messages": "^6.23.0", @@ -881,6 +1105,16 @@ "babel-template": "^6.24.1", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" + }, + "dependencies": { + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "^6.22.0" + } + } } }, "babel-helpers": { @@ -892,13 +1126,6 @@ "babel-template": "^6.24.1" } }, - "babel-messages": { - "version": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", - "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", - "requires": { - "babel-runtime": "^6.22.0" - } - }, "babel-plugin-chai-assert-async": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/babel-plugin-chai-assert-async/-/babel-plugin-chai-assert-async-0.1.0.tgz", @@ -908,6 +1135,7 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, "requires": { "babel-runtime": "^6.22.0" } @@ -915,17 +1143,12 @@ "babel-plugin-relay": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/babel-plugin-relay/-/babel-plugin-relay-1.6.0.tgz", - "integrity": "sha512-C7ylRxOCw04pXMxuGZ16mBBol36VQTMdbnWolB9YdQWIygf0nEQuNUS8OW/IQxTaHj7Q87uJ94POXCNFDnuT0w==", + "integrity": "sha1-oiTaUkNi1pA6UkIUobhAUw/fvSg=", "requires": { "babel-runtime": "^6.23.0", "babel-types": "^6.24.1" } }, - "babel-plugin-syntax-async-functions": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", - "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=" - }, "babel-plugin-syntax-class-properties": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz", @@ -949,17 +1172,8 @@ "babel-plugin-syntax-trailing-function-commas": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", - "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=" - }, - "babel-plugin-transform-async-to-generator": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", - "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", - "requires": { - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-plugin-syntax-async-functions": "^6.8.0", - "babel-runtime": "^6.22.0" - } + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true }, "babel-plugin-transform-class-properties": { "version": "6.24.1", @@ -970,22 +1184,28 @@ "babel-plugin-syntax-class-properties": "^6.8.0", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" - } - }, - "babel-plugin-transform-decorators-legacy": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.4.tgz", - "integrity": "sha1-dBtY9sW86eYCfgiC2cmU8E82aSU=", - "requires": { - "babel-plugin-syntax-decorators": "^6.1.18", - "babel-runtime": "^6.2.0", - "babel-template": "^6.3.0" }, "dependencies": { - "babel-plugin-syntax-decorators": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz", - "integrity": "sha1-MSVjtNvePMgGzuPkFszurd0RrAs=" + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } } } }, @@ -993,6 +1213,7 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, "requires": { "babel-runtime": "^6.22.0" } @@ -1001,6 +1222,7 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, "requires": { "babel-runtime": "^6.22.0" } @@ -1009,6 +1231,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, "requires": { "babel-runtime": "^6.26.0", "babel-template": "^6.26.0", @@ -1017,6 +1240,16 @@ "lodash": "^4.17.4" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -1027,6 +1260,14 @@ "js-tokens": "^3.0.2" } }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", @@ -1080,6 +1321,36 @@ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, "invariant": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz", @@ -1088,10 +1359,36 @@ "loose-envify": "^1.0.0" } }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "^3.0.0" + } + }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" } } }, @@ -1099,6 +1396,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, "requires": { "babel-helper-define-map": "^6.24.1", "babel-helper-function-name": "^6.24.1", @@ -1109,12 +1407,44 @@ "babel-template": "^6.24.1", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" + }, + "dependencies": { + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "^6.22.0" + } + } } }, "babel-plugin-transform-es2015-computed-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, "requires": { "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" @@ -1124,6 +1454,7 @@ "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, "requires": { "babel-runtime": "^6.22.0" } @@ -1132,6 +1463,7 @@ "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, "requires": { "babel-runtime": "^6.22.0" } @@ -1140,16 +1472,41 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, "requires": { "babel-helper-function-name": "^6.24.1", "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" + }, + "dependencies": { + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + } } }, "babel-plugin-transform-es2015-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, "requires": { "babel-runtime": "^6.22.0" } @@ -1165,6 +1522,16 @@ "babel-types": "^6.26.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -1175,6 +1542,14 @@ "js-tokens": "^3.0.2" } }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", @@ -1228,10 +1603,58 @@ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" } } }, @@ -1239,6 +1662,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, "requires": { "babel-helper-replace-supers": "^6.24.1", "babel-runtime": "^6.22.0" @@ -1248,6 +1672,7 @@ "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, "requires": { "babel-helper-call-delegate": "^6.24.1", "babel-helper-get-function-arity": "^6.24.1", @@ -1255,12 +1680,24 @@ "babel-template": "^6.24.1", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" + }, + "dependencies": { + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + } } }, "babel-plugin-transform-es2015-shorthand-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" @@ -1270,6 +1707,7 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, "requires": { "babel-runtime": "^6.22.0" } @@ -1278,6 +1716,7 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, "requires": { "babel-runtime": "^6.22.0" } @@ -1286,6 +1725,7 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz", "integrity": "sha1-cz00RPPsxBvvjtGmpOCWV7iWnrs=", + "dev": true, "requires": { "babel-runtime": "^6.22.0" } @@ -1294,6 +1734,7 @@ "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz", "integrity": "sha1-sgeNWELiKr9A9z6M3pzTcRq9V1g=", + "dev": true, "requires": { "babel-runtime": "^6.22.0" } @@ -1381,6 +1822,7 @@ "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", + "dev": true, "requires": { "babel-runtime": "^6.26.0", "core-js": "^2.5.0", @@ -1406,7 +1848,8 @@ "regenerator-runtime": { "version": "0.10.5", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", - "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=" + "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", + "dev": true } } }, @@ -1414,6 +1857,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-2.1.4.tgz", "integrity": "sha1-IvNY5mVAc6z2HkegUqd317zPA68=", + "dev": true, "requires": { "babel-plugin-check-es2015-constants": "^6.8.0", "babel-plugin-syntax-class-properties": "^6.8.0", @@ -1531,6 +1975,16 @@ "globals": "^9.0.0", "invariant": "^2.2.0", "lodash": "^4.2.0" + }, + "dependencies": { + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "^6.22.0" + } + } } }, "babel-types": { @@ -1542,6 +1996,18 @@ "esutils": "^2.0.2", "lodash": "^4.2.0", "to-fast-properties": "^1.0.1" + }, + "dependencies": { + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + } } }, "babylon": { @@ -1558,6 +2024,7 @@ "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha1-e95c7RRbbVUakNuH+DxVi060io8=", + "dev": true, "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -1572,6 +2039,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -1582,6 +2050,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/bash-glob/-/bash-glob-1.0.2.tgz", "integrity": "sha1-laxWMf3XqPxWnyZxZ6hOuDGXmhs=", + "dev": true, "requires": { "async-each": "^1.0.1", "bash-path": "^1.0.1", @@ -1596,6 +2065,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/bash-path/-/bash-path-1.0.3.tgz", "integrity": "sha1-28nvvfGLHBFBPctZuWDmqlbIQlg=", + "dev": true, "requires": { "arr-union": "^3.1.0", "is-windows": "^1.0.1" @@ -1619,6 +2089,21 @@ "safe-buffer": "^5.1.1" }, "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", @@ -1645,6 +2130,11 @@ "requires": { "safe-buffer": "~5.1.0" } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" } } }, @@ -1706,16 +2196,11 @@ "integrity": "sha1-ewl1dPjj6tYG+0Zk5krf3aKYGpM=", "dev": true }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, "bser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz", "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", + "dev": true, "requires": { "node-int64": "^0.4.0" } @@ -1745,14 +2230,11 @@ "integrity": "sha1-TLiDLSNhJYmwQG6eKVbBfwb99TE=", "dev": true }, - "builtin-modules": { - "version": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" - }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha1-Cn9GQWgxyLZi7jb+TnxZ129marI=", + "dev": true, "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -1768,7 +2250,8 @@ "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true }, "caller-path": { "version": "0.1.0", @@ -1788,7 +2271,8 @@ "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true }, "camelize": { "version": "1.0.0", @@ -1824,17 +2308,6 @@ "check-error": "^1.0.2" } }, - "chalk": { - "version": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, "chardet": { "version": "0.4.2", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", @@ -1884,6 +2357,7 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha1-+TNprouafOAv1B+q0MqDAzGQxGM=", + "dev": true, "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -1895,6 +2369,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -1976,12 +2451,18 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wrap-ansi": "^2.0.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -1991,6 +2472,14 @@ "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } } } }, @@ -2008,6 +2497,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -2042,12 +2532,6 @@ "delayed-stream": "~1.0.0" } }, - "commander": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz", - "integrity": "sha512-b0553uYA5YAEGgyYIGYROzKQ7X5RAqedkfjiZxwi0kL1g3bOaBNNZfYkzt/CL0umgD5wc9Jec2FbB98CjkMRvQ==", - "dev": true - }, "compare-sets": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/compare-sets/-/compare-sets-1.0.1.tgz", @@ -2056,10 +2540,12 @@ "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=" + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true }, "concat-map": { - "version": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "concat-stream": { @@ -2072,6 +2558,14 @@ "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } } }, "console-control-strings": { @@ -2079,12 +2573,6 @@ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, - "contains-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true - }, "convert-source-map": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", @@ -2093,26 +2581,19 @@ "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" - }, - "core-decorators": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/core-decorators/-/core-decorators-0.20.0.tgz", - "integrity": "sha1-YFiWYkBTr4wo775zXCWjAaYcZcU=" + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true }, "core-js": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.0.tgz", "integrity": "sha1-VpwFCRi+ZIazg3VSAorgRmtxcIY=" }, - "core-util-is": { - "version": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" - }, "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, "requires": { "lru-cache": "^4.0.1", "shebang-command": "^1.2.0", @@ -2177,12 +2658,6 @@ "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", "dev": true }, - "damerau-levenshtein": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz", - "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=", - "dev": true - }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -2209,12 +2684,14 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true }, "decompress-response": { "version": "3.3.0", @@ -2264,6 +2741,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha1-1Flono1lS6d+AqgX+HENcCyxbp0=", + "dev": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -2284,6 +2762,33 @@ "rimraf": "^2.2.8" }, "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, "rimraf": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", @@ -2337,6 +2842,20 @@ "requires": { "esutils": "^2.0.2", "isarray": "^1.0.0" + }, + "dependencies": { + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } } }, "dom-serializer": { @@ -2443,15 +2962,9 @@ } } }, - "emoji-regex": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", - "integrity": "sha1-m66pKbFVVlwR6kHGYm6qZc75ksI=", - "dev": true - }, "encoding": { "version": "0.1.12", - "resolved": "", + "resolved": false, "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", "requires": { "iconv-lite": "~0.4.13" @@ -2463,6 +2976,21 @@ "integrity": "sha1-7SljTRm6ukY7bOa4CjchPqtx7EM=", "requires": { "once": "^1.4.0" + }, + "dependencies": { + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + } } }, "entities": { @@ -2542,13 +3070,6 @@ "xtend": "~4.0.0" } }, - "error-ex": { - "version": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "requires": { - "is-arrayish": "^0.2.1" - } - }, "es-abstract": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.11.0.tgz", @@ -2584,11 +3105,8 @@ "es6-promise": { "version": "4.2.4", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", - "integrity": "sha1-3EIhwrFlGHYL2MOaUtjzVvwA7Sk=" - }, - "escape-string-regexp": { - "version": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + "integrity": "sha1-3EIhwrFlGHYL2MOaUtjzVvwA7Sk=", + "dev": true }, "eslint": { "version": "4.19.1", @@ -2733,12 +3251,50 @@ "esutils": "^2.0.2" } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, "globals": { "version": "11.5.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.5.0.tgz", "integrity": "sha1-a8hA3mdxFzsZHxPTqclNRB7pJkI=", "dev": true }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + } + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -2759,12 +3315,6 @@ } } }, - "eslint-config-fbjs": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eslint-config-fbjs/-/eslint-config-fbjs-2.0.1.tgz", - "integrity": "sha1-OViW/XQODijcHCBy47yYLogkffU=", - "dev": true - }, "eslint-config-fbjs-opensource": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/eslint-config-fbjs-opensource/-/eslint-config-fbjs-opensource-1.0.0.tgz", @@ -2780,6 +3330,18 @@ "fbjs-eslint-utils": "^1.0.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -2803,6 +3365,25 @@ "babylon": "^6.17.0" } }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "eslint-plugin-babel": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz", @@ -2822,69 +3403,44 @@ "object.assign": "^4.0.4" } }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, "jsx-ast-utils": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=", "dev": true - } - } - }, - "eslint-config-standard": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-11.0.0.tgz", - "integrity": "sha1-h+4NPJ2VOC3HYZWMuyPanuox4Lo=", - "dev": true - }, - "eslint-import-resolver-node": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", - "integrity": "sha1-WPFfuDm40FdsqYBBNHaqskcttmo=", - "dev": true, - "requires": { - "debug": "^2.6.9", - "resolve": "^1.5.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } }, - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "path-parse": "^1.0.5" + "ansi-regex": "^2.0.0" } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true } } }, - "eslint-module-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", - "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", - "dev": true, - "requires": { - "debug": "^2.6.8", - "pkg-dir": "^1.0.0" - } - }, - "eslint-plugin-babel": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-babel/-/eslint-plugin-babel-5.1.0.tgz", - "integrity": "sha1-nHbkdhYgQeULa6aapOrjvdak4cM=", - "dev": true, - "requires": { - "eslint-rule-composer": "^0.3.0" - } - }, "eslint-plugin-flowtype": { "version": "2.46.3", "resolved": "https://registry.npmjs.org/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.46.3.tgz", @@ -2894,152 +3450,18 @@ "lodash": "^4.15.0" } }, - "eslint-plugin-import": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.11.0.tgz", - "integrity": "sha1-Fa7qN6Z0mdhI6OmBgG1GJ7VQOBY=", - "dev": true, - "requires": { - "contains-path": "^0.1.0", - "debug": "^2.6.8", - "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.1", - "eslint-module-utils": "^2.2.0", - "has": "^1.0.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.3", - "read-pkg-up": "^2.0.0", - "resolve": "^1.6.0" - }, - "dependencies": { - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - } - } - }, "eslint-plugin-jasmine": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/eslint-plugin-jasmine/-/eslint-plugin-jasmine-2.9.3.tgz", "integrity": "sha1-Bb86uCfXkWkc7ujCGVm5wNVqaww=", "dev": true }, - "eslint-plugin-jsx-a11y": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.0.3.tgz", - "integrity": "sha1-VFg9GuRCSDFi4EDhPMMYZUZRAOU=", - "dev": true, - "requires": { - "aria-query": "^0.7.0", - "array-includes": "^3.0.3", - "ast-types-flow": "0.0.7", - "axobject-query": "^0.1.0", - "damerau-levenshtein": "^1.0.0", - "emoji-regex": "^6.1.0", - "jsx-ast-utils": "^2.0.0" - }, - "dependencies": { - "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", - "dev": true, - "requires": { - "array-includes": "^3.0.3" - } - } - } - }, - "eslint-plugin-node": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-6.0.1.tgz", - "integrity": "sha1-vxlkIpgGQ3kxXXpLKnWTc3b6BeQ=", - "dev": true, - "requires": { - "ignore": "^3.3.6", - "minimatch": "^3.0.4", - "resolve": "^1.3.3", - "semver": "^5.4.1" - } - }, "eslint-plugin-prefer-object-spread": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/eslint-plugin-prefer-object-spread/-/eslint-plugin-prefer-object-spread-1.2.1.tgz", "integrity": "sha1-J/uRhTaQzOs65hAdnIrsxqZ6QCw=", "dev": true }, - "eslint-plugin-promise": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.7.0.tgz", - "integrity": "sha512-2WO+ZFh7vxUKRfR0cOIMrWgYKdR6S1AlOezw6pC52B6oYpd5WFghN+QHxvrRdZMtbo8h3dfUZ2o1rWb0UPbKtg==", - "dev": true - }, - "eslint-plugin-react": { - "version": "7.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz", - "integrity": "sha1-9gbHGdvYoaKz0lwWKZgTh4zKAWA=", - "dev": true, - "requires": { - "doctrine": "^2.0.2", - "has": "^1.0.1", - "jsx-ast-utils": "^2.0.1", - "prop-types": "^15.6.0" - }, - "dependencies": { - "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "requires": { - "esutils": "^2.0.2" - } - } - } - }, - "eslint-plugin-relay": { - "version": "0.0.21", - "resolved": "https://registry.npmjs.org/eslint-plugin-relay/-/eslint-plugin-relay-0.0.21.tgz", - "integrity": "sha1-+9oBvXg6p+2esO/+QQBJkR4USe8=", - "dev": true, - "requires": { - "graphql": "^0.13.0" - }, - "dependencies": { - "graphql": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz", - "integrity": "sha512-QZ5BL8ZO/B20VA8APauGBg3GyEgZ19eduvpLWoq5x7gMmWnHoy8rlQWPLmWgFvo1yNgjSEFMesmS4R6pPr7xog==", - "dev": true, - "requires": { - "iterall": "^1.2.1" - } - }, - "iterall": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.2.2.tgz", - "integrity": "sha512-yynBb1g+RFUPY64fTrFv7nsjRrENBQJaX2UL+2Szc9REFrSNm1rpSXHGzhmAy7a9uv3vlvgBlXnf9RqmPH1/DA==", - "dev": true - } - } - }, - "eslint-plugin-standard": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.1.0.tgz", - "integrity": "sha1-Kp4hJZukxHwC1TstDJE11LECLUc=", - "dev": true - }, - "eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha1-eTIMknsMXA09PSt2yLSkiPJbuvk=", - "dev": true - }, "eslint-scope": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", @@ -3096,10 +3518,6 @@ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", "dev": true }, - "esutils": { - "version": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" - }, "ev-store": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/ev-store/-/ev-store-7.0.0.tgz", @@ -3112,12 +3530,13 @@ "event-kit": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/event-kit/-/event-kit-2.4.0.tgz", - "integrity": "sha512-ZXd9jxUoc/f/zdLdR3OUcCzT84WnpaNWefquLyE125akIC90sDs8S3T/qihliuVsaj7Osc0z8lLL2fjooE9Z4A==" + "integrity": "sha1-cYqvIt92ZwAkrWaSJIPhu6BUTzM=" }, "execa": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, "requires": { "cross-spawn": "^5.0.1", "get-stream": "^3.0.0", @@ -3126,12 +3545,20 @@ "p-finally": "^1.0.0", "signal-exit": "^3.0.0", "strip-eof": "^1.0.0" + }, + "dependencies": { + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + } } }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -3146,6 +3573,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -3209,13 +3637,15 @@ "integrity": "sha1-4J77qXe/mPnuDtJavQxpLgKuw/w=" }, "extend": { - "version": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -3231,6 +3661,12 @@ "tmp": "^0.0.33" }, "dependencies": { + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -3246,6 +3682,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha1-rQD+TcYSqSMuhxhxHcXLWrAoVUM=", + "dev": true, "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -3261,6 +3698,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -3281,6 +3719,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-1.0.1.tgz", "integrity": "sha1-MPmxEg/Ven8XI2SmRY+9vZgYezw=", + "dev": true, "requires": { "bash-glob": "^1.0.1", "glob-parent": "^3.1.0", @@ -3303,6 +3742,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.0.tgz", "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", + "dev": true, "requires": { "bser": "^2.0.0" } @@ -3325,6 +3765,47 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "^3.0.0" + } + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" } } }, @@ -3341,6 +3822,14 @@ "dev": true, "requires": { "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + } } }, "file-entry-cache": { @@ -3351,12 +3840,21 @@ "requires": { "flat-cache": "^1.2.1", "object-assign": "^4.0.1" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + } } }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -3364,16 +3862,6 @@ "to-regex-range": "^2.1.0" } }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, "flat-cache": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", @@ -3384,12 +3872,21 @@ "del": "^2.0.2", "graceful-fs": "^4.1.2", "write": "^0.2.1" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + } } }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true }, "foreach": { "version": "2.0.5", @@ -3398,7 +3895,8 @@ "dev": true }, "forever-agent": { - "version": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" }, "form-data": { @@ -3415,6 +3913,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, "requires": { "map-cache": "^0.2.2" } @@ -3427,11 +3926,18 @@ "fs-extra": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.0.tgz", - "integrity": "sha512-lk2cUCo8QzbiEWEbt7Cw3m27WMiRG321xsssbcIpfMhpRjrlC08WBOVQqj1/nQYYNnPtyIhP1oqLO3QwT2tPCw==", + "integrity": "sha1-Dwr7KQuz3rh5eNqBb808d5fzqBc=", "requires": { "graceful-fs": "^4.1.2", "jsonfile": "^4.0.0", "universalify": "^0.1.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + } } }, "fs-minipass": { @@ -3442,10 +3948,6 @@ "minipass": "^2.2.1" } }, - "fs.realpath": { - "version": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, "function.prototype.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz", @@ -3486,6 +3988,16 @@ "wide-align": "^1.1.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -3495,13 +4007,22 @@ "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } } } }, "get-caller-file": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", - "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" + "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", + "dev": true }, "get-func-name": { "version": "2.0.0", @@ -3512,12 +4033,14 @@ "get-stream": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true }, "getpass": { "version": "0.1.7", @@ -3550,12 +4073,60 @@ "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + } } }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, "requires": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -3565,6 +4136,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, "requires": { "is-extglob": "^2.1.0" } @@ -3574,7 +4146,8 @@ "glob-to-regexp": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", - "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=" + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true }, "global": { "version": "4.3.2", @@ -3603,12 +4176,37 @@ "object-assign": "^4.0.1", "pify": "^2.0.0", "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + } } }, - "graceful-fs": { - "version": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" - }, "graceful-readlink": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", @@ -3619,6 +4217,7 @@ "version": "0.13.2", "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.13.2.tgz", "integrity": "sha1-THQK48Iigj5wBAlvgy57k7IQgnA=", + "dev": true, "requires": { "iterall": "^1.2.1" }, @@ -3630,11 +4229,6 @@ } } }, - "growl": { - "version": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", - "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", - "dev": true - }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -3666,13 +4260,6 @@ } } }, - "has-ansi": { - "version": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -3694,6 +4281,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -3704,6 +4292,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -3713,6 +4302,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -3758,11 +4348,6 @@ "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz", "integrity": "sha1-ljRQKqEsRF3Vp8VzS1cruHOKrLs=" }, - "hoist-non-react-statics": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz", - "integrity": "sha1-0sot/BnFqRxaZhXOjlZO8DR+KkA=" - }, "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", @@ -3770,8 +4355,26 @@ "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.1" + }, + "dependencies": { + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + } } }, + "hosted-git-info": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha1-IyNbKasjDFdqqw1PE/wEawsDgiI=", + "dev": true + }, "htmlparser2": { "version": "3.9.2", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", @@ -3784,6 +4387,14 @@ "entities": "^1.1.1", "inherits": "^2.0.1", "readable-stream": "^2.0.2" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } } }, "http-signature": { @@ -3817,7 +4428,8 @@ "immutable": { "version": "3.7.6", "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.7.6.tgz", - "integrity": "sha1-E7TTyxK++hVIKib+Gy665kAHHks=" + "integrity": "sha1-E7TTyxK++hVIKib+Gy665kAHHks=", + "dev": true }, "imurmurhash": { "version": "0.1.4", @@ -3831,18 +4443,6 @@ "integrity": "sha1-58pPhfiVewGHNPKFdQ3CLsL5hi0=", "dev": true }, - "inflight": { - "version": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" - }, "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", @@ -3896,6 +4496,12 @@ "supports-color": "^5.3.0" } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -3913,21 +4519,38 @@ "requires": { "has-flag": "^3.0.0" } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true } } }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "integrity": "sha1-YQ88ksk1nOHbYW5TgAjSP/NRWOY=", "requires": { "loose-envify": "^1.0.0" + }, + "dependencies": { + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "^3.0.0" + } + } } }, "invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "dev": true }, "is-accessor-descriptor": { "version": "1.0.0", @@ -3937,10 +4560,6 @@ "kind-of": "^6.0.0" } }, - "is-arrayish": { - "version": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" - }, "is-boolean-object": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", @@ -3950,14 +4569,8 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" - }, - "is-builtin-module": { - "version": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "requires": { - "builtin-modules": "^1.0.0" - } + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "dev": true }, "is-callable": { "version": "1.1.3", @@ -3992,12 +4605,14 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-finite": { "version": "1.0.2", @@ -4005,6 +4620,13 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "requires": { "number-is-nan": "^1.0.0" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + } } }, "is-fullwidth-code-point": { @@ -4013,12 +4635,20 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "requires": { "number-is-nan": "^1.0.0" + }, + "dependencies": { + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + } } }, "is-glob": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -4027,6 +4657,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -4035,6 +4666,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -4057,6 +4689,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-2.0.0.tgz", "integrity": "sha1-dkZiRnH9fqVYzNmieVGC8pWPGyQ=", + "dev": true, "requires": { "is-number": "^4.0.0" }, @@ -4064,7 +4697,8 @@ "is-number": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=" + "integrity": "sha1-ACbjf1RU1z41bf5lZGmYZ8an8P8=", + "dev": true } } }, @@ -4096,6 +4730,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, "requires": { "isobject": "^3.0.1" } @@ -4121,10 +4756,6 @@ "integrity": "sha1-+xj4fOH+uSUWnJpAfBkxijIG7Yg=", "dev": true }, - "is-stream": { - "version": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" - }, "is-string": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", @@ -4144,54 +4775,31 @@ "dev": true }, "is-typedarray": { - "version": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=" - }, - "isarray": { - "version": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-0YUOuXkezRjmGCzhKjDzlmNLsZ0=", + "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" - }, - "isomorphic-fetch": { - "version": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", - "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", - "requires": { - "node-fetch": "^1.0.1", - "whatwg-fetch": ">=0.10.0" - }, - "dependencies": { - "node-fetch": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", - "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", - "requires": { - "encoding": "^0.1.11", - "is-stream": "^1.0.1" - } - }, - "whatwg-fetch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", - "integrity": "sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==" - } - } + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true }, "isstream": { - "version": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, "iterall": { @@ -4259,15 +4867,6 @@ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" }, - "json-stable-stringify": { - "version": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "optional": true, - "requires": { - "jsonify": "~0.0.0" - } - }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", @@ -4275,7 +4874,8 @@ "dev": true }, "json-stringify-safe": { - "version": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json3": { @@ -4295,14 +4895,16 @@ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "requires": { "graceful-fs": "^4.1.6" + }, + "dependencies": { + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "optional": true + } } }, - "jsonify": { - "version": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true, - "optional": true - }, "jsprim": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", @@ -4321,19 +4923,10 @@ } } }, - "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", - "dev": true, - "requires": { - "array-includes": "^3.0.3" - } - }, "just-extend": { "version": "1.1.27", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-1.1.27.tgz", - "integrity": "sha512-mJVp13Ix6gFo3SBAy9U/kL+oeZqzlYYYLQBwXVBlVzIsZwBqGREnOro24oC/8s8aox+rJhtZ2DiQof++IrkA+g==", + "integrity": "sha1-7G55QQ/5FORyZSq/oOYDwD1g6QU=", "dev": true }, "keytar": { @@ -4348,7 +4941,8 @@ "kind-of": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=" + "integrity": "sha1-ARRrNqYhjmTljzqNZt5df8b20FE=", + "dev": true }, "lazy-cache": { "version": "2.0.2", @@ -4362,6 +4956,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "dev": true, "requires": { "invert-kv": "^1.0.0" } @@ -4440,6 +5035,20 @@ "boom": "2.x.x" } }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true, + "optional": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true, + "optional": true + }, "form-data": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", @@ -4464,6 +5073,13 @@ } } }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true, + "optional": true + }, "har-schema": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", @@ -4513,6 +5129,44 @@ "sshpk": "^1.7.0" } }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true, + "optional": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true, + "optional": true + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "optional": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true, + "optional": true + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true, + "optional": true + }, "mime": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", @@ -4520,6 +5174,13 @@ "dev": true, "optional": true }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true, + "optional": true + }, "performance-now": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", @@ -4604,6 +5265,13 @@ "dev": true, "optional": true }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true, + "optional": true + }, "tough-cookie": { "version": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz", "integrity": "sha512-42UXjmzk88F7URyg9wDV/dlQ7hXtl/SDV6xIMVdDq82cnDGQDyg8mI8xGBPOwpEfbhvrja6cJ8H1wr0xxykBKA==", @@ -4623,20 +5291,11 @@ "type-check": "~0.3.2" } }, - "load-json-file": { - "version": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, "locate-path": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -4726,7 +5385,8 @@ "lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true }, "lodash.keys": { "version": "3.1.2", @@ -4747,16 +5407,9 @@ "lolex": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.3.2.tgz", - "integrity": "sha512-A5pN2tkFj7H0dGIAM6MFvHKMJcPnjZsOMvR7ujCjfgW5TbV6H9vb1PgxLtHvjqNZTHsUolz+6/WEO0N1xNx2ng==", + "integrity": "sha1-hflFBCUQO/nnpgZo6iXcQydMqAc=", "dev": true }, - "loose-envify": { - "version": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", - "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", - "requires": { - "js-tokens": "^3.0.0" - } - }, "lru-cache": { "version": "2.7.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz", @@ -4766,12 +5419,14 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, "requires": { "object-visit": "^1.0.0" } @@ -4780,6 +5435,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, "requires": { "mimic-fn": "^1.0.0" } @@ -4839,7 +5495,8 @@ "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=" + "integrity": "sha1-ggyGo5M0ZA6ZUWkovQP8qIBX0CI=", + "dev": true }, "mimic-response": { "version": "1.0.0", @@ -4855,13 +5512,6 @@ "dom-walk": "^0.1.0" } }, - "minimatch": { - "version": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", - "requires": { - "brace-expansion": "^1.1.7" - } - }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", @@ -4888,93 +5538,38 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", "integrity": "sha1-pJ5yaNzhoNlpjkUybFYm3zVD0P4=", + "dev": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" }, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } - } - }, - "mocha": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.1.1.tgz", - "integrity": "sha1-t3THVgnawF60j02bodgnuX/eins=", - "dev": true, - "requires": { - "browser-stdout": "1.3.1", - "commander": "2.11.0", - "debug": "3.1.0", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "glob": "7.1.2", - "growl": "1.10.3", - "he": "1.1.1", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "supports-color": "4.4.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha1-W7WgZyYotkFJVmuhaBnmFRjGcmE=", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "growl": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz", - "integrity": "sha1-GSa6kM8+3+KttJJ/WIC8IsZseQ8=", - "dev": true - }, - "has-flag": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", - "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", - "dev": true - }, - "supports-color": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", - "integrity": "sha1-iD992rwWUUKyphQn8zUt7RldGj4=", + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", "dev": true, "requires": { - "has-flag": "^2.0.0" + "is-plain-object": "^2.0.4" } } } }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, "mocha-appveyor-reporter": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/mocha-appveyor-reporter/-/mocha-appveyor-reporter-0.4.0.tgz", @@ -4990,6 +5585,36 @@ "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", "dev": true }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, "mime-db": { "version": "1.33.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", @@ -5005,6 +5630,12 @@ "mime-db": "~1.33.0" } }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, "request": { "version": "2.83.0", "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", @@ -5044,6 +5675,12 @@ "depd": "1.1.2", "request": "2.83.0" } + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true } } }, @@ -5096,6 +5733,18 @@ "minimatch": "0.3" } }, + "growl": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", + "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, "minimatch": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-0.3.0.tgz", @@ -5171,11 +5820,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, - "multi-list-selection": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/multi-list-selection/-/multi-list-selection-0.1.1.tgz", - "integrity": "sha1-E8R3DJSkBd+ty8YCMvHAIixZ3EQ=" - }, "mute-stream": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", @@ -5191,6 +5835,7 @@ "version": "1.2.9", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.9.tgz", "integrity": "sha1-h59xUMstq3pHElkGbBBO7m4Pp8I=", + "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -5210,6 +5855,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -5219,6 +5865,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -5252,7 +5899,7 @@ "nise": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/nise/-/nise-1.3.3.tgz", - "integrity": "sha512-v1J/FLUB9PfGqZLGDBhQqODkbLotP0WtLo9R4EJY2PPu5f5Xg4o0rA8FDlmrjFSv9vBBKcfnOSpfYYuu5RTHqg==", + "integrity": "sha1-wXqFAGaood/rN/kh2gJEGvxKgro=", "dev": true, "requires": { "@sinonjs/formatio": "^2.0.0", @@ -5279,7 +5926,8 @@ "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=" + "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", + "dev": true }, "nomnom": { "version": "1.6.2", @@ -5296,59 +5944,11 @@ "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" }, - "normalize-package-data": { - "version": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha1-EvlaMH1YNSB1oEkHuErIvpisAS8=", - "requires": { - "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "hosted-git-info": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", - "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==" - }, - "spdx-correct": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", - "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", - "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" - }, - "validate-npm-package-license": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", - "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - } - } - }, "npm-run-path": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, "requires": { "path-key": "^2.0.0" } @@ -5373,22 +5973,16 @@ "boolbase": "~1.0.0" } }, - "number-is-nan": { - "version": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" - }, "oauth-sign": { - "version": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" }, - "object-assign": { - "version": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -5399,6 +5993,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -5440,6 +6035,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -5468,6 +6064,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, "requires": { "isobject": "^3.0.0" } @@ -5516,6 +6113,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, "requires": { "isobject": "^3.0.1" } @@ -5540,13 +6138,6 @@ } } }, - "once": { - "version": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, "onetime": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", @@ -5586,33 +6177,28 @@ } } }, - "os-homedir": { - "version": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, "os-locale": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", "integrity": "sha1-QrwpAKa1uL0XN2yOiCtlr8zyS/I=", + "dev": true, "requires": { "execa": "^0.7.0", "lcid": "^1.0.0", "mem": "^1.1.0" } }, - "os-tmpdir": { - "version": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" - }, "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true }, "p-limit": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", "integrity": "sha1-DpK2vty1nwIsE9DxlJ3ILRWQnxw=", + "dev": true, "requires": { "p-try": "^1.0.0" } @@ -5621,6 +6207,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, "requires": { "p-limit": "^1.1.0" } @@ -5628,14 +6215,8 @@ "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" - }, - "parse-json": { - "version": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "requires": { - "error-ex": "^1.2.0" - } + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true }, "parse5": { "version": "3.0.3", @@ -5649,25 +6230,14 @@ "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true }, "path-is-inside": { "version": "1.0.2", @@ -5678,11 +6248,7 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" - }, - "path-parse": { - "version": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", - "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", "dev": true }, "path-to-regexp": { @@ -5702,13 +6268,6 @@ } } }, - "path-type": { - "version": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "requires": { - "pify": "^2.0.0" - } - }, "pathval": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", @@ -5720,32 +6279,6 @@ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, - "pify": { - "version": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" - }, - "pinkie": { - "version": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, - "requires": { - "find-up": "^1.0.0" - } - }, "pluralize": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", @@ -5755,7 +6288,8 @@ "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true }, "prebuild-install": { "version": "2.5.3", @@ -5777,6 +6311,13 @@ "tar-fs": "^1.13.0", "tunnel-agent": "^0.6.0", "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + } } }, "prelude-ls": { @@ -5796,12 +6337,6 @@ "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", "dev": true }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, "progress": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", @@ -5818,7 +6353,7 @@ "prop-types": { "version": "15.6.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", - "integrity": "sha512-4ec7bY1Y66LymSUOH/zARVYObB23AT2h8cf6e/O6ZALB/N0sqZFEx7rq6EYPX2MkOdKORuooI/H5k9TlR4q7kQ==", + "integrity": "sha1-NmREU1ZCVd3aORGR+zoSXL32VMo=", "requires": { "fbjs": "^0.8.16", "loose-envify": "^1.3.1", @@ -5843,6 +6378,47 @@ "setimmediate": "^1.0.5", "ua-parser-js": "^0.7.9" } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "^3.0.0" + } + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" } } }, @@ -5856,7 +6432,8 @@ "pseudomap": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true }, "pump": { "version": "2.0.1", @@ -5865,6 +6442,21 @@ "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" + }, + "dependencies": { + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + } } }, "punycode": { @@ -5942,6 +6534,47 @@ "setimmediate": "^1.0.5", "ua-parser-js": "^0.7.9" } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "^3.0.0" + } + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" } } }, @@ -5974,6 +6607,47 @@ "setimmediate": "^1.0.5", "ua-parser-js": "^0.7.9" } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "^3.0.0" + } + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" } } }, @@ -6004,6 +6678,42 @@ "ua-parser-js": "^0.7.9" } }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "^3.0.0" + } + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, "prop-types": { "version": "15.6.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", @@ -6013,6 +6723,11 @@ "loose-envify": "^1.3.1", "object-assign": "^4.1.1" } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" } } }, @@ -6054,6 +6769,53 @@ "setimmediate": "^1.0.5", "ua-parser-js": "^0.7.9" } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "dev": true, + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, + "requires": { + "js-tokens": "^3.0.0" + } + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dev": true, + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true } } }, @@ -6097,6 +6859,42 @@ "ua-parser-js": "^0.7.9" } }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "^3.0.0" + } + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, "prop-types": { "version": "15.6.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz", @@ -6106,6 +6904,11 @@ "loose-envify": "^1.3.1", "object-assign": "^4.1.1" } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" } } }, @@ -6141,33 +6944,53 @@ "setimmediate": "^1.0.5", "ua-parser-js": "^0.7.9" } - } - } - }, - "read-pkg": { - "version": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "isomorphic-fetch": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz", + "integrity": "sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=", + "dev": true, + "requires": { + "node-fetch": "^1.0.1", + "whatwg-fetch": ">=0.10.0" + } + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "dev": true, "requires": { - "locate-path": "^2.0.0" + "js-tokens": "^3.0.0" } + }, + "node-fetch": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz", + "integrity": "sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ==", + "dev": true, + "requires": { + "encoding": "^0.1.11", + "is-stream": "^1.0.1" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true } } }, @@ -6185,10 +7008,30 @@ "util-deprecate": "~1.0.1" }, "dependencies": { + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" } } }, @@ -6196,6 +7039,7 @@ "version": "1.5.2", "resolved": "https://registry.npmjs.org/readdir-enhanced/-/readdir-enhanced-1.5.2.tgz", "integrity": "sha1-YUYwSGkKxqRVt1ti+nioj43IXlM=", + "dev": true, "requires": { "call-me-maybe": "^1.0.1", "es6-promise": "^4.1.0", @@ -6211,6 +7055,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha1-H07OJ+ALC2XgJHpoEOaoXYOldSw=", + "dev": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -6220,6 +7065,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -6229,6 +7075,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -6245,6 +7092,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/relay-compiler/-/relay-compiler-1.4.1.tgz", "integrity": "sha1-EOg/D13o2z0ACFGkwOQ1590d65U=", + "dev": true, "requires": { "babel-generator": "^6.24.1", "babel-polyfill": "^6.20.0", @@ -6264,6 +7112,16 @@ "yargs": "^9.0.0" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -6274,6 +7132,14 @@ "js-tokens": "^3.0.2" } }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "^6.22.0" + } + }, "babel-traverse": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", @@ -6317,6 +7183,28 @@ "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, "graphql": { "version": "0.11.7", "resolved": "https://registry.npmjs.org/graphql/-/graphql-0.11.7.tgz", @@ -6325,6 +7213,14 @@ "iterall": "1.1.3" } }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, "invariant": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz", @@ -6333,10 +7229,36 @@ "loose-envify": "^1.0.0" } }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "^3.0.0" + } + }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" } } }, @@ -6358,12 +7280,14 @@ "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", - "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true }, "repeating": { "version": "2.0.1", @@ -6420,12 +7344,14 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true }, "require-uncached": { "version": "1.0.3", @@ -6437,15 +7363,6 @@ "resolve-from": "^1.0.0" } }, - "resolve": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", - "integrity": "sha1-qt1lY3T9KYruiVvAJrgpdBhnf9M=", - "dev": true, - "requires": { - "path-parse": "^1.0.5" - } - }, "resolve-from": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", @@ -6455,7 +7372,8 @@ "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true }, "restore-cursor": { "version": "2.0.0", @@ -6470,7 +7388,8 @@ "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=" + "integrity": "sha1-uKSCXVvbH8P29Twrwz+BOIaBx7w=", + "dev": true }, "rst-selector-parser": { "version": "2.2.3", @@ -6515,6 +7434,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, "requires": { "ret": "~0.1.10" } @@ -6522,7 +7442,7 @@ "samsam": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz", - "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==", + "integrity": "sha1-jR2TUOJWItow3j5EumkrUiGrfFA=", "dev": true }, "semver": { @@ -6547,6 +7467,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", "integrity": "sha1-ca5KiPD+77v1LR6mBPP7MV67YnQ=", + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -6554,14 +7475,11 @@ "split-string": "^3.0.1" } }, - "setimmediate": { - "version": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -6569,7 +7487,8 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true }, "sigmund": { "version": "1.0.1", @@ -6585,7 +7504,8 @@ "signedsource": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/signedsource/-/signedsource-1.0.0.tgz", - "integrity": "sha1-HdrOSYF5j5O9gzlzgD2A1S6TrWo=" + "integrity": "sha1-HdrOSYF5j5O9gzlzgD2A1S6TrWo=", + "dev": true }, "simple-concat": { "version": "1.0.0", @@ -6600,18 +7520,27 @@ "decompress-response": "^3.3.0", "once": "^1.3.1", "simple-concat": "^1.0.0" + }, + "dependencies": { + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + } } }, - "simulant": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simulant/-/simulant-0.2.2.tgz", - "integrity": "sha1-8bzlJxK2p6DaON392n6DsgsdoB4=", - "dev": true - }, "sinon": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/sinon/-/sinon-5.0.2.tgz", - "integrity": "sha512-dWcrPbckIjxpKo7CGHZB/TNe5e2U1NWmXKg3ojdfmjoPDnLHsec1RXRfLAqL82e5HssXBB8T2e2tD5YwkNSG6A==", + "integrity": "sha1-HVS9b6PXNgUzM/AubhHe9P56Kpw=", "dev": true, "requires": { "@sinonjs/formatio": "^2.0.0", @@ -6626,7 +7555,7 @@ "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "integrity": "sha1-HGszdALCE3YF7+GfEP7DkPb6q1Q=", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -6736,6 +7665,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha1-bBdfhv8UvbByRWPo88GwIaKGhTs=", + "dev": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -6746,6 +7676,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -6756,6 +7687,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha1-+VZHlIbyrNeXAGk/b3uAXkWrVuI=", + "dev": true, "requires": { "kind-of": "^3.2.0" }, @@ -6764,6 +7696,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -6787,6 +7720,7 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.1.tgz", "integrity": "sha1-etD1k/IoFZjoVN+A8ZquS5LXoRo=", + "dev": true, "requires": { "atob": "^2.0.0", "decode-uri-component": "^0.2.0", @@ -6813,12 +7747,40 @@ "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=" + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha1-BaW01xU6GVvJLDxCW2nzsqlSTII=", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } }, "spdx-exceptions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", - "integrity": "sha1-LHrmEFbHFKW5ubKyr30xHvXHj+k=" + "integrity": "sha1-LHrmEFbHFKW5ubKyr30xHvXHj+k=", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha1-meEZt6XaAOBUkcn6M4t5BII7QdA=", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", + "integrity": "sha1-enzShHDMbToc/m1miG9rxDDTrIc=", + "dev": true }, "split": { "version": "1.0.1", @@ -6826,12 +7788,20 @@ "integrity": "sha1-YFvZvjA6pZ+zX5Ip++oN3snqB9k=", "requires": { "through": "2" + }, + "dependencies": { + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + } } }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha1-fLCd2jqGWFcFxks5pkZgOGguj+I=", + "dev": true, "requires": { "extend-shallow": "^3.0.0" }, @@ -6840,6 +7810,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -6849,6 +7820,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -6887,6 +7859,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -6896,6 +7869,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -7005,34 +7979,21 @@ } }, "stringstream": { - "version": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=" }, - "strip-ansi": { - "version": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - }, "strip-eof": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, - "supports-color": { - "version": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" - }, "table": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", @@ -7067,6 +8028,12 @@ "supports-color": "^5.3.0" } }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, "supports-color": { "version": "5.4.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", @@ -7110,6 +8077,14 @@ "tar-stream": "^1.1.2" }, "dependencies": { + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, "pump": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", @@ -7118,6 +8093,11 @@ "end-of-stream": "^1.1.0", "once": "^1.3.1" } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" } } }, @@ -7174,10 +8154,6 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "through": { - "version": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" - }, "tinycolor2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.1.tgz", @@ -7190,6 +8166,14 @@ "dev": true, "requires": { "os-tmpdir": "~1.0.1" + }, + "dependencies": { + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + } } }, "to-buffer": { @@ -7197,10 +8181,6 @@ "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", "integrity": "sha1-STvUj2LXxD/N7TE6A9ytsuEhOoA=" }, - "to-fast-properties": { - "version": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" - }, "to-iso-string": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/to-iso-string/-/to-iso-string-0.0.2.tgz", @@ -7211,6 +8191,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -7219,6 +8200,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -7229,6 +8211,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha1-E8/dmzNlUvMLUfM6iuG0Knp1mc4=", + "dev": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -7240,6 +8223,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -7249,6 +8233,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha1-p0cPnkJnM9gb2B4RVSZOOjUHyrQ=", + "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -7259,6 +8244,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -7275,11 +8261,7 @@ "tree-kill": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.0.tgz", - "integrity": "sha512-DlX6dR0lOIRDFxI0mjL9IYg6OTncLm/Zt+JiBhE5OlFcAR8yc9S7FFXU9so0oda47frdM/JFsk7UjNt9vscKcg==" - }, - "trim-right": { - "version": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" + "integrity": "sha1-WEZ4Yje0I5AU8F2xVrZDIS1MbzY=" }, "tunnel-agent": { "version": "0.6.0", @@ -7331,6 +8313,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -7342,6 +8325,7 @@ "version": "0.4.3", "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -7360,6 +8344,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -7369,6 +8354,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -7379,6 +8365,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, "requires": { "isarray": "1.0.0" } @@ -7388,14 +8375,21 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" } } }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true }, "use": { "version": "2.0.2", @@ -7468,15 +8462,21 @@ } } }, - "util-deprecate": { - "version": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, "uuid": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz", "integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==" }, + "validate-npm-package-license": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", + "integrity": "sha1-gWQ7y+8b3+zUYjeT3EZIlIupgzg=", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -7491,6 +8491,11 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" } } }, @@ -7523,10 +8528,16 @@ "split": "^1.0.0" } }, + "whatwg-fetch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz", + "integrity": "sha1-3eal3zFfnTmZGqF2IYU9cguFVm8=" + }, "which": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", + "dev": true, "requires": { "isexe": "^2.0.0" } @@ -7534,7 +8545,8 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true }, "which-pm-runs": { "version": "1.0.0", @@ -7549,6 +8561,11 @@ "string-width": "^1.0.2" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -7558,6 +8575,14 @@ "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } } } }, @@ -7570,11 +8595,17 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, "requires": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" }, "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -7584,13 +8615,17 @@ "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } } } }, - "wrappy": { - "version": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, "write": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", @@ -7626,7 +8661,8 @@ "y18n": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "dev": true }, "yallist": { "version": "3.0.2", @@ -7637,6 +8673,7 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", + "dev": true, "requires": { "camelcase": "^4.1.0", "cliui": "^3.2.0", @@ -7651,12 +8688,121 @@ "which-module": "^2.0.0", "y18n": "^3.2.1", "yargs-parser": "^7.0.0" + }, + "dependencies": { + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "requires": { + "locate-path": "^2.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" + } } }, "yargs-parser": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, "requires": { "camelcase": "^4.1.0" } diff --git a/package.json b/package.json index 5a8f595b55..0bd9a4357c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "github", "main": "./lib/index", - "version": "0.14.0", + "version": "0.14.0-1", "description": "GitHub integration", "repository": "https://github.com/atom/github", "license": "MIT", @@ -34,34 +34,23 @@ "babel-generator": "6.26.1", "babel-plugin-chai-assert-async": "0.1.0", "babel-plugin-relay": "1.6.0", - "babel-plugin-transform-async-to-generator": "6.24.1", "babel-plugin-transform-class-properties": "6.24.1", - "babel-plugin-transform-decorators-legacy": "1.3.4", - "babel-plugin-transform-es2015-destructuring": "6.23.0", "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "babel-plugin-transform-es2015-parameters": "6.24.1", "babel-plugin-transform-object-rest-spread": "6.26.0", "babel-preset-react": "6.24.1", "classnames": "2.2.5", "compare-sets": "1.0.1", - "core-decorators": "0.20.0", - "diff": "3.5.0", "dugite": "1.63.0", "event-kit": "2.4.0", "fs-extra": "6.0.0", - "graphql": "0.13.2", - "hoist-non-react-statics": "2.5.0", "keytar": "4.2.1", - "lodash.isequal": "4.5.0", "lodash.memoize": "4.1.2", "moment": "2.22.1", - "multi-list-selection": "0.1.1", "prop-types": "15.6.1", "react": "16.3.2", "react-dom": "16.3.2", "react-relay": "1.4.1", "react-select": "1.2.1", - "relay-compiler": "1.4.1", "relay-runtime": "1.4.1", "temp": "0.8.3", "tinycolor2": "1.4.1", @@ -80,30 +69,16 @@ "enzyme": "3.3.0", "enzyme-adapter-react-16": "1.1.1", "eslint": "4.19.1", - "eslint-config-fbjs": "2.0.1", "eslint-config-fbjs-opensource": "1.0.0", - "eslint-config-standard": "11.0.0", - "eslint-plugin-babel": "5.1.0", - "eslint-plugin-flowtype": "2.46.3", - "eslint-plugin-import": "2.11.0", - "eslint-plugin-jasmine": "2.9.3", - "eslint-plugin-jsx-a11y": "6.0.3", - "eslint-plugin-node": "6.0.1", - "eslint-plugin-prefer-object-spread": "1.2.1", - "eslint-plugin-promise": "3.7.0", - "eslint-plugin-react": "7.7.0", - "eslint-plugin-relay": "0.0.21", - "eslint-plugin-standard": "3.1.0", + "graphql": "0.13.2", "hock": "1.3.2", + "lodash.isequal": "4.5.0", "mkdirp": "0.5.1", - "mocha": "5.1.1", "mocha-appveyor-reporter": "0.4.0", "mocha-junit-and-console-reporter": "1.6.0", "mocha-stress": "1.0.0", "node-fetch": "2.1.2", - "process-nextick-args": "2.0.0", - "react-test-renderer": "16.3.2", - "simulant": "0.2.2", + "relay-compiler": "1.4.1", "sinon": "5.0.2", "test-until": "1.1.1" }, diff --git a/test/async-queue.test.js b/test/async-queue.test.js index 988f88b3a8..7178673bc4 100644 --- a/test/async-queue.test.js +++ b/test/async-queue.test.js @@ -1,16 +1,16 @@ -import {autobind} from 'core-decorators'; - +import {autobind} from '../lib/helpers'; import AsyncQueue from '../lib/async-queue'; class Task { constructor(name, error) { + autobind(this, 'run', 'finish'); + this.name = name; this.error = error; this.started = false; this.finished = false; } - @autobind run() { this.started = true; this.finished = false; @@ -20,7 +20,6 @@ class Task { }); } - @autobind finish() { this.finished = true; if (this.error) { diff --git a/test/models/repository.test.js b/test/models/repository.test.js index e15b78431d..18fd68582d 100644 --- a/test/models/repository.test.js +++ b/test/models/repository.test.js @@ -2,13 +2,11 @@ import fs from 'fs-extra'; import path from 'path'; import dedent from 'dedent-js'; import temp from 'temp'; -import util from 'util'; import compareSets from 'compare-sets'; import isEqual from 'lodash.isequal'; import {CompositeDisposable, Disposable} from 'event-kit'; import Repository from '../../lib/models/repository'; -import {expectedDelegates} from '../../lib/models/repository-states'; import FileSystemChangeObserver from '../../lib/models/file-system-change-observer'; import { @@ -18,23 +16,6 @@ import { import {getPackageRoot, getTempDir} from '../../lib/helpers'; describe('Repository', function() { - it('delegates all state methods', function() { - const missing = expectedDelegates.filter(delegateName => { - return Repository.prototype[delegateName] === undefined; - }); - - // For convenience, write the delegate list to the console when there are any missing (in addition to failing the - // test.) - if (missing.length > 0) { - const formatted = util.inspect(expectedDelegates); - - // eslint-disable-next-line no-console - console.log(`Expected delegates for your copy-and-paste convenience:\n\n---\n${formatted}\n---\n`); - } - - assert.lengthOf(missing, 0); - }); - describe('initial states', function() { let repository;