diff --git a/CHANGELOG.md b/CHANGELOG.md index e3a4b58d5..665723583 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,21 @@ + +## [2.5.13](https://github.com/web-pal/chronos-timetracker/compare/v2.5.12...v2.5.13) (2018-02-27) + + +### Bug Fixes + +* new issue window didn't closed on windows ([bc50b17](https://github.com/web-pal/chronos-timetracker/commit/bc50b17)) +* **Browsing Issues:** request timeout + infiniteloader improvment ([e1fd51e](https://github.com/web-pal/chronos-timetracker/commit/e1fd51e)) + + +### Features + +* new issue modal with Jira JS API ([d313feb](https://github.com/web-pal/chronos-timetracker/commit/d313feb)) +* webview for create new issue ([5ad9555](https://github.com/web-pal/chronos-timetracker/commit/5ad9555)) +* **Issue Detail View:** edit issue ([a31c77a](https://github.com/web-pal/chronos-timetracker/commit/a31c77a)) + + + ## [2.5.12](https://github.com/web-pal/chronos-timetracker/compare/v2.5.11...v2.5.12) (2018-02-22) diff --git a/app/actions/resources.js b/app/actions/resources.js index cd3ada78c..6e4c481b5 100644 --- a/app/actions/resources.js +++ b/app/actions/resources.js @@ -21,11 +21,14 @@ export const clearResourceList = ({ export const setResourceMeta = ({ meta, resourceName, + resources, }: {| meta: any, resourceName: string, + resources?: Array, |}): ResourcesAction => ({ type: actionTypes.SET_RESOURCES_META, meta, resourceName, + resources, }); diff --git a/app/containers/IssueView/IssueViewHeader/IssueViewHeader.jsx b/app/containers/IssueView/IssueViewHeader/IssueViewHeader.jsx index d01de87af..fd2eb854d 100644 --- a/app/containers/IssueView/IssueViewHeader/IssueViewHeader.jsx +++ b/app/containers/IssueView/IssueViewHeader/IssueViewHeader.jsx @@ -6,6 +6,9 @@ import { import { getStatus as getResourceStatus, } from 'redux-resource'; +import { + ipcRenderer, +} from 'electron'; import type { StatelessFunctionalComponent, @@ -34,10 +37,12 @@ import Button, { } from '@atlaskit/button'; import Spinner from '@atlaskit/spinner'; import { + getUiState, getTimerState, getSelectedIssue, getSelfKey, getResourceMappedList, + getResourceMeta, } from 'selectors'; import { @@ -68,18 +73,24 @@ import { type Props = { selectedIssue: Issue, timerRunning: boolean, + allowEdit: boolean, transitionsIsFetching: boolean, issueTransitions: Array, selfKey: string, + host: string, + protocol: string, dispatch: Dispatch, }; const IssueViewHeader: StatelessFunctionalComponent = ({ selectedIssue, timerRunning, + allowEdit, transitionsIsFetching, issueTransitions, selfKey, + host, + protocol, dispatch, }: Props):Node => ( @@ -197,15 +208,41 @@ const IssueViewHeader: StatelessFunctionalComponent = ({ Assign to me } +
+
+ +
); function mapStateToProps(state) { + const selectedIssue = getSelectedIssue(state); + let allowEdit = false; + if (selectedIssue) { + const issueMeta = getResourceMeta('issues', selectedIssue.id)(state); + allowEdit = issueMeta.permissions ? issueMeta.permissions.EDIT_ISSUE.havePermission : false; + } return { - selectedIssue: getSelectedIssue(state), + host: getUiState('host')(state), + protocol: getUiState('protocol')(state), timerRunning: getTimerState('running')(state), + selectedIssue, + allowEdit, issueTransitions: getResourceMappedList( 'issuesStatuses', 'issueTransitions', diff --git a/app/containers/Popups/IssueForm/IssueForm.jsx b/app/containers/Popups/IssueForm/IssueForm.jsx new file mode 100644 index 000000000..a6eeb3e91 --- /dev/null +++ b/app/containers/Popups/IssueForm/IssueForm.jsx @@ -0,0 +1,107 @@ +import React, { Component } from 'react'; +import { + ipcRenderer, +} from 'electron'; + +import Spinner from '@atlaskit/spinner'; +import { + AppWrapper, + FullPageSpinner, +} from 'styles'; + + +class IssueForm extends Component<{}, any> { + constructor(props: {}) { + super(props); + this.state = { + show: true, + }; + } + + componentDidMount() { + ipcRenderer.on('url', this.onLoadUrl); + ipcRenderer.on('page-fully-loaded', () => { + setTimeout(() => { + this.setState({ + show: false, + }); + document.getElementById('root').style.display = 'none'; + }, 500); + }); + } + + componentWillUnmount() { + ipcRenderer.removeListener('url', this.onLoadUrl); + } + + onLoadUrl = ( + ev, + { + url, + projectId, + issueId, + }, + ) => { + const webview = document.createElement('webview'); + webview.setAttribute('preload', './preload.js'); + webview.style.height = '100%'; + webview.addEventListener('did-finish-load', () => { + if (process.env.NODE_ENV === 'development' || process.env.DEBUG_PROD === true) { + webview.openDevTools(); + } + webview.executeJavaScript(` + document.getElementById('page').style.display = 'none'; + var issueForm = JIRA.Forms + ${issueId ? + `.createEditIssueForm({ issueId: ${issueId} })` : + `.createCreateIssueForm({ pid: ${projectId} })` + } + .bind('sessionComplete', function(ev, issues) { + ${issueId ? + `ipcRenderer.send("issue-refetch", "${issueId}");` : + 'ipcRenderer.send("issue-created", issues);' + } + ipcRenderer.send('close-page'); + }) + .asDialog({ + windowTitle: ${issueId ? '"Edit issue"' : '"Create Issue"'} + }); + issueForm.show(); + var timerId = setInterval(function() { + if (issueForm.$buttonContainer) { + var cancel = issueForm.$buttonContainer[0].getElementsByClassName('cancel'); + cancel[0].addEventListener('click', function (event) { + ipcRenderer.send('close-page'); + }); + clearInterval(timerId); + document.getElementById('qf-field-picker-trigger').remove(); + var forRemove = document.getElementsByClassName('aui-blanket'); + forRemove[0].remove(); + var formBody = issueForm.$form.children()[0]; + var jiraDialog = issueForm.$popup[0]; + formBody.style.maxHeight = (parseInt(formBody.style.maxHeight.replace('px', ''), 10) + 120).toString() + 'px'; + jiraDialog.style.marginTop = (parseInt(jiraDialog.style.marginTop.replace('px', ''), 10) - 65).toString() + 'px'; + ipcRenderer.send('page-fully-loaded'); + } + }, 500); + `); + }); + webview.src = url; + document.getElementById('forWebview').appendChild(webview); + } + + render() { + if (this.state.show) { + return ( + + + + + + ); + } + return null; + } +} + +export default IssueForm; diff --git a/app/containers/Popups/IssueForm/index.jsx b/app/containers/Popups/IssueForm/index.jsx new file mode 100644 index 000000000..e69de29bb diff --git a/app/containers/Popups/ScreenPopup/ScreenPopup.jsx b/app/containers/Popups/ScreenPopup/ScreenPopup.jsx index 38d0620a0..5c84adaae 100644 --- a/app/containers/Popups/ScreenPopup/ScreenPopup.jsx +++ b/app/containers/Popups/ScreenPopup/ScreenPopup.jsx @@ -32,7 +32,10 @@ type State = { export default class ScreenPopup extends Component<{}, State> { constructor(props: {}) { super(props); - const { lastScreenshotPath, screenshotPreviewTime } = getGlobal('sharedObj'); + const { + lastScreenshotPath, + screenshotPreviewTime, + } = getGlobal('sharedObj'); remote.getCurrentWindow().flashFrame(true); this.state = { maxTime: screenshotPreviewTime, diff --git a/app/containers/Sidebar/SidebarIssues/IssuesHeader/IssuesHeader.jsx b/app/containers/Sidebar/SidebarIssues/IssuesHeader/IssuesHeader.jsx index 77fdd4cd9..1f26ce265 100644 --- a/app/containers/Sidebar/SidebarIssues/IssuesHeader/IssuesHeader.jsx +++ b/app/containers/Sidebar/SidebarIssues/IssuesHeader/IssuesHeader.jsx @@ -24,6 +24,7 @@ import { uiActions, } from 'actions'; import { + getCurrentProjectKey, getCurrentProjectId, getUiState, } from 'selectors'; @@ -43,6 +44,7 @@ type Props = { filterStatusesIsFetched: boolean, sidebarFiltersIsOpen: boolean, filtersApplied: boolean, + currentProjectKey: string, currentProjectId: string, host: string, protocol: string, @@ -54,6 +56,7 @@ const IssuesHeader: StatelessFunctionalComponent = ({ filterStatusesIsFetched, sidebarFiltersIsOpen, filtersApplied, + currentProjectKey, currentProjectId, host, protocol, @@ -83,8 +86,11 @@ const IssuesHeader: StatelessFunctionalComponent = ({ size="medium" onClick={() => { ipcRenderer.send( - 'open-create-issue-window', - `${protocol}://${host}/secure/CreateIssue.jspa?pid=${currentProjectId}`, + 'open-issue-window', + { + projectId: currentProjectId, + url: `${protocol}://${host}/projects/${currentProjectKey}/issues`, + }, ); }} /> @@ -115,6 +121,7 @@ function mapStateToProps(state) { host: getUiState('host')(state), protocol: getUiState('protocol')(state), currentProjectId: getCurrentProjectId(state), + currentProjectKey: getCurrentProjectKey(state), searchValue: getUiState('issuesSearch')(state), sidebarFiltersIsOpen: getUiState('sidebarFiltersIsOpen')(state), filterStatusesIsFetched: getUiState('filterStatusesIsFetched')(state), diff --git a/app/containers/Sidebar/SidebarIssues/SidebarIssues.jsx b/app/containers/Sidebar/SidebarIssues/SidebarIssues.jsx index 964d1ef72..47e768f46 100644 --- a/app/containers/Sidebar/SidebarIssues/SidebarIssues.jsx +++ b/app/containers/Sidebar/SidebarIssues/SidebarIssues.jsx @@ -91,7 +91,6 @@ const SidebarAllItems: StatelessFunctionalComponent = ({ rowCount={totalCount} ref={registerInfiniteNode} minimumBatchSize={50} - threshold={20} loadMoreRows={({ startIndex, stopIndex }) => new Promise((resolve) => { dispatch(issuesActions.fetchIssuesRequest({ @@ -129,7 +128,7 @@ const SidebarAllItems: StatelessFunctionalComponent = ({ return (
- {item ? + {(item && item !== 'pending') ?
, - document.getElementById('root') || document.createElement('div'), + document.getElementById('root'), ); diff --git a/app/issueForm.html b/app/issueForm.html new file mode 100644 index 000000000..c7c70f811 --- /dev/null +++ b/app/issueForm.html @@ -0,0 +1,63 @@ + + + + + + + + +
+
+ + + diff --git a/app/issueForm.jsx b/app/issueForm.jsx new file mode 100644 index 000000000..29d60b0c4 --- /dev/null +++ b/app/issueForm.jsx @@ -0,0 +1,12 @@ +// @flow +import React from 'react'; +import { + render, +} from 'react-dom'; + +import IssueForm from './containers/Popups/IssueForm/IssueForm'; + +render( + , + document.getElementById('root') || document.createElement('div'), +); diff --git a/app/main.dev.js b/app/main.dev.js index 3cc6dc361..5d5be305f 100644 --- a/app/main.dev.js +++ b/app/main.dev.js @@ -13,7 +13,6 @@ import { session, } from 'electron'; import notifier from 'node-notifier'; -import fs from 'fs'; import MenuBuilder from './menu'; const appDir = app.getPath('userData'); @@ -40,7 +39,6 @@ global.sharedObj = { idleDetails: {}, }; - const menuTemplate = [ { label: 'No selected issue', @@ -202,7 +200,7 @@ function createWindow(callback) { mainWindow.on('ready-to-show', () => { if (mainWindow) { - if (process.NODE_ENV === 'development' || process.env.DEBUG_PROD === true) { + if (process.env.NODE_ENV === 'development' || process.env.DEBUG_PROD === true) { mainWindow.webContents.openDevTools(); } mainWindow.show(); @@ -379,8 +377,26 @@ ipcMain.on('select-issue', (event, issueKey) => { tray.setContextMenu(menu); }); -ipcMain.on('open-create-issue-window', (event, url) => { +ipcMain.on('issue-created', (event, issues) => { + issues.forEach(({ issueKey }) => { + mainWindow.webContents.send('newIssue', issueKey); + }); +}); + +ipcMain.on('issue-refetch', (event, issueId) => { + mainWindow.webContents.send('reFetchIssue', issueId); +}); + +ipcMain.on('open-issue-window', ( + event, + { + url, + projectId, + issueId, + }, +) => { let createIssueWindow = new BrowserWindow({ + backgroundColor: 'white', parent: mainWindow, modal: true, useContentSize: true, @@ -388,43 +404,40 @@ ipcMain.on('open-create-issue-window', (event, url) => { center: true, title: 'Chronos', webPreferences: { - nodeIntegration: false, devTools: true, }, }); - createIssueWindow.loadURL(url); - createIssueWindow.once('ready-to-show', () => { - if (createIssueWindow) { - createIssueWindow.show(); - } - }); - - createIssueWindow.webContents.on('dom-ready', () => { - createIssueWindow.webContents.executeJavaScript(` - var sidebar = document.getElementById('navigation-app'); - var cancel = document.getElementById('issue-create-cancel'); - if (sidebar) { - sidebar.parentNode.removeChild(sidebar); - } - if (cancel) { - cancel.addEventListener('click', function (event) { - window.close(); - }); - } - `); + createIssueWindow.loadURL(`file://${__dirname}/issueForm.html`); + createIssueWindow.webContents.on('did-finish-load', () => { + createIssueWindow.webContents.send( + 'url', + { + url, + projectId, + issueId, + }, + ); }); - createIssueWindow.webContents.on('did-get-redirect-request', (ev, fromUrl, newUrl) => { - if (fromUrl.includes('CreateIssueDetails.jspa')) { - const issueKey = newUrl.split('/').pop(); - mainWindow.webContents.send('newIssue', issueKey); - createIssueWindow.webContents.executeJavaScript(` - window.close(); - `); - } + createIssueWindow.openDevTools(); + if (process.env.NODE_ENV === 'development' || process.env.DEBUG_PROD === true) { + createIssueWindow.openDevTools(); + } + createIssueWindow.on('unresponsive', () => { + createIssueWindow.destroy(); }); createIssueWindow.on('closed', () => { createIssueWindow = null; }, false); + ipcMain.once('page-fully-loaded', () => { + if (createIssueWindow) { + createIssueWindow.webContents.send('page-fully-loaded'); + } + }); + ipcMain.once('close-page', () => { + if (createIssueWindow) { + createIssueWindow.close(); + } + }); }); ipcMain.on('oauth-response', (event, text) => { @@ -617,27 +630,6 @@ app.on('ready', async () => { await installExtensions(); } - try { - fs.accessSync(`${appDir}/screens/`, fs.constants.R_OK | fs.constants.W_OK); // eslint-disable-line - } catch (err) { - fs.mkdirSync(`${appDir}/screens/`); - } - try { - fs.accessSync(`${appDir}/offline_screens/`, fs.constants.R_OK | fs.constants.W_OK); // eslint-disable-line - } catch (err) { - fs.mkdirSync(`${appDir}/offline_screens/`); - } - try { - fs.accessSync(`${appDir}/current_screenshots/`, fs.constants.R_OK | fs.constants.W_OK); // eslint-disable-line - } catch (err) { - fs.mkdirSync(`${appDir}/current_screenshots/`); - } - try { - fs.accessSync(`${appDir}/worklogs/`, fs.constants.R_OK | fs.constants.W_OK) // eslint-disable-line - } catch (err) { - fs.mkdirSync(`${appDir}/worklogs/`); - } - tray = new Tray(path.join(__dirname, '/assets/images/icon.png')); global.tray = tray; menu = Menu.buildFromTemplate(menuTemplate); diff --git a/app/menu.js b/app/menu.js index 401a40642..e638285b4 100644 --- a/app/menu.js +++ b/app/menu.js @@ -1,4 +1,9 @@ -import { app, Menu, shell, BrowserWindow } from 'electron'; +import { + app, + Menu, + shell, + BrowserWindow, +} from 'electron'; export default class MenuBuilder { @@ -53,7 +58,17 @@ export default class MenuBuilder { { label: 'Hide Others', accelerator: 'Command+Shift+H', role: 'hideothers' }, { label: 'Show All', role: 'unhide' }, { type: 'separator' }, - { label: 'Quit', accelerator: 'Command+Q', click: () => app.quit() }, + { + label: 'Quit', + accelerator: 'Command+Q', + click: (menu, win) => { + if (win.id !== 1) { + win.close(); + } else { + app.quit(); + } + }, + }, ], }; const subMenuEdit = { diff --git a/app/package.json b/app/package.json index 7f3005b8b..44b58502e 100644 --- a/app/package.json +++ b/app/package.json @@ -1,7 +1,7 @@ { "name": "Chronos", "productName": "Chronos", - "version": "2.5.12", + "version": "2.5.13", "description": "Native app for time-tracking fully integrated with JIRA", "main": "./main.prod.js", "scripts": { diff --git a/app/reducers/resourcesPlugins/indexedListPlugin.js b/app/reducers/resourcesPlugins/indexedListPlugin.js index 37398d44c..955cce742 100644 --- a/app/reducers/resourcesPlugins/indexedListPlugin.js +++ b/app/reducers/resourcesPlugins/indexedListPlugin.js @@ -5,7 +5,11 @@ import { const indexedListPlugin = () => (state, action) => { - if (action.type !== actionTypes.READ_RESOURCES_SUCCEEDED) { + const suiteAction = [ + actionTypes.READ_RESOURCES_SUCCEEDED, + actionTypes.READ_RESOURCES_PENDING, + ].includes(action.type); + if (!suiteAction) { return state; } @@ -13,21 +17,38 @@ const indexedListPlugin = () => list, indexedList = false, startIndex = 0, + stopIndex = 10, } = action; if (!indexedList) { return state; } + const indexedListName = `${list}Indexed`; const prevIndexed = state.lists[indexedListName] || {}; + if (action.type === actionTypes.READ_RESOURCES_SUCCEEDED) { + return { + ...state, + lists: { + ...state.lists, + [indexedListName]: { + ...prevIndexed, + ...action.resources.reduce((acc, resource, index) => { + acc[startIndex + index] = resource.id || resource; + return acc; + }, {}), + }, + }, + }; + } return { ...state, lists: { ...state.lists, [indexedListName]: { ...prevIndexed, - ...action.resources.reduce((acc, resource, index) => { - acc[startIndex + index] = resource.id ? resource.id : resource; + ...Array.from(Array(stopIndex - startIndex).keys()).reduce((acc, resource, index) => { + acc[startIndex + index] = 'pending'; return acc; }, {}), }, diff --git a/app/reducers/resourcesPlugins/metaPlugin.js b/app/reducers/resourcesPlugins/metaPlugin.js index 5d33ab5de..517c29d2c 100644 --- a/app/reducers/resourcesPlugins/metaPlugin.js +++ b/app/reducers/resourcesPlugins/metaPlugin.js @@ -1,3 +1,6 @@ +import { + setResourceMeta, +} from 'redux-resource'; import { actionTypes, } from 'actions'; @@ -9,6 +12,16 @@ const metaPlugin = () => return state; } + if (action.resources) { + return { + ...state, + meta: setResourceMeta({ + resources: action.resources, + meta: state.meta, + newMeta: action.meta, + }), + }; + } return { ...state, meta: { diff --git a/app/sagas/index.js b/app/sagas/index.js index ba807633b..496355cf6 100644 --- a/app/sagas/index.js +++ b/app/sagas/index.js @@ -42,6 +42,7 @@ export default function* rootSaga(): Generator<*, void, *> { fork(issueSagas.watchTransitionIssueRequest), fork(issueSagas.watchAssignIssueRequest), fork(issueSagas.createIpcNewIssueListener), + fork(issueSagas.createIpcReFetchIssueListener), // issuesComments fork(commentsSagas.watchIssueCommentRequest), diff --git a/app/sagas/issues.js b/app/sagas/issues.js index 2a21f9054..cd12425ce 100644 --- a/app/sagas/issues.js +++ b/app/sagas/issues.js @@ -26,7 +26,8 @@ import { getResourceMap, getUiState, getCurrentProjectId, - getResourceItemBydId, + getResourceItemById, + getResourceMeta, } from 'selectors'; import { uiActions, @@ -214,6 +215,7 @@ export function* fetchIssues({ request: 'filterIssues', list: 'filterIssues', startIndex, + stopIndex, indexedList: true, mergeListIds: true, }); @@ -388,10 +390,28 @@ export function* refetchIssues(debouncing: boolean): Generator<*, void, *> { resourceName: 'issues', list: 'filterIssues', })); + const currentTotalCount = yield select(getResourceMeta( + 'issues', + 'filterIssuesTotalCount', + )); + if (!currentTotalCount) { + yield put(resourcesActions.setResourceMeta({ + resourceName: 'issues', + meta: { + filterIssuesTotalCount: 10, + }, + })); + } + yield put(resourcesActions.setResourceMeta({ + resourceName: 'issues', + meta: { + refetchFilterIssuesMarker: true, + }, + })); yield put(resourcesActions.setResourceMeta({ resourceName: 'issues', meta: { - filterIssuesTotalCount: 10, + refetchFilterIssuesMarker: true, }, })); @@ -447,8 +467,8 @@ export function* transitionIssue({ request: 'updateIssue', }); try { - const issue = yield select(getResourceItemBydId('issues', issueId)); - const transition = yield select(getResourceItemBydId('issuesStatuses', transitionId)); + const issue = yield select(getResourceItemById('issues', issueId)); + const transition = yield select(getResourceItemById('issuesStatuses', transitionId)); yield put(issuesA.pending()); yield fork(notify, { @@ -474,7 +494,6 @@ export function* transitionIssue({ }], })); yield fork(getIssueTransitions, issueId); - yield fork(refetchIssues, false); trackMixpanel('Transition of an issue was done'); } catch (err) { @@ -485,9 +504,27 @@ export function* transitionIssue({ } } +export function* getIssuePermissions(issueId: string | number): Generator<*, void, *> { + try { + const { + permissions, + } = yield call(Api.getPermissions, { issueId }); + yield put(resourcesActions.setResourceMeta({ + resourceName: 'issues', + resources: [issueId], + meta: { + permissions, + }, + })); + } catch (err) { + yield call(throwError, err); + } +} + export function* issueSelectFlow(issueId: string | number): Generator<*, *, *> { yield fork(getIssueTransitions, issueId); yield fork(getIssueComments, issueId); + yield fork(getIssuePermissions, issueId); } export function* assignIssue({ @@ -502,7 +539,7 @@ export function* assignIssue({ try { yield put(issuesA.pending()); - const issue = yield select(getResourceItemBydId('issues', issueId)); + const issue = yield select(getResourceItemById('issues', issueId)); const userData = yield select(getUserData); yield call( @@ -580,35 +617,71 @@ export function* fetchEpics(): Generator<*, void, *> { } } +function* onNewIssue(issueKey): Generator<*, *, *> { + const actions = createActionCreators('create', { + resourceName: 'issues', + request: 'createIssue', + }); + try { + const issue = yield call(Api.fetchIssueByKey, issueKey); + yield put(actions.pending()); + yield fork(notify, { + title: `${issue.key} was created`, + }); + issue.fields.worklogs = []; + yield put(actions.succeeded({ + resources: [issue], + })); + yield put(uiActions.setUiState( + 'selectedIssueId', + issue.id, + )); + yield fork(refetchIssues, false); + trackMixpanel('New issue was created'); + } catch (err) { + yield call(throwError, err); + } +} + +function* reFetchIssue(issueId): Generator<*, *, *> { + const actions = createActionCreators('update', { + resourceName: 'issues', + resources: [issueId], + }); + try { + yield put(actions.pending()); + const prevIssue = yield select(getResourceItemById('issues', issueId)); + const issue = yield call(Api.fetchIssue, issueId); + yield fork(notify, { + title: `${issue.key} was updated`, + }); + issue.fields.worklogs = prevIssue.fields.worklogs; + yield put(actions.succeeded({ + resources: [issue], + })); + yield put(uiActions.setUiState( + 'selectedIssueId', + issue.id, + )); + } catch (err) { + yield call(throwError, err); + } +} function getNewIssueChannelListener(channel) { return function* listenNewIssue() { while (true) { const { payload } = yield take(channel); - const actions = createActionCreators('create', { - resourceName: 'issues', - request: 'createIssue', - }); - try { - const issueKey = payload[0]; - const issue = yield call(Api.fetchIssueByKey, issueKey); - yield put(actions.pending()); - yield fork(notify, { - title: `${issue.key} was created`, - }); - issue.fields.worklogs = []; - yield put(actions.succeeded({ - resources: [issue], - })); - yield put(uiActions.setUiState( - 'selectedIssueId', - issue.id, - )); - yield fork(refetchIssues, false); - trackMixpanel('New issue was created'); - } catch (err) { - yield call(throwError, err); - } + yield fork(onNewIssue, payload[0]); + } + }; +} + +function getReFetchIssueChannelListener(channel) { + return function* listenReFetchIssue() { + while (true) { + const { payload } = yield take(channel); + yield fork(reFetchIssue, payload[0]); } }; } @@ -618,6 +691,11 @@ export function* createIpcNewIssueListener(): Generator<*, *, *> { yield fork(getNewIssueChannelListener(newIssueChannel)); } +export function* createIpcReFetchIssueListener(): Generator<*, *, *> { + const reFetchIssueChannel = yield call(createIpcChannel, 'reFetchIssue'); + yield fork(getReFetchIssueChannelListener(reFetchIssueChannel)); +} + export function* watchFetchIssuesRequest(): Generator<*, *, *> { yield takeEvery(actionTypes.FETCH_ISSUES_REQUEST, fetchIssues); } @@ -637,9 +715,7 @@ export function* watchAssignIssueRequest(): Generator<*, *, *> { export function* watchReFetchIssuesRequest(): Generator<*, *, *> { let task; while (true) { - const { - debouncing, - } = yield take(actionTypes.REFETCH_ISSUES_REQUEST); + const { debouncing } = yield take(actionTypes.REFETCH_ISSUES_REQUEST); if (task) { yield cancel(task); } diff --git a/app/selectors/issues.js b/app/selectors/issues.js index 133ed5ca4..ff6c9e5bc 100644 --- a/app/selectors/issues.js +++ b/app/selectors/issues.js @@ -46,7 +46,7 @@ export const getSidebarIssues = createSelector( ) => Object.keys(indexedIds).reduce((acc, index) => { const id = indexedIds[index].toString(); - acc[index] = map[id]; + acc[index] = id === 'pending' ? id : map[id]; return acc; }, {}), ); diff --git a/app/selectors/projects.js b/app/selectors/projects.js index f8c05ae81..217e127d4 100644 --- a/app/selectors/projects.js +++ b/app/selectors/projects.js @@ -55,6 +55,17 @@ export const getCurrentProjectId = createSelector( }, ); +export const getCurrentProjectKey = createSelector( + [ + getCurrentProjectId, + getResourceMap('projects'), + ], + ( + projectId, + projects, + ) => (projects[projectId] ? projects[projectId].key : ''), +); + export const getProjectsOptions = createSelector( [ getResourceMappedList('projects', 'allProjects'), diff --git a/app/selectors/resources.js b/app/selectors/resources.js index 0ef7a395f..8d58b3800 100644 --- a/app/selectors/resources.js +++ b/app/selectors/resources.js @@ -47,7 +47,7 @@ export const getResourceMappedList = ( return resourceSelectors[`${resourceName}${listName}`]; }; -export const getResourceItemBydId = ( +export const getResourceItemById = ( resourceName: string, id: Id, ) => diff --git a/app/types/resources.js b/app/types/resources.js index de38216c3..5f4539334 100644 --- a/app/types/resources.js +++ b/app/types/resources.js @@ -12,4 +12,5 @@ export type ResourcesAction = type: typeof actionTypes.SET_RESOURCES_META, meta: any, resourceName: string, + resources?: Array, |}; diff --git a/app/utils/api/issues.js b/app/utils/api/issues.js index b080b17cc..169d17080 100644 --- a/app/utils/api/issues.js +++ b/app/utils/api/issues.js @@ -47,7 +47,6 @@ export function fetchIssues({ jql, additionalFields = [], boardId, - timeout = 8000, }: { startIndex: number, stopIndex: number, @@ -67,7 +66,6 @@ export function fetchIssues({ ...requiredFields, ...additionalFields, ], - timeout, expand: ['renderedFields'], }); } diff --git a/app/utils/api/profile.js b/app/utils/api/profile.js index 12641140a..b4d546aa6 100644 --- a/app/utils/api/profile.js +++ b/app/utils/api/profile.js @@ -184,3 +184,14 @@ export function getDataForOAuth(baseUrl: string): Promise<*> { }, ); } + +export function getPermissions( + opts: { + issueId?: string | number, + projectId?: string | number, + issueKey?: string | number, + projectKey?: string | number, + }, +): Promise<*> { + return jira.client.myPermissions.getMyPermissions(opts); +} diff --git a/flow-typed/npm/jira-connector_vx.x.x.js b/flow-typed/npm/jira-connector_vx.x.x.js index 574192161..a6e3814d9 100644 --- a/flow-typed/npm/jira-connector_vx.x.x.js +++ b/flow-typed/npm/jira-connector_vx.x.x.js @@ -1,5 +1,5 @@ -// flow-typed signature: 2397eee12c5d341e4b8b848e23c343a5 -// flow-typed version: <>/jira-connector_vgithub:web-pal/jira-connector#107d89a0879620fb0a709dc5f775f16c84a09116/flow_v0.64.0 +// flow-typed signature: 349ef766655d2291cf86953283485003 +// flow-typed version: <>/jira-connector_vgithub:web-pal/jira-connector#56c56015371481701b7ae6fc2fd64ddf07a13b78/flow_v0.64.0 /** * This is an autogenerated libdef stub for: diff --git a/flow-typed/npm/socket.io-client_v2.x.x.js b/flow-typed/npm/socket.io-client_v2.x.x.js index dbf920df9..83dd42604 100644 --- a/flow-typed/npm/socket.io-client_v2.x.x.js +++ b/flow-typed/npm/socket.io-client_v2.x.x.js @@ -1,8 +1,8 @@ -// flow-typed signature: 6a4651587c6acd69738be321bb34d341 -// flow-typed version: f75fc39aee/socket.io-client_v2.x.x/flow_>=v0.34.x +// flow-typed signature: 1eed102f1f3f03ab47e98615df15dfd3 +// flow-typed version: 51b71b47ea/socket.io-client_v2.x.x/flow_>=v0.34.x declare module "socket.io-client" { - declare type Callback = (...args: mixed[]) => void; + declare type Callback = (...args: any[]) => void; declare type ManagerOptions = $Shape<{ path: string, @@ -53,8 +53,8 @@ declare module "socket.io-client" { constructor(io: Manager, nsp: string, opts?: SocketOptions): Socket; open(): Socket; connect(): Socket; - send(...args: mixed[]): Socket; - emit(event: string, ...args: mixed[]): Socket; // overrides Emitter#emit + send(...args: any[]): Socket; + emit(event: string, ...args: any[]): Socket; // overrides Emitter#emit close(): Socket; disconnect(): Socket; compress(boolean): Socket; diff --git a/package.json b/package.json index f16e3af9b..a5660a811 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "Chronos", - "version": "2.5.12", + "version": "2.5.13", "description": "Full functionality time tracking software with direct JIRA integration", "scripts": { "build": "concurrently \"yarn build-main\" \"yarn build-renderer\"", @@ -42,6 +42,7 @@ "app.html", "idlePopup.html", "screenPopup.html", + "issueForm.html", "assets/images/icon.png", "assets/images/icon-active.png", "preload.js", @@ -156,7 +157,7 @@ "electron-log": "2.2.14", "electron-updater": "2.20.1", "font-awesome": "4.7.0", - "jira-connector": "github:web-pal/jira-connector#107d89a0879620fb0a709dc5f775f16c84a09116", + "jira-connector": "github:web-pal/jira-connector#56c56015371481701b7ae6fc2fd64ddf07a13b78", "merge-images": "1.0.7", "mixpanel-browser": "2.17.0", "moment": "2.20.1", diff --git a/webpack.config.renderer.dev.js b/webpack.config.renderer.dev.js index b9957e8af..3ce91bd29 100644 --- a/webpack.config.renderer.dev.js +++ b/webpack.config.renderer.dev.js @@ -47,6 +47,10 @@ export default merge.smart(baseConfig, { idleTimePopup: [ path.join(__dirname, 'app/idlePopup.jsx'), ], + issueForm: [ + 'react-hot-loader/patch', + path.join(__dirname, 'app/issueForm.jsx'), + ], }, output: { diff --git a/webpack.config.renderer.prod.js b/webpack.config.renderer.prod.js index d231938f5..44efb8aa5 100644 --- a/webpack.config.renderer.prod.js +++ b/webpack.config.renderer.prod.js @@ -51,6 +51,7 @@ export default merge.smart(baseConfig, { main: ['babel-polyfill', './app/index'], screenPopup: ['babel-polyfill', './app/screenPopup'], idleTimePopup: ['babel-polyfill', './app/idlePopup'], + issueForm: ['babel-polyfill', './app/issueForm'], }, output: { diff --git a/yarn.lock b/yarn.lock index 35510a616..f6adcff42 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30,6 +30,13 @@ version "0.0.6" resolved "https://registry.yarnpkg.com/7zip/-/7zip-0.0.6.tgz#9cafb171af82329490353b4816f03347aa150a30" +"@atlaskit/analytics-next@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@atlaskit/analytics-next/-/analytics-next-1.0.2.tgz#d2959a6126c3b9282fc254cbe469e3e54e30f507" + dependencies: + clone-deep "^3.0.1" + prop-types "^15.5.10" + "@atlaskit/blanket@^4.0.7": version "4.0.9" resolved "https://registry.yarnpkg.com/@atlaskit/blanket/-/blanket-4.0.9.tgz#1c2bc78fca2964833d4e7440bdea86afe99791b7" @@ -46,9 +53,10 @@ styled-components "^1.4.6" "@atlaskit/button@^6.3.0", "@atlaskit/button@^6.3.1": - version "6.4.2" - resolved "https://registry.yarnpkg.com/@atlaskit/button/-/button-6.4.2.tgz#24253599c4d46661de5d2b8924ec0c8ca23f6358" + version "6.5.0" + resolved "https://registry.yarnpkg.com/@atlaskit/button/-/button-6.5.0.tgz#5f2405bd682374c8ec536f70d1b0d41f2c4ea800" dependencies: + "@atlaskit/analytics-next" "^1.0.2" "@atlaskit/theme" "^2.3.4" babel-runtime "^6.26.0" styled-components "^1.4.6" @@ -174,8 +182,8 @@ uuid "^3.1.0" "@atlaskit/icon@^10.7.0", "@atlaskit/icon@^10.7.1", "@atlaskit/icon@^10.9.2": - version "10.9.2" - resolved "https://registry.yarnpkg.com/@atlaskit/icon/-/icon-10.9.2.tgz#db21f7d06c6f7d0427e46fd6c5b881385f9e1a45" + version "10.10.1" + resolved "https://registry.yarnpkg.com/@atlaskit/icon/-/icon-10.10.1.tgz#e55dc585dc14676f27103fd3f6347e77d8b50a5b" dependencies: "@atlaskit/theme" "^2.3.4" babel-runtime "^6.26.0" @@ -466,7 +474,7 @@ ajv-keywords@^2.0.0, ajv-keywords@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" -ajv-keywords@^3.1.0: +ajv-keywords@^3.0.0, ajv-keywords@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be" @@ -477,7 +485,7 @@ ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.3, ajv@^5.3.0, ajv@^5.5.0: +ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.3.0, ajv@^5.5.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: @@ -486,9 +494,9 @@ ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.3, ajv@^5.3.0, ajv@^5.5.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" -ajv@^6.1.0: - version "6.1.1" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.1.1.tgz#978d597fbc2b7d0e5a5c3ddeb149a682f2abfa0e" +ajv@^6.0.1, ajv@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.2.0.tgz#afac295bbaa0152449e522742e4547c1ae9328d2" dependencies: fast-deep-equal "^1.0.0" fast-json-stable-stringify "^2.0.0" @@ -673,7 +681,7 @@ arraybuffer.slice@~0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" -arrify@^1.0.0: +arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -2018,6 +2026,14 @@ camelcase-keys@^2.0.0: camelcase "^2.0.0" map-obj "^1.0.0" +camelcase-keys@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + dependencies: + camelcase "^4.1.0" + map-obj "^2.0.0" + quick-lru "^1.0.0" + camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" @@ -2251,6 +2267,15 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" +clone-deep@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-3.0.1.tgz#7d1a4b88a3cf0bc2da84696ba712b349a6506a44" + dependencies: + for-own "^1.0.0" + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^2.0.2" + clone-stats@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" @@ -2495,18 +2520,18 @@ content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" -conventional-changelog-angular@^1.6.5: - version "1.6.5" - resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.6.5.tgz#936249e897501affdffc6043da45cab59d6f0907" +conventional-changelog-angular@^1.6.6: + version "1.6.6" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-1.6.6.tgz#b27f2b315c16d0a1f23eb181309d0e6a4698ea0f" dependencies: compare-func "^1.3.1" - q "^1.4.1" + q "^1.5.1" -conventional-changelog-atom@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-0.2.3.tgz#117d024e5cf9e28dcbd0575981105395be1bca74" +conventional-changelog-atom@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-atom/-/conventional-changelog-atom-0.2.4.tgz#4917759947f4db86073f9d3838a2d54302d5843d" dependencies: - q "^1.4.1" + q "^1.5.1" conventional-changelog-cli@1.3.8: version "1.3.8" @@ -2518,47 +2543,47 @@ conventional-changelog-cli@1.3.8: meow "^3.7.0" tempfile "^1.1.1" -conventional-changelog-codemirror@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.3.tgz#e1ec78e77e7fe26a2bd18e32f02523527916a07b" +conventional-changelog-codemirror@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-codemirror/-/conventional-changelog-codemirror-0.3.4.tgz#debc43991d487d7964e65087fbbe034044bd51fb" dependencies: - q "^1.4.1" + q "^1.5.1" -conventional-changelog-core@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-2.0.4.tgz#bbc476109c6b28ba6328b0b417f5ab5bfc7ca28a" +conventional-changelog-core@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-2.0.5.tgz#45b6347c4c6512e1f163f7ff55c9f5bcb88fd990" dependencies: - conventional-changelog-writer "^3.0.3" - conventional-commits-parser "^2.1.4" - dateformat "^1.0.12" + conventional-changelog-writer "^3.0.4" + conventional-commits-parser "^2.1.5" + dateformat "^3.0.0" get-pkg-repo "^1.0.0" - git-raw-commits "^1.3.3" + git-raw-commits "^1.3.4" git-remote-origin-url "^2.0.0" - git-semver-tags "^1.3.3" - lodash "^4.0.0" + git-semver-tags "^1.3.4" + lodash "^4.2.1" normalize-package-data "^2.3.5" - q "^1.4.1" + q "^1.5.1" read-pkg "^1.1.0" read-pkg-up "^1.0.1" through2 "^2.0.0" -conventional-changelog-ember@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-0.3.5.tgz#db9a23f01103c6a0446ed2077ed5c87656d0571a" +conventional-changelog-ember@^0.3.6: + version "0.3.6" + resolved "https://registry.yarnpkg.com/conventional-changelog-ember/-/conventional-changelog-ember-0.3.6.tgz#f3825d7434168f3d9211b5532dc1d5769532b668" dependencies: - q "^1.4.1" + q "^1.5.1" -conventional-changelog-eslint@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.3.tgz#023002a3f776266c501e4d4def7b0bb24130f29d" +conventional-changelog-eslint@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-eslint/-/conventional-changelog-eslint-1.0.4.tgz#333456d1884d96f3a49cc0984a745095e9d56288" dependencies: - q "^1.4.1" + q "^1.5.1" -conventional-changelog-express@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-0.3.3.tgz#25aef42a30b5457f97681a94f2ac9b0ee515484a" +conventional-changelog-express@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-express/-/conventional-changelog-express-0.3.4.tgz#812a9cf778677e12f978ac9c40d85297c0bfcca9" dependencies: - q "^1.4.1" + q "^1.5.1" conventional-changelog-jquery@^0.1.0: version "0.1.0" @@ -2572,67 +2597,67 @@ conventional-changelog-jscs@^0.1.0: dependencies: q "^1.4.1" -conventional-changelog-jshint@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.3.tgz#28b6fe4d41fb945f38c6c31cd195fe37594f0007" +conventional-changelog-jshint@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-jshint/-/conventional-changelog-jshint-0.3.4.tgz#b2de33cd0870d9af804ac6a4fded0ee25b69c9bb" dependencies: compare-func "^1.3.1" - q "^1.4.1" + q "^1.5.1" -conventional-changelog-preset-loader@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.5.tgz#d5af525d7ad81179d9b54137284d74d665997fa7" +conventional-changelog-preset-loader@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-1.1.6.tgz#b29af6332f9313857be36427623c9016bfeeaf33" -conventional-changelog-writer@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-3.0.3.tgz#2faa65739370769639fff1c0008722162936d46c" +conventional-changelog-writer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-3.0.4.tgz#705b46a8b8277bd7fd79cad8032095b5d803864c" dependencies: compare-func "^1.3.1" - conventional-commits-filter "^1.1.4" - dateformat "^1.0.11" + conventional-commits-filter "^1.1.5" + dateformat "^3.0.0" handlebars "^4.0.2" json-stringify-safe "^5.0.1" - lodash "^4.0.0" - meow "^3.3.0" - semver "^5.0.1" + lodash "^4.2.1" + meow "^4.0.0" + semver "^5.5.0" split "^1.0.0" through2 "^2.0.0" conventional-changelog@^1.1.10: - version "1.1.16" - resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-1.1.16.tgz#fa78386c831f5b1ae45f60391ef015c2a4a400b9" - dependencies: - conventional-changelog-angular "^1.6.5" - conventional-changelog-atom "^0.2.3" - conventional-changelog-codemirror "^0.3.3" - conventional-changelog-core "^2.0.4" - conventional-changelog-ember "^0.3.5" - conventional-changelog-eslint "^1.0.3" - conventional-changelog-express "^0.3.3" + version "1.1.17" + resolved "https://registry.yarnpkg.com/conventional-changelog/-/conventional-changelog-1.1.17.tgz#9019503d51328d8b33b0be6d425ab7f065918332" + dependencies: + conventional-changelog-angular "^1.6.6" + conventional-changelog-atom "^0.2.4" + conventional-changelog-codemirror "^0.3.4" + conventional-changelog-core "^2.0.5" + conventional-changelog-ember "^0.3.6" + conventional-changelog-eslint "^1.0.4" + conventional-changelog-express "^0.3.4" conventional-changelog-jquery "^0.1.0" conventional-changelog-jscs "^0.1.0" - conventional-changelog-jshint "^0.3.3" - conventional-changelog-preset-loader "^1.1.5" + conventional-changelog-jshint "^0.3.4" + conventional-changelog-preset-loader "^1.1.6" conventional-commit-types@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-2.2.0.tgz#5db95739d6c212acbe7b6f656a11b940baa68946" -conventional-commits-filter@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-1.1.4.tgz#8b5be3979c372e4f7440180d5c655a94ac5a134a" +conventional-commits-filter@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-1.1.5.tgz#77aac065e3de9c1a74b801e8e25c9affb3184f65" dependencies: is-subset "^0.1.1" modify-values "^1.0.0" -conventional-commits-parser@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-2.1.4.tgz#86d2c21029268d99543c4ebda37d76fe5c44d8d1" +conventional-commits-parser@^2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-2.1.5.tgz#9ac3a4ab221c0c3c9e9dd2c09ae01e6d1e1dabe0" dependencies: JSONStream "^1.0.4" is-text-path "^1.0.0" lodash "^4.2.1" - meow "^3.3.0" + meow "^4.0.0" split2 "^2.0.0" through2 "^2.0.0" trim-off-newlines "^1.0.0" @@ -2919,24 +2944,21 @@ date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -dateformat@^1.0.11, dateformat@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" - dependencies: - get-stdin "^4.0.1" - meow "^3.3.0" - dateformat@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" +dateformat@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + debug@2.6.4: version "2.6.4" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.4.tgz#7586a9b3c39741c0282ae33445c4e8ac74734fe0" dependencies: ms "0.7.3" -debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9, debug@~2.6.4: +debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -2948,7 +2970,14 @@ debug@^3.0.0, debug@^3.0.1, debug@^3.1.0, debug@~3.1.0: dependencies: ms "2.0.0" -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize-keys@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.0.0, decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -3357,8 +3386,8 @@ electron-publish@19.55.2: mime "^2.2.0" electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.30: - version "1.3.33" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.33.tgz#bf00703d62a7c65238136578c352d6c5c042a545" + version "1.3.34" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.34.tgz#d93498f40391bb0c16a603d8241b9951404157ed" electron-updater@2.20.1: version "2.20.1" @@ -3471,7 +3500,7 @@ errno@^0.1.1, errno@^0.1.3: dependencies: prr "~1.0.1" -error-ex@^1.2.0: +error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" dependencies: @@ -3742,11 +3771,10 @@ esquery@^1.0.0: estraverse "^4.0.0" esrecurse@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" dependencies: estraverse "^4.1.0" - object-assign "^4.0.1" estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: version "4.2.0" @@ -3976,8 +4004,8 @@ fancy-log@^1.1.0: time-stamp "^1.0.0" fast-deep-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" fast-json-stable-stringify@^2.0.0: version "2.0.0" @@ -4212,6 +4240,12 @@ for-own@^0.1.4: dependencies: for-in "^1.0.1" +for-own@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-1.0.0.tgz#c63332f415cedc4b04dbfe70cf836494c53cb44b" + dependencies: + for-in "^1.0.1" + foreach@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" @@ -4389,13 +4423,13 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -git-raw-commits@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.3.3.tgz#464f9aa14c4e78235e98654f0da467f3702590f9" +git-raw-commits@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-1.3.4.tgz#442c3df5985b4f5689e9e43597f5194736aac001" dependencies: dargs "^4.0.1" lodash.template "^4.0.2" - meow "^3.3.0" + meow "^4.0.0" split2 "^2.0.0" through2 "^2.0.0" @@ -4406,12 +4440,12 @@ git-remote-origin-url@^2.0.0: gitconfiglocal "^1.0.0" pify "^2.3.0" -git-semver-tags@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-1.3.3.tgz#0b0416c43285adfdc93a8038ea25502a09319245" +git-semver-tags@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-1.3.4.tgz#2ceb2a355c6d7514c123c35e297067d08caf3a92" dependencies: - meow "^3.3.0" - semver "^5.0.1" + meow "^4.0.0" + semver "^5.5.0" gitconfiglocal@^1.0.0: version "1.0.0" @@ -4693,8 +4727,8 @@ has-gulplog@^0.1.0: sparkles "^1.0.0" has-symbol-support-x@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.1.tgz#66ec2e377e0c7d7ccedb07a3a84d77510ff1bc4c" + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" has-to-string-tag-x@^1.2.0: version "1.4.1" @@ -4955,6 +4989,10 @@ indent-string@^2.1.0: dependencies: repeating "^2.0.0" +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" @@ -5169,7 +5207,7 @@ is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" -is-extendable@^1.0.1: +is-extendable@^1.0.0, is-extendable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" dependencies: @@ -5434,9 +5472,9 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -"jira-connector@github:web-pal/jira-connector#107d89a0879620fb0a709dc5f775f16c84a09116": +"jira-connector@github:web-pal/jira-connector#56c56015371481701b7ae6fc2fd64ddf07a13b78": version "2.6.0" - resolved "https://codeload.github.com/web-pal/jira-connector/tar.gz/107d89a0879620fb0a709dc5f775f16c84a09116" + resolved "https://codeload.github.com/web-pal/jira-connector/tar.gz/56c56015371481701b7ae6fc2fd64ddf07a13b78" dependencies: oauth "^0.9.12" request "^2.83.0" @@ -5479,6 +5517,10 @@ json-loader@^0.5.4: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" +json-parse-better-errors@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" + json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" @@ -5659,6 +5701,15 @@ load-json-file@^2.0.0: pify "^2.0.0" strip-bom "^3.0.0" +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + loader-runner@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" @@ -5740,10 +5791,6 @@ lodash.cond@^4.3.0: version "4.5.2" resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" -lodash.endswith@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.endswith/-/lodash.endswith-4.2.1.tgz#fed59ac1738ed3e236edd7064ec456448b37bc09" - lodash.escape@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" @@ -5769,14 +5816,6 @@ lodash.isequal@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" -lodash.isfunction@^3.0.8: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - lodash.keys@^3.0.0, lodash.keys@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" @@ -5797,10 +5836,6 @@ lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" -lodash.startswith@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.startswith/-/lodash.startswith-4.2.1.tgz#c598c4adce188a27e53145731cdc6c0e7177600c" - lodash.template@^3.0.0: version "3.6.2" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" @@ -5843,7 +5878,7 @@ lodash@4.17.2: version "4.17.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.2.tgz#34a3055babe04ce42467b607d700072c7ff6bf42" -lodash@^4.0.0, lodash@^4.0.1, lodash@^4.1.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1: +lodash@^4.0.1, lodash@^4.1.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" @@ -5903,6 +5938,10 @@ map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" +map-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + map-stream@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" @@ -5979,6 +6018,20 @@ meow@^3.1.0, meow@^3.3.0, meow@^3.7.0: redent "^1.0.0" trim-newlines "^1.0.0" +meow@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.0.tgz#fd5855dd008db5b92c552082db1c307cba20b29d" + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist "^1.1.3" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -6014,8 +6067,8 @@ micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: regex-cache "^0.4.2" micromatch@^3.1.4: - version "3.1.8" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.8.tgz#5c8caa008de588eebb395e8c0ad12c128f25fff1" + version "3.1.9" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.9.tgz#15dc93175ae39e52e93087847096effc73efcf89" dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -6088,6 +6141,13 @@ minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: dependencies: brace-expansion "^1.1.7" +minimist-options@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -6107,6 +6167,13 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" +mixin-object@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-3.0.0.tgz#55091196c9cf744f4c7956fb7021da38c736c440" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.0" + mixpanel-browser@2.17.0: version "2.17.0" resolved "https://registry.yarnpkg.com/mixpanel-browser/-/mixpanel-browser-2.17.0.tgz#c86b4dffdc16f71fdfbb1fb4c692f99d954e936b" @@ -6168,14 +6235,18 @@ mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" -nan@^2.3.0, nan@~2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" +nan@^2.3.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.9.2.tgz#f564d75f5f8f36a6d9456cca7a6c4fe488ab7866" nan@~2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" +nan@~2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" + nanomatch@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" @@ -6219,8 +6290,8 @@ negotiator@0.6.1: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" node-abi@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.2.0.tgz#e802ac7a2408e2c0593fb3176ffdf8a99a9b4dec" + version "2.3.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.3.0.tgz#f3d554d6ac72a9ee16f0f4dc9548db7c08de4986" dependencies: semver "^5.4.1" @@ -6649,6 +6720,13 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" @@ -6725,6 +6803,12 @@ path-type@^2.0.0: dependencies: pify "^2.0.0" +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + dependencies: + pify "^3.0.0" + pause-stream@0.0.11: version "0.0.11" resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" @@ -7129,8 +7213,8 @@ promise@^7.1.1: asap "~2.0.3" prop-types@15.x, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.5.9, prop-types@^15.6.0: - version "15.6.0" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" + version "15.6.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.1.tgz#36644453564255ddda391191fb3a125cbdf654ca" dependencies: fbjs "^0.8.16" loose-envify "^1.3.1" @@ -7197,7 +7281,7 @@ punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" -q@^1.1.2, q@^1.4.1: +q@^1.1.2, q@^1.4.1, q@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -7232,6 +7316,10 @@ querystringify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" +quick-lru@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + raf-schd@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-2.1.0.tgz#64d645723380ec25cc1714e909b953ef1cf254bf" @@ -7483,6 +7571,13 @@ read-pkg-up@^2.0.0: find-up "^2.0.0" read-pkg "^2.0.0" +read-pkg-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + dependencies: + find-up "^2.0.0" + read-pkg "^3.0.0" + read-pkg@^1.0.0, read-pkg@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -7499,6 +7594,14 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.4.tgz#c946c3f47fa7d8eabc0b6150f4a12f69a4574071" @@ -7579,6 +7682,13 @@ redent@^1.0.0: indent-string "^2.1.0" strip-indent "^1.0.1" +redent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + dependencies: + indent-string "^3.0.0" + strip-indent "^2.0.0" + reduce-css-calc@^1.2.6: version "1.3.0" resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" @@ -7669,7 +7779,7 @@ regex-cache@^0.4.2: dependencies: is-equal-shallow "^0.1.3" -regex-not@^1.0.0: +regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" dependencies: @@ -8006,7 +8116,7 @@ semver-diff@^2.0.0: dependencies: semver "^5.0.3" -"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: +"semver@2 || 3 || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" @@ -8100,6 +8210,14 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" +shallow-clone@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-2.0.2.tgz#7f6e9cf3b64e37d5f4afb0f648a0204da556b872" + dependencies: + is-extendable "^1.0.1" + kind-of "^6.0.2" + mixin-object "^3.0.0" + shallowequal@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-0.2.2.tgz#1e32fd5bcab6ad688a4812cb0cc04efc75c7014e" @@ -8159,8 +8277,8 @@ slice-ansi@1.0.0: readable-stream "~1.0.31" smoothscroll-polyfill@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.4.0.tgz#dcda9fe6e9f5d660b886b79be043d40c68fe57d2" + version "0.4.3" + resolved "https://registry.yarnpkg.com/smoothscroll-polyfill/-/smoothscroll-polyfill-0.4.3.tgz#94e5f2d604efcceb53f23ff0380d7ea7280d4bff" snapdragon-node@^2.0.1: version "2.1.1" @@ -8219,11 +8337,11 @@ socket.io-client@2.0.1: to-array "0.1.4" socket.io-parser@~3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.1.2.tgz#dbc2282151fc4faebbe40aeedc0772eba619f7f2" + version "3.1.3" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.1.3.tgz#ed2da5ee79f10955036e3da413bfd7f1e4d86c8e" dependencies: component-emitter "1.2.1" - debug "~2.6.4" + debug "~3.1.0" has-binary2 "~1.0.2" isarray "2.0.1" @@ -8320,19 +8438,38 @@ spawn-sync@^1.0.15: concat-stream "^1.4.7" os-shim "^0.1.2" -spdx-correct@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" +spdx-correct@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-2.0.4.tgz#d1652ad2ebc516f656f66ea93398558065f1b4a4" dependencies: - spdx-license-ids "^1.0.2" + spdx-expression-parse "^2.0.1" + spdx-license-ids "^2.0.1" -spdx-expression-parse@~1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" +spdx-exceptions@^2.0.0, spdx-exceptions@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" -spdx-license-ids@^1.0.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" +spdx-expression-parse@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-2.0.2.tgz#e2e0f229c057eac704c5a6d1c687eed66aca034b" + dependencies: + spdx-exceptions "^2.0.0" + spdx-license-ids "^2.0.1" + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-2.0.1.tgz#02017bcc3534ee4ffef6d58d20e7d3e9a1c3c8ec" + +spdx-license-ids@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz#7a7cd28470cc6d3a1cfe6d66886f6bc430d3ac87" spdy-transport@^2.0.18: version "2.0.20" @@ -8532,6 +8669,10 @@ strip-indent@^1.0.1: dependencies: get-stdin "^4.0.1" +strip-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + strip-json-comments@2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" @@ -8616,11 +8757,11 @@ tabbable@^1.1.0: resolved "https://registry.yarnpkg.com/tabbable/-/tabbable-1.1.2.tgz#b171680aea6e0a3e9281ff23532e2e5de11c0d94" table@^4.0.1, table@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + version "4.0.3" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" + ajv "^6.0.1" + ajv-keywords "^3.0.0" chalk "^2.1.0" lodash "^4.17.4" slice-ansi "1.0.0" @@ -8796,12 +8937,13 @@ to-regex-range@^2.1.0: repeat-string "^1.6.1" to-regex@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.1.tgz#15358bee4a2c83bd76377ba1dc049d0f18837aae" + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" dependencies: - define-property "^0.2.5" - extend-shallow "^2.0.1" - regex-not "^1.0.0" + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" touch@^3.1.0: version "3.1.0" @@ -8810,8 +8952,8 @@ touch@^3.1.0: nopt "~1.0.10" tough-cookie@>=2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" + version "2.3.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" dependencies: punycode "^1.4.1" @@ -8827,6 +8969,10 @@ trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" +trim-newlines@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + trim-off-newlines@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" @@ -9038,13 +9184,8 @@ unzip@^0.1.11: setimmediate ">= 1.0.1 < 2" upath@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.2.tgz#80aaae5395abc5fd402933ae2f58694f0860204c" - dependencies: - lodash.endswith "^4.2.1" - lodash.isfunction "^3.0.8" - lodash.isstring "^4.0.1" - lodash.startswith "^4.2.1" + version "1.0.4" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" update-notifier@^2.3.0: version "2.3.0" @@ -9150,11 +9291,11 @@ uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" validate-npm-package-license@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + version "3.0.2" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.2.tgz#ec39d030e27d1ee714515162c547f66356e49f41" dependencies: - spdx-correct "~1.0.0" - spdx-expression-parse "~1.0.0" + spdx-correct "^2.0.4" + spdx-expression-parse "^3.0.0" vary@~1.1.2: version "1.1.2"