From 4ba10fc5f74b20e3eb047110e0aa75a8f22f90d9 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Wed, 9 Jan 2019 21:57:17 -0800 Subject: [PATCH 001/237] Implements local search cache Results no longer disappear when searching something previously searched Navigating from a document back to results is now instant Search item in left nav no longer unhighlights --- app/components/Sidebar/Main.js | 7 ++++++- app/scenes/Search/Search.js | 27 ++++++++++----------------- app/stores/DocumentsStore.js | 33 +++++++++++++++++++++++++++++++-- 3 files changed, 47 insertions(+), 20 deletions(-) diff --git a/app/components/Sidebar/Main.js b/app/components/Sidebar/Main.js index f1dce8128..ad72711e8 100644 --- a/app/components/Sidebar/Main.js +++ b/app/components/Sidebar/Main.js @@ -65,7 +65,12 @@ class MainSidebar extends React.Component { exact={false} label="Home" /> - } label="Search" /> + } + label="Search" + exact={false} + /> } diff --git a/app/scenes/Search/Search.js b/app/scenes/Search/Search.js index a9abad3a7..3c9317cfc 100644 --- a/app/scenes/Search/Search.js +++ b/app/scenes/Search/Search.js @@ -10,7 +10,6 @@ import { withRouter } from 'react-router-dom'; import styled from 'styled-components'; import ArrowKeyNavigation from 'boundless-arrow-key-navigation'; -import type { SearchResult } from 'types'; import { DEFAULT_PAGINATION_LIMIT } from 'stores/BaseStore'; import DocumentsStore from 'stores/DocumentsStore'; import { searchUrl } from 'utils/routeHelpers'; @@ -61,12 +60,11 @@ const StyledArrowKeyNavigation = styled(ArrowKeyNavigation)` class Search extends React.Component { firstDocument: ?DocumentPreview; - @observable results: SearchResult[] = []; @observable query: string = ''; @observable offset: number = 0; @observable allowLoadMore: boolean = true; @observable isFetching: boolean = false; - @observable pinToTop: boolean = false; + @observable pinToTop: boolean = !!this.props.match.params.query; componentDidMount() { this.handleQueryChange(); @@ -103,12 +101,11 @@ class Search extends React.Component { handleQueryChange = () => { const query = this.props.match.params.query; this.query = query ? query : ''; - this.results = []; this.offset = 0; this.allowLoadMore = true; // To prevent "no results" showing before debounce kicks in - if (this.query) this.isFetching = true; + this.isFetching = !!this.query; this.fetchResultsDebounced(); }; @@ -124,31 +121,27 @@ class Search extends React.Component { @action fetchResults = async () => { - this.isFetching = true; - if (this.query) { + this.isFetching = true; + try { const results = await this.props.documents.search(this.query, { offset: this.offset, limit: DEFAULT_PAGINATION_LIMIT, }); - this.results = this.results.concat(results); - if (this.results.length > 0) this.pinToTop = true; + if (results.length > 0) this.pinToTop = true; if (results.length === 0 || results.length < DEFAULT_PAGINATION_LIMIT) { this.allowLoadMore = false; } else { this.offset += DEFAULT_PAGINATION_LIMIT; } - } catch (e) { - console.error('Something went wrong'); + } finally { + this.isFetching = false; } } else { - this.results = []; this.pinToTop = false; } - - this.isFetching = false; }; fetchResultsDebounced = debounce(this.fetchResults, 350, { @@ -173,8 +166,8 @@ class Search extends React.Component { render() { const { documents, notFound } = this.props; - const showEmpty = - !this.isFetching && this.query && this.results.length === 0; + const results = documents.searchResults(this.query); + const showEmpty = !this.isFetching && this.query && results.length === 0; return ( @@ -198,7 +191,7 @@ class Search extends React.Component { mode={ArrowKeyNavigation.mode.VERTICAL} defaultActiveChildIndex={0} > - {this.results.map((result, index) => { + {results.map((result, index) => { const document = documents.data.get(result.document.id); if (!document) return null; diff --git a/app/stores/DocumentsStore.js b/app/stores/DocumentsStore.js index cecc5e238..dd74d4ff6 100644 --- a/app/stores/DocumentsStore.js +++ b/app/stores/DocumentsStore.js @@ -13,6 +13,7 @@ import type { FetchOptions, PaginationParams, SearchResult } from 'types'; export default class DocumentsStore extends BaseStore { @observable recentlyViewedIds: string[] = []; + @observable searchCache: Map = new Map(); constructor(rootStore: RootStore) { super(rootStore, Document); @@ -86,6 +87,10 @@ export default class DocumentsStore extends BaseStore { return naturalSort(this.publishedInCollection(collectionId), 'title'); } + searchResults(query: string): SearchResult[] { + return this.searchCache.get(query) || []; + } + @computed get starred(): Document[] { return filter(this.orderedData, d => d.starred); @@ -202,15 +207,39 @@ export default class DocumentsStore extends BaseStore { @action search = async ( query: string, - options: ?PaginationParams + options: PaginationParams = {} ): Promise => { const res = await client.get('/documents.search', { ...options, query, }); - invariant(res && res.data, 'Search API response should be available'); + invariant(res && res.data, 'Search response should be available'); const { data } = res; + + // add the document to the store data.forEach(result => this.add(result.document)); + + // store a reference to the document model in the search cache instead + // of the original result from the API. + const results: SearchResult[] = compact( + data.map(result => { + const document = this.data.get(result.document.id); + if (!document) return null; + + return { + ranking: result.ranking, + context: result.context, + document, + }; + }) + ); + + let existing = this.searchCache.get(query) || []; + + // splice modifies any existing results, taking into account pagination + existing.splice(options.offset || 0, options.limit || 0, ...results); + + this.searchCache.set(query, existing); return data; }; From c54c3d963ecf03fc5f306260d2bcc092e1e8e482 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Wed, 9 Jan 2019 22:15:09 -0800 Subject: [PATCH 002/237] Increase accessibility of search input --- app/scenes/Search/components/SearchField.js | 36 ++++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/app/scenes/Search/components/SearchField.js b/app/scenes/Search/components/SearchField.js index 5d6d7e3cb..a6697b9d9 100644 --- a/app/scenes/Search/components/SearchField.js +++ b/app/scenes/Search/components/SearchField.js @@ -1,5 +1,6 @@ // @flow import * as React from 'react'; +import { lighten } from 'polished'; import styled, { withTheme } from 'styled-components'; import { SearchIcon } from 'outline-icons'; import Flex from 'shared/components/Flex'; @@ -22,11 +23,11 @@ class SearchField extends React.Component { render() { return ( - + { type="search" autoFocus /> - + ); } } +const Field = styled(Flex)` + position: relative; + margin-bottom: 8px; +`; + const StyledInput = styled.input` width: 100%; - padding: 10px; - font-size: 48px; + padding: 10px 10px 10px 60px; + font-size: 36px; font-weight: 400; outline: none; border: 0; + background: ${props => props.theme.smoke}; + border-radius: 4px; + + ::-webkit-search-cancel-button { + -webkit-appearance: searchfield-cancel-button; + } ::-webkit-input-placeholder { - color: ${props => props.theme.slateLight}; + color: ${props => props.theme.slate}; } :-moz-placeholder { - color: ${props => props.theme.slateLight}; + color: ${props => props.theme.slate}; } ::-moz-placeholder { - color: ${props => props.theme.slateLight}; + color: ${props => props.theme.slate}; } :-ms-input-placeholder { - color: ${props => props.theme.slateLight}; + color: ${props => props.theme.slate}; } `; const StyledIcon = styled(SearchIcon)` - position: relative; - top: 4px; + position: absolute; + left: 8px; `; export default withTheme(SearchField); From 23b227c352e26130baaea5952e66c84feacffd02 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Wed, 9 Jan 2019 22:41:06 -0800 Subject: [PATCH 003/237] Closes #842 - Toast messages hanging --- app/components/Toasts/Toasts.js | 10 +--- app/components/Toasts/components/Toast.js | 14 +++-- app/scenes/Settings/Notifications.js | 2 +- app/scenes/Settings/Security.js | 67 ++++++++++------------- app/stores/UiStore.js | 23 ++++++-- app/types/index.js | 2 + 6 files changed, 60 insertions(+), 58 deletions(-) diff --git a/app/components/Toasts/Toasts.js b/app/components/Toasts/Toasts.js index 66989637d..65c185595 100644 --- a/app/components/Toasts/Toasts.js +++ b/app/components/Toasts/Toasts.js @@ -10,20 +10,16 @@ type Props = { }; @observer class Toasts extends React.Component { - handleClose = (index: number) => { - this.props.ui.removeToast(index); - }; - render() { const { ui } = this.props; return ( - {ui.toasts.map((toast, index) => ( + {ui.orderedToasts.map(toast => ( ui.removeToast(toast.id)} /> ))} diff --git a/app/components/Toasts/components/Toast.js b/app/components/Toasts/components/Toast.js index 9bc3ab7d5..b0d717609 100644 --- a/app/components/Toasts/components/Toast.js +++ b/app/components/Toasts/components/Toast.js @@ -15,7 +15,7 @@ class Toast extends React.Component { timeout: TimeoutID; static defaultProps = { - closeAfterMs: 3000, + closeAfterMs: 30000, }; componentDidMount() { @@ -37,15 +37,17 @@ class Toast extends React.Component { : toast.message.toString(); return ( - - {message} - +
  • + + {message} + +
  • ); } } -const Container = styled.li` - display: flex; +const Container = styled.div` + display: inline-block; align-items: center; animation: ${fadeAndScaleIn} 100ms ease; margin: 8px 0; diff --git a/app/scenes/Settings/Notifications.js b/app/scenes/Settings/Notifications.js index 69dbd7790..694151f20 100644 --- a/app/scenes/Settings/Notifications.js +++ b/app/scenes/Settings/Notifications.js @@ -71,7 +71,7 @@ class Notifications extends React.Component { }; showSuccessMessage = debounce(() => { - this.props.ui.showToast('Notifications updated'); + this.props.ui.showToast('Notifications saved'); }, 500); render() { diff --git a/app/scenes/Settings/Security.js b/app/scenes/Settings/Security.js index d1a96f6c9..9daa6e826 100644 --- a/app/scenes/Settings/Security.js +++ b/app/scenes/Settings/Security.js @@ -2,11 +2,11 @@ import * as React from 'react'; import { observable } from 'mobx'; import { observer, inject } from 'mobx-react'; +import { debounce } from 'lodash'; import AuthStore from 'stores/AuthStore'; import UiStore from 'stores/UiStore'; import Checkbox from 'components/Checkbox'; -import Button from 'components/Button'; import CenteredContent from 'components/CenteredContent'; import PageTitle from 'components/PageTitle'; import HelpText from 'components/HelpText'; @@ -31,33 +31,29 @@ class Security extends React.Component { } } - handleSubmit = async (ev: SyntheticEvent<*>) => { - ev.preventDefault(); + handleChange = async (ev: SyntheticInputEvent<*>) => { + switch (ev.target.name) { + case 'sharing': + this.sharing = ev.target.checked; + break; + case 'documentEmbeds': + this.documentEmbeds = ev.target.checked; + break; + default: + } await this.props.auth.updateTeam({ sharing: this.sharing, documentEmbeds: this.documentEmbeds, }); - this.props.ui.showToast('Settings saved', 'success'); + this.showSuccessMessage(); }; - handleChange = (ev: SyntheticInputEvent<*>) => { - switch (ev.target.name) { - case 'sharing': - return (this.sharing = ev.target.checked); - case 'documentEmbeds': - return (this.documentEmbeds = ev.target.checked); - default: - } - }; - - get isValid() { - return this.form && this.form.checkValidity(); - } + showSuccessMessage = debounce(() => { + this.props.ui.showToast('Settings saved'); + }, 500); render() { - const { isSaving } = this.props.auth; - return ( @@ -67,25 +63,20 @@ class Security extends React.Component { knowledgebase. -
    (this.form = ref)}> - - - - + +
    ); } diff --git a/app/stores/UiStore.js b/app/stores/UiStore.js index e3c34c475..01f9bf4ab 100644 --- a/app/stores/UiStore.js +++ b/app/stores/UiStore.js @@ -1,5 +1,7 @@ // @flow -import { observable, action } from 'mobx'; +import { v4 } from 'uuid'; +import { orderBy } from 'lodash'; +import { observable, action, computed } from 'mobx'; import Document from 'models/Document'; import Collection from 'models/Collection'; import type { Toast } from '../types'; @@ -12,7 +14,7 @@ class UiStore { @observable progressBarVisible: boolean = false; @observable editMode: boolean = false; @observable mobileSidebarVisible: boolean = false; - @observable toasts: Toast[] = []; + @observable toasts: Map = new Map(); @action setActiveModal = (name: string, props: ?Object): void => { @@ -85,14 +87,23 @@ class UiStore { showToast = ( message: string, type?: 'warning' | 'error' | 'info' | 'success' = 'success' - ): void => { - this.toasts.push({ message, type }); + ) => { + const id = v4(); + const createdAt = new Date().toISOString(); + this.toasts.set(id, { message, type, createdAt, id }); + return id; }; @action - removeToast = (index: number): void => { - this.toasts.splice(index, 1); + removeToast = (id: string) => { + this.toasts.delete(id); }; + + @computed + get orderedToasts(): Toast[] { + // $FlowIssue + return orderBy(Array.from(this.toasts.values()), 'createdAt', 'desc'); + } } export default UiStore; diff --git a/app/types/index.js b/app/types/index.js index 0eb8a207b..7053d8185 100644 --- a/app/types/index.js +++ b/app/types/index.js @@ -2,6 +2,8 @@ import Document from 'models/Document'; export type Toast = { + id: string, + createdAt: string, message: string, type: 'warning' | 'error' | 'info' | 'success', }; From 6fb51eb7bb6c8456bb22201893e8b7cd01c1fa0a Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Wed, 9 Jan 2019 22:59:39 -0800 Subject: [PATCH 004/237] :green_heart: --- app/components/Toasts/components/Toast.js | 2 +- app/stores/UiStore.test.js | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/components/Toasts/components/Toast.js b/app/components/Toasts/components/Toast.js index b0d717609..4692f5ba9 100644 --- a/app/components/Toasts/components/Toast.js +++ b/app/components/Toasts/components/Toast.js @@ -15,7 +15,7 @@ class Toast extends React.Component { timeout: TimeoutID; static defaultProps = { - closeAfterMs: 30000, + closeAfterMs: 3000, }; componentDidMount() { diff --git a/app/stores/UiStore.test.js b/app/stores/UiStore.test.js index 5eeb09308..4842cb25d 100644 --- a/app/stores/UiStore.test.js +++ b/app/stores/UiStore.test.js @@ -9,20 +9,20 @@ describe('UiStore', () => { store = stores.ui; }); - test('#add should add errors', () => { - expect(store.toasts.length).toBe(0); + test('#add should add messages', () => { + expect(store.orderedToasts.length).toBe(0); store.showToast('first error'); store.showToast('second error'); - expect(store.toasts.length).toBe(2); + expect(store.orderedToasts.length).toBe(2); }); - test('#remove should remove errors', () => { - store.toasts = []; - store.showToast('first error'); + test('#remove should remove messages', () => { + store.toasts.clear(); + const id = store.showToast('first error'); store.showToast('second error'); - expect(store.toasts.length).toBe(2); - store.removeToast(0); - expect(store.toasts.length).toBe(1); - expect(store.toasts[0].message).toBe('second error'); + expect(store.orderedToasts.length).toBe(2); + store.removeToast(id); + expect(store.orderedToasts.length).toBe(1); + expect(store.orderedToasts[0].message).toBe('second error'); }); }); From f82a3fa32b2110c6a0f5bae4b1cbf962df954946 Mon Sep 17 00:00:00 2001 From: sherriff Date: Thu, 10 Jan 2019 14:24:10 +0100 Subject: [PATCH 005/237] document update fix for slack --- server/services/slack.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/services/slack.js b/server/services/slack.js index bb8022512..94eca14cc 100644 --- a/server/services/slack.js +++ b/server/services/slack.js @@ -75,7 +75,7 @@ export default class Slack { let text = `${document.createdBy.name} published a new document`; if (event.name === 'documents.update') { - text = `${document.createdBy.name} updated a document`; + text = `${document.updatedBy.name} updated a document`; } await fetch(integration.settings.url, { From 449f4f7a263c684c06670d98b987d227ad21dd05 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Thu, 10 Jan 2019 19:11:35 -0800 Subject: [PATCH 006/237] Fixes: Realtimeboard and Vimeo embed should be secure --- app/embeds/RealtimeBoard.js | 2 +- app/embeds/Vimeo.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/embeds/RealtimeBoard.js b/app/embeds/RealtimeBoard.js index 29f972cd7..44e2acdc2 100644 --- a/app/embeds/RealtimeBoard.js +++ b/app/embeds/RealtimeBoard.js @@ -18,7 +18,7 @@ export default class RealtimeBoard extends React.Component { return ( ); diff --git a/app/embeds/Vimeo.js b/app/embeds/Vimeo.js index ac9fdb604..d933e81e6 100644 --- a/app/embeds/Vimeo.js +++ b/app/embeds/Vimeo.js @@ -18,7 +18,7 @@ export default class Vimeo extends React.Component { return ( ); From a7c669f90be179d43b0acbb3949f1c0c0bc51279 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Thu, 10 Jan 2019 19:15:36 -0800 Subject: [PATCH 007/237] Hide pricing page on self hosted installations --- server/pages/components/Navigation.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/server/pages/components/Navigation.js b/server/pages/components/Navigation.js index a2e9c7813..60b59de5e 100644 --- a/server/pages/components/Navigation.js +++ b/server/pages/components/Navigation.js @@ -45,9 +45,11 @@ function TopNavigation({ sessions, loggedIn }: Props) { Integrations - - Pricing - + {process.env.DEPLOYMENT === 'hosted' && ( + + Pricing + + )} Changelog From 3a260037cd60291a300dcea1b0b345ced7c02469 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Fri, 11 Jan 2019 19:41:19 -0800 Subject: [PATCH 008/237] Regex-like search queries from Slack should not cause a server error --- server/api/hooks.js | 4 ++-- server/api/hooks.test.js | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/server/api/hooks.js b/server/api/hooks.js index 481d0a16b..86fb4f23e 100644 --- a/server/api/hooks.js +++ b/server/api/hooks.js @@ -1,5 +1,6 @@ // @flow import Router from 'koa-router'; +import { escapeRegExp } from 'lodash'; import { AuthenticationError, InvalidRequestError } from '../errors'; import { Authentication, Document, User, Team } from '../models'; import { presentSlackAttachment } from '../presenters'; @@ -13,7 +14,6 @@ router.post('hooks.unfurl', async ctx => { if (token !== process.env.SLACK_VERIFICATION_TOKEN) throw new AuthenticationError('Invalid token'); - // TODO: Everything from here onwards will get moved to an async job const user = await User.find({ where: { service: 'slack', serviceId: event.user }, }); @@ -75,7 +75,7 @@ router.post('hooks.slack', async ctx => { for (const result of results) { const queryIsInTitle = !!result.document.title .toLowerCase() - .match(text.toLowerCase()); + .match(escapeRegExp(text.toLowerCase())); attachments.push( presentSlackAttachment( diff --git a/server/api/hooks.test.js b/server/api/hooks.test.js index 117bc9bb1..68031e928 100644 --- a/server/api/hooks.test.js +++ b/server/api/hooks.test.js @@ -86,6 +86,25 @@ describe('#hooks.slack', async () => { expect(body.attachments[0].text).toEqual(document.getSummary()); }); + it('should return search results if query is regex-like', async () => { + const user = await buildUser(); + await buildDocument({ + title: 'This title contains a search term', + userId: user.id, + teamId: user.teamId, + }); + const res = await server.post('/api/hooks.slack', { + body: { + token: process.env.SLACK_VERIFICATION_TOKEN, + user_id: user.serviceId, + text: '*contains', + }, + }); + const body = await res.json(); + expect(res.status).toEqual(200); + expect(body.attachments.length).toEqual(1); + }); + it('should return search results with snippet if query is in text', async () => { const user = await buildUser(); const document = await buildDocument({ From 5ba1522adacb812274c81def868f1f8a8a5f6618 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Fri, 11 Jan 2019 21:40:01 -0800 Subject: [PATCH 009/237] Add Prezi to integrations page --- public/images/prezi.png | Bin 0 -> 15433 bytes public/images/screenshots/prezi.png | Bin 0 -> 392273 bytes server/pages/integrations/content.json | 7 +++++++ server/pages/integrations/prezi.md | 7 +++++++ 4 files changed, 14 insertions(+) create mode 100644 public/images/prezi.png create mode 100644 public/images/screenshots/prezi.png create mode 100644 server/pages/integrations/prezi.md diff --git a/public/images/prezi.png b/public/images/prezi.png new file mode 100644 index 0000000000000000000000000000000000000000..332b8027a41a8193707f7fef1e4b27d372ef5688 GIT binary patch literal 15433 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⋙-^RZgHNE)!r_WlfwmXa=~TCZ}zSjxosE- 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

    gnm*lE%)WlU8$p3dtbpFon$_Cyj@ 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

    tbG|vsc7kgg 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℘6R;Lo7}-`^DbLrDfHr& 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 KO4mu6hW!t#A}PB7 literal 0 HcmV?d00001 diff --git a/server/pages/integrations/content.json b/server/pages/integrations/content.json index d36426714..81b3cc7a9 100644 --- a/server/pages/integrations/content.json +++ b/server/pages/integrations/content.json @@ -69,6 +69,13 @@ "category": "Collaboration", "description": "Data collection tool and surveys, for professionals" }, + { + "slug": "prezi", + "name": "Prezi", + "url": "https://prezi.com", + "category": "Collaboration", + "description": "Easy presentations for people who aren't designers" + }, { "slug": "codepen", "name": "Codepen", diff --git a/server/pages/integrations/prezi.md b/server/pages/integrations/prezi.md new file mode 100644 index 000000000..6d54c365a --- /dev/null +++ b/server/pages/integrations/prezi.md @@ -0,0 +1,7 @@ +In an Outline document, paste a link to a shared [Prezi](https://prezi.com) presentation and it will be automatically converted into an embedded preview like the one below… + +[Learn more about sharing a Prezi](https://support.prezi.com/hc/en-us/articles/360003498633). + +![Prezi Integration](/images/screenshots/prezi.png) + +> This integration works without any additional settings or authentication. From 394adf97f800b1a9cd9220c387c69a421d8a9188 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Fri, 11 Jan 2019 21:46:58 -0800 Subject: [PATCH 010/237] Minor grammar and mobile style fixes --- app/scenes/Settings/Export.js | 6 +++--- app/scenes/Settings/Slack.js | 2 +- server/pages/Home.js | 4 ++-- server/pages/Privacy.js | 2 +- server/pages/components/SigninButtons.js | 2 ++ 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/app/scenes/Settings/Export.js b/app/scenes/Settings/Export.js index 3d1787051..73d494c1f 100644 --- a/app/scenes/Settings/Export.js +++ b/app/scenes/Settings/Export.js @@ -44,9 +44,9 @@ class Export extends React.Component {

    Export Data

    - Exporting your teams documents may take a little time depending on the - size of your knowledgebase. Consider exporting a single document or - collection instead. + Exporting your team’s documents may take a little time depending on + the size of your knowledgebase. Consider exporting a single document + or collection instead. Still want to export everything in your wiki? We’ll put together a zip diff --git a/app/scenes/Settings/Slack.js b/app/scenes/Settings/Slack.js index 82e1ee0aa..9f636b435 100644 --- a/app/scenes/Settings/Slack.js +++ b/app/scenes/Settings/Slack.js @@ -60,7 +60,7 @@ class Slack extends React.Component { Preview Outline links your team mates share and use the{' '} /outline slash command in Slack to search for documents - in your teams wiki. + in your team’s wiki.

    {this.commandIntegration ? ( diff --git a/server/pages/Home.js b/server/pages/Home.js index 597a8e3dc..654b3cb75 100644 --- a/server/pages/Home.js +++ b/server/pages/Home.js @@ -47,7 +47,7 @@ function Home(props: Props) {

    Improve Communication

    - Easily structure your teams information in one central, + Easily structure your team’s information in one central, structured location. No more hunting through folders or scanning pages of search results and chat conversations.

    @@ -55,7 +55,7 @@ function Home(props: Props) {

    Safe & Secure

    - Outline provides a secure place for your teams + Outline provides a secure place for your team’s documentation on our hosted platform, stored in portable Markdown format. Or, you can run your own copy – it’s open source! diff --git a/server/pages/Privacy.js b/server/pages/Privacy.js index a220de1dc..b4007002c 100644 --- a/server/pages/Privacy.js +++ b/server/pages/Privacy.js @@ -54,7 +54,7 @@ export default function Privacy() { identifying information is to better understand how Outline’s visitors use its website. From time to time, Outline may release non-personally-identifying information in the aggregate, e.g., by - publishing a report on trends in the usage of its website. p> Outline + publishing a report on trends in the usage of its website. Outline also collects potentially personally-identifying information like Internet Protocol (IP) addresses for logged in users.

    diff --git a/server/pages/components/SigninButtons.js b/server/pages/components/SigninButtons.js index cab67f6cf..bb4728cee 100644 --- a/server/pages/components/SigninButtons.js +++ b/server/pages/components/SigninButtons.js @@ -61,10 +61,12 @@ const Column = styled(Flex)` const Wrapper = styled(Flex)` display: block; justify-content: center; + margin-top: 16px; ${breakpoint('tablet')` display: flex; justify-content: flex-start; + margin-top: 0; `}; `; From ef583314e0720c71b1349b0356206be50b09b829 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 12 Jan 2019 13:50:30 -0800 Subject: [PATCH 011/237] Remove parse-domain dependency (#856) * Remove parse-domain dependency * Remove only, add commentary * Update lockfile --- app/utils/isInternalUrl.js | 2 +- package.json | 3 +- server/routes.js | 3 +- shared/utils/domains.js | 43 +++++- shared/utils/domains.test.js | 115 ++++++++++++++- yarn.lock | 266 +++++------------------------------ 6 files changed, 193 insertions(+), 239 deletions(-) diff --git a/app/utils/isInternalUrl.js b/app/utils/isInternalUrl.js index 48e36e338..2143c1af4 100644 --- a/app/utils/isInternalUrl.js +++ b/app/utils/isInternalUrl.js @@ -1,5 +1,5 @@ // @flow -import parseDomain from 'parse-domain'; +import { parseDomain } from '../../shared/utils/domains'; export default function isInternalUrl(href: string) { if (href[0] === '/') return true; diff --git a/package.json b/package.json index c616f2348..992b51708 100644 --- a/package.json +++ b/package.json @@ -108,7 +108,7 @@ "imports-loader": "0.6.5", "invariant": "^2.2.2", "isomorphic-fetch": "2.2.1", - "js-cookie": "^2.1.4", + "js-cookie": "^2.2.0", "js-search": "^1.4.2", "json-loader": "0.5.4", "jsonwebtoken": "7.0.1", @@ -137,7 +137,6 @@ "normalizr": "2.0.1", "outline-icons": "^1.6.0", "oy-vey": "^0.10.0", - "parse-domain": "2.1.6", "pg": "^6.1.5", "pg-hstore": "2.3.2", "polished": "1.2.1", diff --git a/server/routes.js b/server/routes.js index 3d51d4ae6..9b0594e8b 100644 --- a/server/routes.js +++ b/server/routes.js @@ -7,10 +7,9 @@ import Koa from 'koa'; import Router from 'koa-router'; import sendfile from 'koa-sendfile'; import serve from 'koa-static'; -import parseDomain from 'parse-domain'; import apexRedirect from './middlewares/apexRedirect'; import renderpage from './utils/renderpage'; -import { isCustomSubdomain } from '../shared/utils/domains'; +import { isCustomSubdomain, parseDomain } from '../shared/utils/domains'; import { robotsResponse } from './utils/robots'; import { NotFoundError } from './errors'; import { Team } from './models'; diff --git a/shared/utils/domains.js b/shared/utils/domains.js index 7609399fb..c7914482c 100644 --- a/shared/utils/domains.js +++ b/shared/utils/domains.js @@ -1,5 +1,46 @@ // @flow -import parseDomain from 'parse-domain'; +import { trim } from 'lodash'; + +type Domain = { + tld: string, + subdomain: string, + domain: string, +}; + +// we originally used the parse-domain npm module however this includes +// a large list of possible TLD's which increase the size of the bundle +// unneccessarily for our usecase of trusted input. +export function parseDomain(url: string): ?Domain { + if (typeof url !== 'string') return null; + + // strip extermeties and whitespace from input + const normalizedDomain = trim(url.replace(/(https?:)?\/\//, '')); + const parts = normalizedDomain.split('.'); + + // ensure the last part only includes something that looks like a TLD + function cleanTLD(tld = '') { + return tld.split(/[/:?]/)[0]; + } + + // simplistic subdomain parse, we don't need to take into account subdomains + // with "." characters as these are not valid in Outline + if (parts.length >= 3) { + return { + subdomain: parts[0], + domain: parts[1], + tld: cleanTLD(parts.slice(2).join('.')), + }; + } + if (parts.length === 2) { + return { + subdomain: '', + domain: parts[0], + tld: cleanTLD(parts.slice(1).join('.')), + }; + } + + return null; +} export function stripSubdomain(hostname: string) { const parsed = parseDomain(hostname); diff --git a/shared/utils/domains.test.js b/shared/utils/domains.test.js index b3f9d8451..af576e4a3 100644 --- a/shared/utils/domains.test.js +++ b/shared/utils/domains.test.js @@ -1,5 +1,118 @@ /* eslint-disable flowtype/require-valid-file-annotation */ -import { stripSubdomain, isCustomSubdomain } from './domains'; +import { stripSubdomain, parseDomain, isCustomSubdomain } from './domains'; + +// test suite is based on subset of parse-domain module we want to support +// https://github.com/peerigon/parse-domain/blob/master/test/parseDomain.test.js +describe('#parseDomain', () => { + it('should remove the protocol', () => { + expect(parseDomain('http://example.com')).toMatchObject({ + subdomain: '', + domain: 'example', + tld: 'com', + }); + expect(parseDomain('//example.com')).toMatchObject({ + subdomain: '', + domain: 'example', + tld: 'com', + }); + expect(parseDomain('https://example.com')).toMatchObject({ + subdomain: '', + domain: 'example', + tld: 'com', + }); + }); + + it('should remove sub-domains', () => { + expect(parseDomain('www.example.com')).toMatchObject({ + subdomain: 'www', + domain: 'example', + tld: 'com', + }); + }); + + it('should remove the path', () => { + expect(parseDomain('example.com/some/path?and&query')).toMatchObject({ + subdomain: '', + domain: 'example', + tld: 'com', + }); + expect(parseDomain('example.com/')).toMatchObject({ + subdomain: '', + domain: 'example', + tld: 'com', + }); + }); + + it('should remove the query string', () => { + expect(parseDomain('example.com?and&query')).toMatchObject({ + subdomain: '', + domain: 'example', + tld: 'com', + }); + }); + + it('should remove special characters', () => { + expect(parseDomain('http://m.example.com\r')).toMatchObject({ + subdomain: 'm', + domain: 'example', + tld: 'com', + }); + }); + + it('should remove the port', () => { + expect(parseDomain('example.com:8080')).toMatchObject({ + subdomain: '', + domain: 'example', + tld: 'com', + }); + }); + + it('should allow @ characters in the path', () => { + expect(parseDomain('https://medium.com/@username/')).toMatchObject({ + subdomain: '', + domain: 'medium', + tld: 'com', + }); + }); + + it('should also work with three-level domains like .co.uk', () => { + expect(parseDomain('www.example.co.uk')).toMatchObject({ + subdomain: 'www', + domain: 'example', + tld: 'co.uk', + }); + }); + + it('should not include private domains like blogspot.com by default', () => { + expect(parseDomain('foo.blogspot.com')).toMatchObject({ + subdomain: 'foo', + domain: 'blogspot', + tld: 'com', + }); + }); + + it('should also work with the minimum', () => { + expect(parseDomain('example.com')).toMatchObject({ + subdomain: '', + domain: 'example', + tld: 'com', + }); + }); + + it('should return null if the given value is not a string', () => { + expect(parseDomain(undefined)).toBe(null); + expect(parseDomain({})).toBe(null); + expect(parseDomain('')).toBe(null); + }); + + it('should work with custom top-level domains (eg .local)', () => { + expect(parseDomain('mymachine.local')).toMatchObject({ + subdomain: '', + domain: 'mymachine', + tld: 'local', + }); + }); +}); describe('#stripSubdomain', () => { test('to work with localhost', () => { diff --git a/yarn.lock b/yarn.lock index cb3769954..58a66662a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -87,10 +87,6 @@ version "0.6.6" resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.6.6.tgz#004b98298d04c7ca3b4f50ca2035d4f60d2eed1b" -"@sindresorhus/is@^0.7.0": - version "0.7.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" - "@tommoor/remove-markdown@0.3.1": version "0.3.1" resolved "https://registry.yarnpkg.com/@tommoor/remove-markdown/-/remove-markdown-0.3.1.tgz#25e7b845d52fcfadf149a3a6a468a931fee7619b" @@ -417,10 +413,6 @@ assert@^1.1.1: dependencies: util "0.10.3" -assertion-error@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" - ast-types-flow@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" @@ -1399,10 +1391,6 @@ browser-resolve@^1.11.2: dependencies: resolve "1.1.7" -browser-stdout@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" - browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" @@ -1573,18 +1561,6 @@ cacache@^10.0.4: unique-filename "^1.1.0" y18n "^4.0.0" -cacheable-request@^2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" - dependencies: - clone-response "1.0.2" - get-stream "3.0.0" - http-cache-semantics "3.8.1" - keyv "3.0.0" - lowercase-keys "1.0.0" - normalize-url "2.0.1" - responselike "1.0.2" - caller-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" @@ -1676,17 +1652,6 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chai@^4.1.2: - version "4.2.0" - resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" - dependencies: - assertion-error "^1.1.0" - check-error "^1.0.2" - deep-eql "^3.0.1" - get-func-name "^2.0.0" - pathval "^1.1.0" - type-detect "^4.0.5" - chainsaw@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" @@ -1762,10 +1727,6 @@ charenc@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" -check-error@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" - cheerio@^0.22.0: version "0.22.0" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" @@ -1923,12 +1884,6 @@ clone-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" -clone-response@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" - dependencies: - mimic-response "^1.0.0" - clone-stats@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" @@ -2041,10 +1996,6 @@ combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" -commander@2.11.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" - commander@2.8.x: version "2.8.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.8.1.tgz#06be367febfda0c330aa1e2a072d3dc9762425d4" @@ -2595,18 +2546,18 @@ debug@2.6.9, debug@^2.6.9: dependencies: ms "2.0.0" -debug@3.1.0, debug@^3.0.1, debug@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - dependencies: - ms "2.0.0" - debug@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/debug/-/debug-3.0.1.tgz#0564c612b521dc92d9f2988f0549e34f9c98db64" dependencies: ms "2.0.0" +debug@^3.0.1, debug@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + debug@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" @@ -2621,22 +2572,12 @@ decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - -decompress-response@^3.2.0, decompress-response@^3.3.0: +decompress-response@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" dependencies: mimic-response "^1.0.0" -deep-eql@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" - dependencies: - type-detect "^4.0.0" - deep-equal@^1.0.1, deep-equal@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" @@ -2747,10 +2688,6 @@ detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" -diff@3.3.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" - diff@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.0.tgz#056695150d7aa93237ca7e378ac3b1682b7963b9" @@ -3181,7 +3118,7 @@ escape-html@~1.0.1, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -3851,7 +3788,7 @@ fresh@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" -from2@^2.1.0, from2@^2.1.1: +from2@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" dependencies: @@ -4011,15 +3948,11 @@ get-document@1: version "1.0.0" resolved "https://registry.npmjs.org/get-document/-/get-document-1.0.0.tgz#4821bce66f1c24cb0331602be6cb6b12c4f01c4b" -get-func-name@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" - get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" -get-stream@3.0.0, get-stream@^3.0.0: +get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -4077,7 +4010,16 @@ glob2base@^0.0.12: dependencies: find-index "^0.1.1" -glob@7.1.2, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: +glob@^4.3.1: + version "4.5.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "^2.0.1" + once "^1.3.0" + +glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -4088,15 +4030,6 @@ glob@7.1.2, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^4.3.1: - version "4.5.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "^2.0.1" - once "^1.3.0" - glob@~3.1.21: version "3.1.21" resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" @@ -4232,28 +4165,6 @@ got@^7.1.0: url-parse-lax "^1.0.0" url-to-options "^1.0.1" -got@^8.0.1: - version "8.3.2" - resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" - dependencies: - "@sindresorhus/is" "^0.7.0" - cacheable-request "^2.1.1" - decompress-response "^3.3.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - into-stream "^3.1.0" - is-retry-allowed "^1.1.0" - isurl "^1.0.0-alpha5" - lowercase-keys "^1.0.0" - mimic-response "^1.0.0" - p-cancelable "^0.4.0" - p-timeout "^2.0.1" - pify "^3.0.0" - safe-buffer "^5.1.1" - timed-out "^4.0.1" - url-parse-lax "^3.0.0" - url-to-options "^1.0.1" - graceful-fs@^3.0.0: version "3.0.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" @@ -4272,10 +4183,6 @@ graceful-fs@~1.2.0: version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" -growl@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" - growly@^1.2.0, growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -4472,7 +4379,7 @@ hawk@~6.0.2: hoek "4.x.x" sntp "2.x.x" -he@1.1.1, he@1.1.x: +he@1.1.x: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" @@ -4648,10 +4555,6 @@ http-assert@^1.1.0: deep-equal "~1.0.1" http-errors "~1.6.1" -http-cache-semantics@3.8.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" - http-errors@1.4.0, http-errors@^1.2.8, http-errors@^1.3.1: version "1.4.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.4.0.tgz#6c0242dea6b3df7afda153c71089b31c6e82aabf" @@ -4871,13 +4774,6 @@ interpret@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" -into-stream@^3.1.0: - version "3.1.0" - resolved "http://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" - dependencies: - from2 "^2.1.1" - p-is-promise "^1.1.0" - invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.1, invariant@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" @@ -5156,7 +5052,7 @@ is-resolvable@^1.0.0: dependencies: tryit "^1.0.1" -is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: +is-retry-allowed@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" @@ -5625,9 +5521,9 @@ js-beautify@^1.6.11: mkdirp "~0.5.0" nopt "~3.0.1" -js-cookie@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.1.4.tgz#da4ec503866f149d164cf25f579ef31015025d8d" +js-cookie@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.0.tgz#1b2c279a6eece380a12168b92485265b35b1effb" js-search@^1.4.2: version "1.4.2" @@ -5703,10 +5599,6 @@ jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" -json-buffer@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" - json-loader@0.5.4: version "0.5.4" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de" @@ -5836,12 +5728,6 @@ keygrip@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.0.2.tgz#ad3297c557069dea8bcfe7a4fa491b75c5ddeb91" -keyv@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" - dependencies: - json-buffer "3.0.0" - kind-of@^3.0.2: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -6533,7 +6419,7 @@ lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" -lowercase-keys@1.0.0, lowercase-keys@^1.0.0: +lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" @@ -6823,7 +6709,7 @@ mississippi@^2.0.0: stream-each "^1.1.0" through2 "^2.0.0" -mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -6844,21 +6730,6 @@ mobx@4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/mobx/-/mobx-4.6.0.tgz#88a8ed21ff81b8861778c4b0d38e3dcdd1a7ddde" -mocha@^4.0.1: - version "4.1.0" - resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.1.0.tgz#7d86cfbcf35cb829e2754c32e17355ec05338794" - dependencies: - browser-stdout "1.3.0" - commander "2.11.0" - debug "3.1.0" - diff "3.3.1" - escape-string-regexp "1.0.5" - glob "7.1.2" - growl "1.10.3" - he "1.1.1" - mkdirp "0.5.1" - supports-color "4.4.0" - moment-timezone@^0.5.23: version "0.5.23" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.23.tgz#7cbb00db2c14c71b19303cb47b0fb0a6d8651463" @@ -7171,14 +7042,6 @@ normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" -normalize-url@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" - dependencies: - prepend-http "^2.0.0" - query-string "^5.0.1" - sort-keys "^2.0.0" - normalize-url@^1.4.0: version "1.9.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" @@ -7464,18 +7327,10 @@ p-cancelable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" -p-cancelable@^0.4.0: - version "0.4.1" - resolved "http://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" - p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" -p-is-promise@^1.1.0: - version "1.1.0" - resolved "http://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" - p-limit@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" @@ -7496,12 +7351,6 @@ p-timeout@^1.1.1: dependencies: p-finally "^1.0.0" -p-timeout@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" - dependencies: - p-finally "^1.0.0" - package-json@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/package-json/-/package-json-1.2.0.tgz#c8ecac094227cdf76a316874ed05e27cc939a0e0" @@ -7541,15 +7390,6 @@ parse-asn1@^5.0.0: evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" -parse-domain@2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/parse-domain/-/parse-domain-2.1.6.tgz#3baac0a1c6b7028dfea0013c99a83a1ecd806ed0" - dependencies: - chai "^4.1.2" - got "^8.0.1" - mkdirp "^0.5.1" - mocha "^4.0.1" - parse-entities@^1.0.2: version "1.1.1" resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.1.tgz#8112d88471319f27abae4d64964b122fe4e1b890" @@ -7675,10 +7515,6 @@ path-type@^2.0.0: dependencies: pify "^2.0.0" -pathval@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0" - pause-stream@0.0.11: version "0.0.11" resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" @@ -8070,10 +7906,6 @@ prepend-http@^1.0.0, prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" -prepend-http@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" - preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" @@ -8257,14 +8089,6 @@ query-string@^4.1.0, query-string@^4.3.4: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -query-string@^5.0.1: - version "5.1.1" - resolved "http://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" - dependencies: - decode-uri-component "^0.2.0" - object-assign "^4.1.0" - strict-uri-encode "^1.0.0" - querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -8955,12 +8779,6 @@ response-time@~2.3.1: depd "~1.1.0" on-headers "~1.0.1" -responselike@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" - dependencies: - lowercase-keys "^1.0.0" - restore-cursor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" @@ -9508,12 +9326,6 @@ sort-keys@^1.0.0: dependencies: is-plain-obj "^1.0.0" -sort-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" - dependencies: - is-plain-obj "^1.0.0" - source-list-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" @@ -9863,12 +9675,6 @@ stylis@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.0.tgz#016fa239663d77f868fef5b67cf201c4b7c701e1" -supports-color@4.4.0, supports-color@^4.0.0, supports-color@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" - dependencies: - has-flag "^2.0.0" - supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -9879,6 +9685,12 @@ supports-color@^3.1.2, supports-color@^3.2.3: dependencies: has-flag "^1.0.0" +supports-color@^4.0.0, supports-color@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" + dependencies: + has-flag "^2.0.0" + supports-color@^4.2.1: version "4.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" @@ -10043,7 +9855,7 @@ timed-out@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-2.0.0.tgz#f38b0ae81d3747d628001f41dafc652ace671c0a" -timed-out@^4.0.0, timed-out@^4.0.1: +timed-out@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -10203,10 +10015,6 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@^4.0.0, type-detect@^4.0.5: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - type-is@^1.5.5, type-is@^1.6.14, type-is@~1.6.6: version "1.6.15" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" @@ -10457,12 +10265,6 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" -url-parse-lax@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" - dependencies: - prepend-http "^2.0.0" - url-to-options@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" From 8d3dc3a92e2c954d8aef72782fd1d82a8e18b608 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 12 Jan 2019 19:41:45 -0800 Subject: [PATCH 012/237] User Profile (#858) * First pass user profile * :green_heart: * More collaborator tooltip improvements --- app/components/Badge.js | 17 ++++ app/components/Collaborators.js | 86 +++++++++++------- app/components/DropdownMenu/DropdownMenu.js | 2 +- app/components/List/Item.js | 2 +- app/models/User.js | 1 - .../Settings/components/UserListItem.js | 83 +++++++++++------- app/scenes/UserProfile.js | 87 +++++++++++++++++++ server/api/__snapshots__/users.test.js.snap | 13 +-- .../__snapshots__/user.test.js.snap | 6 +- server/presenters/user.js | 9 +- 10 files changed, 229 insertions(+), 77 deletions(-) create mode 100644 app/components/Badge.js create mode 100644 app/scenes/UserProfile.js diff --git a/app/components/Badge.js b/app/components/Badge.js new file mode 100644 index 000000000..d3d6f351a --- /dev/null +++ b/app/components/Badge.js @@ -0,0 +1,17 @@ +// @flow +import styled from 'styled-components'; + +const Badge = styled.span` + margin-left: 10px; + padding: 2px 6px 3px; + background-color: ${({ admin, theme }) => + admin ? theme.primary : theme.smokeDark}; + color: ${({ admin, theme }) => (admin ? theme.white : theme.text)}; + border-radius: 2px; + font-size: 11px; + font-weight: 500; + text-transform: uppercase; + user-select: none; +`; + +export default Badge; diff --git a/app/components/Collaborators.js b/app/components/Collaborators.js index 1d1197c9b..2905ce8a0 100644 --- a/app/components/Collaborators.js +++ b/app/components/Collaborators.js @@ -1,5 +1,6 @@ // @flow import * as React from 'react'; +import { observable } from 'mobx'; import { observer, inject } from 'mobx-react'; import { filter } from 'lodash'; import distanceInWordsToNow from 'date-fns/distance_in_words_to_now'; @@ -8,6 +9,7 @@ import Flex from 'shared/components/Flex'; import Avatar from 'components/Avatar'; import Tooltip from 'components/Tooltip'; import Document from 'models/Document'; +import UserProfile from 'scenes/UserProfile'; import ViewsStore from 'stores/ViewsStore'; const MAX_DISPLAY = 6; @@ -19,31 +21,24 @@ type Props = { @observer class Collaborators extends React.Component { + @observable openProfileId: ?string; + componentDidMount() { this.props.views.fetchPage({ documentId: this.props.document.id }); } + handleOpenProfile = (userId: string) => { + this.openProfileId = userId; + }; + + handleCloseProfile = () => { + this.openProfileId = undefined; + }; + render() { const { document, views } = this.props; const documentViews = views.inDocument(document.id); - const { - createdAt, - updatedAt, - createdBy, - updatedBy, - collaborators, - } = document; - let tooltip; - - if (createdAt === updatedAt) { - tooltip = `${createdBy.name} published ${distanceInWordsToNow( - new Date(createdAt) - )} ago`; - } else { - tooltip = `${updatedBy.name} updated ${distanceInWordsToNow( - new Date(updatedAt) - )} ago`; - } + const { createdAt, updatedAt, updatedBy, collaborators } = document; // filter to only show views that haven't collaborated const collaboratorIds = collaborators.map(user => user.id); @@ -65,35 +60,67 @@ class Collaborators extends React.Component { {overflow > 0 && +{overflow}} {mostRecentViewers.map(({ lastViewedAt, user }) => ( - + {user.name} +
    + viewed {distanceInWordsToNow(new Date(lastViewedAt))} ago + + } placement="bottom" > - + this.handleOpenProfile(user.id)} + /> + -
    + ))} {collaborators.map(user => ( - 1 ? user.name : tooltip} + tooltip={ + + {user.name} +
    + {createdAt === updatedAt ? 'published' : 'updated'}{' '} + {updatedBy.id === user.id && + `${distanceInWordsToNow(new Date(updatedAt))} ago`} +
    + } placement="bottom" > - + this.handleOpenProfile(user.id)} + /> + -
    + ))}
    ); } } -const StyledTooltip = styled(Tooltip)` +const TooltipCentered = styled.div` + text-align: center; +`; + +const AvatarPile = styled(Tooltip)` margin-right: -8px; &:first-child { @@ -128,6 +155,7 @@ const More = styled.div` const Avatars = styled(Flex)` align-items: center; flex-direction: row-reverse; + cursor: pointer; `; export default inject('views')(Collaborators); diff --git a/app/components/DropdownMenu/DropdownMenu.js b/app/components/DropdownMenu/DropdownMenu.js index 1989f76bb..c8fc05c8e 100644 --- a/app/components/DropdownMenu/DropdownMenu.js +++ b/app/components/DropdownMenu/DropdownMenu.js @@ -93,7 +93,7 @@ const Menu = styled.div` background: ${props => props.theme.white}; border-radius: 2px; padding: 0.5em 0; - min-width: 160px; + min-width: 180px; overflow: hidden; box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05), 0 4px 8px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.08); diff --git a/app/components/List/Item.js b/app/components/List/Item.js index cd275cd87..1d6a29cfe 100644 --- a/app/components/List/Item.js +++ b/app/components/List/Item.js @@ -5,7 +5,7 @@ import Flex from 'shared/components/Flex'; type Props = { image?: React.Node, - title: string, + title: React.Node, subtitle?: React.Node, actions?: React.Node, }; diff --git a/app/models/User.js b/app/models/User.js index 01b45ec0d..a563bd0ed 100644 --- a/app/models/User.js +++ b/app/models/User.js @@ -6,7 +6,6 @@ class User extends BaseModel { id: string; name: string; email: string; - username: string; isAdmin: boolean; isSuspended: boolean; createdAt: string; diff --git a/app/scenes/Settings/components/UserListItem.js b/app/scenes/Settings/components/UserListItem.js index 18ee715c6..a2a2094de 100644 --- a/app/scenes/Settings/components/UserListItem.js +++ b/app/scenes/Settings/components/UserListItem.js @@ -1,9 +1,12 @@ // @flow import * as React from 'react'; import styled from 'styled-components'; - +import { observable } from 'mobx'; +import { observer } from 'mobx-react'; import UserMenu from 'menus/UserMenu'; import Avatar from 'components/Avatar'; +import Badge from 'components/Badge'; +import UserProfile from 'scenes/UserProfile'; import ListItem from 'components/List/Item'; import Time from 'shared/components/Time'; import User from 'models/User'; @@ -13,35 +16,57 @@ type Props = { showMenu: boolean, }; -const UserListItem = ({ user, showMenu }: Props) => { - return ( - } - subtitle={ - - {user.email ? `${user.email} · ` : undefined} - Joined - } - actions={showMenu ? : undefined} - /> - ); -}; +@observer +class UserListItem extends React.Component { + @observable profileOpen: boolean = false; -const Badge = styled.span` - margin-left: 10px; - padding: 2px 6px 3px; - background-color: ${({ admin, theme }) => - admin ? theme.primary : theme.smokeDark}; - color: ${({ admin, theme }) => (admin ? theme.white : theme.text)}; - border-radius: 2px; - font-size: 11px; - font-weight: 500; - text-transform: uppercase; - user-select: none; + handleOpenProfile = () => { + this.profileOpen = true; + }; + + handleCloseProfile = () => { + this.profileOpen = false; + }; + + render() { + const { user, showMenu } = this.props; + + return ( + {user.name}} + image={ + + + + + } + subtitle={ + + {user.email ? `${user.email} · ` : undefined} + Joined + } + actions={showMenu ? : undefined} + /> + ); + } +} + +const Title = styled.span` + &:hover { + text-decoration: underline; + cursor: pointer; + } `; export default UserListItem; diff --git a/app/scenes/UserProfile.js b/app/scenes/UserProfile.js new file mode 100644 index 000000000..8e70936f4 --- /dev/null +++ b/app/scenes/UserProfile.js @@ -0,0 +1,87 @@ +// @flow +import * as React from 'react'; +import styled from 'styled-components'; +import distanceInWordsToNow from 'date-fns/distance_in_words_to_now'; +import { inject, observer } from 'mobx-react'; +import { Link } from 'react-router-dom'; +import Flex from 'shared/components/Flex'; +import HelpText from 'components/HelpText'; +import Modal from 'components/Modal'; +import Button from 'components/Button'; +import Avatar from 'components/Avatar'; +import Badge from 'components/Badge'; +import PaginatedDocumentList from 'components/PaginatedDocumentList'; +import Subheading from 'components/Subheading'; +import User from 'models/User'; +import DocumentsStore from 'stores/DocumentsStore'; +import AuthStore from 'stores/AuthStore'; + +type Props = { + user: User, + auth: AuthStore, + documents: DocumentsStore, + onRequestClose: () => *, +}; + +@observer +class UserProfile extends React.Component { + render() { + const { user, auth, documents, ...rest } = this.props; + if (!user) return null; + const isCurrentUser = auth.user && auth.user.id === user.id; + + return ( + + +  {user.name} + + } + {...rest} + > + + + {isCurrentUser ? 'You joined' : 'Joined'}{' '} + {distanceInWordsToNow(new Date(user.createdAt))} ago. + {user.isAdmin && ( + Admin + )} + {user.isSuspended && Suspended} + {isCurrentUser && ( + + + + )} + + Recently updated + + + + ); + } +} + +const Edit = styled.span` + position: absolute; + top: 46px; + right: 0; +`; + +const StyledBadge = styled(Badge)` + position: relative; + top: -2px; +`; + +const Meta = styled(HelpText)` + margin-top: -12px; +`; + +export default inject('documents', 'auth')(UserProfile); diff --git a/server/api/__snapshots__/users.test.js.snap b/server/api/__snapshots__/users.test.js.snap index a45a788ec..30c929ced 100644 --- a/server/api/__snapshots__/users.test.js.snap +++ b/server/api/__snapshots__/users.test.js.snap @@ -10,7 +10,6 @@ Object { "isAdmin": false, "isSuspended": false, "name": "User 1", - "username": "user1", }, "ok": true, "status": 200, @@ -45,7 +44,6 @@ Object { "isAdmin": false, "isSuspended": false, "name": "User 1", - "username": "user1", }, "ok": true, "status": 200, @@ -77,15 +75,17 @@ Object { "avatarUrl": "http://example.com/avatar.png", "createdAt": "2018-01-01T00:00:00.000Z", "id": "fa952cff-fa64-4d42-a6ea-6955c9689046", + "isAdmin": true, + "isSuspended": false, "name": "Admin User", - "username": "admin", }, Object { "avatarUrl": "http://example.com/avatar.png", "createdAt": "2018-01-01T00:00:00.000Z", "id": "46fde1d4-0050-428f-9f0b-0bf77f4bdf61", + "isAdmin": false, + "isSuspended": false, "name": "User 1", - "username": "user1", }, ], "ok": true, @@ -109,7 +109,6 @@ Object { "isAdmin": false, "isSuspended": false, "name": "User 1", - "username": "user1", }, Object { "avatarUrl": "http://example.com/avatar.png", @@ -119,7 +118,6 @@ Object { "isAdmin": true, "isSuspended": false, "name": "Admin User", - "username": "admin", }, ], "ok": true, @@ -142,7 +140,6 @@ Object { "isAdmin": true, "isSuspended": false, "name": "User 1", - "username": "user1", }, "ok": true, "status": 200, @@ -177,7 +174,6 @@ Object { "isAdmin": false, "isSuspended": true, "name": "User 1", - "username": "user1", }, "ok": true, "status": 200, @@ -212,7 +208,6 @@ Object { "isAdmin": false, "isSuspended": false, "name": "New name", - "username": "user1", }, "ok": true, "status": 200, diff --git a/server/presenters/__snapshots__/user.test.js.snap b/server/presenters/__snapshots__/user.test.js.snap index b30d948f2..cba56d1bc 100644 --- a/server/presenters/__snapshots__/user.test.js.snap +++ b/server/presenters/__snapshots__/user.test.js.snap @@ -5,8 +5,9 @@ Object { "avatarUrl": "http://example.com/avatar.png", "createdAt": undefined, "id": "123", + "isAdmin": undefined, + "isSuspended": undefined, "name": "Test User", - "username": "testuser", } `; @@ -15,7 +16,8 @@ Object { "avatarUrl": null, "createdAt": undefined, "id": "123", + "isAdmin": undefined, + "isSuspended": undefined, "name": "Test User", - "username": "testuser", } `; diff --git a/server/presenters/user.js b/server/presenters/user.js index 82283ff3a..850a4c49e 100644 --- a/server/presenters/user.js +++ b/server/presenters/user.js @@ -7,11 +7,11 @@ type Options = { type UserPresentation = { id: string, - username: string, name: string, avatarUrl: ?string, email?: string, - isAdmin?: boolean, + isAdmin: boolean, + isSuspended: boolean, }; export default ( @@ -22,15 +22,14 @@ export default ( const userData = {}; userData.id = user.id; userData.createdAt = user.createdAt; - userData.username = user.username; userData.name = user.name; + userData.isAdmin = user.isAdmin; + userData.isSuspended = user.isSuspended; userData.avatarUrl = user.avatarUrl || (user.slackData ? user.slackData.image_192 : null); if (options.includeDetails) { userData.email = user.email; - userData.isAdmin = user.isAdmin; - userData.isSuspended = user.isSuspended; } return userData; From d081b64ce277966f1d7fac2ba2eabf8675524231 Mon Sep 17 00:00:00 2001 From: Boris Mann Date: Tue, 15 Jan 2019 19:04:03 -0800 Subject: [PATCH 013/237] Heroku deploy support (#861) * Adding app.json for Heroku -- Procfile already exists * Removed required false and changed values to strings * Required is required! * Tested and working install * Apply suggestions from code review Thanks to @tommoor for updating the descriptions for items I wasn't sure about. Added! Co-Authored-By: bmann * missing coma --- app.json | 143 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 app.json diff --git a/app.json b/app.json new file mode 100644 index 000000000..f2ee9849d --- /dev/null +++ b/app.json @@ -0,0 +1,143 @@ +{ + "name": "Outline", + "description": "Open source wiki and knowledge base for growing teams", + "website": "https://www.getoutline.com/", + "repository": "https://github.com/outline/outline", + "keywords": [ + "wiki", + "team", + "node", + "markdown", + "slack" + ], + "success_url": "/", + "formation": { + "web": { + "quantity": 1, + "size": "Hobby" + } + }, + "image": "heroku/node", + "addons": [ + { + "plan": "heroku-redis" + }, + { + "plan": "heroku-postgresql" + } + ], + "scripts": { + "postdeploy": "yarn sequelize db:migrate" + }, + "env": { + "SECRET_KEY": { + "description": "A secret key", + "generator": "secret", + "required": true + }, + "DEPLOYMENT": { + "description": "Should be 'self' for self hosted installations, turns off things like pricing pages", + "value": "self", + "required": true + }, + "ENABLE_UPDATES": { + "value": "true", + "required": true + }, + "SUBDOMAINS_ENABLED": { + "value": "false", + "required": true, + "description": "Allows each team to have a different subdomain. Not recommend when self hosting" + }, + "URL": { + "description": "https://{your app name}.herokuapp.com", + "required": true + }, + "GOOGLE_CLIENT_ID": { + "description": "See https://developers.google.com/identity/protocols/OAuth2 to create a new Google OAuth client. You must configure at least one of Slack or Google to control login.", + "required": false + }, + "GOOGLE_CLIENT_SECRET": { + "description": "", + "required": false + }, + "GOOGLE_ALLOWED_DOMAINS": { + "description": "Comma separated list of domains to be allowed (optional). If not set, all Google apps domains are allowed by default", + "required": false + }, + "SLACK_KEY": { + "description": "See https://api.slack.com/apps to create a new Slack app. You must configure at least one of Slack or Google to control login.", + "required": false + }, + "SLACK_SECRET": { + "description": "Your Slack client secret - d2dc414f9953226bad0a356cXXXXYYYY", + "required": false + }, + "SLACK_VERIFICATION_TOKEN": { + "description": "Your Slack verification token - PLxk6OlXXXXXVj3YYYY", + "required": false + }, + "SLACK_APP_ID": { + "description": "A0XXXXXXXXX", + "required": false + }, + "AWS_ACCESS_KEY_ID": { + "description": "Needed to save file uploads. Optional for dev / testing.", + "required": false + }, + "AWS_SECRET_ACCESS_KEY": { + "description": "", + "required": false + }, + "AWS_S3_UPLOAD_BUCKET_NAME": { + "description": "yourbucket.example.com", + "required": false + }, + "AWS_S3_UPLOAD_BUCKET_URL": { + "description": "Live web link to your bucket. For CNAMEs, https://yourbucket.example.com", + "required": false + }, + "AWS_S3_UPLOAD_MAX_SIZE": { + "description": "Maximum file upload size in bytes", + "value": "26214400", + "required": false + }, + "SMTP_HOST": { + "description": "smtp.example.com (optional)", + "required": false + }, + "SMTP_PORT": { + "description": "1234 (optional)", + "required": false + }, + "SMTP_USERNAME": { + "description": "me@example.com (optional)", + "required": false + }, + "SMTP_PASSWORD": { + "description": "(optional)", + "required": false + }, + "SMTP_FROM_EMAIL": { + "description": "wiki@example.com (optional)", + "required": false + }, + "SMTP_REPLY_EMAIL": { + "description": "wikireply@example.com (optional)", + "required": false + }, + "GOOGLE_ANALYTICS_ID": { + "description": "UA-xxxx (optional)", + "required": false + }, + "BUGSNAG_KEY": { + "description": "An API key for bugsnag if you wish to collect error reporting (optional)", + "required": false + }, + "GITHUB_ACCESS_TOKEN": { + "description": "An API token for GitHub, optional for self hosted (optional)", + "required": false + } + + } + } From 4015b19484a68d30adb0ddf8cd8aa386711d31dc Mon Sep 17 00:00:00 2001 From: Satyadeep Date: Wed, 16 Jan 2019 15:47:18 +0530 Subject: [PATCH 014/237] Fixed broken License link in Readme The previous link was giving 404. Changed the relative URL to absolute URL. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9ae67aab2..cff4ae5aa 100644 --- a/README.md +++ b/README.md @@ -119,4 +119,4 @@ If you’re looking for ways to get started, here's a list of ways to help us im ## License -Outline is [BSD licensed](/blob/master/LICENSE). +Outline is [BSD licensed](https://github.com/outline/outline/blob/master/LICENSE). From d21dd710bb9c7885fa37116cf4ce1a7f537879d8 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Fri, 18 Jan 2019 22:44:31 -0800 Subject: [PATCH 015/237] =?UTF-8?q?Upgrade=20Editor=20=E2=80=93=20Slate=20?= =?UTF-8?q?0.44=20/=20RME=208.0.0=20(#863)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Upgrade Slate * Normalization * Remove dupe dep * Fixes placeholders * Image uploading fixed * Verbose but solid placeholder handling * RME 8.0.0 * Fixes: Ability to delete embeds --- .eslintrc | 13 - app/components/Editor/Editor.js | 2 - app/components/Editor/Embed.js | 3 +- app/scenes/Document/Document.js | 10 +- app/scenes/Document/components/Editor.js | 35 +-- app/scenes/Document/components/plugins.js | 27 ++ app/scenes/Document/schema.js | 47 ++-- .../slate-drop-or-paste-images_vx.x.x.js | 67 ----- .../npm/slate-drop-or-paste-images_vx.x.x.js | 46 ---- package.json | 3 +- yarn.lock | 238 +++++++++--------- 11 files changed, 185 insertions(+), 306 deletions(-) create mode 100644 app/scenes/Document/components/plugins.js delete mode 100644 flow-typed/npm/@tommoor/slate-drop-or-paste-images_vx.x.x.js delete mode 100644 flow-typed/npm/slate-drop-or-paste-images_vx.x.x.js diff --git a/.eslintrc b/.eslintrc index d90ae86b7..d61824f00 100644 --- a/.eslintrc +++ b/.eslintrc @@ -10,19 +10,7 @@ "rules": { "eqeqeq": 2, "no-unused-vars": 2, - // // Bring back after we remove CSS Modules 100% - // "import/order": "warn", - // Prettier automatically uses the least amount of parens possible, so this - // does more harm than good. "no-mixed-operators": "off", - // Temporary fix for a failing import lint - "import/no-unresolved": [ - "error", - { - "ignore": ["slate-drop-or-paste-images"] - } - ], - // Flow "flowtype/require-valid-file-annotation": [ 2, "always", @@ -32,7 +20,6 @@ ], "flowtype/space-after-type-colon": [2, "always"], "flowtype/space-before-type-colon": [2, "never"], - // Enforce that code is formatted with prettier. "prettier/prettier": [ "error", { diff --git a/app/components/Editor/Editor.js b/app/components/Editor/Editor.js index b117ba74b..d21f3934e 100644 --- a/app/components/Editor/Editor.js +++ b/app/components/Editor/Editor.js @@ -7,8 +7,6 @@ import Embed from './Embed'; import embeds from '../../embeds'; type Props = { - titlePlaceholder?: string, - bodyPlaceholder?: string, defaultValue?: string, readOnly?: boolean, disableEmbeds?: boolean, diff --git a/app/components/Editor/Embed.js b/app/components/Editor/Embed.js index 0b50cf61b..74558adbc 100644 --- a/app/components/Editor/Embed.js +++ b/app/components/Editor/Embed.js @@ -26,7 +26,7 @@ export default class Embed extends React.Component<*> { const result = this.matches; if (!result) return null; - const { attributes, isSelected } = this.props; + const { attributes, isSelected, children } = this.props; const { component, matches } = result; const EmbedComponent = component; @@ -37,6 +37,7 @@ export default class Embed extends React.Component<*> { {...attributes} > + {children}
    ); } diff --git a/app/scenes/Document/Document.js b/app/scenes/Document/Document.js index 7c25988cf..9f6d49364 100644 --- a/app/scenes/Document/Document.js +++ b/app/scenes/Document/Document.js @@ -49,7 +49,7 @@ You have unsaved changes. Are you sure you want to discard them? `; const UPLOADING_WARNING = ` -Image are still uploading. +Images are still uploading. Are you sure you want to discard them? `; @@ -240,7 +240,7 @@ class DocumentScene extends React.Component { const document = this.document; this.isDirty = - document && this.getEditorText().trim() !== document.text.trim(); + !!document && this.getEditorText().trim() !== document.text.trim(); }, IS_DIRTY_DELAY); onImageUploadStart = () => { @@ -340,11 +340,11 @@ class DocumentScene extends React.Component { {this.isEditing && ( @@ -365,8 +365,6 @@ class DocumentScene extends React.Component { { if (this.editor) this.editor.focusAtEnd(); }; - renderPlaceholder = (props: *) => { - const { editor, node } = props; - - if (editor.state.isComposing) return; - if (node.object !== 'block') return; - if (!Text.isTextList(node.nodes)) return; - if (node.text !== '') return; - - const index = editor.value.document.getBlocks().indexOf(node); - if (index > 1) return; - - const text = - index === 0 ? this.props.titlePlaceholder : this.props.bodyPlaceholder; - - return {editor.props.readOnly ? '' : text}; - }; - render() { const { readOnly } = this.props; @@ -54,7 +35,7 @@ class DocumentEditor extends React.Component { (this.editor = ref)} - renderPlaceholder={this.renderPlaceholder} + plugins={plugins} {...this.props} /> { } } -// additional styles account for placeholder nodes not always re-rendering const StyledEditor = styled(Editor)` display: flex; flex: 0; - ${Placeholder} { - visibility: hidden; - } - - h1:first-of-type { + p { ${Placeholder} { - visibility: visible; + visibility: hidden; } } - p:nth-child(2):last-child { ${Placeholder} { visibility: visible; diff --git a/app/scenes/Document/components/plugins.js b/app/scenes/Document/components/plugins.js new file mode 100644 index 000000000..7d0d04e95 --- /dev/null +++ b/app/scenes/Document/components/plugins.js @@ -0,0 +1,27 @@ +// @flow +import { Node, Editor } from 'slate'; +import Placeholder from 'rich-markdown-editor/lib/plugins/Placeholder'; + +export default [ + Placeholder({ + placeholder: 'Start with a title…', + when: (editor: Editor, node: Node) => { + if (editor.readOnly) return false; + if (node.object !== 'block') return false; + if (node.type !== 'heading1') return false; + if (node.text !== '') return false; + if (editor.value.document.nodes.first() !== node) return false; + return true; + }, + }), + Placeholder({ + placeholder: '…the rest is your canvas', + when: (editor: Editor, node: Node) => { + if (editor.readOnly) return false; + if (node.object !== 'block') return false; + if (node.type !== 'paragraph') return false; + if (node.text !== '') return false; + return true; + }, + }), +]; diff --git a/app/scenes/Document/schema.js b/app/scenes/Document/schema.js index 64a3be4d3..87a2f1bff 100644 --- a/app/scenes/Document/schema.js +++ b/app/scenes/Document/schema.js @@ -1,32 +1,39 @@ // @flow import { cloneDeep } from 'lodash'; -import { Block, Change, Node, Mark } from 'slate'; +import { Block, SlateError, Editor } from 'slate'; import { schema as originalSchema } from 'rich-markdown-editor'; const schema = cloneDeep(originalSchema); // add rules to the schema to ensure the first node is a heading -schema.document.nodes.unshift({ types: ['heading1'], min: 1, max: 1 }); -schema.document.normalize = ( - change: Change, - reason: string, - { - node, - child, - mark, - index, - }: { node: Node, mark?: Mark, child: Node, index: number } -) => { - switch (reason) { - case 'child_type_invalid': { - return change.setNodeByKey( - child.key, - index === 0 ? 'heading1' : 'paragraph' +schema.document.nodes.unshift({ match: { type: 'heading1' }, min: 1, max: 1 }); +schema.document.normalize = (editor: Editor, error: SlateError) => { + switch (error.code) { + case 'child_max_invalid': { + return editor.setNodeByKey( + error.child.key, + error.index === 0 ? 'heading1' : 'paragraph' ); } - case 'child_required': { - const block = Block.create(index === 0 ? 'heading1' : 'paragraph'); - return change.insertNodeByKey(node.key, index, block); + case 'child_min_invalid': { + const missingTitle = error.index === 0; + const firstNode = editor.value.document.nodes.get(0); + if (!firstNode) { + editor.insertNodeByKey(error.node.key, 0, Block.create('heading1')); + } else { + editor.setNodeByKey(firstNode.key, { type: 'heading1' }); + } + + const secondNode = editor.value.document.nodes.get(1); + if (!secondNode) { + editor.insertNodeByKey(error.node.key, 1, Block.create('paragraph')); + } else { + editor.setNodeByKey(secondNode.key, { type: 'paragraph' }); + } + + if (missingTitle) setImmediate(() => editor.moveFocusToStartOfDocument()); + + return editor; } default: } diff --git a/flow-typed/npm/@tommoor/slate-drop-or-paste-images_vx.x.x.js b/flow-typed/npm/@tommoor/slate-drop-or-paste-images_vx.x.x.js deleted file mode 100644 index 2858bda9f..000000000 --- a/flow-typed/npm/@tommoor/slate-drop-or-paste-images_vx.x.x.js +++ /dev/null @@ -1,67 +0,0 @@ -// flow-typed signature: 331ec8f8b563f7cbdee203ec29d377df -// flow-typed version: <>/@tommoor/slate-drop-or-paste-images_v^0.8.1/flow_v0.86.0 - -/** - * This is an autogenerated libdef stub for: - * - * '@tommoor/slate-drop-or-paste-images' - * - * Fill this stub out by replacing all the `any` types. - * - * Once filled out, we encourage you to share your work with the - * community by sending a pull request to: - * https://github.com/flowtype/flow-typed - */ - -declare module '@tommoor/slate-drop-or-paste-images' { - declare module.exports: any; -} - -/** - * We include stubs for each file inside this npm package in case you need to - * require those files directly. Feel free to delete any files that aren't - * needed. - */ -declare module '@tommoor/slate-drop-or-paste-images/dist/slate-drop-or-paste-images' { - declare module.exports: any; -} - -declare module '@tommoor/slate-drop-or-paste-images/dist/slate-drop-or-paste-images.min' { - declare module.exports: any; -} - -declare module '@tommoor/slate-drop-or-paste-images/lib/data-uri-to-blob' { - declare module.exports: any; -} - -declare module '@tommoor/slate-drop-or-paste-images/lib/image-to-data-uri' { - declare module.exports: any; -} - -declare module '@tommoor/slate-drop-or-paste-images/lib/index' { - declare module.exports: any; -} - -declare module '@tommoor/slate-drop-or-paste-images/lib/load-image-file' { - declare module.exports: any; -} - -// Filename aliases -declare module '@tommoor/slate-drop-or-paste-images/dist/slate-drop-or-paste-images.js' { - declare module.exports: $Exports<'@tommoor/slate-drop-or-paste-images/dist/slate-drop-or-paste-images'>; -} -declare module '@tommoor/slate-drop-or-paste-images/dist/slate-drop-or-paste-images.min.js' { - declare module.exports: $Exports<'@tommoor/slate-drop-or-paste-images/dist/slate-drop-or-paste-images.min'>; -} -declare module '@tommoor/slate-drop-or-paste-images/lib/data-uri-to-blob.js' { - declare module.exports: $Exports<'@tommoor/slate-drop-or-paste-images/lib/data-uri-to-blob'>; -} -declare module '@tommoor/slate-drop-or-paste-images/lib/image-to-data-uri.js' { - declare module.exports: $Exports<'@tommoor/slate-drop-or-paste-images/lib/image-to-data-uri'>; -} -declare module '@tommoor/slate-drop-or-paste-images/lib/index.js' { - declare module.exports: $Exports<'@tommoor/slate-drop-or-paste-images/lib/index'>; -} -declare module '@tommoor/slate-drop-or-paste-images/lib/load-image-file.js' { - declare module.exports: $Exports<'@tommoor/slate-drop-or-paste-images/lib/load-image-file'>; -} diff --git a/flow-typed/npm/slate-drop-or-paste-images_vx.x.x.js b/flow-typed/npm/slate-drop-or-paste-images_vx.x.x.js deleted file mode 100644 index 8efa02220..000000000 --- a/flow-typed/npm/slate-drop-or-paste-images_vx.x.x.js +++ /dev/null @@ -1,46 +0,0 @@ -// flow-typed signature: f847a556b96e1291a39558ffff3aa6b7 -// flow-typed version: <>/slate-drop-or-paste-images_v^0.5.0/flow_v0.49.1 - -/** - * This is an autogenerated libdef stub for: - * - * 'slate-drop-or-paste-images' - * - * Fill this stub out by replacing all the `any` types. - * - * Once filled out, we encourage you to share your work with the - * community by sending a pull request to: - * https://github.com/flowtype/flow-typed - */ - -declare module 'slate-drop-or-paste-images' { - declare module.exports: any; -} - -/** - * We include stubs for each file inside this npm package in case you need to - * require those files directly. Feel free to delete any files that aren't - * needed. - */ -declare module 'slate-drop-or-paste-images/dist/image-to-data-uri' { - declare module.exports: any; -} - -declare module 'slate-drop-or-paste-images/dist/index' { - declare module.exports: any; -} - -declare module 'slate-drop-or-paste-images/dist/load-image-file' { - declare module.exports: any; -} - -// Filename aliases -declare module 'slate-drop-or-paste-images/dist/image-to-data-uri.js' { - declare module.exports: $Exports<'slate-drop-or-paste-images/dist/image-to-data-uri'>; -} -declare module 'slate-drop-or-paste-images/dist/index.js' { - declare module.exports: $Exports<'slate-drop-or-paste-images/dist/index'>; -} -declare module 'slate-drop-or-paste-images/dist/load-image-file.js' { - declare module.exports: $Exports<'slate-drop-or-paste-images/dist/load-image-file'>; -} diff --git a/package.json b/package.json index 992b51708..9ecc7aa2d 100644 --- a/package.json +++ b/package.json @@ -65,7 +65,6 @@ }, "dependencies": { "@tommoor/remove-markdown": "0.3.1", - "@tommoor/slate-drop-or-paste-images": "^0.8.1", "autotrack": "^2.4.1", "aws-sdk": "^2.135.0", "babel-core": "^6.24.1", @@ -158,7 +157,7 @@ "react-waypoint": "^7.3.1", "redis": "^2.6.2", "redis-lock": "^0.1.0", - "rich-markdown-editor": "^7.0.0-2", + "rich-markdown-editor": "^8.0.0", "safestart": "1.1.0", "sequelize": "4.28.6", "sequelize-cli": "^2.7.0", diff --git a/yarn.lock b/yarn.lock index 58a66662a..aebec2045 100644 --- a/yarn.lock +++ b/yarn.lock @@ -91,18 +91,6 @@ version "0.3.1" resolved "https://registry.yarnpkg.com/@tommoor/remove-markdown/-/remove-markdown-0.3.1.tgz#25e7b845d52fcfadf149a3a6a468a931fee7619b" -"@tommoor/slate-drop-or-paste-images@^0.8.1": - version "0.8.1" - resolved "https://registry.npmjs.org/@tommoor/slate-drop-or-paste-images/-/slate-drop-or-paste-images-0.8.1.tgz#4d94b5c1dd2de109546ee1f38a1e4a18df078c1e" - dependencies: - es6-promise "^4.0.5" - image-to-data-uri "^1.0.0" - is-data-uri "^0.1.0" - is-image "^1.0.1" - is-url "^1.2.2" - mime-types "^2.1.11" - slate-dev-logger "^0.1.0" - "@types/geojson@^1.0.0": version "1.0.3" resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-1.0.3.tgz#fbcf7fa5eb6dd108d51385cc6987ec1f24214523" @@ -115,6 +103,23 @@ version "6.0.88" resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.88.tgz#f618f11a944f6a18d92b5c472028728a3e3d4b66" +"@wikifactory/slate-edit-blockquote@^0.7.1": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@wikifactory/slate-edit-blockquote/-/slate-edit-blockquote-0.7.1.tgz#dffb4a3a69dfe6dc35198465be92daa999533357" + +"@wikifactory/slate-edit-code@^0.16.0": + version "0.16.0" + resolved "https://registry.yarnpkg.com/@wikifactory/slate-edit-code/-/slate-edit-code-0.16.0.tgz#226cb4f064a97800fd6bc50b94d86bb913ad8799" + dependencies: + detect-indent "^4.0.0" + detect-newline "^2.1.0" + ends-with "^0.2.0" + is-hotkey "^0.1.1" + +"@wikifactory/slate-trailing-block@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@wikifactory/slate-trailing-block/-/slate-trailing-block-0.6.0.tgz#7cfba15707f55ea41583e03e809c8f3cc9b8b77f" + abab@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" @@ -2528,7 +2533,7 @@ debounce@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.0.2.tgz#503cc674d8d7f737099664fb75ddbd36b9626dc6" -debug@*, debug@2.6.8, debug@^2.2.0, debug@^2.3.2, debug@^2.6.1, debug@^2.6.3, debug@^2.6.8: +debug@*, debug@2.6.8, debug@^2.2.0, debug@^2.6.1, debug@^2.6.3, debug@^2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" dependencies: @@ -4098,6 +4103,14 @@ glogg@^1.0.0: dependencies: sparkles "^1.0.0" +golery-slate-edit-list@^0.18.0-golery.4: + version "0.18.0-golery.4" + resolved "https://registry.yarnpkg.com/golery-slate-edit-list/-/golery-slate-edit-list-0.18.0-golery.4.tgz#4452588b0571ece63bcf62e5d0dbd0018cbc2a12" + +golery-slate-prism@0.6.0-golery.2: + version "0.6.0-golery.2" + resolved "https://registry.yarnpkg.com/golery-slate-prism/-/golery-slate-prism-0.6.0-golery.2.tgz#d56ae8f2dc8056c752da18cb06298dbf84a3d1b4" + good-listener@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" @@ -4890,10 +4903,6 @@ is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" -is-empty@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-empty/-/is-empty-1.2.0.tgz#de9bb5b278738a05a0b09a57e1fb4d4a341a9f6b" - is-equal-shallow@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" @@ -4938,6 +4947,10 @@ is-hexadecimal@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz#6e084bbc92061fbb0971ec58b6ce6d404e24da69" +is-hotkey@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.1.4.tgz#c34d2c85d6ec8d09a871dcf71931c8067a824c7d" + is-hotkey@^0.1.1: version "0.1.1" resolved "https://registry.npmjs.org/is-hotkey/-/is-hotkey-0.1.1.tgz#b279a2fd108391be9aa93c6cb317f50357da549a" @@ -5720,10 +5733,6 @@ jws@^3.0.0, jws@^3.1.4: jwa "^1.1.4" safe-buffer "^5.0.1" -keycode@^2.1.2: - version "2.1.9" - resolved "https://registry.npmjs.org/keycode/-/keycode-2.1.9.tgz#964a23c54e4889405b4861a5c9f0480d45141dfa" - keygrip@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.0.2.tgz#ad3297c557069dea8bcfe7a4fa491b75c5ddeb91" @@ -6619,7 +6628,7 @@ miller-rabin@^4.0.0: version "1.30.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" -mime-types@^2.0.7, mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.6, mime-types@~2.1.7, mime-types@~2.1.9: +mime-types@^2.0.7, mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.6, mime-types@~2.1.7, mime-types@~2.1.9: version "2.1.17" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" dependencies: @@ -7307,10 +7316,6 @@ osenv@^0.1.0, osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -outline-icons@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/outline-icons/-/outline-icons-1.0.3.tgz#f0928a8bbc7e7ff4ea6762eee8fb2995d477941e" - outline-icons@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/outline-icons/-/outline-icons-1.6.0.tgz#6c7897d354e6bd77ca5498cd3a989b8cb9482574" @@ -7932,9 +7937,9 @@ pretty-hrtime@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" -prismjs@^1.13.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.13.0.tgz#edcc14a90bbd72a03e5ffd2bab81a04c79a607a6" +prismjs@^1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.15.0.tgz#8801d332e472091ba8def94976c8877ad60398d9" optionalDependencies: clipboard "^2.0.0" @@ -8252,12 +8257,6 @@ react-modal@^3.1.2: exenv "^1.2.0" prop-types "^15.5.10" -react-portal@^3.1.0: - version "3.2.0" - resolved "https://registry.npmjs.org/react-portal/-/react-portal-3.2.0.tgz#4224e19b2b05d5cbe730a7ba0e34ec7585de0043" - dependencies: - prop-types "^15.5.8" - react-portal@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/react-portal/-/react-portal-4.0.0.tgz#d327b495dc72a305e8a3e351f212a2d94677f913" @@ -8804,35 +8803,38 @@ retry-axios@0.3.2, retry-axios@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-0.3.2.tgz#5757c80f585b4cc4c4986aa2ffd47a60c6d35e13" -rich-markdown-editor@^7.0.0-2: - version "7.0.0-2" - resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-7.0.0-2.tgz#cba247bd13be3505e9ceec69643db27bfc20cfa3" +rich-markdown-editor@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-8.0.0.tgz#d11a7b81e819bcef1680b60359b8761baeadbb01" dependencies: - "@tommoor/slate-drop-or-paste-images" "^0.8.1" + "@wikifactory/slate-edit-blockquote" "^0.7.1" + "@wikifactory/slate-edit-code" "^0.16.0" + "@wikifactory/slate-trailing-block" "^0.6.0" babel-plugin-transform-async-to-generator "^6.24.1" babel-plugin-transform-runtime "^6.23.0" boundless-arrow-key-navigation "^1.1.0" copy-to-clipboard "^3.0.8" eslint-plugin-flowtype "^2.46.1" eslint-plugin-prettier "^2.6.0" + golery-slate-edit-list "^0.18.0-golery.4" + golery-slate-prism "0.6.0-golery.2" immutable "^3.8.2" lodash "^4.17.11" - outline-icons "^1.0.0" + outline-icons "^1.6.0" + prismjs "^1.15.0" react "^16.6.0" react-dom "^16.6.0" react-keydown "^1.9.7" react-medium-image-zoom "^3.0.10" react-portal "^4.1.4" - slate "^0.34.5" - slate-collapse-on-escape "^0.6.1" - slate-edit-code "^0.15.5" - slate-edit-list "^0.11.3" + slate "^0.44.0" + slate-collapse-on-escape "^0.8.1" + slate-drop-or-paste-images "^0.9.1" slate-md-serializer "^5.2.2" - slate-paste-linkify "^0.5.1" - slate-plain-serializer "0.5.4" - slate-prism "^0.5.0" - slate-react "^0.12.3" - slate-trailing-block "^0.5.0" + slate-paste-linkify "^0.7.0" + slate-plain-serializer "0.6.33" + slate-react "^0.21.15" + slate-schema-violations "^0.1.39" slugify "^1.3.0" styled-components "4.0.3" @@ -9166,38 +9168,45 @@ slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" -slate-base64-serializer@^0.2.28: - version "0.2.28" - resolved "https://registry.yarnpkg.com/slate-base64-serializer/-/slate-base64-serializer-0.2.28.tgz#141a93654b58203e82ee24c4068107a67b72aff8" +slate-base64-serializer@^0.2.94: + version "0.2.94" + resolved "https://registry.yarnpkg.com/slate-base64-serializer/-/slate-base64-serializer-0.2.94.tgz#b908c3af481b9a0ead78f313653414c4b2b4b2d5" dependencies: isomorphic-base64 "^1.0.2" -slate-collapse-on-escape@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/slate-collapse-on-escape/-/slate-collapse-on-escape-0.6.1.tgz#404da2e2a1773fc140c7a8230e4ef50b0459d1ed" +slate-collapse-on-escape@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/slate-collapse-on-escape/-/slate-collapse-on-escape-0.8.1.tgz#a264c6c407cdf4bbe5013aae6c6571d613b58713" dependencies: to-pascal-case "^1.0.0" +slate-dev-environment@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/slate-dev-environment/-/slate-dev-environment-0.2.1.tgz#760f500f18af0dc61bcae39eec4160c420fea537" + dependencies: + is-in-browser "^1.1.3" + slate-dev-logger@^0.1.0: version "0.1.36" resolved "https://registry.npmjs.org/slate-dev-logger/-/slate-dev-logger-0.1.36.tgz#ecdb37dbf944dfc742bab23b6a20d5a0472db95e" -slate-dev-logger@^0.1.39: - version "0.1.39" - resolved "https://registry.yarnpkg.com/slate-dev-logger/-/slate-dev-logger-0.1.39.tgz#744a69b85034244713e6de51483af5713c345af4" - -slate-edit-code@^0.15.5: - version "0.15.5" - resolved "https://registry.yarnpkg.com/slate-edit-code/-/slate-edit-code-0.15.5.tgz#9b64ad7150a6eaaa8212d7a2200e1c6ae2332b63" +slate-drop-or-paste-images@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/slate-drop-or-paste-images/-/slate-drop-or-paste-images-0.9.1.tgz#bc3b171ff63e85af91972d79f0751616a00e6ad4" dependencies: - detect-indent "^4.0.0" - detect-newline "^2.1.0" - ends-with "^0.2.0" - is-hotkey "^0.1.1" + es6-promise "^4.0.5" + image-to-data-uri "^1.0.0" + is-data-uri "^0.1.0" + is-image "^1.0.1" + is-url "^1.2.2" + slate-dev-logger "^0.1.0" -slate-edit-list@^0.11.3: - version "0.11.3" - resolved "https://registry.yarnpkg.com/slate-edit-list/-/slate-edit-list-0.11.3.tgz#d27ff2ff93a83bef49131a6a44b87a9558c9d44c" +slate-hotkeys@^0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/slate-hotkeys/-/slate-hotkeys-0.2.8.tgz#7fecf732c512c860113f3f1a6dc1015df9d130a7" + dependencies: + is-hotkey "0.1.4" + slate-dev-environment "^0.2.1" slate-md-serializer@^5.2.2: version "5.2.2" @@ -9205,77 +9214,60 @@ slate-md-serializer@^5.2.2: dependencies: hashtag-regex "^2.0.0" -slate-paste-linkify@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/slate-paste-linkify/-/slate-paste-linkify-0.5.1.tgz#6988a76f121fd1fa26fed06a93892f91208c37df" +slate-paste-linkify@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/slate-paste-linkify/-/slate-paste-linkify-0.7.0.tgz#42adf3a3b40c88086c201666a5b203140da5a6ae" dependencies: is-url "^1.2.2" - to-pascal-case "^1.0.0" -slate-plain-serializer@0.5.4: - version "0.5.4" - resolved "https://registry.yarnpkg.com/slate-plain-serializer/-/slate-plain-serializer-0.5.4.tgz#ba5a1713a50e6e9020e080c10e5869f38820dc96" - dependencies: - slate-dev-logger "^0.1.39" +slate-plain-serializer@0.6.33, slate-plain-serializer@^0.6.33: + version "0.6.33" + resolved "https://registry.yarnpkg.com/slate-plain-serializer/-/slate-plain-serializer-0.6.33.tgz#b731ecd8757f0d402ab36823f4be641c3f11a229" -slate-plain-serializer@^0.5.9: - version "0.5.9" - resolved "https://registry.yarnpkg.com/slate-plain-serializer/-/slate-plain-serializer-0.5.9.tgz#dc6ac5d10c46cac1bfa8d9af36f5e76d766fd57e" - dependencies: - slate-dev-logger "^0.1.39" +slate-prop-types@^0.5.24: + version "0.5.24" + resolved "https://registry.yarnpkg.com/slate-prop-types/-/slate-prop-types-0.5.24.tgz#ecff6584e250d88ff8384ff2bd820eec7d296913" -slate-prism@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/slate-prism/-/slate-prism-0.5.0.tgz#009eb74fea38ad76c64db67def7ea0884917adec" - dependencies: - prismjs "^1.13.0" +slate-react-placeholder@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/slate-react-placeholder/-/slate-react-placeholder-0.1.12.tgz#d09936acf1570f9178d3a40a56ff0616f67e1fd7" -slate-prop-types@^0.4.26: - version "0.4.26" - resolved "https://registry.yarnpkg.com/slate-prop-types/-/slate-prop-types-0.4.26.tgz#72ef2b6fded5893a2a0a273f679b92c4eee99e73" +slate-react@^0.21.15: + version "0.21.15" + resolved "https://registry.yarnpkg.com/slate-react/-/slate-react-0.21.15.tgz#f616f59f2fd91755704c21512972b87f3df76a9e" dependencies: - slate-dev-logger "^0.1.39" - -slate-react@^0.12.3: - version "0.12.3" - resolved "https://registry.yarnpkg.com/slate-react/-/slate-react-0.12.3.tgz#3d0739af6930ae2a178fa90da480d5106ba1c504" - dependencies: - debug "^2.3.2" + debug "^3.1.0" get-window "^1.1.1" - is-hotkey "^0.1.1" - is-in-browser "^1.1.3" is-window "^1.0.2" - keycode "^2.1.2" lodash "^4.1.1" + memoize-one "^4.0.0" prop-types "^15.5.8" react-immutable-proptypes "^2.1.0" - react-portal "^3.1.0" selection-is-backward "^1.0.0" - slate-base64-serializer "^0.2.28" - slate-dev-logger "^0.1.39" - slate-plain-serializer "^0.5.9" - slate-prop-types "^0.4.26" + slate-base64-serializer "^0.2.94" + slate-dev-environment "^0.2.1" + slate-hotkeys "^0.2.8" + slate-plain-serializer "^0.6.33" + slate-prop-types "^0.5.24" + slate-react-placeholder "^0.1.12" + tiny-invariant "^1.0.1" + tiny-warning "^0.0.3" -slate-schema-violations@^0.1.18: - version "0.1.18" - resolved "https://registry.yarnpkg.com/slate-schema-violations/-/slate-schema-violations-0.1.18.tgz#bc760e17dab85a613cd9a5399b98cbf867db0eb7" +slate-schema-violations@^0.1.39: + version "0.1.39" + resolved "https://registry.yarnpkg.com/slate-schema-violations/-/slate-schema-violations-0.1.39.tgz#854ab5624136419cef4c803b1823acabe11f1c15" -slate-trailing-block@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/slate-trailing-block/-/slate-trailing-block-0.5.0.tgz#cedb4f2975f1167e0fb9d259ce1252b82f4d74ff" - -slate@^0.34.5: - version "0.34.5" - resolved "https://registry.yarnpkg.com/slate/-/slate-0.34.5.tgz#4bc30dc300c924193d42371a7afcc168676f2798" +slate@^0.44.0: + version "0.44.9" + resolved "https://registry.yarnpkg.com/slate/-/slate-0.44.9.tgz#0fc9ba9f08b379b86c4c0a1ddebbe6bf28aa3c4b" dependencies: debug "^3.1.0" direction "^0.1.5" esrever "^0.2.0" - is-empty "^1.0.0" is-plain-object "^2.0.4" lodash "^4.17.4" - slate-dev-logger "^0.1.39" - slate-schema-violations "^0.1.18" + tiny-invariant "^1.0.1" + tiny-warning "^0.0.3" type-of "^2.0.1" slice-ansi@0.0.4: @@ -9876,6 +9868,14 @@ tiny-emitter@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" +tiny-invariant@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.3.tgz#91efaaa0269ccb6271f0296aeedb05fc3e067b7a" + +tiny-warning@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-0.0.3.tgz#1807eb4c5f81784a6354d58ea1d5024f18c6c81f" + title-case@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa" From 13501b6d7616437d8d088ad42007ac18cfb773aa Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 19 Jan 2019 00:23:39 -0800 Subject: [PATCH 016/237] Moving redirects to declarative method --- app/components/Editor/Editor.js | 11 ++++++-- app/components/InputRich.js | 9 +++---- app/components/Layout.js | 23 ++++++++++------- app/components/ScrollToAnchor.js | 23 ----------------- app/components/Sidebar/Main.js | 12 ++------- app/components/Sidebar/Sidebar.js | 1 - .../Sidebar/components/CollectionLink.js | 1 - .../Sidebar/components/Collections.js | 5 +++- app/index.js | 5 +--- app/menus/AccountMenu.js | 12 ++++++--- app/menus/CollectionMenu.js | 11 +++++--- app/menus/DocumentMenu.js | 24 ++++++++++-------- app/menus/NewChildDocumentMenu.js | 25 +++++++++++-------- app/menus/NewDocumentMenu.js | 17 ++++++++----- app/menus/ShareMenu.js | 16 +++++++----- app/scenes/Collection.js | 24 ++++++------------ app/scenes/Document/Document.js | 1 - 17 files changed, 105 insertions(+), 115 deletions(-) delete mode 100644 app/components/ScrollToAnchor.js diff --git a/app/components/Editor/Editor.js b/app/components/Editor/Editor.js index d21f3934e..2abba0e1e 100644 --- a/app/components/Editor/Editor.js +++ b/app/components/Editor/Editor.js @@ -1,5 +1,8 @@ // @flow import * as React from 'react'; +import { Redirect } from 'react-router-dom'; +import { observable } from 'mobx'; +import { observer } from 'mobx-react'; import RichMarkdownEditor from 'rich-markdown-editor'; import { uploadFile } from 'utils/uploadFile'; import isInternalUrl from 'utils/isInternalUrl'; @@ -11,11 +14,13 @@ type Props = { readOnly?: boolean, disableEmbeds?: boolean, forwardedRef: *, - history: *, ui: *, }; +@observer class Editor extends React.Component { + @observable redirectTo: ?string; + onUploadImage = async (file: File) => { const result = await uploadFile(file); return result.url; @@ -42,7 +47,7 @@ class Editor extends React.Component { } } - this.props.history.push(navigateTo); + this.redirectTo = navigateTo; } else { window.open(href, '_blank'); } @@ -69,6 +74,8 @@ class Editor extends React.Component { }; render() { + if (this.redirectTo) return ; + return ( { - @observable editorComponent; + @observable editorComponent: *; componentDidMount() { this.loadEditor(); @@ -63,4 +60,4 @@ const StyledOutline = styled(Outline)` } `; -export default inject('ui')(withRouter(InputRich)); +export default InputRich; diff --git a/app/components/Layout.js b/app/components/Layout.js index d8f223de5..45ae4c43f 100644 --- a/app/components/Layout.js +++ b/app/components/Layout.js @@ -1,10 +1,10 @@ // @flow import * as React from 'react'; -import { Switch, Route, withRouter } from 'react-router-dom'; -import type { Location } from 'react-router-dom'; +import { Switch, Route, Redirect } from 'react-router-dom'; import { Helmet } from 'react-helmet'; import styled from 'styled-components'; import breakpoint from 'styled-components-breakpoint'; +import { observable } from 'mobx'; import { observer, inject } from 'mobx-react'; import keydown from 'react-keydown'; import Analytics from 'components/Analytics'; @@ -16,14 +16,11 @@ import Sidebar from 'components/Sidebar'; import SettingsSidebar from 'components/Sidebar/Settings'; import Modals from 'components/Modals'; import ErrorSuspended from 'scenes/ErrorSuspended'; - import AuthStore from 'stores/AuthStore'; import UiStore from 'stores/UiStore'; import DocumentsStore from 'stores/DocumentsStore'; type Props = { - history: Object, - location: Location, documents: DocumentsStore, children?: ?React.Node, actions?: ?React.Node, @@ -36,17 +33,24 @@ type Props = { @observer class Layout extends React.Component { scrollable: ?HTMLDivElement; + @observable redirectTo: ?string; + + componentDidUpdate() { + if (this.redirectTo) { + this.redirectTo = undefined; + } + } @keydown(['/', 't', 'meta+k']) goToSearch(ev) { ev.preventDefault(); ev.stopPropagation(); - this.props.history.push(searchUrl()); + this.redirectTo = searchUrl(); } @keydown('d') goToDashboard() { - this.props.history.push(homeUrl()); + this.redirectTo = homeUrl(); } @keydown('e') @@ -56,7 +60,7 @@ class Layout extends React.Component { ev.preventDefault(); ev.stopPropagation(); - this.props.history.push(documentEditUrl(activeDocument)); + this.redirectTo = documentEditUrl(activeDocument); } @keydown('shift+/') @@ -70,6 +74,7 @@ class Layout extends React.Component { const showSidebar = auth.authenticated && user && team; if (auth.isSuspended) return ; + if (this.redirectTo) return ; return ( @@ -122,4 +127,4 @@ const Content = styled(Flex)` `}; `; -export default withRouter(inject('auth', 'ui', 'documents')(Layout)); +export default inject('auth', 'ui', 'documents')(Layout); diff --git a/app/components/ScrollToAnchor.js b/app/components/ScrollToAnchor.js deleted file mode 100644 index 349ab8762..000000000 --- a/app/components/ScrollToAnchor.js +++ /dev/null @@ -1,23 +0,0 @@ -// @flow -import * as React from 'react'; -import { withRouter } from 'react-router-dom'; - -class ScrollToAnchor extends React.Component<*> { - componentDidUpdate(prevProps) { - if (this.props.location.hash === prevProps.location.hash) return; - if (window.location.hash === '') return; - - // Delay on timeout to ensure that the DOM is updated first - setImmediate(() => { - const id = window.location.hash.replace('#', ''); - const element = document.getElementById(id); - if (element) element.scrollIntoView(); - }); - } - - render() { - return this.props.children; - } -} - -export default withRouter(ScrollToAnchor); diff --git a/app/components/Sidebar/Main.js b/app/components/Sidebar/Main.js index ad72711e8..4ec967dcf 100644 --- a/app/components/Sidebar/Main.js +++ b/app/components/Sidebar/Main.js @@ -1,7 +1,5 @@ // @flow import * as React from 'react'; -import { withRouter } from 'react-router-dom'; -import type { Location } from 'react-router-dom'; import { observer, inject } from 'mobx-react'; import { HomeIcon, EditIcon, SearchIcon, StarredIcon } from 'outline-icons'; @@ -20,8 +18,6 @@ import DocumentsStore from 'stores/DocumentsStore'; import UiStore from 'stores/UiStore'; type Props = { - history: Object, - location: Location, auth: AuthStore, documents: DocumentsStore, ui: UiStore, @@ -93,11 +89,7 @@ class MainSidebar extends React.Component { />
    - +
    @@ -106,4 +98,4 @@ class MainSidebar extends React.Component { } } -export default withRouter(inject('documents', 'auth', 'ui')(MainSidebar)); +export default inject('documents', 'auth', 'ui')(MainSidebar); diff --git a/app/components/Sidebar/Sidebar.js b/app/components/Sidebar/Sidebar.js index 5668ccbbf..f20a07cc3 100644 --- a/app/components/Sidebar/Sidebar.js +++ b/app/components/Sidebar/Sidebar.js @@ -12,7 +12,6 @@ import UiStore from 'stores/UiStore'; type Props = { children: React.Node, - history: Object, location: Location, ui: UiStore, }; diff --git a/app/components/Sidebar/components/CollectionLink.js b/app/components/Sidebar/components/CollectionLink.js index 48b056da9..f4d322eb9 100644 --- a/app/components/Sidebar/components/CollectionLink.js +++ b/app/components/Sidebar/components/CollectionLink.js @@ -62,7 +62,6 @@ class CollectionLink extends React.Component { exact={false} menu={ (this.menuOpen = true)} onClose={() => (this.menuOpen = false)} diff --git a/app/components/Sidebar/components/Collections.js b/app/components/Sidebar/components/Collections.js index 330db016e..138291df1 100644 --- a/app/components/Sidebar/components/Collections.js +++ b/app/components/Sidebar/components/Collections.js @@ -1,6 +1,7 @@ // @flow import * as React from 'react'; import { observer, inject } from 'mobx-react'; +import { withRouter } from 'react-router-dom'; import type { Location } from 'react-router-dom'; import Flex from 'shared/components/Flex'; import { PlusIcon } from 'outline-icons'; @@ -62,4 +63,6 @@ class Collections extends React.Component { } } -export default inject('collections', 'ui', 'documents')(Collections); +export default inject('collections', 'ui', 'documents')( + withRouter(Collections) +); diff --git a/app/index.js b/app/index.js index b4336801b..10479c416 100644 --- a/app/index.js +++ b/app/index.js @@ -12,7 +12,6 @@ import 'shared/styles/prism.css'; import ErrorBoundary from 'components/ErrorBoundary'; import ScrollToTop from 'components/ScrollToTop'; -import ScrollToAnchor from 'components/ScrollToAnchor'; import Toasts from 'components/Toasts'; import Routes from './routes'; @@ -33,9 +32,7 @@ if (element) { - - - + diff --git a/app/menus/AccountMenu.js b/app/menus/AccountMenu.js index 464f292ea..bbf86d795 100644 --- a/app/menus/AccountMenu.js +++ b/app/menus/AccountMenu.js @@ -1,6 +1,7 @@ // @flow import * as React from 'react'; -import { withRouter } from 'react-router-dom'; +import { Redirect } from 'react-router-dom'; +import { observable } from 'mobx'; import { inject, observer } from 'mobx-react'; import UiStore from 'stores/UiStore'; import AuthStore from 'stores/AuthStore'; @@ -15,19 +16,20 @@ import { type Props = { label: React.Node, - history: Object, ui: UiStore, auth: AuthStore, }; @observer class AccountMenu extends React.Component { + @observable redirectTo: ?string; + handleOpenKeyboardShortcuts = () => { this.props.ui.setActiveModal('keyboard-shortcuts'); }; handleOpenSettings = () => { - this.props.history.push('/settings'); + this.redirectTo = '/settings'; }; handleLogout = () => { @@ -35,6 +37,8 @@ class AccountMenu extends React.Component { }; render() { + if (this.redirectTo) return ; + return ( { } } -export default withRouter(inject('ui', 'auth')(AccountMenu)); +export default inject('ui', 'auth')(AccountMenu); diff --git a/app/menus/CollectionMenu.js b/app/menus/CollectionMenu.js index bf6bf1ecf..5e843155e 100644 --- a/app/menus/CollectionMenu.js +++ b/app/menus/CollectionMenu.js @@ -2,6 +2,7 @@ import * as React from 'react'; import { observable } from 'mobx'; import { inject, observer } from 'mobx-react'; +import { Redirect } from 'react-router-dom'; import styled from 'styled-components'; import { MoreIcon } from 'outline-icons'; import Modal from 'components/Modal'; @@ -18,7 +19,6 @@ type Props = { label?: React.Node, onOpen?: () => *, onClose?: () => *, - history: Object, ui: UiStore, documents: DocumentsStore, collection: Collection, @@ -28,11 +28,12 @@ type Props = { class CollectionMenu extends React.Component { file: ?HTMLInputElement; @observable permissionsModalOpen: boolean = false; + @observable redirectTo: ?string; onNewDocument = (ev: SyntheticEvent<*>) => { ev.preventDefault(); - const { collection, history } = this.props; - history.push(`${collection.url}/new`); + const { collection } = this.props; + this.redirectTo = `${collection.url}/new`; }; onImportDocument = (ev: SyntheticEvent<*>) => { @@ -51,7 +52,7 @@ class CollectionMenu extends React.Component { documents: this.props.documents, collectionId: this.props.collection.id, }); - this.props.history.push(document.url); + this.redirectTo = document.url; } catch (err) { this.props.ui.showToast(err.message); } @@ -85,6 +86,8 @@ class CollectionMenu extends React.Component { }; render() { + if (this.redirectTo) return ; + const { collection, label, onOpen, onClose } = this.props; return ( diff --git a/app/menus/DocumentMenu.js b/app/menus/DocumentMenu.js index 5f12ff506..ad396d46a 100644 --- a/app/menus/DocumentMenu.js +++ b/app/menus/DocumentMenu.js @@ -1,6 +1,7 @@ // @flow import * as React from 'react'; -import { withRouter } from 'react-router-dom'; +import { Redirect } from 'react-router-dom'; +import { observable } from 'mobx'; import { inject, observer } from 'mobx-react'; import { MoreIcon } from 'outline-icons'; @@ -14,7 +15,6 @@ type Props = { ui: UiStore, auth: AuthStore, label?: React.Node, - history: Object, document: Document, className: string, showPrint?: boolean, @@ -23,11 +23,13 @@ type Props = { @observer class DocumentMenu extends React.Component { + @observable redirectTo: ?string; + handleNewChild = (ev: SyntheticEvent<*>) => { - const { history, document } = this.props; - history.push( - `${document.collection.url}/new?parentDocument=${document.id}` - ); + const { document } = this.props; + this.redirectTo = `${document.collection.url}/new?parentDocument=${ + document.id + }`; }; handleDelete = (ev: SyntheticEvent<*>) => { @@ -36,16 +38,16 @@ class DocumentMenu extends React.Component { }; handleDocumentHistory = () => { - this.props.history.push(documentHistoryUrl(this.props.document)); + this.redirectTo = documentHistoryUrl(this.props.document); }; handleMove = (ev: SyntheticEvent<*>) => { - this.props.history.push(documentMoveUrl(this.props.document)); + this.redirectTo = documentMoveUrl(this.props.document); }; handleDuplicate = async (ev: SyntheticEvent<*>) => { const duped = await this.props.document.duplicate(); - this.props.history.push(duped.url); + this.redirectTo = duped.url; }; handlePin = (ev: SyntheticEvent<*>) => { @@ -76,6 +78,8 @@ class DocumentMenu extends React.Component { }; render() { + if (this.redirectTo) return ; + const { document, label, className, showPrint, auth } = this.props; const canShareDocuments = auth.team && auth.team.sharing; @@ -136,4 +140,4 @@ class DocumentMenu extends React.Component { } } -export default withRouter(inject('ui', 'auth')(DocumentMenu)); +export default inject('ui', 'auth')(DocumentMenu); diff --git a/app/menus/NewChildDocumentMenu.js b/app/menus/NewChildDocumentMenu.js index 1a98c1152..f9f75c3c6 100644 --- a/app/menus/NewChildDocumentMenu.js +++ b/app/menus/NewChildDocumentMenu.js @@ -1,6 +1,8 @@ // @flow import * as React from 'react'; -import { withRouter } from 'react-router-dom'; +import { Redirect } from 'react-router-dom'; +import { observable } from 'mobx'; +import { observer } from 'mobx-react'; import { MoreIcon } from 'outline-icons'; import { newDocumentUrl } from 'utils/routeHelpers'; @@ -9,25 +11,28 @@ import { DropdownMenu, DropdownMenuItem } from 'components/DropdownMenu'; type Props = { label?: React.Node, - history: Object, document: Document, }; +@observer class NewChildDocumentMenu extends React.Component { + @observable redirectTo: ?string; + handleNewDocument = () => { - const { history, document } = this.props; - history.push(newDocumentUrl(document.collection)); + this.redirectTo = newDocumentUrl(this.props.document.collection); }; handleNewChild = () => { - const { history, document } = this.props; - history.push( - `${document.collection.url}/new?parentDocument=${document.id}` - ); + const { document } = this.props; + this.redirectTo = `${document.collection.url}/new?parentDocument=${ + document.id + }`; }; render() { - const { label, document, history, ...rest } = this.props; + if (this.redirectTo) return ; + + const { label, document, ...rest } = this.props; const { collection } = document; return ( @@ -45,4 +50,4 @@ class NewChildDocumentMenu extends React.Component { } } -export default withRouter(NewChildDocumentMenu); +export default NewChildDocumentMenu; diff --git a/app/menus/NewDocumentMenu.js b/app/menus/NewDocumentMenu.js index 5d5a64c23..ed568323d 100644 --- a/app/menus/NewDocumentMenu.js +++ b/app/menus/NewDocumentMenu.js @@ -1,7 +1,8 @@ // @flow import * as React from 'react'; -import { withRouter } from 'react-router-dom'; -import { inject } from 'mobx-react'; +import { observable } from 'mobx'; +import { inject, observer } from 'mobx-react'; +import { Redirect } from 'react-router-dom'; import { MoreIcon, CollectionIcon, PrivateCollectionIcon } from 'outline-icons'; import { newDocumentUrl } from 'utils/routeHelpers'; @@ -10,13 +11,15 @@ import { DropdownMenu, DropdownMenuItem } from 'components/DropdownMenu'; type Props = { label?: React.Node, - history: Object, collections: CollectionsStore, }; +@observer class NewDocumentMenu extends React.Component { + @observable redirectTo: ?string; + handleNewDocument = collection => { - this.props.history.push(newDocumentUrl(collection)); + this.redirectTo = newDocumentUrl(collection); }; onOpen = () => { @@ -28,7 +31,9 @@ class NewDocumentMenu extends React.Component { }; render() { - const { collections, label, history, ...rest } = this.props; + if (this.redirectTo) return ; + + const { collections, label, ...rest } = this.props; return ( { } } -export default withRouter(inject('collections')(NewDocumentMenu)); +export default inject('collections')(NewDocumentMenu); diff --git a/app/menus/ShareMenu.js b/app/menus/ShareMenu.js index d2c147d13..114abc033 100644 --- a/app/menus/ShareMenu.js +++ b/app/menus/ShareMenu.js @@ -1,12 +1,12 @@ // @flow import * as React from 'react'; -import { withRouter } from 'react-router-dom'; -import { inject } from 'mobx-react'; +import { Redirect } from 'react-router-dom'; +import { inject, observer } from 'mobx-react'; +import { observable } from 'mobx'; import { MoreIcon } from 'outline-icons'; import CopyToClipboard from 'components/CopyToClipboard'; import { DropdownMenu, DropdownMenuItem } from 'components/DropdownMenu'; - import SharesStore from 'stores/SharesStore'; import UiStore from 'stores/UiStore'; import Share from 'models/Share'; @@ -15,16 +15,18 @@ type Props = { label?: React.Node, onOpen?: () => *, onClose: () => *, - history: Object, shares: SharesStore, ui: UiStore, share: Share, }; +@observer class ShareMenu extends React.Component { + @observable redirectTo: ?string; + handleGoToDocument = (ev: SyntheticEvent<*>) => { ev.preventDefault(); - this.props.history.push(this.props.share.documentUrl); + this.redirectTo = this.props.share.documentUrl; }; handleRevoke = (ev: SyntheticEvent<*>) => { @@ -38,6 +40,8 @@ class ShareMenu extends React.Component { }; render() { + if (this.redirectTo) return ; + const { share, label, onOpen, onClose } = this.props; return ( @@ -61,4 +65,4 @@ class ShareMenu extends React.Component { } } -export default withRouter(inject('shares', 'ui')(ShareMenu)); +export default inject('shares', 'ui')(ShareMenu); diff --git a/app/scenes/Collection.js b/app/scenes/Collection.js index 526bb43db..dfe2c0078 100644 --- a/app/scenes/Collection.js +++ b/app/scenes/Collection.js @@ -2,7 +2,7 @@ import * as React from 'react'; import { observable } from 'mobx'; import { observer, inject } from 'mobx-react'; -import { withRouter, Link, Switch, Route } from 'react-router-dom'; +import { Redirect, Link, Switch, Route } from 'react-router-dom'; import styled from 'styled-components'; import { @@ -42,7 +42,6 @@ type Props = { ui: UiStore, documents: DocumentsStore, collections: CollectionsStore, - history: Object, match: Object, }; @@ -51,6 +50,7 @@ class CollectionScene extends React.Component { @observable collection: ?Collection; @observable isFetching: boolean = true; @observable permissionsModalOpen: boolean = false; + @observable redirectTo: ?string; componentDidMount() { this.loadContent(this.props.match.params.id); @@ -85,7 +85,7 @@ class CollectionScene extends React.Component { ev.preventDefault(); if (this.collection) { - this.props.history.push(`${this.collection.url}/new`); + this.redirectTo = `${this.collection.url}/new`; } }; @@ -102,10 +102,7 @@ class CollectionScene extends React.Component { return ( - + @@ -117,16 +114,11 @@ class CollectionScene extends React.Component { ); } - renderNotFound() { - return ; - } - render() { const { documents } = this.props; - if (!this.isFetching && !this.collection) { - return this.renderNotFound(); - } + if (this.redirectTo) return ; + if (!this.isFetching && !this.collection) return ; const pinnedDocuments = this.collection ? documents.pinnedInCollection(this.collection.id) @@ -296,6 +288,4 @@ const Wrapper = styled(Flex)` margin: 10px 0; `; -export default withRouter( - inject('collections', 'documents', 'ui')(CollectionScene) -); +export default inject('collections', 'documents', 'ui')(CollectionScene); diff --git a/app/scenes/Document/Document.js b/app/scenes/Document/Document.js index 9f6d49364..c13cb5eb1 100644 --- a/app/scenes/Document/Document.js +++ b/app/scenes/Document/Document.js @@ -376,7 +376,6 @@ class DocumentScene extends React.Component { onCancel={this.onDiscard} readOnly={!this.isEditing} toc={!revision} - history={this.props.history} ui={this.props.ui} schema={schema} /> From 77a8f54973535f25c74d11a53bca4bad3dd3d4d0 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 19 Jan 2019 00:44:16 -0800 Subject: [PATCH 017/237] Even less history passing, fix global styles warning in dev --- app/components/DropToImport.js | 29 +++++++++---------- app/components/Layout.js | 2 ++ .../Sidebar/components/CollectionLink.js | 11 +------ .../Sidebar/components/DocumentLink.js | 9 +----- app/scenes/Document/Document.js | 1 - app/scenes/Document/components/Header.js | 7 +++-- 6 files changed, 23 insertions(+), 36 deletions(-) diff --git a/app/components/DropToImport.js b/app/components/DropToImport.js index d5dcf5503..2d6693466 100644 --- a/app/components/DropToImport.js +++ b/app/components/DropToImport.js @@ -2,8 +2,8 @@ import * as React from 'react'; import { observable } from 'mobx'; import { observer, inject } from 'mobx-react'; +import { Redirect } from 'react-router-dom'; import { createGlobalStyle } from 'styled-components'; -import { omit } from 'lodash'; import invariant from 'invariant'; import importFile from 'utils/importFile'; import Dropzone from 'react-dropzone'; @@ -18,11 +18,11 @@ type Props = { rejectClassName?: string, documents: DocumentsStore, disabled: boolean, - history: Object, }; -const GlobalStyles = createGlobalStyle` +export const GlobalStyles = createGlobalStyle` .activeDropZone { + border-radius: 4px; background: ${props => props.theme.slateDark}; svg { fill: ${props => props.theme.white}; } } @@ -35,6 +35,7 @@ const GlobalStyles = createGlobalStyle` @observer class DropToImport extends React.Component { @observable isImporting: boolean = false; + @observable redirectTo: ?string; onDropAccepted = async (files = []) => { this.isImporting = true; @@ -59,7 +60,7 @@ class DropToImport extends React.Component { }); if (redirect) { - this.props.history.push(doc.url); + this.redirectTo = doc.url; } } } finally { @@ -68,16 +69,15 @@ class DropToImport extends React.Component { }; render() { - const props = omit( - this.props, - 'history', - 'documentId', - 'collectionId', - 'documents', - 'disabled', - 'menuOpen' - ); + const { + documentId, + collectionId, + documents, + disabled, + ...rest + } = this.props; + if (this.redirectTo) return ; if (this.props.disabled) return this.props.children; return ( @@ -88,9 +88,8 @@ class DropToImport extends React.Component { disableClick disablePreview multiple - {...props} + {...rest} > - {this.isImporting && } {this.props.children} diff --git a/app/components/Layout.js b/app/components/Layout.js index 45ae4c43f..afd724417 100644 --- a/app/components/Layout.js +++ b/app/components/Layout.js @@ -12,6 +12,7 @@ import Flex from 'shared/components/Flex'; import { documentEditUrl, homeUrl, searchUrl } from 'utils/routeHelpers'; import { LoadingIndicatorBar } from 'components/LoadingIndicator'; +import { GlobalStyles } from 'components/DropToImport'; import Sidebar from 'components/Sidebar'; import SettingsSidebar from 'components/Sidebar/Settings'; import Modals from 'components/Modals'; @@ -103,6 +104,7 @@ class Layout extends React.Component { +
    ); } diff --git a/app/components/Sidebar/components/CollectionLink.js b/app/components/Sidebar/components/CollectionLink.js index f4d322eb9..560e1d828 100644 --- a/app/components/Sidebar/components/CollectionLink.js +++ b/app/components/Sidebar/components/CollectionLink.js @@ -13,7 +13,6 @@ import DropToImport from 'components/DropToImport'; import Flex from 'shared/components/Flex'; type Props = { - history: Object, collection: Collection, ui: UiStore, activeDocument: ?Document, @@ -25,19 +24,12 @@ class CollectionLink extends React.Component { @observable menuOpen = false; render() { - const { - history, - collection, - activeDocument, - prefetchDocument, - ui, - } = this.props; + const { collection, activeDocument, prefetchDocument, ui } = this.props; const expanded = collection.id === ui.activeCollectionId; return ( @@ -72,7 +64,6 @@ class CollectionLink extends React.Component { {collection.documents.map(document => ( *, prefetchDocument: (documentId: string) => Promise, @@ -34,7 +33,6 @@ class DocumentLink extends React.Component { activeDocumentRef, prefetchDocument, depth, - history, } = this.props; const isActiveDocument = @@ -55,11 +53,7 @@ class DocumentLink extends React.Component { ref={isActiveDocument ? activeDocumentRef : undefined} onMouseEnter={this.handleMouseEnter} > - + { {document.children.map(childDocument => ( { isSaving={this.isSaving} isPublishing={this.isPublishing} savingIsDisabled={!document.allowSave} - history={this.props.history} onDiscard={this.onDiscard} onSave={this.onSave} /> diff --git a/app/scenes/Document/components/Header.js b/app/scenes/Document/components/Header.js index 83229d906..8996012d6 100644 --- a/app/scenes/Document/components/Header.js +++ b/app/scenes/Document/components/Header.js @@ -3,6 +3,7 @@ import * as React from 'react'; import { throttle } from 'lodash'; import { observable } from 'mobx'; import { observer, inject } from 'mobx-react'; +import { Redirect } from 'react-router-dom'; import styled from 'styled-components'; import breakpoint from 'styled-components-breakpoint'; import { NewDocumentIcon } from 'outline-icons'; @@ -33,7 +34,6 @@ type Props = { publish?: boolean, autosave?: boolean, }) => *, - history: Object, auth: AuthStore, }; @@ -41,6 +41,7 @@ type Props = { class Header extends React.Component { @observable isScrolled = false; @observable showShareModal = false; + @observable redirectTo: ?string; componentDidMount() { window.addEventListener('scroll', this.handleScroll); @@ -57,7 +58,7 @@ class Header extends React.Component { handleScroll = throttle(this.updateIsScrolled, 50); handleEdit = () => { - this.props.history.push(documentEditUrl(this.props.document)); + this.redirectTo = documentEditUrl(this.props.document); }; handleSave = () => { @@ -86,6 +87,8 @@ class Header extends React.Component { }; render() { + if (this.redirectTo) return ; + const { document, isEditing, From 72d8abe06917e634646d94d3eb8f7387d44090c1 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 19 Jan 2019 00:51:25 -0800 Subject: [PATCH 018/237] Canonical check --- app/scenes/Document/Document.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/app/scenes/Document/Document.js b/app/scenes/Document/Document.js index fc4ae0d34..c9c3b46ce 100644 --- a/app/scenes/Document/Document.js +++ b/app/scenes/Document/Document.js @@ -167,10 +167,13 @@ class DocumentScene extends React.Component { } if (!this.revision) { - // Update url to match the current one - this.props.history.replace( - updateDocumentUrl(props.match.url, document.url) + const canonicalUrl = updateDocumentUrl( + props.match.url, + document.url ); + if (this.props.location !== canonicalUrl) { + this.props.history.replace(canonicalUrl); + } } } } else { From bfd32843fff1b3564bf5d5ffe762d545e239c4ad Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 19 Jan 2019 01:31:34 -0800 Subject: [PATCH 019/237] Added caching of loaded editor instance --- app/menus/AccountMenu.js | 4 ++++ app/menus/CollectionMenu.js | 4 ++++ app/menus/DocumentMenu.js | 4 ++++ app/menus/NewChildDocumentMenu.js | 4 ++++ app/menus/NewDocumentMenu.js | 4 ++++ app/menus/ShareMenu.js | 4 ++++ app/scenes/Document/Document.js | 10 +++++++--- 7 files changed, 31 insertions(+), 3 deletions(-) diff --git a/app/menus/AccountMenu.js b/app/menus/AccountMenu.js index bbf86d795..ad3cda0b7 100644 --- a/app/menus/AccountMenu.js +++ b/app/menus/AccountMenu.js @@ -24,6 +24,10 @@ type Props = { class AccountMenu extends React.Component { @observable redirectTo: ?string; + componentDidUpdate() { + this.redirectTo = undefined; + } + handleOpenKeyboardShortcuts = () => { this.props.ui.setActiveModal('keyboard-shortcuts'); }; diff --git a/app/menus/CollectionMenu.js b/app/menus/CollectionMenu.js index 5e843155e..86d8e7a5c 100644 --- a/app/menus/CollectionMenu.js +++ b/app/menus/CollectionMenu.js @@ -30,6 +30,10 @@ class CollectionMenu extends React.Component { @observable permissionsModalOpen: boolean = false; @observable redirectTo: ?string; + componentDidUpdate() { + this.redirectTo = undefined; + } + onNewDocument = (ev: SyntheticEvent<*>) => { ev.preventDefault(); const { collection } = this.props; diff --git a/app/menus/DocumentMenu.js b/app/menus/DocumentMenu.js index ad396d46a..ea66b0206 100644 --- a/app/menus/DocumentMenu.js +++ b/app/menus/DocumentMenu.js @@ -25,6 +25,10 @@ type Props = { class DocumentMenu extends React.Component { @observable redirectTo: ?string; + componentDidUpdate() { + this.redirectTo = undefined; + } + handleNewChild = (ev: SyntheticEvent<*>) => { const { document } = this.props; this.redirectTo = `${document.collection.url}/new?parentDocument=${ diff --git a/app/menus/NewChildDocumentMenu.js b/app/menus/NewChildDocumentMenu.js index f9f75c3c6..f7ca9e1fb 100644 --- a/app/menus/NewChildDocumentMenu.js +++ b/app/menus/NewChildDocumentMenu.js @@ -18,6 +18,10 @@ type Props = { class NewChildDocumentMenu extends React.Component { @observable redirectTo: ?string; + componentDidUpdate() { + this.redirectTo = undefined; + } + handleNewDocument = () => { this.redirectTo = newDocumentUrl(this.props.document.collection); }; diff --git a/app/menus/NewDocumentMenu.js b/app/menus/NewDocumentMenu.js index ed568323d..d39a3e50b 100644 --- a/app/menus/NewDocumentMenu.js +++ b/app/menus/NewDocumentMenu.js @@ -18,6 +18,10 @@ type Props = { class NewDocumentMenu extends React.Component { @observable redirectTo: ?string; + componentDidUpdate() { + this.redirectTo = undefined; + } + handleNewDocument = collection => { this.redirectTo = newDocumentUrl(collection); }; diff --git a/app/menus/ShareMenu.js b/app/menus/ShareMenu.js index 114abc033..fb78e7614 100644 --- a/app/menus/ShareMenu.js +++ b/app/menus/ShareMenu.js @@ -24,6 +24,10 @@ type Props = { class ShareMenu extends React.Component { @observable redirectTo: ?string; + componentDidUpdate() { + this.redirectTo = undefined; + } + handleGoToDocument = (ev: SyntheticEvent<*>) => { ev.preventDefault(); this.redirectTo = this.props.share.documentUrl; diff --git a/app/scenes/Document/Document.js b/app/scenes/Document/Document.js index c9c3b46ce..0717c26c6 100644 --- a/app/scenes/Document/Document.js +++ b/app/scenes/Document/Document.js @@ -41,6 +41,7 @@ import Revision from 'models/Revision'; import schema from './schema'; +let EditorImport; const AUTOSAVE_DELAY = 3000; const IS_DIRTY_DELAY = 500; const MARK_AS_VIEWED_AFTER = 3000; @@ -69,7 +70,7 @@ class DocumentScene extends React.Component { viewTimeout: TimeoutID; getEditorText: () => string; - @observable editorComponent; + @observable editorComponent = EditorImport; @observable document: ?Document; @observable revision: ?Revision; @observable newDocument: ?Document; @@ -184,8 +185,11 @@ class DocumentScene extends React.Component { }; loadEditor = async () => { - const EditorImport = await import('./components/Editor'); - this.editorComponent = EditorImport.default; + if (this.editorComponent) return; + + const Imported = await import('./components/Editor'); + EditorImport = Imported.default; + this.editorComponent = EditorImport; }; get isEditing() { From 258b5464a2ac1028b884aa3bffc81c9947b545c3 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 19 Jan 2019 01:52:43 -0800 Subject: [PATCH 020/237] Boop --- app/scenes/Document/Document.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/scenes/Document/Document.js b/app/scenes/Document/Document.js index 0717c26c6..a62e2d330 100644 --- a/app/scenes/Document/Document.js +++ b/app/scenes/Document/Document.js @@ -172,7 +172,7 @@ class DocumentScene extends React.Component { props.match.url, document.url ); - if (this.props.location !== canonicalUrl) { + if (this.props.location.pathname !== canonicalUrl) { this.props.history.replace(canonicalUrl); } } From 2d48eb46a9b72a47a09ff103f0ae00d36addf1b6 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 19 Jan 2019 13:11:11 -0800 Subject: [PATCH 021/237] Closes #868 --- app/components/TipInvite.js | 4 +++- package.json | 4 ++-- yarn.lock | 42 ++++++++++++++++++++++++------------- 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/app/components/TipInvite.js b/app/components/TipInvite.js index d0875d249..a08eaa761 100644 --- a/app/components/TipInvite.js +++ b/app/components/TipInvite.js @@ -9,6 +9,7 @@ import Team from '../models/Team'; type Props = { team: Team, + disabled: boolean, }; @observer @@ -20,7 +21,8 @@ class TipInvite extends React.Component { }; render() { - const { team } = this.props; + const { team, disabled } = this.props; + if (disabled) return null; return ( diff --git a/package.json b/package.json index 9ecc7aa2d..184a3e826 100644 --- a/package.json +++ b/package.json @@ -157,7 +157,7 @@ "react-waypoint": "^7.3.1", "redis": "^2.6.2", "redis-lock": "^0.1.0", - "rich-markdown-editor": "^8.0.0", + "rich-markdown-editor": "^8.0.2", "safestart": "1.1.0", "sequelize": "4.28.6", "sequelize-cli": "^2.7.0", @@ -166,7 +166,7 @@ "string-hash": "^1.1.0", "string-replace-to-array": "^1.0.3", "style-loader": "^0.18.2", - "styled-components": "4.0.3", + "styled-components": "^4.1.3", "styled-components-breakpoint": "^1.0.1", "styled-components-grid": "^2.2.0", "styled-normalize": "^2.2.1", diff --git a/yarn.lock b/yarn.lock index aebec2045..39f0d6310 100644 --- a/yarn.lock +++ b/yarn.lock @@ -39,6 +39,12 @@ dependencies: "@babel/types" "7.0.0-beta.31" +"@babel/helper-module-imports@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" + dependencies: + "@babel/types" "^7.0.0" + "@babel/template@7.0.0-beta.31": version "7.0.0-beta.31" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.31.tgz#577bb29389f6c497c3e7d014617e7d6713f68bda" @@ -77,15 +83,19 @@ lodash "^4.17.10" to-fast-properties "^2.0.0" -"@emotion/is-prop-valid@^0.6.8": - version "0.6.8" - resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.6.8.tgz#68ad02831da41213a2089d2cab4e8ac8b30cbd85" +"@emotion/is-prop-valid@^0.7.3": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.7.3.tgz#a6bf4fa5387cbba59d44e698a4680f481a8da6cc" dependencies: - "@emotion/memoize" "^0.6.6" + "@emotion/memoize" "0.7.1" -"@emotion/memoize@^0.6.6": - version "0.6.6" - resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.6.6.tgz#004b98298d04c7ca3b4f50ca2035d4f60d2eed1b" +"@emotion/memoize@0.7.1": + version "0.7.1" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.1.tgz#e93c13942592cf5ef01aa8297444dc192beee52f" + +"@emotion/unitless@^0.7.0": + version "0.7.3" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.3.tgz#6310a047f12d21a1036fb031317219892440416f" "@tommoor/remove-markdown@0.3.1": version "0.3.1" @@ -8803,9 +8813,9 @@ retry-axios@0.3.2, retry-axios@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-0.3.2.tgz#5757c80f585b4cc4c4986aa2ffd47a60c6d35e13" -rich-markdown-editor@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-8.0.0.tgz#d11a7b81e819bcef1680b60359b8761baeadbb01" +rich-markdown-editor@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-8.0.2.tgz#b642d8c85794eca1df4e6026b2c07f66eb7445ad" dependencies: "@wikifactory/slate-edit-blockquote" "^0.7.1" "@wikifactory/slate-edit-code" "^0.16.0" @@ -8836,7 +8846,7 @@ rich-markdown-editor@^8.0.0: slate-react "^0.21.15" slate-schema-violations "^0.1.39" slugify "^1.3.0" - styled-components "4.0.3" + styled-components "^4.1.3" right-align@^0.1.1: version "0.1.3" @@ -9637,11 +9647,13 @@ styled-components-grid@^2.2.0: react-create-component-from-tag-prop "^1.4.0" styled-components-breakpoint "^2.0.2" -styled-components@4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-4.0.3.tgz#6c1a95a93857aa613fdfc26ad40899217100d8c3" +styled-components@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-4.1.3.tgz#4472447208e618b57e84deaaeb6acd34a5e0fe9b" dependencies: - "@emotion/is-prop-valid" "^0.6.8" + "@babel/helper-module-imports" "^7.0.0" + "@emotion/is-prop-valid" "^0.7.3" + "@emotion/unitless" "^0.7.0" babel-plugin-styled-components ">= 1" css-to-react-native "^2.2.2" memoize-one "^4.0.0" From babcf4a3f3edb54ace7827befd4842722184c9c8 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 19 Jan 2019 15:25:46 -0800 Subject: [PATCH 022/237] More withRouter removal --- .../Sidebar/components/Collections.js | 12 ++------ app/routes.js | 11 ++++--- app/scenes/Document/Document.js | 30 ++++++------------- app/scenes/Search/Search.js | 3 +- 4 files changed, 19 insertions(+), 37 deletions(-) diff --git a/app/components/Sidebar/components/Collections.js b/app/components/Sidebar/components/Collections.js index 138291df1..a0205511e 100644 --- a/app/components/Sidebar/components/Collections.js +++ b/app/components/Sidebar/components/Collections.js @@ -1,8 +1,6 @@ // @flow import * as React from 'react'; import { observer, inject } from 'mobx-react'; -import { withRouter } from 'react-router-dom'; -import type { Location } from 'react-router-dom'; import Flex from 'shared/components/Flex'; import { PlusIcon } from 'outline-icons'; @@ -16,8 +14,6 @@ import UiStore from 'stores/UiStore'; import DocumentsStore from 'stores/DocumentsStore'; type Props = { - history: Object, - location: Location, collections: CollectionsStore, documents: DocumentsStore, onCreateCollection: () => void, @@ -33,15 +29,13 @@ class Collections extends React.Component { } render() { - const { history, location, collections, ui, documents } = this.props; + const { collections, ui, documents } = this.props; const content = (
    Collections
    {collections.orderedData.map(collection => ( { } } -export default inject('collections', 'ui', 'documents')( - withRouter(Collections) -); +export default inject('collections', 'ui', 'documents')(Collections); diff --git a/app/routes.js b/app/routes.js index 55a4d7166..6beb6bfa9 100644 --- a/app/routes.js +++ b/app/routes.js @@ -31,12 +31,15 @@ const DocumentNew = () => ; const RedirectDocument = ({ match }: { match: Object }) => ( ); +const RemountDocument = props => ( + +); export default function Routes() { return ( - + @@ -79,14 +82,14 @@ export default function Routes() { - + diff --git a/app/scenes/Document/Document.js b/app/scenes/Document/Document.js index a62e2d330..d3deb1a6b 100644 --- a/app/scenes/Document/Document.js +++ b/app/scenes/Document/Document.js @@ -5,7 +5,7 @@ import styled from 'styled-components'; import breakpoint from 'styled-components-breakpoint'; import { observable } from 'mobx'; import { observer, inject } from 'mobx-react'; -import { withRouter, Prompt, Route } from 'react-router-dom'; +import { Prompt, Route } from 'react-router-dom'; import type { Location } from 'react-router-dom'; import keydown from 'react-keydown'; import Flex from 'shared/components/Flex'; @@ -74,11 +74,11 @@ class DocumentScene extends React.Component { @observable document: ?Document; @observable revision: ?Revision; @observable newDocument: ?Document; - @observable isUploading = false; - @observable isSaving = false; - @observable isPublishing = false; - @observable isDirty = false; - @observable notFound = false; + @observable isUploading: boolean = false; + @observable isSaving: boolean = false; + @observable isPublishing: boolean = false; + @observable isDirty: boolean = false; + @observable notFound: boolean = false; @observable moveModalOpen: boolean = false; componentDidMount() { @@ -86,18 +86,6 @@ class DocumentScene extends React.Component { this.loadEditor(); } - componentWillReceiveProps(nextProps) { - if ( - nextProps.match.params.documentSlug !== - this.props.match.params.documentSlug || - this.props.match.params.revisionId !== nextProps.match.params.revisionId - ) { - this.notFound = false; - clearTimeout(this.viewTimeout); - this.loadDocument(nextProps); - } - } - componentWillUnmount() { clearTimeout(this.viewTimeout); this.props.ui.clearActiveDocument(); @@ -284,6 +272,8 @@ class DocumentScene extends React.Component { }; render() { + console.log('render', this.props); + const { location, auth, match } = this.props; const team = auth.team; const Editor = this.editorComponent; @@ -421,6 +411,4 @@ const LoadingState = styled(LoadingPlaceholder)` margin: 40px 0; `; -export default withRouter( - inject('ui', 'auth', 'documents', 'revisions')(DocumentScene) -); +export default inject('ui', 'auth', 'documents', 'revisions')(DocumentScene); diff --git a/app/scenes/Search/Search.js b/app/scenes/Search/Search.js index 3c9317cfc..668bce3c9 100644 --- a/app/scenes/Search/Search.js +++ b/app/scenes/Search/Search.js @@ -6,7 +6,6 @@ import Waypoint from 'react-waypoint'; import { observable, action } from 'mobx'; import { observer, inject } from 'mobx-react'; import { debounce } from 'lodash'; -import { withRouter } from 'react-router-dom'; import styled from 'styled-components'; import ArrowKeyNavigation from 'boundless-arrow-key-navigation'; @@ -217,4 +216,4 @@ class Search extends React.Component { } } -export default withRouter(inject('documents')(Search)); +export default inject('documents')(Search); From 5525730272d19475ad338dc1b3ee589144bc170f Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 19 Jan 2019 17:28:32 -0800 Subject: [PATCH 023/237] Refactor history sidebar, reduce thrashing on doc render --- .../DocumentHistory/DocumentHistory.js | 46 +++++++++++-------- app/components/Layout.js | 23 ++++++++-- .../Sidebar/components/DocumentLink.js | 1 + app/scenes/Document/Document.js | 23 ++++------ app/scenes/Settings/Notifications.js | 4 +- app/stores/RevisionsStore.js | 1 + 6 files changed, 58 insertions(+), 40 deletions(-) diff --git a/app/components/DocumentHistory/DocumentHistory.js b/app/components/DocumentHistory/DocumentHistory.js index 5d0e0f7ef..82cd35047 100644 --- a/app/components/DocumentHistory/DocumentHistory.js +++ b/app/components/DocumentHistory/DocumentHistory.js @@ -1,6 +1,5 @@ // @flow import * as React from 'react'; -import { withRouter } from 'react-router-dom'; import { observable, action } from 'mobx'; import { observer, inject } from 'mobx-react'; import styled from 'styled-components'; @@ -8,8 +7,9 @@ import Waypoint from 'react-waypoint'; import ArrowKeyNavigation from 'boundless-arrow-key-navigation'; import { DEFAULT_PAGINATION_LIMIT } from 'stores/BaseStore'; -import Document from 'models/Document'; +import DocumentsStore from 'stores/DocumentsStore'; import RevisionsStore from 'stores/RevisionsStore'; +import Document from 'models/Document'; import Flex from 'shared/components/Flex'; import { ListPlaceholder } from 'components/LoadingPlaceholder'; @@ -18,9 +18,8 @@ import { documentHistoryUrl } from 'utils/routeHelpers'; type Props = { match: Object, - document: Document, + documents: DocumentsStore, revisions: RevisionsStore, - revision?: Object, history: Object, }; @@ -30,13 +29,29 @@ class DocumentHistory extends React.Component { @observable isFetching: boolean = false; @observable offset: number = 0; @observable allowLoadMore: boolean = true; + @observable document: Document; + + constructor(props) { + super(); + this.document = props.documents.getByUrl(props.match.params.documentSlug); + } async componentDidMount() { - this.selectFirstRevision(); await this.loadMoreResults(); this.selectFirstRevision(); } + async componentWillReceiveProps(nextProps) { + const document = nextProps.documents.getByUrl( + nextProps.match.params.documentSlug + ); + if (!this.document && document) { + this.document = document; + await this.loadMoreResults(); + this.selectFirstRevision(); + } + } + fetchResults = async () => { this.isFetching = true; @@ -44,7 +59,7 @@ class DocumentHistory extends React.Component { const results = await this.props.revisions.fetchPage({ limit, offset: this.offset, - id: this.props.document.id, + id: this.document.id, }); if ( @@ -61,10 +76,9 @@ class DocumentHistory extends React.Component { }; selectFirstRevision = () => { - const revisions = this.revisions; - if (revisions.length && !this.props.revision) { + if (this.revisions.length) { this.props.history.replace( - documentHistoryUrl(this.props.document, this.revisions[0].id) + documentHistoryUrl(this.document, this.revisions[0].id) ); } }; @@ -72,12 +86,13 @@ class DocumentHistory extends React.Component { @action loadMoreResults = async () => { // Don't paginate if there aren't more results or we’re in the middle of fetching - if (!this.allowLoadMore || this.isFetching) return; + if (!this.allowLoadMore || this.isFetching || !this.document) return; await this.fetchResults(); }; get revisions() { - return this.props.revisions.getDocumentRevisions(this.props.document.id); + if (!this.document) return []; + return this.props.revisions.getDocumentRevisions(this.document.id); } render() { @@ -98,7 +113,7 @@ class DocumentHistory extends React.Component { ))} @@ -117,15 +132,10 @@ const Loading = styled.div` `; const Wrapper = styled(Flex)` - position: fixed; - top: 0; - right: 0; - bottom: 0; - min-width: ${props => props.theme.sidebarWidth}; border-left: 1px solid ${props => props.theme.slateLight}; overflow: scroll; overscroll-behavior: none; `; -export default withRouter(inject('revisions')(DocumentHistory)); +export default inject('documents', 'revisions')(DocumentHistory); diff --git a/app/components/Layout.js b/app/components/Layout.js index afd724417..c5af87ee7 100644 --- a/app/components/Layout.js +++ b/app/components/Layout.js @@ -9,13 +9,19 @@ import { observer, inject } from 'mobx-react'; import keydown from 'react-keydown'; import Analytics from 'components/Analytics'; import Flex from 'shared/components/Flex'; -import { documentEditUrl, homeUrl, searchUrl } from 'utils/routeHelpers'; +import { + documentEditUrl, + homeUrl, + searchUrl, + matchDocumentSlug as slug, +} from 'utils/routeHelpers'; import { LoadingIndicatorBar } from 'components/LoadingIndicator'; import { GlobalStyles } from 'components/DropToImport'; import Sidebar from 'components/Sidebar'; import SettingsSidebar from 'components/Sidebar/Settings'; import Modals from 'components/Modals'; +import DocumentHistory from 'components/DocumentHistory'; import ErrorSuspended from 'scenes/ErrorSuspended'; import AuthStore from 'stores/AuthStore'; import UiStore from 'stores/UiStore'; @@ -91,7 +97,7 @@ class Layout extends React.Component { {this.props.ui.progressBarVisible && } {this.props.notifications} - + {showSidebar && ( @@ -102,7 +108,14 @@ class Layout extends React.Component { {this.props.children} - + + + + + @@ -112,8 +125,8 @@ class Layout extends React.Component { const Container = styled(Flex)` position: relative; - width: 100%; - height: 100%; + width: 100vw; + min-height: 100%; `; const Content = styled(Flex)` diff --git a/app/components/Sidebar/components/DocumentLink.js b/app/components/Sidebar/components/DocumentLink.js index 7ae36caf3..0838888af 100644 --- a/app/components/Sidebar/components/DocumentLink.js +++ b/app/components/Sidebar/components/DocumentLink.js @@ -62,6 +62,7 @@ class DocumentLink extends React.Component { expanded={showChildren} label={document.title} depth={depth} + exact={false} > {hasChildren && ( diff --git a/app/scenes/Document/Document.js b/app/scenes/Document/Document.js index d3deb1a6b..d383070e7 100644 --- a/app/scenes/Document/Document.js +++ b/app/scenes/Document/Document.js @@ -23,7 +23,6 @@ import Header from './components/Header'; import DocumentMove from './components/DocumentMove'; import Branding from './components/Branding'; import ErrorBoundary from 'components/ErrorBoundary'; -import DocumentHistory from 'components/DocumentHistory'; import LoadingPlaceholder from 'components/LoadingPlaceholder'; import LoadingIndicator from 'components/LoadingIndicator'; import CenteredContent from 'components/CenteredContent'; @@ -81,8 +80,10 @@ class DocumentScene extends React.Component { @observable notFound: boolean = false; @observable moveModalOpen: boolean = false; - componentDidMount() { - this.loadDocument(this.props); + constructor(props) { + super(); + this.document = props.documents.getByUrl(props.match.params.documentSlug); + this.loadDocument(props); this.loadEditor(); } @@ -129,13 +130,13 @@ class DocumentScene extends React.Component { } else { const { shareId, revisionId } = props.match.params; - this.document = await this.props.documents.fetch( + this.document = await props.documents.fetch( props.match.params.documentSlug, { shareId } ); if (revisionId) { - this.revision = await this.props.revisions.fetch( + this.revision = await props.revisions.fetch( props.match.params.documentSlug, { revisionId } ); @@ -160,8 +161,8 @@ class DocumentScene extends React.Component { props.match.url, document.url ); - if (this.props.location.pathname !== canonicalUrl) { - this.props.history.replace(canonicalUrl); + if (props.location.pathname !== canonicalUrl) { + props.history.replace(canonicalUrl); } } } @@ -272,15 +273,12 @@ class DocumentScene extends React.Component { }; render() { - console.log('render', this.props); - const { location, auth, match } = this.props; const team = auth.team; const Editor = this.editorComponent; const document = this.document; const revision = this.revision; const isShare = match.params.shareId; - const isHistory = match.url.match(/\/history(\/|$)/); // Can't match on history alone as that can be in the user-generated slug if (this.notFound) { return navigator.onLine ? ( @@ -313,7 +311,6 @@ class DocumentScene extends React.Component { {
    - {isHistory && ( - - )} {isShare && } ); @@ -404,7 +398,6 @@ const MaxWidth = styled(Flex)` const Container = styled(Flex)` position: relative; margin-top: ${props => (props.isShare ? '50px' : '0')}; - margin-right: ${props => (props.sidebar ? props.theme.sidebarWidth : 0)}; `; const LoadingState = styled(LoadingPlaceholder)` diff --git a/app/scenes/Settings/Notifications.js b/app/scenes/Settings/Notifications.js index 694151f20..8eeea3bfc 100644 --- a/app/scenes/Settings/Notifications.js +++ b/app/scenes/Settings/Notifications.js @@ -93,8 +93,8 @@ class Notifications extends React.Component { Manage when you receive email notifications from Outline. - {options.map(option => { - if (option.separator) return ; + {options.map((option, index) => { + if (option.separator) return ; const setting = notificationSettings.getByEvent(option.event); diff --git a/app/stores/RevisionsStore.js b/app/stores/RevisionsStore.js index 44f82eb68..c432b927a 100644 --- a/app/stores/RevisionsStore.js +++ b/app/stores/RevisionsStore.js @@ -63,6 +63,7 @@ export default class RevisionsStore extends BaseStore { }); this.isLoaded = true; }); + return res.data; } finally { this.isFetching = false; } From 4f4e55d120a74cb0e36e6ebfbdf80efaf339f601 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 19 Jan 2019 18:14:10 -0800 Subject: [PATCH 024/237] Fixes: New document creation --- app/scenes/Document/Document.js | 8 +++++--- app/scenes/Document/components/Editor.js | 2 +- app/scenes/Search/Search.js | 3 ++- app/stores/DocumentsStore.js | 2 +- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/app/scenes/Document/Document.js b/app/scenes/Document/Document.js index d383070e7..816ba88ad 100644 --- a/app/scenes/Document/Document.js +++ b/app/scenes/Document/Document.js @@ -5,7 +5,7 @@ import styled from 'styled-components'; import breakpoint from 'styled-components-breakpoint'; import { observable } from 'mobx'; import { observer, inject } from 'mobx-react'; -import { Prompt, Route } from 'react-router-dom'; +import { Prompt, Route, withRouter } from 'react-router-dom'; import type { Location } from 'react-router-dom'; import keydown from 'react-keydown'; import Flex from 'shared/components/Flex'; @@ -125,7 +125,7 @@ class DocumentScene extends React.Component { title: '', text: '', }, - this.props.documents + props.documents ); } else { const { shareId, revisionId } = props.match.params; @@ -404,4 +404,6 @@ const LoadingState = styled(LoadingPlaceholder)` margin: 40px 0; `; -export default inject('ui', 'auth', 'documents', 'revisions')(DocumentScene); +export default withRouter( + inject('ui', 'auth', 'documents', 'revisions')(DocumentScene) +); diff --git a/app/scenes/Document/components/Editor.js b/app/scenes/Document/components/Editor.js index bc4a1cbd6..980c1e7a0 100644 --- a/app/scenes/Document/components/Editor.js +++ b/app/scenes/Document/components/Editor.js @@ -16,7 +16,7 @@ class DocumentEditor extends React.Component { componentDidMount() { if (!this.props.defaultValue) { - this.focusAtStart(); + setImmediate(this.focusAtStart); } } diff --git a/app/scenes/Search/Search.js b/app/scenes/Search/Search.js index 668bce3c9..05be17a78 100644 --- a/app/scenes/Search/Search.js +++ b/app/scenes/Search/Search.js @@ -3,6 +3,7 @@ import * as React from 'react'; import ReactDOM from 'react-dom'; import keydown from 'react-keydown'; import Waypoint from 'react-waypoint'; +import { withRouter } from 'react-router-dom'; import { observable, action } from 'mobx'; import { observer, inject } from 'mobx-react'; import { debounce } from 'lodash'; @@ -216,4 +217,4 @@ class Search extends React.Component { } } -export default inject('documents')(Search); +export default withRouter(inject('documents')(Search)); diff --git a/app/stores/DocumentsStore.js b/app/stores/DocumentsStore.js index dd74d4ff6..e9ac95130 100644 --- a/app/stores/DocumentsStore.js +++ b/app/stores/DocumentsStore.js @@ -358,7 +358,7 @@ export default class DocumentsStore extends BaseStore { return client.post('/documents.unstar', { id: document.id }); }; - getByUrl = (url: string): ?Document => { + getByUrl = (url: string = ''): ?Document => { return find(Array.from(this.data.values()), doc => url.endsWith(doc.urlId)); }; From 39a61d8559df5e4e951ea7b2fa375629fdaa2600 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Mon, 21 Jan 2019 11:06:44 -0800 Subject: [PATCH 025/237] Upgrade Dependencies (#873) * Loading placeholder * Upgrade dependencies, reduce warnings * :shirt: * Remove more unused deps * Bump RME --- .eslintrc | 6 + app/components/Editor/Embed.js | 4 +- app/scenes/Collection.js | 1 + app/scenes/CollectionEdit.js | 1 + app/scenes/Document/Document.js | 1 + package.json | 33 +- server/static/dev.html | 46 +- server/static/index.html | 13 +- setupJest.js | 9 - yarn.lock | 1218 ++++++++++++------------------- 10 files changed, 549 insertions(+), 783 deletions(-) diff --git a/.eslintrc b/.eslintrc index d61824f00..392f01274 100644 --- a/.eslintrc +++ b/.eslintrc @@ -30,6 +30,12 @@ ] }, "settings": { + "react": { + "createClass": "createReactClass", + "pragma": "React", + "version": "detect", + "flowVersion": "0.86" + }, "import/resolver": { "node": { "paths": ["app", "."] diff --git a/app/components/Editor/Embed.js b/app/components/Editor/Embed.js index 74558adbc..2e4bb7299 100644 --- a/app/components/Editor/Embed.js +++ b/app/components/Editor/Embed.js @@ -9,7 +9,7 @@ export default class Embed extends React.Component<*> { return this.props.node.data.get('href'); } - get matches(): ?{ component: *, matches: string[] } { + getMatchResults(): ?{ component: *, matches: string[] } { const keys = Object.keys(embeds); for (const key of keys) { @@ -23,7 +23,7 @@ export default class Embed extends React.Component<*> { } render() { - const result = this.matches; + const result = this.getMatchResults(); if (!result) return null; const { attributes, isSelected, children } = this.props; diff --git a/app/scenes/Collection.js b/app/scenes/Collection.js index dfe2c0078..9bd7eb00b 100644 --- a/app/scenes/Collection.js +++ b/app/scenes/Collection.js @@ -181,6 +181,7 @@ class CollectionScene extends React.Component { {collection.description && ( { autoFocus /> { )} /setupJest.js", "/__mocks__/window.js" ] @@ -100,7 +99,6 @@ "flow-typed": "^2.4.0", "fs-extra": "^4.0.2", "google-auth-library": "^1.5.0", - "history": "3.0.0", "html-webpack-plugin": "2.17.0", "http-errors": "1.4.0", "immutable": "^3.8.2", @@ -130,10 +128,7 @@ "mobx": "4.6.0", "mobx-react": "^5.4.2", "natural-sort": "^1.0.0", - "node-dev": "3.1.0", "nodemailer": "^4.4.0", - "normalize.css": "^7.0.0", - "normalizr": "2.0.1", "outline-icons": "^1.6.0", "oy-vey": "^0.10.0", "pg": "^6.1.5", @@ -150,26 +145,24 @@ "react-helmet": "^5.2.0", "react-keydown": "^1.7.3", "react-markdown": "^3.0.2", - "react-medium-image-zoom": "^3.0.10", "react-modal": "^3.1.2", "react-portal": "^4.0.0", - "react-router-dom": "^4.2.0", + "react-router-dom": "^4.3.1", "react-waypoint": "^7.3.1", "redis": "^2.6.2", "redis-lock": "^0.1.0", - "rich-markdown-editor": "^8.0.2", + "rich-markdown-editor": "^8.1.3", "safestart": "1.1.0", "sequelize": "4.28.6", "sequelize-cli": "^2.7.0", "sequelize-encrypted": "0.1.0", "slug": "0.9.1", - "string-hash": "^1.1.0", "string-replace-to-array": "^1.0.3", "style-loader": "^0.18.2", "styled-components": "^4.1.3", - "styled-components-breakpoint": "^1.0.1", - "styled-components-grid": "^2.2.0", - "styled-normalize": "^2.2.1", + "styled-components-breakpoint": "^2.1.1", + "styled-components-grid": "^2.2.1", + "styled-normalize": "^8.0.4", "tmp": "0.0.33", "uglifyjs-webpack-plugin": "1.2.5", "url-loader": "^0.6.2", @@ -179,17 +172,15 @@ "webpack-manifest-plugin": "^1.3.2" }, "devDependencies": { - "babel-eslint": "^8.1.2", + "babel-eslint": "^9.0.0", "babel-jest": "22", - "enzyme": "2.8.2", - "enzyme-to-json": "^1.5.1", - "eslint": "^4.14.0", - "eslint-config-react-app": "^2.0.1", + "eslint": "^5.12.1", + "eslint-config-react-app": "^3.0.6", "eslint-plugin-flowtype": "^2.40.1", - "eslint-plugin-import": "^2.8.0", - "eslint-plugin-jsx-a11y": "5.1.1", + "eslint-plugin-import": "^2.14.0", + "eslint-plugin-jsx-a11y": "^6.1.2", "eslint-plugin-prettier": "^2.4.0", - "eslint-plugin-react": "^7.5.1", + "eslint-plugin-react": "^7.12.4", "fetch-test-server": "^1.1.0", "flow-bin": "0.86.0", "identity-obj-proxy": "^3.0.0", @@ -200,8 +191,6 @@ "mobx-react-devtools": "^6.0.3", "nodemon": "1.11.0", "prettier": "1.8.2", - "raf": "^3.4.0", - "react-test-renderer": "^16.1.0", "rimraf": "^2.5.4" }, "version": "0.17.0" diff --git a/server/static/dev.html b/server/static/dev.html index 60544507a..f3962d071 100644 --- a/server/static/dev.html +++ b/server/static/dev.html @@ -3,28 +3,38 @@ Outline - - + #root { + flex: 1; + min-height: 100vh; + } + + #sidebar-placeholder { + position: fixed; + top: 0; + bottom: 0; + left: 0; + width: 280px; + background: #F4F7FA; + } + -
    +
    + +
    \ No newline at end of file diff --git a/server/static/index.html b/server/static/index.html index 8d2188867..fc1dfa372 100644 --- a/server/static/index.html +++ b/server/static/index.html @@ -21,10 +21,21 @@ flex: 1; min-height: 100vh; } + + #sidebar-placeholder { + position: fixed; + top: 0; + bottom: 0; + left: 0; + width: 280px; + background: #F4F7FA; + } -
    +
    + +
    diff --git a/setupJest.js b/setupJest.js index 98896a9cf..285090c58 100644 --- a/setupJest.js +++ b/setupJest.js @@ -1,13 +1,4 @@ /* eslint-disable */ -import * as React from 'react'; -import { shallow } from 'enzyme'; -import toJson from 'enzyme-to-json'; import localStorage from './__mocks__/localStorage'; -const snap = children => { - const wrapper = shallow(children); - expect(toJson(wrapper)).toMatchSnapshot(); -}; - global.localStorage = localStorage; -global.snap = snap; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 39f0d6310..b4f9711b3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,13 +2,11 @@ # yarn lockfile v1 -"@babel/code-frame@7.0.0-beta.31": - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.31.tgz#473d021ecc573a2cce1c07d5b509d5215f46ba35" +"@babel/code-frame@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^3.0.0" + "@babel/highlight" "^7.0.0" "@babel/code-frame@^7.0.0-beta.35": version "7.0.0-beta.36" @@ -18,26 +16,35 @@ esutils "^2.0.2" js-tokens "^3.0.0" +"@babel/generator@^7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.2.tgz#18c816c70962640eab42fe8cae5f3947a5c65ccc" + dependencies: + "@babel/types" "^7.2.2" + jsesc "^2.5.1" + lodash "^4.17.10" + source-map "^0.5.0" + trim-right "^1.0.1" + "@babel/helper-annotate-as-pure@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" dependencies: "@babel/types" "^7.0.0" -"@babel/helper-function-name@7.0.0-beta.31": - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.31.tgz#afe63ad799209989348b1109b44feb66aa245f57" +"@babel/helper-function-name@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" dependencies: - "@babel/helper-get-function-arity" "7.0.0-beta.31" - "@babel/template" "7.0.0-beta.31" - "@babel/traverse" "7.0.0-beta.31" - "@babel/types" "7.0.0-beta.31" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" -"@babel/helper-get-function-arity@7.0.0-beta.31": - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.31.tgz#1176d79252741218e0aec872ada07efb2b37a493" +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" dependencies: - "@babel/types" "7.0.0-beta.31" + "@babel/types" "^7.0.0" "@babel/helper-module-imports@^7.0.0": version "7.0.0" @@ -45,35 +52,45 @@ dependencies: "@babel/types" "^7.0.0" -"@babel/template@7.0.0-beta.31": - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.31.tgz#577bb29389f6c497c3e7d014617e7d6713f68bda" +"@babel/helper-split-export-declaration@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" dependencies: - "@babel/code-frame" "7.0.0-beta.31" - "@babel/types" "7.0.0-beta.31" - babylon "7.0.0-beta.31" - lodash "^4.2.0" + "@babel/types" "^7.0.0" -"@babel/traverse@7.0.0-beta.31": - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.31.tgz#db399499ad74aefda014f0c10321ab255134b1df" - dependencies: - "@babel/code-frame" "7.0.0-beta.31" - "@babel/helper-function-name" "7.0.0-beta.31" - "@babel/types" "7.0.0-beta.31" - babylon "7.0.0-beta.31" - debug "^3.0.1" - globals "^10.0.0" - invariant "^2.2.0" - lodash "^4.2.0" - -"@babel/types@7.0.0-beta.31": - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.31.tgz#42c9c86784f674c173fb21882ca9643334029de4" +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" dependencies: + chalk "^2.0.0" esutils "^2.0.2" - lodash "^4.2.0" - to-fast-properties "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.0.0", "@babel/parser@^7.2.2", "@babel/parser@^7.2.3": + version "7.2.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.3.tgz#32f5df65744b70888d17872ec106b02434ba1489" + +"@babel/template@^7.1.0": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.2.2.tgz#005b3fdf0ed96e88041330379e0da9a708eb2907" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.2.2" + "@babel/types" "^7.2.2" + +"@babel/traverse@^7.0.0": + version "7.2.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.2.2" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/parser" "^7.2.3" + "@babel/types" "^7.2.2" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.10" "@babel/types@^7.0.0": version "7.1.5" @@ -83,6 +100,14 @@ lodash "^4.17.10" to-fast-properties "^2.0.0" +"@babel/types@^7.2.2": + version "7.2.2" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.2.tgz#44e10fc24e33af524488b716cdaee5360ea8ed1e" + dependencies: + esutils "^2.0.2" + lodash "^4.17.10" + to-fast-properties "^2.0.0" + "@emotion/is-prop-valid@^0.7.3": version "0.7.3" resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.7.3.tgz#a6bf4fa5387cbba59d44e698a4680f481a8da6cc" @@ -164,15 +189,9 @@ acorn-globals@^4.0.0: dependencies: acorn "^5.0.0" -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - dependencies: - acorn "^3.0.4" - -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" +acorn-jsx@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" acorn@^4.0.3: version "4.0.13" @@ -182,13 +201,9 @@ acorn@^5.0.0, acorn@^5.1.2: version "5.2.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" -acorn@^5.2.1: - version "5.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.3.0.tgz#7446d39459c54fb49a80e6ee6478149b940ec822" - -ajv-keywords@^1.0.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" +acorn@^6.0.2: + version "6.0.5" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.5.tgz#81730c0815f3f3b34d8efa95cb7430965f4d887a" ajv-keywords@^2.0.0: version "2.1.1" @@ -198,7 +213,7 @@ ajv-keywords@^3.0.0, ajv-keywords@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" -ajv@^4.7.0, ajv@^4.9.1: +ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" dependencies: @@ -214,7 +229,7 @@ ajv@^5.0.0: json-schema-traverse "^0.3.0" json-stable-stringify "^1.0.1" -ajv@^5.1.0, ajv@^5.1.5, ajv@^5.3.0: +ajv@^5.1.0, ajv@^5.1.5: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: @@ -241,6 +256,15 @@ ajv@^6.1.0: json-schema-traverse "^0.3.0" uri-js "^4.2.1" +ajv@^6.5.3, ajv@^6.6.1: + version "6.7.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.7.0.tgz#e3ce7bb372d6577bb1839f1dfdfcbf5ad2948d96" + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -277,6 +301,10 @@ ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" +ansi-regex@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.0.0.tgz#70de791edf021404c3fd615aa89118ae0432e5a9" + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -287,10 +315,6 @@ ansi-styles@^3.1.0, ansi-styles@^3.2.0: dependencies: color-convert "^1.9.0" -ansicolors@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" - any-promise@^1.0.0, any-promise@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -337,11 +361,12 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -aria-query@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.0.tgz#4af10a1e61573ddea0cf3b99b51c52c05b424d24" +aria-query@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" dependencies: ast-types-flow "0.0.7" + commander "^2.11.0" arr-diff@^2.0.0: version "2.0.0" @@ -365,10 +390,6 @@ array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - array-includes@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" @@ -428,7 +449,7 @@ assert@^1.1.1: dependencies: util "0.10.3" -ast-types-flow@0.0.7: +ast-types-flow@0.0.7, ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" @@ -483,6 +504,10 @@ autoprefixer@^6.3.1: postcss "^5.2.16" postcss-value-parser "^3.2.3" +autosize@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/autosize/-/autosize-4.0.2.tgz#073cfd07c8bf45da4b9fd153437f5bafbba1e4c9" + autotrack@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/autotrack/-/autotrack-2.4.1.tgz#ccbf010e3d95ef23c8dd6db4e8df025135c82ee6" @@ -532,13 +557,13 @@ axios@^0.18.0: follow-redirects "^1.3.0" is-buffer "^1.1.5" -axobject-query@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" +axobject-query@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" dependencies: ast-types-flow "0.0.7" -babel-code-frame@^6.11.0, babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: +babel-code-frame@^6.11.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: @@ -570,15 +595,15 @@ babel-core@^6.0.0, babel-core@^6.24.1, babel-core@^6.26.0: slash "^1.0.0" source-map "^0.5.6" -babel-eslint@^8.1.2: - version "8.1.2" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-8.1.2.tgz#a39230b0c20ecbaa19a35d5633bf9b9ca2c8116f" +babel-eslint@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-9.0.0.tgz#7d9445f81ed9f60aff38115f838970df9f2b6220" dependencies: - "@babel/code-frame" "7.0.0-beta.31" - "@babel/traverse" "7.0.0-beta.31" - "@babel/types" "7.0.0-beta.31" - babylon "7.0.0-beta.31" - eslint-scope "~3.7.1" + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + eslint-scope "3.7.1" eslint-visitor-keys "^1.0.0" babel-generator@^6.18.0, babel-generator@^6.26.0: @@ -1193,10 +1218,6 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26 lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@7.0.0-beta.31: - version "7.0.0-beta.31" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.31.tgz#7ec10f81e0e456fd0f855ad60fa30c2ac454283f" - babylon@^6.17.4, babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" @@ -1522,7 +1543,7 @@ bugsnag@^1.7.0: request "^2.81.0" stack-trace "~0.0.9" -builtin-modules@^1.0.0, builtin-modules@^1.1.0, builtin-modules@^1.1.1: +builtin-modules@^1.0.0, builtin-modules@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -1576,20 +1597,14 @@ cacache@^10.0.4: unique-filename "^1.1.0" y18n "^4.0.0" -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - dependencies: - callsites "^0.2.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" +callsites@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.0.0.tgz#fb7eb569b72ad7a45812f93fd9430a3e410b3dd3" + camel-case@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" @@ -1597,21 +1612,10 @@ camel-case@^3.0.0: no-case "^2.2.0" upper-case "^1.1.1" -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" @@ -1649,13 +1653,6 @@ caniuse-lite@^1.0.30000718: version "1.0.30000721" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000721.tgz#931a21a7bd85016300328d21f126d84b73437d35" -cardinal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-1.0.0.tgz#50e21c1b0aa37729f9377def196b5a9cec932ee9" - dependencies: - ansicolors "~0.2.1" - redeyed "~1.0.0" - caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -1734,35 +1731,14 @@ character-reference-invalid@^1.0.0: version "1.1.1" resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz#942835f750e4ec61a308e60c2ef8cc1011202efc" -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" charenc@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" -cheerio@^0.22.0: - version "0.22.0" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e" - dependencies: - css-select "~1.2.0" - dom-serializer "~0.1.0" - entities "~1.1.1" - htmlparser2 "^3.9.1" - lodash.assignin "^4.0.9" - lodash.bind "^4.1.4" - lodash.defaults "^4.0.1" - lodash.filter "^4.4.0" - lodash.flatten "^4.2.0" - lodash.foreach "^4.3.0" - lodash.map "^4.4.0" - lodash.merge "^4.4.0" - lodash.pick "^4.2.1" - lodash.reduce "^4.4.0" - lodash.reject "^4.4.0" - lodash.some "^4.4.0" - chokidar@^1.4.3, chokidar@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" @@ -1847,12 +1823,6 @@ cli-spinners@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" -cli-table@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" - dependencies: - colors "1.0.3" - cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -1860,13 +1830,6 @@ cli-truncate@^0.2.1: slice-ansi "0.0.4" string-width "^1.0.1" -cli-usage@^0.1.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/cli-usage/-/cli-usage-0.1.4.tgz#7c01e0dc706c234b39c933838c8e20b2175776e2" - dependencies: - marked "^0.3.6" - marked-terminal "^1.6.2" - cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" @@ -1997,10 +1960,6 @@ colormin@^1.0.5: css-color-names "0.0.4" has "^1.0.1" -colors@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" - colors@^1.1.2, colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" @@ -2023,6 +1982,10 @@ commander@2.9.x, commander@^2.9.0: dependencies: graceful-readlink ">= 1.0.0" +commander@^2.11.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" + commander@~2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" @@ -2048,6 +2011,10 @@ compression@~1.5.2: on-headers "~1.0.0" vary "~1.0.1" +computed-style@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/computed-style/-/computed-style-0.1.4.tgz#7f344fd8584b2e425bedca4a1afc0e300bb05d74" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -2061,14 +2028,6 @@ concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" -concat-stream@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" - dependencies: - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - config-chain@~1.1.5: version "1.1.11" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" @@ -2089,6 +2048,10 @@ configstore@^1.0.0: write-file-atomic "^1.1.2" xdg-basedir "^2.0.0" +confusing-browser-globals@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.5.tgz#0171050cfdd4261e278978078bc00c4d88e135f4" + connect-timeout@~1.6.2: version "1.6.2" resolved "https://registry.yarnpkg.com/connect-timeout/-/connect-timeout-1.6.2.tgz#de9a5ec61e33a12b6edaab7b5f062e98c599b88e" @@ -2304,7 +2267,7 @@ cron-parser@^2.5.0: is-nan "^1.2.1" moment-timezone "^0.5.23" -cross-spawn@^5.0.1, cross-spawn@^5.1.0: +cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" dependencies: @@ -2312,6 +2275,16 @@ cross-spawn@^5.0.1, cross-spawn@^5.1.0: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + crypt@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" @@ -2382,7 +2355,7 @@ css-loader@^0.28.7: postcss-value-parser "^3.3.0" source-list-map "^2.0.0" -css-select@^1.1.0, css-select@~1.2.0: +css-select@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" dependencies: @@ -2478,12 +2451,6 @@ csurf@~1.8.3: csrf "~3.0.0" http-errors "~1.3.1" -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - dependencies: - array-find-index "^1.0.1" - cyclist@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" @@ -2494,7 +2461,7 @@ d@1: dependencies: es5-ext "^0.10.9" -damerau-levenshtein@^1.0.0: +damerau-levenshtein@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" @@ -2532,17 +2499,6 @@ dateformat@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" -dateformat@~1.0.4-1.2.3: - 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" - -debounce@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.0.2.tgz#503cc674d8d7f737099664fb75ddbd36b9626dc6" - debug@*, debug@2.6.8, debug@^2.2.0, debug@^2.6.1, debug@^2.6.3, debug@^2.6.8: version "2.6.8" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" @@ -2567,12 +2523,18 @@ debug@^3.0.0: dependencies: ms "2.0.0" -debug@^3.0.1, debug@^3.1.0: +debug@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" +debug@^4.0.1, debug@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + dependencies: + ms "^2.1.1" + debug@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" @@ -2730,16 +2692,9 @@ doctrine@1.5.0: esutils "^2.0.2" isarray "^1.0.0" -doctrine@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.2.tgz#68f96ce8efc56cc42651f1faadb4f175273b0075" +doctrine@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" dependencies: esutils "^2.0.2" @@ -2749,7 +2704,7 @@ dom-converter@~0.1: dependencies: utila "~0.3" -dom-serializer@0, dom-serializer@~0.1.0: +dom-serializer@0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" dependencies: @@ -2768,7 +2723,7 @@ domain-browser@^1.1.1: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" -domelementtype@1, domelementtype@^1.3.0: +domelementtype@1: version "1.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" @@ -2786,19 +2741,13 @@ domhandler@2.1: dependencies: domelementtype "1" -domhandler@^2.3.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" - dependencies: - domelementtype "1" - domutils@1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" dependencies: domelementtype "1" -domutils@1.5.1, domutils@^1.5.1: +domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" dependencies: @@ -2865,12 +2814,6 @@ duplexify@^3.4.2, duplexify@^3.6.0: readable-stream "^2.0.0" stream-shift "^1.0.0" -dynamic-dedupe@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.2.0.tgz#50f7c28684831ecf1c170aab67a1d5311cdd76ce" - dependencies: - xtend "~2.0.6" - ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" @@ -2918,7 +2861,7 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" -emoji-regex@^6.1.0, emoji-regex@^6.5.1: +emoji-regex@^6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" @@ -2967,37 +2910,10 @@ enhanced-resolve@^3.4.0: object-assign "^4.0.1" tapable "^0.2.7" -entities@^1.1.1, entities@~1.1.1: +entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" -enzyme-to-json@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/enzyme-to-json/-/enzyme-to-json-1.5.1.tgz#e34f4d126bb3f4696ce3800b51f9ed83df708799" - dependencies: - lodash.filter "^4.6.0" - lodash.isnil "^4.0.0" - lodash.isplainobject "^4.0.6" - lodash.omitby "^4.5.0" - lodash.range "^3.2.0" - object-values "^1.0.0" - object.entries "^1.0.3" - -enzyme@2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/enzyme/-/enzyme-2.8.2.tgz#6c8bcb05012abc4aa4bc3213fb23780b9b5b1714" - dependencies: - cheerio "^0.22.0" - function.prototype.name "^1.0.0" - is-subset "^0.1.1" - lodash "^4.17.2" - object-is "^1.0.1" - object.assign "^4.0.4" - object.entries "^1.0.3" - object.values "^1.0.3" - prop-types "^15.5.4" - uuid "^2.0.3" - errno@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" @@ -3033,6 +2949,17 @@ errorhandler@~1.4.2: accepts "~1.3.0" escape-html "~1.0.3" +es-abstract@^1.11.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" + dependencies: + es-to-primitive "^1.2.0" + function-bind "^1.1.1" + has "^1.0.3" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-keys "^1.0.12" + es-abstract@^1.5.1: version "1.10.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" @@ -3043,7 +2970,7 @@ es-abstract@^1.5.1: is-callable "^1.1.3" is-regex "^1.0.4" -es-abstract@^1.6.1, es-abstract@^1.7.0: +es-abstract@^1.7.0: version "1.8.1" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.1.tgz#fd85a3bdfa67786ce7be7e1584678e119cd70c04" dependencies: @@ -3061,6 +2988,14 @@ es-to-primitive@^1.1.1: is-date-object "^1.0.1" is-symbol "^1.0.1" +es-to-primitive@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + es5-ext@^0.10.12, es5-ext@^0.10.14, es5-ext@^0.10.30, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2: version "0.10.30" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.30.tgz#7141a16836697dbabfaaaeee41495ce29f52c939" @@ -3157,9 +3092,11 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-config-react-app@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-2.0.1.tgz#fd0503da01ae608f0c6ae8861de084975142230e" +eslint-config-react-app@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-3.0.6.tgz#addcae1359235941e95f3c96970b7ac8552e1130" + dependencies: + confusing-browser-globals "^1.0.5" eslint-import-resolver-node@^0.3.1: version "0.3.1" @@ -3168,9 +3105,9 @@ eslint-import-resolver-node@^0.3.1: debug "^2.6.8" resolve "^1.2.0" -eslint-module-utils@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" +eslint-module-utils@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" dependencies: debug "^2.6.8" pkg-dir "^1.0.0" @@ -3187,32 +3124,33 @@ eslint-plugin-flowtype@^2.46.1: dependencies: lodash "^4.15.0" -eslint-plugin-import@^2.8.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894" +eslint-plugin-import@^2.14.0: + version "2.14.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8" dependencies: - builtin-modules "^1.1.1" contains-path "^0.1.0" debug "^2.6.8" doctrine "1.5.0" eslint-import-resolver-node "^0.3.1" - eslint-module-utils "^2.1.1" + eslint-module-utils "^2.2.0" has "^1.0.1" - lodash.cond "^4.3.0" + lodash "^4.17.4" minimatch "^3.0.3" read-pkg-up "^2.0.0" + resolve "^1.6.0" -eslint-plugin-jsx-a11y@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz#5c96bb5186ca14e94db1095ff59b3e2bd94069b1" +eslint-plugin-jsx-a11y@^6.1.2: + version "6.1.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.2.tgz#69bca4890b36dcf0fe16dd2129d2d88b98f33f88" dependencies: - aria-query "^0.7.0" + aria-query "^3.0.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 "^1.4.0" + ast-types-flow "^0.0.7" + axobject-query "^2.0.1" + damerau-levenshtein "^1.0.4" + emoji-regex "^6.5.1" + has "^1.0.3" + jsx-ast-utils "^2.0.1" eslint-plugin-prettier@^2.4.0: version "2.4.0" @@ -3228,74 +3166,89 @@ eslint-plugin-prettier@^2.6.0: fast-diff "^1.1.1" jest-docblock "^21.0.0" -eslint-plugin-react@^7.5.1: - version "7.5.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.5.1.tgz#52e56e8d80c810de158859ef07b880d2f56ee30b" +eslint-plugin-react@^7.12.4: + version "7.12.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.12.4.tgz#b1ecf26479d61aee650da612e425c53a99f48c8c" dependencies: - doctrine "^2.0.0" - has "^1.0.1" - jsx-ast-utils "^2.0.0" - prop-types "^15.6.0" + array-includes "^3.0.3" + doctrine "^2.1.0" + has "^1.0.3" + jsx-ast-utils "^2.0.1" + object.fromentries "^2.0.0" + prop-types "^15.6.2" + resolve "^1.9.0" -eslint-scope@^3.7.1, eslint-scope@~3.7.1: +eslint-scope@3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" +eslint-scope@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" + eslint-visitor-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" -eslint@^4.14.0: - version "4.14.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.14.0.tgz#96609768d1dd23304faba2d94b7fefe5a5447a82" +eslint@^5.12.1: + version "5.12.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.12.1.tgz#5ca9931fb9029d04e7be92b03ce3b58edfac7e3b" dependencies: - ajv "^5.3.0" - babel-code-frame "^6.22.0" + "@babel/code-frame" "^7.0.0" + ajv "^6.5.3" chalk "^2.1.0" - concat-stream "^1.6.0" - cross-spawn "^5.1.0" - debug "^3.1.0" - doctrine "^2.0.2" - eslint-scope "^3.7.1" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^2.1.0" + eslint-scope "^4.0.0" + eslint-utils "^1.3.1" eslint-visitor-keys "^1.0.0" - espree "^3.5.2" - esquery "^1.0.0" + espree "^5.0.0" + esquery "^1.0.1" esutils "^2.0.2" file-entry-cache "^2.0.0" functional-red-black-tree "^1.0.1" glob "^7.1.2" - globals "^11.0.1" - ignore "^3.3.3" + globals "^11.7.0" + ignore "^4.0.6" + import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-resolvable "^1.0.0" - js-yaml "^3.9.1" + inquirer "^6.1.0" + js-yaml "^3.12.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" + lodash "^4.17.5" + minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.2" path-is-inside "^1.0.2" pluralize "^7.0.0" progress "^2.0.0" - require-uncached "^1.0.3" - semver "^5.3.0" + regexpp "^2.0.1" + semver "^5.5.1" strip-ansi "^4.0.0" - strip-json-comments "~2.0.1" - table "^4.0.1" - text-table "~0.2.0" + strip-json-comments "^2.0.1" + table "^5.0.2" + text-table "^0.2.0" -espree@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca" +espree@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.0.tgz#fc7f984b62b36a0f543b13fb9cd7b9f4a7f5b65c" dependencies: - acorn "^5.2.1" - acorn-jsx "^3.0.0" + acorn "^6.0.2" + acorn-jsx "^5.0.0" + eslint-visitor-keys "^1.0.0" esprima@^2.6.0: version "2.7.3" @@ -3309,13 +3262,9 @@ esprima@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" -esprima@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.0.0.tgz#53cf247acda77313e551c3aa2e73342d3fb4f7d9" - -esquery@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" +esquery@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" dependencies: estraverse "^4.0.0" @@ -3466,12 +3415,12 @@ extend@^3.0.0, extend@^3.0.1, extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" -external-editor@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" +external-editor@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" + chardet "^0.7.0" + iconv-lite "^0.4.24" tmp "^0.0.33" extglob@^0.3.1: @@ -3599,12 +3548,6 @@ fileset@^2.0.2: glob "^7.0.3" minimatch "^3.0.3" -filewatcher@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/filewatcher/-/filewatcher-3.0.1.tgz#f4a1957355ddaf443ccd78a895f3d55e23c8a034" - dependencies: - debounce "^1.0.0" - fill-range@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" @@ -3767,7 +3710,7 @@ for-own@^1.0.0: dependencies: for-in "^1.0.1" -foreach@^2.0.5, foreach@~2.0.1: +foreach@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" @@ -3904,18 +3847,10 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2, fstream@~1.0.10: mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: +function-bind@^1.0.2, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" -function.prototype.name@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.0.3.tgz#0099ae5572e9dd6f03c97d023fd92bcc5e639eac" - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.0" - is-callable "^1.1.3" - functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" @@ -3963,10 +3898,6 @@ get-document@1: version "1.0.0" resolved "https://registry.npmjs.org/get-document/-/get-document-1.0.0.tgz#4821bce66f1c24cb0331602be6cb6b12c4f01c4b" -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -4076,13 +4007,9 @@ global@^4.3.0: min-document "^2.19.0" process "~0.5.1" -globals@^10.0.0: - version "10.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-10.4.0.tgz#5c477388b128a9e4c5c5d01c7a2aca68c68b2da7" - -globals@^11.0.1: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.1.0.tgz#632644457f5f0e3ae711807183700ebf2e4633e4" +globals@^11.1.0, globals@^11.7.0: + version "11.10.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.10.0.tgz#1e09776dffda5e01816b3bb4077c8b59c24eaa50" globals@^9.18.0: version "9.18.0" @@ -4206,7 +4133,7 @@ graceful-fs@~1.2.0: version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" -growly@^1.2.0, growly@^1.3.0: +growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -4344,6 +4271,10 @@ 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" +has-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" + has-to-string-tag-x@^1.2.0: version "1.4.1" resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" @@ -4360,6 +4291,12 @@ has@^1.0.1: dependencies: function-bind "^1.0.2" +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + dependencies: + function-bind "^1.1.1" + hash-base@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" @@ -4445,14 +4382,6 @@ hide-powered-by@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hide-powered-by/-/hide-powered-by-1.0.0.tgz#4a85ad65881f62857fc70af7174a1184dccce32b" -history@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/history/-/history-3.0.0.tgz#02cff4e6f69dc62dd81161104a63f5b85ead0c85" - dependencies: - invariant "^2.0.0" - query-string "^4.1.0" - warning "^2.0.0" - history@^4.7.2: version "4.7.2" resolved "https://registry.yarnpkg.com/history/-/history-4.7.2.tgz#22b5c7f31633c5b8021c7f4a8a954ac139ee8d5b" @@ -4479,9 +4408,9 @@ hoek@4.x.x: version "4.2.0" resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" -hoist-non-react-statics@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz#343db84c6018c650778898240135a1420ee22ce0" +hoist-non-react-statics@^2.5.0: + version "2.5.5" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" hoist-non-react-statics@^3.0.0: version "3.1.0" @@ -4551,17 +4480,6 @@ html-webpack-plugin@2.17.0: pretty-error "^2.0.0" toposort "^0.2.12" -htmlparser2@^3.9.1: - version "3.9.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" - dependencies: - domelementtype "^1.3.0" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^2.0.2" - htmlparser2@~3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" @@ -4654,9 +4572,11 @@ iconv-lite@0.4.18, iconv-lite@~0.4.13: version "0.4.18" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2" -iconv-lite@^0.4.17: - version "0.4.19" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + dependencies: + safer-buffer ">= 2.1.2 < 3" icss-replace-symbols@^1.1.0: version "1.1.0" @@ -4690,9 +4610,9 @@ ignore-by-default@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" -ignore@^3.3.3: - version "3.3.7" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" image-extensions@^1.0.1: version "1.1.0" @@ -4710,6 +4630,13 @@ immutable@^3.8.2: version "3.8.2" resolved "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" +import-fresh@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.0.0.tgz#a3d897f420cab0e671236897f75bc14b4885c390" + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + imports-loader@0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.6.5.tgz#ae74653031d59e37b3c2fb2544ac61aeae3530a6" @@ -4735,7 +4662,7 @@ indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" -indexof@0.0.1, indexof@~0.0.1: +indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" @@ -4774,35 +4701,40 @@ ini@^1.3.4, ini@~1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" -inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" +inquirer@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.1.tgz#9943fc4882161bdb0b0c9276769c75b32dbfcd52" dependencies: ansi-escapes "^3.0.0" chalk "^2.0.0" cli-cursor "^2.1.0" cli-width "^2.0.0" - external-editor "^2.0.4" + external-editor "^3.0.0" figures "^2.0.0" - lodash "^4.3.0" + lodash "^4.17.10" mute-stream "0.0.7" run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" + rxjs "^6.1.0" string-width "^2.1.0" - strip-ansi "^4.0.0" + strip-ansi "^5.0.0" through "^2.3.6" interpret@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" -invariant@^2.0.0, invariant@^2.2.0, invariant@^2.2.1, invariant@^2.2.2: +invariant@^2.2.1, invariant@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" dependencies: loose-envify "^1.0.0" +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + dependencies: + loose-envify "^1.0.0" + invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" @@ -4889,6 +4821,10 @@ is-callable@^1.1.1, is-callable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" +is-callable@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + is-ci@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" @@ -5011,10 +4947,6 @@ is-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" -is-object@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/is-object/-/is-object-0.1.2.tgz#00efbc08816c33cfc4ac8251d132e10dc65098d7" - is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" @@ -5069,12 +5001,6 @@ is-relative@^0.2.1: dependencies: is-unc-path "^0.1.1" -is-resolvable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" - dependencies: - tryit "^1.0.1" - is-retry-allowed@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" @@ -5083,10 +5009,6 @@ is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" -is-subset@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" - is-svg@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" @@ -5097,6 +5019,12 @@ is-symbol@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" +is-symbol@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" + dependencies: + has-symbols "^1.0.0" + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -5137,10 +5065,6 @@ is-word-character@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.1.tgz#5a03fa1ea91ace8a6eb0c7cd770eb86d65c8befb" -is@~0.2.6: - version "0.2.7" - resolved "https://registry.yarnpkg.com/is/-/is-0.2.7.tgz#3b34a2c48f359972f35042849193ae7264b63562" - isarray@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" @@ -5560,16 +5484,20 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.4.3, js-yaml@^3.7.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0" +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + +js-yaml@^3.12.0: + version "3.12.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600" dependencies: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.9.1: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" +js-yaml@^3.4.3, js-yaml@^3.7.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0" dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -5618,6 +5546,10 @@ jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" @@ -5634,6 +5566,10 @@ 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" +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -5706,11 +5642,7 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -jsx-ast-utils@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" - -jsx-ast-utils@^2.0.0: +jsx-ast-utils@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" dependencies: @@ -5975,6 +5907,12 @@ liftoff@^2.1.0: rechoir "^0.6.2" resolve "^1.1.7" +line-height@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/line-height/-/line-height-0.3.1.tgz#4b1205edde182872a5efa3c8f620b3187a9c54c9" + dependencies: + computed-style "~0.1.3" + lint-staged@^3.4.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-3.6.1.tgz#24423c8b7bd99d96e15acd1ac8cb392a78e58582" @@ -6087,14 +6025,6 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -lodash._arraycopy@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" - -lodash._arrayeach@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" - lodash._baseassign@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" @@ -6102,25 +6032,10 @@ lodash._baseassign@^3.0.0: lodash._basecopy "^3.0.0" lodash.keys "^3.0.0" -lodash._baseclone@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7" - dependencies: - lodash._arraycopy "^3.0.0" - lodash._arrayeach "^3.0.0" - lodash._baseassign "^3.0.0" - lodash._basefor "^3.0.0" - lodash.isarray "^3.0.0" - lodash.keys "^3.0.0" - lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" -lodash._basefor@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" - lodash._basetostring@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" @@ -6177,11 +6092,7 @@ lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" -lodash.assignin@^4.0.9: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" - -lodash.bind@^4.1.4, lodash.bind@^4.2.1: +lodash.bind@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" @@ -6197,21 +6108,10 @@ lodash.clone@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6" -lodash.clonedeep@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz#a0a1e40d82a5ea89ff5b147b8444ed63d92827db" - dependencies: - lodash._baseclone "^3.0.0" - lodash._bindcallback "^3.0.0" - lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" -lodash.cond@^4.3.0: - version "4.5.2" - resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" - lodash.defaults@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c" @@ -6219,7 +6119,7 @@ lodash.defaults@^3.1.2: lodash.assign "^3.0.0" lodash.restparam "^3.0.0" -lodash.defaults@^4.0.1, lodash.defaults@^4.2.0: +lodash.defaults@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" @@ -6233,15 +6133,11 @@ lodash.escape@^3.0.0: dependencies: lodash._root "^3.0.0" -lodash.filter@^4.4.0, lodash.filter@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.filter/-/lodash.filter-4.6.0.tgz#668b1d4981603ae1cc5a6fa760143e480b4c4ace" - lodash.flatten@^4.2.0, lodash.flatten@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" -lodash.foreach@^4.3.0, lodash.foreach@^4.5.0: +lodash.foreach@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" @@ -6257,11 +6153,7 @@ lodash.isempty@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" -lodash.isnil@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/lodash.isnil/-/lodash.isnil-4.0.0.tgz#49e28cd559013458c814c5479d3c663a21bfaa6c" - -lodash.isplainobject@^4.0.4, lodash.isplainobject@^4.0.6: +lodash.isplainobject@^4.0.4: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" @@ -6281,10 +6173,6 @@ lodash.keys@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205" -lodash.map@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3" - lodash.mapvalues@^4.4.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" @@ -6293,18 +6181,10 @@ lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" -lodash.merge@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.0.tgz#69884ba144ac33fe699737a6086deffadd0f89c5" - lodash.noop@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash.noop/-/lodash.noop-3.0.1.tgz#38188f4d650a3a474258439b96ec45b32617133c" -lodash.omitby@^4.5.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.omitby/-/lodash.omitby-4.6.0.tgz#5c15ff4754ad555016b53c041311e8f079204791" - lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" @@ -6313,22 +6193,14 @@ lodash.partial@^4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/lodash.partial/-/lodash.partial-4.2.1.tgz#49f3d8cfdaa3bff8b3a91d127e923245418961d4" -lodash.pick@^4.2.1, lodash.pick@^4.4.0: +lodash.pick@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" -lodash.range@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.range/-/lodash.range-3.2.0.tgz#f461e588f66683f7eadeade513e38a69a565a15d" - -lodash.reduce@4.6.0, lodash.reduce@^4.4.0: +lodash.reduce@4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" -lodash.reject@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reject/-/lodash.reject-4.6.0.tgz#80d6492dc1470864bbf583533b651f42a9f52415" - lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" @@ -6341,10 +6213,6 @@ lodash.shuffle@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.shuffle/-/lodash.shuffle-4.2.0.tgz#145b5053cf875f6f5c2a33f48b6e9948c6ec7b4b" -lodash.some@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d" - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -6370,10 +6238,6 @@ lodash.templatesettings@^3.0.0: lodash._reinterpolate "^3.0.0" lodash.escape "^3.0.0" -lodash.toarray@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" - lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" @@ -6382,7 +6246,7 @@ lodash.values@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347" -"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.11.1, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.0, lodash@^4.17.1, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.3.0, lodash@^4.6.1: +"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.11.1, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.0, lodash@^4.17.1, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.6.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -6390,7 +6254,7 @@ lodash@^4.1.1: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" -lodash@^4.17.10, lodash@^4.17.11: +lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.5: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" @@ -6421,13 +6285,6 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3 dependencies: js-tokens "^3.0.0" -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - lower-case-first@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-1.0.2.tgz#e5da7c26f29a7073be02d52bac9980e5922adfa1" @@ -6492,10 +6349,6 @@ map-cache@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" -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-stream@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" @@ -6504,20 +6357,6 @@ markdown-escapes@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.1.tgz#1994df2d3af4811de59a6714934c2b2292734518" -marked-terminal@^1.6.2: - version "1.7.0" - resolved "https://registry.yarnpkg.com/marked-terminal/-/marked-terminal-1.7.0.tgz#c8c460881c772c7604b64367007ee5f77f125904" - dependencies: - cardinal "^1.0.0" - chalk "^1.1.3" - cli-table "^0.3.1" - lodash.assign "^4.2.0" - node-emoji "^1.4.1" - -marked@^0.3.6: - version "0.3.6" - resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" - math-expression-evaluator@^1.2.14: version "1.2.17" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" @@ -6571,21 +6410,6 @@ memory-fs@^0.4.0, memory-fs@~0.4.1: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - merge-stream@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" @@ -6709,7 +6533,7 @@ minimist@0.0.8, minimist@~0.0.1: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: +minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -6802,6 +6626,10 @@ ms@2.0.0, ms@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + multiparty@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/multiparty/-/multiparty-3.3.2.tgz#35de6804dc19643e5249f3d3e3bdc6c8ce301d3f" @@ -6879,6 +6707,10 @@ next-tick@1: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + no-case@^2.2.0: version "2.3.1" resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.1.tgz#7aeba1c73a52184265554b7dc03baf720df80081" @@ -6889,23 +6721,6 @@ nocache@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/nocache/-/nocache-2.0.0.tgz#202b48021a0c4cbde2df80de15a17443c8b43980" -node-dev@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/node-dev/-/node-dev-3.1.0.tgz#e6350bbc1180b77be6e72aa162ae5a1a2dc536c7" - dependencies: - dateformat "~1.0.4-1.2.3" - dynamic-dedupe "^0.2.0" - filewatcher "~3.0.0" - minimist "^1.1.3" - node-notifier "^4.0.2" - resolve "^1.0.0" - -node-emoji@^1.4.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.8.1.tgz#6eec6bfb07421e2148c75c6bba72421f8530a826" - dependencies: - lodash.toarray "^4.4.0" - node-fetch@^1.0.1, node-fetch@^1.5.1: version "1.7.2" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.2.tgz#c54e9aac57e432875233525f3c891c4159ffefd7" @@ -6949,18 +6764,6 @@ node-libs-browser@^2.0.0: util "^0.10.3" vm-browserify "0.0.4" -node-notifier@^4.0.2: - version "4.6.1" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-4.6.1.tgz#056d14244f3dcc1ceadfe68af9cff0c5473a33f3" - dependencies: - cli-usage "^0.1.1" - growly "^1.2.0" - lodash.clonedeep "^3.0.0" - minimist "^1.1.1" - semver "^5.1.0" - shellwords "^0.1.0" - which "^1.0.5" - node-notifier@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" @@ -7042,7 +6845,7 @@ normalize-git-url@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: +normalize-package-data@^2.3.2: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: @@ -7070,16 +6873,6 @@ normalize-url@^1.4.0: query-string "^4.1.0" sort-keys "^1.0.0" -normalize.css@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-7.0.0.tgz#abfb1dd82470674e0322b53ceb1aaf412938e4bf" - -normalizr@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/normalizr/-/normalizr-2.0.1.tgz#da0e2c87c25021aa13a7b8c4a9889c705e282a87" - dependencies: - lodash "^4.0.0" - npm-path@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.3.tgz#15cff4e1c89a38da77f56f6055b24f975dfb2bbe" @@ -7143,34 +6936,14 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-is@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" +object-keys@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" -object-keys@^1.0.10, object-keys@^1.0.8: +object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" -object-keys@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.2.0.tgz#cddec02998b091be42bf1035ae32e49f1cb6ea67" - dependencies: - foreach "~2.0.1" - indexof "~0.0.1" - is "~0.2.6" - -object-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/object-values/-/object-values-1.0.0.tgz#72af839630119e5b98c3b02bb8c27e3237158105" - -object.assign@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.0" - object-keys "^1.0.10" - object.defaults@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" @@ -7180,13 +6953,13 @@ object.defaults@^1.1.0: for-own "^1.0.0" isobject "^3.0.0" -object.entries@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" +object.fromentries@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" dependencies: define-properties "^1.1.2" - es-abstract "^1.6.1" - function-bind "^1.1.0" + es-abstract "^1.11.0" + function-bind "^1.1.1" has "^1.0.1" object.getownpropertydescriptors@^2.0.3: @@ -7209,15 +6982,6 @@ object.pick@^1.2.0: dependencies: isobject "^3.0.1" -object.values@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.0.4.tgz#e524da09b4f66ff05df457546ec72ac99f13069a" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.6.1" - function-bind "^1.1.0" - has "^1.0.1" - on-finished@^2.1.0, on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" @@ -7395,6 +7159,12 @@ param-case@^2.1.0: dependencies: no-case "^2.2.0" +parent-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.0.tgz#df250bdc5391f4a085fb589dad761f5ad6b865b5" + dependencies: + callsites "^3.0.0" + parse-asn1@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" @@ -7492,7 +7262,7 @@ path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" -path-key@^2.0.0: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -7500,6 +7270,10 @@ path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + path-root-regex@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" @@ -8002,7 +7776,7 @@ prop-types@^15.0.0, prop-types@^15.5.7, prop-types@^15.6.0: loose-envify "^1.3.1" object-assign "^4.1.1" -prop-types@^15.6.2: +prop-types@^15.5.6, prop-types@^15.6.1, prop-types@^15.6.2: version "15.6.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" dependencies: @@ -8112,12 +7886,6 @@ querystring@0.2.0, querystring@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" -raf@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.0.tgz#a28876881b4bc2ca9117d4138163ddb80f781575" - dependencies: - performance-now "^2.1.0" - random-bytes@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" @@ -8179,6 +7947,14 @@ rc@^1.0.1, rc@^1.1.7: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-autosize-textarea@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/react-autosize-textarea/-/react-autosize-textarea-6.0.0.tgz#89fb4f58bbd3833224088d787e7c7128ba9179fc" + dependencies: + autosize "^4.0.2" + line-height "^0.3.1" + prop-types "^15.5.6" + react-avatar-editor@^10.3.0: version "10.3.0" resolved "https://registry.yarnpkg.com/react-avatar-editor/-/react-avatar-editor-10.3.0.tgz#7ee54774a274b3aa733d8651e6138d4904114c7d" @@ -8286,28 +8062,28 @@ react-proxy@^1.1.7: lodash "^4.6.1" react-deep-force-update "^1.0.0" -react-router-dom@^4.2.0: - version "4.2.2" - resolved "https://registry.npmjs.org/react-router-dom/-/react-router-dom-4.2.2.tgz#c8a81df3adc58bba8a76782e946cbd4eae649b8d" +react-router-dom@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-4.3.1.tgz#4c2619fc24c4fa87c9fd18f4fb4a43fe63fbd5c6" dependencies: history "^4.7.2" - invariant "^2.2.2" + invariant "^2.2.4" loose-envify "^1.3.1" - prop-types "^15.5.4" - react-router "^4.2.0" - warning "^3.0.0" + prop-types "^15.6.1" + react-router "^4.3.1" + warning "^4.0.1" -react-router@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.2.0.tgz#61f7b3e3770daeb24062dae3eedef1b054155986" +react-router@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-4.3.1.tgz#aada4aef14c809cb2e686b05cee4742234506c4e" dependencies: history "^4.7.2" - hoist-non-react-statics "^2.3.0" - invariant "^2.2.2" + hoist-non-react-statics "^2.5.0" + invariant "^2.2.4" loose-envify "^1.3.1" path-to-regexp "^1.7.0" - prop-types "^15.5.4" - warning "^3.0.0" + prop-types "^15.6.1" + warning "^4.0.1" react-side-effect@^1.1.0: version "1.1.3" @@ -8316,14 +8092,6 @@ react-side-effect@^1.1.0: exenv "^1.2.1" shallowequal "^1.0.1" -react-test-renderer@^16.1.0: - version "16.1.0" - resolved "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.1.0.tgz#33a1d3ce896311e0dd1547649b1456ffa7fda415" - dependencies: - fbjs "^0.8.16" - object-assign "^4.1.1" - prop-types "^15.6.0" - react-transform-catch-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/react-transform-catch-errors/-/react-transform-catch-errors-1.0.2.tgz#1b4d4a76e97271896fc16fe3086c793ec88a9eeb" @@ -8487,19 +8255,6 @@ redefine@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/redefine/-/redefine-0.2.1.tgz#e89ee7a6f24d19fff62590569332dc60380a89a3" -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -redeyed@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-1.0.1.tgz#e96c193b40c0816b00aec842698e61185e55498a" - dependencies: - esprima "~3.0.0" - redis-commands@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.3.1.tgz#81d826f45fa9c8b2011f4cd7a0fe597d241d442b" @@ -8564,6 +8319,10 @@ regex-cache@^0.4.2: dependencies: is-equal-shallow "^0.1.3" +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + regexpu-core@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" @@ -8742,13 +8501,6 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" -require-uncached@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - resolve-dir@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" @@ -8756,9 +8508,9 @@ resolve-dir@^0.1.0: expand-tilde "^1.2.2" global-modules "^0.2.3" -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" resolve-path@^1.3.3: version "1.3.3" @@ -8781,6 +8533,12 @@ resolve@^1.0.0, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.2.0, resolve@^1.3.3: dependencies: path-parse "^1.0.5" +resolve@^1.6.0, resolve@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.9.0.tgz#a14c6fdfa8f92a7df1d996cb7105fa744658ea06" + dependencies: + path-parse "^1.0.6" + response-time@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/response-time/-/response-time-2.3.2.tgz#ffa71bab952d62f7c1d49b7434355fbc68dffc5a" @@ -8813,9 +8571,9 @@ retry-axios@0.3.2, retry-axios@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-0.3.2.tgz#5757c80f585b4cc4c4986aa2ffd47a60c6d35e13" -rich-markdown-editor@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-8.0.2.tgz#b642d8c85794eca1df4e6026b2c07f66eb7445ad" +rich-markdown-editor@^8.1.3: + version "8.1.3" + resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-8.1.3.tgz#77af94ecd3d3f18b3dc8f364757ecd6553ec5267" dependencies: "@wikifactory/slate-edit-blockquote" "^0.7.1" "@wikifactory/slate-edit-code" "^0.16.0" @@ -8833,6 +8591,7 @@ rich-markdown-editor@^8.0.2: outline-icons "^1.6.0" prismjs "^1.15.0" react "^16.6.0" + react-autosize-textarea "^6.0.0" react-dom "^16.6.0" react-keydown "^1.9.7" react-medium-image-zoom "^3.0.10" @@ -8907,26 +8666,26 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - rxjs@^5.0.0-beta.11: version "5.4.3" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.4.3.tgz#0758cddee6033d68e0fd53676f0f3596ce3d483f" dependencies: symbol-observable "^1.0.1" +rxjs@^6.1.0: + version "6.3.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55" + dependencies: + tslib "^1.9.0" + safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + safestart@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safestart/-/safestart-1.1.0.tgz#a72880d28460c8b8211ccee83a7e0d542628b5dd" @@ -9010,7 +8769,7 @@ semver@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" -semver@^5.6.0: +semver@^5.5.1, semver@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" @@ -9290,6 +9049,14 @@ slice-ansi@1.0.0: dependencies: is-fullwidth-code-point "^2.0.0" +slice-ansi@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.0.0.tgz#5373bdb8559b45676e8541c66916cdd6251612e7" + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + slide@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" @@ -9370,7 +9137,7 @@ source-map@0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" -source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.6: +source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -9522,10 +9289,6 @@ strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" -string-hash@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/string-hash/-/string-hash-1.1.3.tgz#e8aafc0ac1855b4666929ed7dd1275df5d6c811b" - string-length@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" @@ -9594,6 +9357,12 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.0.0.tgz#f78f68b5d0866c20b2c9b8c61b5298508dc8756f" + dependencies: + ansi-regex "^4.0.0" + strip-bom@3.0.0, strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -9615,13 +9384,7 @@ strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - dependencies: - get-stdin "^4.0.1" - -strip-json-comments@~2.0.1: +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" @@ -9632,17 +9395,17 @@ style-loader@^0.18.2: loader-utils "^1.0.2" schema-utils "^0.3.0" -styled-components-breakpoint@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/styled-components-breakpoint/-/styled-components-breakpoint-1.0.1.tgz#51fb474d9449e228b6f3f2cd232631ec65c149bc" - styled-components-breakpoint@^2.0.2: version "2.1.0" resolved "https://registry.yarnpkg.com/styled-components-breakpoint/-/styled-components-breakpoint-2.1.0.tgz#839370362c1e084a23d1155286c9a8a1f2af853f" -styled-components-grid@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/styled-components-grid/-/styled-components-grid-2.2.0.tgz#bbbc36209912e124717ddfbf796483b5fa2461a0" +styled-components-breakpoint@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/styled-components-breakpoint/-/styled-components-breakpoint-2.1.1.tgz#37c1b92b0e96c1bbc5d293724d7a114daaa15fca" + +styled-components-grid@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/styled-components-grid/-/styled-components-grid-2.2.1.tgz#900c0ac91970f40d04eb17795eab6b9bd4ca9ca9" dependencies: react-create-component-from-tag-prop "^1.4.0" styled-components-breakpoint "^2.0.2" @@ -9663,9 +9426,9 @@ styled-components@^4.1.3: stylis-rule-sheet "^0.0.10" supports-color "^5.5.0" -styled-normalize@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/styled-normalize/-/styled-normalize-2.2.1.tgz#c93a007c0339a69e3254eeef8cb6a5a96e5ca4eb" +styled-normalize@^8.0.4: + version "8.0.4" + resolved "https://registry.yarnpkg.com/styled-normalize/-/styled-normalize-8.0.4.tgz#6a0885dc16c61d88813dab8f5137da928fe0c947" stylis-rule-sheet@^0.0.10: version "0.0.10" @@ -9734,17 +9497,6 @@ symbol-tree@^3.2.1: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" -table@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.1.tgz#a8116c133fac2c61f4a420ab6cdf5c4d61f0e435" - dependencies: - ajv "^4.7.0" - ajv-keywords "^1.0.0" - chalk "^1.1.1" - lodash "^4.0.0" - slice-ansi "0.0.4" - string-width "^2.0.0" - table@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc" @@ -9756,6 +9508,15 @@ table@^4.0.2: slice-ansi "1.0.0" string-width "^2.1.1" +table@^5.0.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/table/-/table-5.2.1.tgz#e78463702b1be9f7131c39860bcfb1b81114c2a1" + dependencies: + ajv "^6.6.1" + lodash "^4.17.11" + slice-ansi "2.0.0" + string-width "^2.1.1" + tapable@^0.2.7: version "0.2.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" @@ -9803,7 +9564,7 @@ test-exclude@^4.1.1: read-pkg-up "^1.0.1" require-main-filename "^1.0.1" -text-table@~0.2.0: +text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" @@ -9979,10 +9740,6 @@ tr46@^1.0.0: version "0.3.9" resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -9999,9 +9756,9 @@ trough@^1.0.0: version "1.0.1" resolved "https://registry.npmjs.org/trough/-/trough-1.0.1.tgz#a9fd8b0394b0ae8fff82e0633a0a36ccad5b5f86" -tryit@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" +tslib@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" tsscmp@1.0.5: version "1.0.5" @@ -10263,6 +10020,12 @@ uri-js@^4.2.1: dependencies: punycode "^2.1.0" +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + dependencies: + punycode "^2.1.0" + url-loader@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" @@ -10336,7 +10099,7 @@ uuid@3.1.0, uuid@^3.0.0, uuid@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" -uuid@^2.0.1, uuid@^2.0.3: +uuid@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" @@ -10463,18 +10226,18 @@ walker@~1.0.5: dependencies: makeerror "1.0.x" -warning@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/warning/-/warning-2.1.0.tgz#21220d9c63afc77a8c92111e011af705ce0c6901" - dependencies: - loose-envify "^1.0.0" - warning@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" dependencies: loose-envify "^1.0.0" +warning@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.2.tgz#aa6876480872116fa3e11d434b0d0d8d91e44607" + dependencies: + loose-envify "^1.0.0" + watch@~0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" @@ -10598,7 +10361,7 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@^1.0.5, which@^1.2.10, which@^1.2.12, which@^1.2.9, which@^1.3.0: +which@^1.2.10, which@^1.2.12, which@^1.2.9, which@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: @@ -10718,13 +10481,6 @@ xmlbuilder@4.2.1, xmlbuilder@^4.1.0: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" -xtend@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.0.6.tgz#5ea657a6dba447069c2e59c58a1138cb0c5e6cee" - dependencies: - is-object "~0.1.2" - object-keys "~0.2.0" - y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" From 1768a1921d172492c89f6eeb20906fb921c9c091 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Tue, 22 Jan 2019 12:43:54 +0000 Subject: [PATCH 026/237] =?UTF-8?q?Fixes:=20Issue=20with=20embeds=20disapp?= =?UTF-8?q?earing=20=F0=9F=99=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 2abc7be7d..dba6a13fd 100644 --- a/package.json +++ b/package.json @@ -151,7 +151,7 @@ "react-waypoint": "^7.3.1", "redis": "^2.6.2", "redis-lock": "^0.1.0", - "rich-markdown-editor": "^8.1.3", + "rich-markdown-editor": "^8.1.4", "safestart": "1.1.0", "sequelize": "4.28.6", "sequelize-cli": "^2.7.0", diff --git a/yarn.lock b/yarn.lock index b4f9711b3..856470ca4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8571,9 +8571,9 @@ retry-axios@0.3.2, retry-axios@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-0.3.2.tgz#5757c80f585b4cc4c4986aa2ffd47a60c6d35e13" -rich-markdown-editor@^8.1.3: - version "8.1.3" - resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-8.1.3.tgz#77af94ecd3d3f18b3dc8f364757ecd6553ec5267" +rich-markdown-editor@^8.1.4: + version "8.1.4" + resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-8.1.4.tgz#45ac1f537419f02fed3fe0632ac685a194a1f011" dependencies: "@wikifactory/slate-edit-blockquote" "^0.7.1" "@wikifactory/slate-edit-code" "^0.16.0" From 0ce50781d7c4ad32cd25f97bd0622989dc49e107 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 26 Jan 2019 13:01:33 +0000 Subject: [PATCH 027/237] Fixes: Redirects do not push into history stack --- app/components/DropToImport.js | 2 +- app/components/Editor/Editor.js | 2 +- app/components/Layout.js | 2 +- app/menus/AccountMenu.js | 2 +- app/menus/CollectionMenu.js | 2 +- app/menus/DocumentMenu.js | 2 +- app/menus/NewChildDocumentMenu.js | 2 +- app/menus/NewDocumentMenu.js | 2 +- app/menus/ShareMenu.js | 2 +- app/scenes/Collection.js | 2 +- app/scenes/Document/components/Header.js | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/components/DropToImport.js b/app/components/DropToImport.js index 2d6693466..3be91370a 100644 --- a/app/components/DropToImport.js +++ b/app/components/DropToImport.js @@ -77,7 +77,7 @@ class DropToImport extends React.Component { ...rest } = this.props; - if (this.redirectTo) return ; + if (this.redirectTo) return ; if (this.props.disabled) return this.props.children; return ( diff --git a/app/components/Editor/Editor.js b/app/components/Editor/Editor.js index 2abba0e1e..eda2a9d30 100644 --- a/app/components/Editor/Editor.js +++ b/app/components/Editor/Editor.js @@ -74,7 +74,7 @@ class Editor extends React.Component { }; render() { - if (this.redirectTo) return ; + if (this.redirectTo) return ; return ( { const showSidebar = auth.authenticated && user && team; if (auth.isSuspended) return ; - if (this.redirectTo) return ; + if (this.redirectTo) return ; return ( diff --git a/app/menus/AccountMenu.js b/app/menus/AccountMenu.js index ad3cda0b7..257bad6ae 100644 --- a/app/menus/AccountMenu.js +++ b/app/menus/AccountMenu.js @@ -41,7 +41,7 @@ class AccountMenu extends React.Component { }; render() { - if (this.redirectTo) return ; + if (this.redirectTo) return ; return ( { }; render() { - if (this.redirectTo) return ; + if (this.redirectTo) return ; const { collection, label, onOpen, onClose } = this.props; diff --git a/app/menus/DocumentMenu.js b/app/menus/DocumentMenu.js index ea66b0206..92f92c8bf 100644 --- a/app/menus/DocumentMenu.js +++ b/app/menus/DocumentMenu.js @@ -82,7 +82,7 @@ class DocumentMenu extends React.Component { }; render() { - if (this.redirectTo) return ; + if (this.redirectTo) return ; const { document, label, className, showPrint, auth } = this.props; const canShareDocuments = auth.team && auth.team.sharing; diff --git a/app/menus/NewChildDocumentMenu.js b/app/menus/NewChildDocumentMenu.js index f7ca9e1fb..f0966d512 100644 --- a/app/menus/NewChildDocumentMenu.js +++ b/app/menus/NewChildDocumentMenu.js @@ -34,7 +34,7 @@ class NewChildDocumentMenu extends React.Component { }; render() { - if (this.redirectTo) return ; + if (this.redirectTo) return ; const { label, document, ...rest } = this.props; const { collection } = document; diff --git a/app/menus/NewDocumentMenu.js b/app/menus/NewDocumentMenu.js index d39a3e50b..7ccd909d3 100644 --- a/app/menus/NewDocumentMenu.js +++ b/app/menus/NewDocumentMenu.js @@ -35,7 +35,7 @@ class NewDocumentMenu extends React.Component { }; render() { - if (this.redirectTo) return ; + if (this.redirectTo) return ; const { collections, label, ...rest } = this.props; diff --git a/app/menus/ShareMenu.js b/app/menus/ShareMenu.js index fb78e7614..d73624c4e 100644 --- a/app/menus/ShareMenu.js +++ b/app/menus/ShareMenu.js @@ -44,7 +44,7 @@ class ShareMenu extends React.Component { }; render() { - if (this.redirectTo) return ; + if (this.redirectTo) return ; const { share, label, onOpen, onClose } = this.props; diff --git a/app/scenes/Collection.js b/app/scenes/Collection.js index 9bd7eb00b..f8ac69580 100644 --- a/app/scenes/Collection.js +++ b/app/scenes/Collection.js @@ -117,7 +117,7 @@ class CollectionScene extends React.Component { render() { const { documents } = this.props; - if (this.redirectTo) return ; + if (this.redirectTo) return ; if (!this.isFetching && !this.collection) return ; const pinnedDocuments = this.collection diff --git a/app/scenes/Document/components/Header.js b/app/scenes/Document/components/Header.js index 8996012d6..54c78847a 100644 --- a/app/scenes/Document/components/Header.js +++ b/app/scenes/Document/components/Header.js @@ -87,7 +87,7 @@ class Header extends React.Component { }; render() { - if (this.redirectTo) return ; + if (this.redirectTo) return ; const { document, From e7e94cdef25fe0ffb2e59385ac4de9789498a223 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 26 Jan 2019 17:08:00 +0000 Subject: [PATCH 028/237] Bump RME --- package.json | 2 +- yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index dba6a13fd..784d11b3b 100644 --- a/package.json +++ b/package.json @@ -151,7 +151,7 @@ "react-waypoint": "^7.3.1", "redis": "^2.6.2", "redis-lock": "^0.1.0", - "rich-markdown-editor": "^8.1.4", + "rich-markdown-editor": "^8.1.5", "safestart": "1.1.0", "sequelize": "4.28.6", "sequelize-cli": "^2.7.0", diff --git a/yarn.lock b/yarn.lock index 856470ca4..b5c062985 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8571,9 +8571,9 @@ retry-axios@0.3.2, retry-axios@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-0.3.2.tgz#5757c80f585b4cc4c4986aa2ffd47a60c6d35e13" -rich-markdown-editor@^8.1.4: - version "8.1.4" - resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-8.1.4.tgz#45ac1f537419f02fed3fe0632ac685a194a1f011" +rich-markdown-editor@^8.1.5: + version "8.1.5" + resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-8.1.5.tgz#11b47a9b4c6fb13edf507010e7111944e9fbfc90" dependencies: "@wikifactory/slate-edit-blockquote" "^0.7.1" "@wikifactory/slate-edit-code" "^0.16.0" From b46db2555320202970092c574a1339f8c94b40ae Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 26 Jan 2019 17:28:08 +0000 Subject: [PATCH 029/237] Fixes: No redirect after doc import --- app/components/DropToImport.js | 13 +++++++------ app/menus/CollectionMenu.js | 15 +++++---------- app/utils/importFile.js | 4 ++-- 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/app/components/DropToImport.js b/app/components/DropToImport.js index 3be91370a..e43eb1dbf 100644 --- a/app/components/DropToImport.js +++ b/app/components/DropToImport.js @@ -2,7 +2,7 @@ import * as React from 'react'; import { observable } from 'mobx'; import { observer, inject } from 'mobx-react'; -import { Redirect } from 'react-router-dom'; +import { withRouter } from 'react-router-dom'; import { createGlobalStyle } from 'styled-components'; import invariant from 'invariant'; import importFile from 'utils/importFile'; @@ -10,6 +10,8 @@ import Dropzone from 'react-dropzone'; import DocumentsStore from 'stores/DocumentsStore'; import LoadingIndicator from 'components/LoadingIndicator'; +const EMPTY_OBJECT = {}; + type Props = { children: React.Node, collectionId: string, @@ -18,6 +20,7 @@ type Props = { rejectClassName?: string, documents: DocumentsStore, disabled: boolean, + history: Object, }; export const GlobalStyles = createGlobalStyle` @@ -35,7 +38,6 @@ export const GlobalStyles = createGlobalStyle` @observer class DropToImport extends React.Component { @observable isImporting: boolean = false; - @observable redirectTo: ?string; onDropAccepted = async (files = []) => { this.isImporting = true; @@ -60,7 +62,7 @@ class DropToImport extends React.Component { }); if (redirect) { - this.redirectTo = doc.url; + this.props.history.push(doc.url); } } } finally { @@ -77,14 +79,13 @@ class DropToImport extends React.Component { ...rest } = this.props; - if (this.redirectTo) return ; if (this.props.disabled) return this.props.children; return ( { } } -export default inject('documents')(DropToImport); +export default inject('documents')(withRouter(DropToImport)); diff --git a/app/menus/CollectionMenu.js b/app/menus/CollectionMenu.js index c586b3430..50fb6db61 100644 --- a/app/menus/CollectionMenu.js +++ b/app/menus/CollectionMenu.js @@ -2,7 +2,7 @@ import * as React from 'react'; import { observable } from 'mobx'; import { inject, observer } from 'mobx-react'; -import { Redirect } from 'react-router-dom'; +import { withRouter } from 'react-router-dom'; import styled from 'styled-components'; import { MoreIcon } from 'outline-icons'; import Modal from 'components/Modal'; @@ -22,6 +22,7 @@ type Props = { ui: UiStore, documents: DocumentsStore, collection: Collection, + history: Object, }; @observer @@ -30,14 +31,10 @@ class CollectionMenu extends React.Component { @observable permissionsModalOpen: boolean = false; @observable redirectTo: ?string; - componentDidUpdate() { - this.redirectTo = undefined; - } - onNewDocument = (ev: SyntheticEvent<*>) => { ev.preventDefault(); const { collection } = this.props; - this.redirectTo = `${collection.url}/new`; + this.props.history.push(`${collection.url}/new`); }; onImportDocument = (ev: SyntheticEvent<*>) => { @@ -56,7 +53,7 @@ class CollectionMenu extends React.Component { documents: this.props.documents, collectionId: this.props.collection.id, }); - this.redirectTo = document.url; + this.props.history.push(document.url); } catch (err) { this.props.ui.showToast(err.message); } @@ -90,8 +87,6 @@ class CollectionMenu extends React.Component { }; render() { - if (this.redirectTo) return ; - const { collection, label, onOpen, onClose } = this.props; return ( @@ -149,4 +144,4 @@ const HiddenInput = styled.input` visibility: hidden; `; -export default inject('ui', 'documents')(CollectionMenu); +export default inject('ui', 'documents')(withRouter(CollectionMenu)); diff --git a/app/utils/importFile.js b/app/utils/importFile.js index ebd981517..88052a8a9 100644 --- a/app/utils/importFile.js +++ b/app/utils/importFile.js @@ -27,9 +27,9 @@ const importFile = async ({ if (documentId) data.parentDocument = documentId; - const document = new Document(data, documents); + let document = new Document(data, documents); try { - await document.save({ publish: true }); + document = await document.save({ publish: true }); resolve(document); } catch (err) { reject(err); From 70d30e31b9979ad0d29165f5a3bdd5e95902d222 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 26 Jan 2019 18:01:13 +0000 Subject: [PATCH 030/237] Fixes: Quick fix for document move not working --- app/scenes/Document/Document.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/scenes/Document/Document.js b/app/scenes/Document/Document.js index 3ee00115f..534ff0c65 100644 --- a/app/scenes/Document/Document.js +++ b/app/scenes/Document/Document.js @@ -156,7 +156,9 @@ class DocumentScene extends React.Component { this.viewTimeout = setTimeout(document.view, MARK_AS_VIEWED_AFTER); } - if (!this.revision) { + const isMove = props.location.pathname.match(/move$/); + const canRedirect = !this.revision && !isMove; + if (canRedirect) { const canonicalUrl = updateDocumentUrl( props.match.url, document.url From a2434988b49a54ef6314c0183e9b223f677cb3f5 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 26 Jan 2019 18:05:58 +0000 Subject: [PATCH 031/237] Fixes: Overflow of long titles in move dialog --- app/components/PathToDocument.js | 72 +++++++++++++++++--------------- 1 file changed, 39 insertions(+), 33 deletions(-) diff --git a/app/components/PathToDocument.js b/app/components/PathToDocument.js index e739808f1..8ac9d8c4c 100644 --- a/app/components/PathToDocument.js +++ b/app/components/PathToDocument.js @@ -8,37 +8,6 @@ import Flex from 'shared/components/Flex'; import Document from 'models/Document'; import type { DocumentPath } from 'stores/CollectionsStore'; -const StyledGoToIcon = styled(GoToIcon)``; - -const ResultWrapper = styled.div` - display: flex; - margin-bottom: 10px; - - color: ${props => props.theme.text}; - cursor: default; -`; - -const ResultWrapperLink = styled(ResultWrapper.withComponent('a'))` - height: 32px; - padding-top: 3px; - padding-left: 5px; - - &:hover, - &:active, - &:focus { - margin-left: 0px; - border-radius: 2px; - background: ${props => props.theme.black}; - color: ${props => props.theme.smokeLight}; - outline: none; - cursor: pointer; - - ${StyledGoToIcon} { - fill: ${props => props.theme.white}; - } - } -`; - type Props = { result: DocumentPath, document?: Document, @@ -76,12 +45,12 @@ class PathToDocument extends React.Component { return ( {result.path - .map(doc => {doc.title}) + .map(doc => {doc.title}) .reduce((prev, curr) => [prev, , curr])} {document && ( {' '} - {document.title} + {document.title} )} @@ -89,4 +58,41 @@ class PathToDocument extends React.Component { } } +const Title = styled.span` + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +`; + +const StyledGoToIcon = styled(GoToIcon)``; + +const ResultWrapper = styled.div` + display: flex; + margin-bottom: 10px; + + color: ${props => props.theme.text}; + cursor: default; +`; + +const ResultWrapperLink = styled(ResultWrapper.withComponent('a'))` + height: 32px; + padding-top: 3px; + padding-left: 5px; + + &:hover, + &:active, + &:focus { + margin-left: 0px; + border-radius: 2px; + background: ${props => props.theme.black}; + color: ${props => props.theme.smokeLight}; + outline: none; + cursor: pointer; + + ${StyledGoToIcon} { + fill: ${props => props.theme.white}; + } + } +`; + export default PathToDocument; From 1a6a7d04e517d4a1935c72c9060ba91f4b60ac4d Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sun, 27 Jan 2019 00:21:22 +0000 Subject: [PATCH 032/237] Closes #866 - Updated Slack Icons --- app/components/Sidebar/icons/Slack.js | 2 +- shared/components/SlackLogo.js | 26 +++++++++++++++++--------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/app/components/Sidebar/icons/Slack.js b/app/components/Sidebar/icons/Slack.js index 133b14be8..edde2f849 100644 --- a/app/components/Sidebar/icons/Slack.js +++ b/app/components/Sidebar/icons/Slack.js @@ -11,7 +11,7 @@ export default function SlackIcon(props: *) { version="1.1" {...props} > - + ); } diff --git a/shared/components/SlackLogo.js b/shared/components/SlackLogo.js index ebc9d3f74..22831b004 100644 --- a/shared/components/SlackLogo.js +++ b/shared/components/SlackLogo.js @@ -17,15 +17,23 @@ function SlackLogo({ size = 34, fill = '#FFF', className }: Props) { xmlns="http://www.w3.org/2000/svg" className={className} > - - - + + + + + + + + + + + + + + + + + ); From 476bab9333920bfa760b68b1c6b9c2de16feada2 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sun, 27 Jan 2019 12:30:53 +0000 Subject: [PATCH 033/237] Fixes: Welcome email dashboard location (#886) * Fixes: Welcome email dashboard location Updated logo in email * :green_heart: --- public/email/header-logo.png | Bin 7748 -> 1882 bytes server/__snapshots__/mailer.test.js.snap | 4 ++-- server/emails/WelcomeEmail.js | 14 ++++++++------ server/emails/components/Body.js | 2 +- server/emails/components/Header.js | 4 ++-- server/mailer.js | 6 +++--- server/mailer.test.js | 5 ++++- server/models/User.js | 7 +++++-- 8 files changed, 25 insertions(+), 17 deletions(-) diff --git a/public/email/header-logo.png b/public/email/header-logo.png index 8340b6a3e555f96de1568c1e84a9b2f0cfaea58c..304d33dee440a12f3630be7fe7c850c403b0abba 100644 GIT binary patch literal 1882 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 KMNUMnLSTZgQ|46w diff --git a/server/__snapshots__/mailer.test.js.snap b/server/__snapshots__/mailer.test.js.snap index c7071644c..c12832725 100644 --- a/server/__snapshots__/mailer.test.js.snap +++ b/server/__snapshots__/mailer.test.js.snap @@ -43,7 +43,7 @@ Object { Outline is a place for your team to build and share knowledge. -
     
    \\"Outline\\"
     

    Welcome to Outline!

    Outline is a place for your team to build and share knowledge.

    To get started, head to your dashboard and try creating a collection to help document your workflow, create playbooks or help with team onboarding.

    You can also import existing Markdown documents by dragging and dropping them to your collections.

     

    View my dashboard

     
    OutlineTwitterSpectrum
    +
     
    \\"Outline\\"
     

    Welcome to Outline!

    Outline is a place for your team to build and share knowledge.

    To get started, head to your dashboard and try creating a collection to help document your workflow, create playbooks or help with team onboarding.

    You can also import existing Markdown documents by dragging and dropping them to your collections.

     

    View my dashboard

     
    OutlineTwitterSpectrum
    @@ -61,7 +61,7 @@ To get started, head to your dashboard and try creating a collection to help doc You can also import existing Markdown documents by dragging and dropping them to your collections. -http://localhost:3000/dashboard +http://example.com/dashboard ", "to": "user@example.com", } diff --git a/server/emails/WelcomeEmail.js b/server/emails/WelcomeEmail.js index 29caabfba..62b106d2b 100644 --- a/server/emails/WelcomeEmail.js +++ b/server/emails/WelcomeEmail.js @@ -8,7 +8,11 @@ import Header from './components/Header'; import Footer from './components/Footer'; import EmptySpace from './components/EmptySpace'; -export const welcomeEmailText = ` +export type Props = { + teamUrl: string, +}; + +export const welcomeEmailText = ({ teamUrl }: Props) => ` Welcome to Outline! Outline is a place for your team to build and share knowledge. @@ -17,10 +21,10 @@ To get started, head to your dashboard and try creating a collection to help doc You can also import existing Markdown documents by dragging and dropping them to your collections. -${process.env.URL}/dashboard +${teamUrl}/dashboard `; -export const WelcomeEmail = () => { +export const WelcomeEmail = ({ teamUrl }: Props) => { return (
    @@ -39,9 +43,7 @@ export const WelcomeEmail = () => {

    - +

    diff --git a/server/emails/components/Body.js b/server/emails/components/Body.js index 2adc4286c..06c494e64 100644 --- a/server/emails/components/Body.js +++ b/server/emails/components/Body.js @@ -14,7 +14,7 @@ export default ({ children }: Props) => { - + {children} diff --git a/server/emails/components/Header.js b/server/emails/components/Header.js index f64849c78..fd25e4cb2 100644 --- a/server/emails/components/Header.js +++ b/server/emails/components/Header.js @@ -13,8 +13,8 @@ export default () => { Outline diff --git a/server/mailer.js b/server/mailer.js index 274a8b33b..f417b4fe2 100644 --- a/server/mailer.js +++ b/server/mailer.js @@ -83,14 +83,14 @@ export class Mailer { } }; - welcome = async (opts: { to: string }) => { + welcome = async (opts: { to: string, teamUrl: string }) => { this.sendMail({ to: opts.to, title: 'Welcome to Outline', previewText: 'Outline is a place for your team to build and share knowledge.', - html: , - text: welcomeEmailText, + html: , + text: welcomeEmailText(opts), }); }; diff --git a/server/mailer.test.js b/server/mailer.test.js index 7d2f6e68b..fc0d49455 100644 --- a/server/mailer.test.js +++ b/server/mailer.test.js @@ -16,7 +16,10 @@ describe('Mailer', () => { }); test('#welcome', () => { - fakeMailer.welcome({ to: 'user@example.com' }); + fakeMailer.welcome({ + to: 'user@example.com', + teamUrl: 'http://example.com', + }); expect(sendMailOutput).toMatchSnapshot(); }); }); diff --git a/server/models/User.js b/server/models/User.js index f2070f9cf..e5ef8d4c1 100644 --- a/server/models/User.js +++ b/server/models/User.js @@ -6,7 +6,7 @@ import subMinutes from 'date-fns/sub_minutes'; import { DataTypes, sequelize, encryptedFields } from '../sequelize'; import { publicS3Endpoint, uploadToS3FromUrl } from '../utils/s3'; import { sendEmail } from '../mailer'; -import { Star, Collection, NotificationSetting, ApiKey } from '.'; +import { Star, Team, Collection, NotificationSetting, ApiKey } from '.'; const User = sequelize.define( 'user', @@ -158,7 +158,10 @@ User.beforeDestroy(checkLastAdmin); User.beforeDestroy(removeIdentifyingInfo); User.beforeSave(uploadAvatar); User.beforeCreate(setRandomJwtSecret); -User.afterCreate(user => sendEmail('welcome', user.email)); +User.afterCreate(async user => { + const team = await Team.findById(user.teamId); + sendEmail('welcome', user.email, { teamUrl: team.url }); +}); // By default when a user signs up we subscribe them to email notifications // when documents they created are edited by other team members and onboarding From c2e58898d8a3eced980f34be6fbe8f36729578ed Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sun, 27 Jan 2019 22:43:40 +0000 Subject: [PATCH 034/237] Fixes: Multiline blockquotes collapse --- app/scenes/Document/components/plugins.js | 1 + package.json | 2 +- yarn.lock | 14 +++++++------- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/app/scenes/Document/components/plugins.js b/app/scenes/Document/components/plugins.js index 7d0d04e95..4be25e972 100644 --- a/app/scenes/Document/components/plugins.js +++ b/app/scenes/Document/components/plugins.js @@ -21,6 +21,7 @@ export default [ if (node.object !== 'block') return false; if (node.type !== 'paragraph') return false; if (node.text !== '') return false; + if (editor.value.document.getDepth(node.key) !== 1) return false; return true; }, }), diff --git a/package.json b/package.json index 784d11b3b..33affc358 100644 --- a/package.json +++ b/package.json @@ -151,7 +151,7 @@ "react-waypoint": "^7.3.1", "redis": "^2.6.2", "redis-lock": "^0.1.0", - "rich-markdown-editor": "^8.1.5", + "rich-markdown-editor": "^8.1.6", "safestart": "1.1.0", "sequelize": "4.28.6", "sequelize-cli": "^2.7.0", diff --git a/yarn.lock b/yarn.lock index b5c062985..9f6e2378a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8571,9 +8571,9 @@ retry-axios@0.3.2, retry-axios@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-0.3.2.tgz#5757c80f585b4cc4c4986aa2ffd47a60c6d35e13" -rich-markdown-editor@^8.1.5: - version "8.1.5" - resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-8.1.5.tgz#11b47a9b4c6fb13edf507010e7111944e9fbfc90" +rich-markdown-editor@^8.1.6: + version "8.1.6" + resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-8.1.6.tgz#d16612df356b40d2accb43ef46f9dab9fdbc174b" dependencies: "@wikifactory/slate-edit-blockquote" "^0.7.1" "@wikifactory/slate-edit-code" "^0.16.0" @@ -8599,7 +8599,7 @@ rich-markdown-editor@^8.1.5: slate "^0.44.0" slate-collapse-on-escape "^0.8.1" slate-drop-or-paste-images "^0.9.1" - slate-md-serializer "^5.2.2" + slate-md-serializer "^5.2.3" slate-paste-linkify "^0.7.0" slate-plain-serializer "0.6.33" slate-react "^0.21.15" @@ -8977,9 +8977,9 @@ slate-hotkeys@^0.2.8: is-hotkey "0.1.4" slate-dev-environment "^0.2.1" -slate-md-serializer@^5.2.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/slate-md-serializer/-/slate-md-serializer-5.2.2.tgz#86003e476746af3361d6ccf61c1cb41e9494eb6e" +slate-md-serializer@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/slate-md-serializer/-/slate-md-serializer-5.2.3.tgz#45e67f37dca2bfc2c4ea7b17206a1c653d40e55d" dependencies: hashtag-regex "^2.0.0" From 945e7ffb7bbca907544e7aa5b9fc2fef61314ce5 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Fri, 8 Feb 2019 10:23:02 +0700 Subject: [PATCH 035/237] Fixes: Imported tables are normalized out of document --- package.json | 2 +- yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 33affc358..d33bdc4f8 100644 --- a/package.json +++ b/package.json @@ -151,7 +151,7 @@ "react-waypoint": "^7.3.1", "redis": "^2.6.2", "redis-lock": "^0.1.0", - "rich-markdown-editor": "^8.1.6", + "rich-markdown-editor": "^8.1.7", "safestart": "1.1.0", "sequelize": "4.28.6", "sequelize-cli": "^2.7.0", diff --git a/yarn.lock b/yarn.lock index 9f6e2378a..ed836004a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8571,9 +8571,9 @@ retry-axios@0.3.2, retry-axios@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-0.3.2.tgz#5757c80f585b4cc4c4986aa2ffd47a60c6d35e13" -rich-markdown-editor@^8.1.6: - version "8.1.6" - resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-8.1.6.tgz#d16612df356b40d2accb43ef46f9dab9fdbc174b" +rich-markdown-editor@^8.1.7: + version "8.1.7" + resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-8.1.7.tgz#d74692e6781b6e08b1b1f4affe7fcbc79ed0cc06" dependencies: "@wikifactory/slate-edit-blockquote" "^0.7.1" "@wikifactory/slate-edit-code" "^0.16.0" From be85e8a6e0253a12c32b18db0464c4498cccb51d Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Fri, 8 Feb 2019 10:29:19 +0700 Subject: [PATCH 036/237] Closes #895 - Chrome 72 changed flexbox behavior --- app/scenes/Document/components/Editor.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/scenes/Document/components/Editor.js b/app/scenes/Document/components/Editor.js index 980c1e7a0..6dd4b5170 100644 --- a/app/scenes/Document/components/Editor.js +++ b/app/scenes/Document/components/Editor.js @@ -48,9 +48,6 @@ class DocumentEditor extends React.Component { } const StyledEditor = styled(Editor)` - display: flex; - flex: 0; - p { ${Placeholder} { visibility: hidden; From 721332e87a88e463ceff50231ee0a29f3ccf7308 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 9 Feb 2019 16:09:02 +0700 Subject: [PATCH 037/237] =?UTF-8?q?Update=20RME=20=E2=80=93=20Fixes:=20Ind?= =?UTF-8?q?ividual=20code=20lines=20are=20scrollable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index d33bdc4f8..546d90757 100644 --- a/package.json +++ b/package.json @@ -151,7 +151,7 @@ "react-waypoint": "^7.3.1", "redis": "^2.6.2", "redis-lock": "^0.1.0", - "rich-markdown-editor": "^8.1.7", + "rich-markdown-editor": "^8.1.9", "safestart": "1.1.0", "sequelize": "4.28.6", "sequelize-cli": "^2.7.0", diff --git a/yarn.lock b/yarn.lock index ed836004a..2109a6e94 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8571,9 +8571,9 @@ retry-axios@0.3.2, retry-axios@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-0.3.2.tgz#5757c80f585b4cc4c4986aa2ffd47a60c6d35e13" -rich-markdown-editor@^8.1.7: - version "8.1.7" - resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-8.1.7.tgz#d74692e6781b6e08b1b1f4affe7fcbc79ed0cc06" +rich-markdown-editor@^8.1.9: + version "8.1.9" + resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-8.1.9.tgz#67b057ecf9905bbacbda5268c956126b84234a7f" dependencies: "@wikifactory/slate-edit-blockquote" "^0.7.1" "@wikifactory/slate-edit-code" "^0.16.0" From 188f70b676ee3857a949504eecad5932661a22ba Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 9 Feb 2019 16:17:54 +0700 Subject: [PATCH 038/237] =?UTF-8?q?Fixes=20#893=20=E2=80=93=20Allow=20link?= =?UTF-8?q?s=20to=20different=20subdomains=20on=20same=20domain=20as=20wik?= =?UTF-8?q?i?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/utils/isInternalUrl.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/utils/isInternalUrl.js b/app/utils/isInternalUrl.js index 2143c1af4..2177d09c9 100644 --- a/app/utils/isInternalUrl.js +++ b/app/utils/isInternalUrl.js @@ -4,11 +4,12 @@ import { parseDomain } from '../../shared/utils/domains'; export default function isInternalUrl(href: string) { if (href[0] === '/') return true; - const outline = parseDomain(BASE_URL); + const outline = parseDomain(window.location.href); const parsed = parseDomain(href); if ( parsed && outline && + parsed.subdomain === outline.subdomain && parsed.domain === outline.domain && parsed.tld === outline.tld ) { From fdb49cf1533b0d5fdeae31f37f390dedbb3bd9a8 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Fri, 15 Feb 2019 21:48:54 -0800 Subject: [PATCH 039/237] Bump RME: Includes fix for addition marks disappearing --- package.json | 2 +- yarn.lock | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/package.json b/package.json index 546d90757..5a65834a7 100644 --- a/package.json +++ b/package.json @@ -151,7 +151,7 @@ "react-waypoint": "^7.3.1", "redis": "^2.6.2", "redis-lock": "^0.1.0", - "rich-markdown-editor": "^8.1.9", + "rich-markdown-editor": "^9.0.1", "safestart": "1.1.0", "sequelize": "4.28.6", "sequelize-cli": "^2.7.0", diff --git a/yarn.lock b/yarn.lock index 2109a6e94..31bca1a24 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8571,9 +8571,9 @@ retry-axios@0.3.2, retry-axios@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-0.3.2.tgz#5757c80f585b4cc4c4986aa2ffd47a60c6d35e13" -rich-markdown-editor@^8.1.9: - version "8.1.9" - resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-8.1.9.tgz#67b057ecf9905bbacbda5268c956126b84234a7f" +rich-markdown-editor@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-9.0.1.tgz#8e45392069fba8555484c31761a78e9025b49888" dependencies: "@wikifactory/slate-edit-blockquote" "^0.7.1" "@wikifactory/slate-edit-code" "^0.16.0" @@ -8596,7 +8596,7 @@ rich-markdown-editor@^8.1.9: react-keydown "^1.9.7" react-medium-image-zoom "^3.0.10" react-portal "^4.1.4" - slate "^0.44.0" + slate "^0.44.10" slate-collapse-on-escape "^0.8.1" slate-drop-or-paste-images "^0.9.1" slate-md-serializer "^5.2.3" @@ -9026,9 +9026,9 @@ slate-schema-violations@^0.1.39: version "0.1.39" resolved "https://registry.yarnpkg.com/slate-schema-violations/-/slate-schema-violations-0.1.39.tgz#854ab5624136419cef4c803b1823acabe11f1c15" -slate@^0.44.0: - version "0.44.9" - resolved "https://registry.yarnpkg.com/slate/-/slate-0.44.9.tgz#0fc9ba9f08b379b86c4c0a1ddebbe6bf28aa3c4b" +slate@^0.44.10: + version "0.44.10" + resolved "https://registry.yarnpkg.com/slate/-/slate-0.44.10.tgz#ac7c3e3cf85570a8723a64a8a7807c881ddbfa8a" dependencies: debug "^3.1.0" direction "^0.1.5" From 346ea4df89b1649ec8b1737f5581235052e685dd Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Fri, 15 Feb 2019 21:49:48 -0800 Subject: [PATCH 040/237] Fixes: Error when user is suspended by deleted user Fixes: Suspended user interface never displayed --- app/stores/AuthStore.js | 4 ++-- app/utils/ApiClient.js | 6 ++++-- server/middlewares/authentication.js | 5 ++++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/stores/AuthStore.js b/app/stores/AuthStore.js index 5a9fdbfc3..df7937ba8 100644 --- a/app/stores/AuthStore.js +++ b/app/stores/AuthStore.js @@ -78,9 +78,9 @@ export default class AuthStore { } }); } catch (err) { - if (err.error.error === 'user_suspended') { + if (err.error === 'user_suspended') { this.isSuspended = true; - this.suspendedContactEmail = err.error.data.adminEmail; + this.suspendedContactEmail = err.data.adminEmail; } } }; diff --git a/app/utils/ApiClient.js b/app/utils/ApiClient.js index 9b290a80e..fef4a73cd 100644 --- a/app/utils/ApiClient.js +++ b/app/utils/ApiClient.js @@ -81,8 +81,10 @@ class ApiClient { error.response = response; try { - const data = await response.json(); - error.message = data.message || ''; + const parsed = await response.json(); + error.message = parsed.message || ''; + error.error = parsed.error; + error.data = parsed.data; } catch (_err) { // we're trying to parse an error so JSON may not be valid } diff --git a/server/middlewares/authentication.js b/server/middlewares/authentication.js index dcb779ecc..ee3970e51 100644 --- a/server/middlewares/authentication.js +++ b/server/middlewares/authentication.js @@ -80,7 +80,10 @@ export default function auth(options?: { required?: boolean } = {}) { } if (user.isSuspended) { - const suspendingAdmin = await User.findById(user.suspendedById); + const suspendingAdmin = await User.findOne({ + where: { id: user.suspendedById }, + paranoid: false, + }); throw new UserSuspendedError({ adminEmail: suspendingAdmin.email }); } From 0b1a4c61847b5a2cd8c3528a669bb2183eccbda6 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Fri, 15 Feb 2019 21:52:34 -0800 Subject: [PATCH 041/237] Fixes: Server error when validating UUID against empty value --- server/middlewares/validation.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/middlewares/validation.js b/server/middlewares/validation.js index bef465826..fd9a36714 100644 --- a/server/middlewares/validation.js +++ b/server/middlewares/validation.js @@ -25,7 +25,7 @@ export default function validation() { }; ctx.assertUuid = (value, message) => { - if (!validator.isUUID(value.toString())) { + if (!validator.isUUID(value.toString() || '')) { throw new ValidationError(message); } }; From 8af7c3c264eec89afe05a1c0d935e3c38f2588b5 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sun, 17 Feb 2019 00:38:35 -0800 Subject: [PATCH 042/237] Closes #894 - Sidebar jumping regression --- app/components/DropToImport.js | 5 +++++ app/routes.js | 17 +++++++---------- app/scenes/Document/Document.js | 1 - app/scenes/Document/KeyedDocument.js | 16 ++++++++++++++++ 4 files changed, 28 insertions(+), 11 deletions(-) create mode 100644 app/scenes/Document/KeyedDocument.js diff --git a/app/components/DropToImport.js b/app/components/DropToImport.js index e43eb1dbf..68e53f304 100644 --- a/app/components/DropToImport.js +++ b/app/components/DropToImport.js @@ -20,6 +20,8 @@ type Props = { rejectClassName?: string, documents: DocumentsStore, disabled: boolean, + location: Object, + match: Object, history: Object, }; @@ -76,6 +78,9 @@ class DropToImport extends React.Component { collectionId, documents, disabled, + location, + match, + history, ...rest } = this.props; diff --git a/app/routes.js b/app/routes.js index 6beb6bfa9..6c9002eb6 100644 --- a/app/routes.js +++ b/app/routes.js @@ -1,13 +1,13 @@ // @flow import * as React from 'react'; import { Switch, Route, Redirect } from 'react-router-dom'; - import Home from 'scenes/Home'; import Dashboard from 'scenes/Dashboard'; import Starred from 'scenes/Starred'; import Drafts from 'scenes/Drafts'; import Collection from 'scenes/Collection'; import Document from 'scenes/Document'; +import KeyedDocument from 'scenes/Document/KeyedDocument'; import Search from 'scenes/Search'; import Settings from 'scenes/Settings'; import Details from 'scenes/Settings/Details'; @@ -27,19 +27,16 @@ import RouteSidebarHidden from 'components/RouteSidebarHidden'; import { matchDocumentSlug as slug } from 'utils/routeHelpers'; const NotFound = () => ; -const DocumentNew = () => ; +const NewDocument = () => ; const RedirectDocument = ({ match }: { match: Object }) => ( ); -const RemountDocument = props => ( - -); export default function Routes() { return ( - + @@ -74,7 +71,7 @@ export default function Routes() { @@ -82,14 +79,14 @@ export default function Routes() { - + diff --git a/app/scenes/Document/Document.js b/app/scenes/Document/Document.js index 534ff0c65..3c8299881 100644 --- a/app/scenes/Document/Document.js +++ b/app/scenes/Document/Document.js @@ -89,7 +89,6 @@ class DocumentScene extends React.Component { componentWillUnmount() { clearTimeout(this.viewTimeout); - this.props.ui.clearActiveDocument(); } goToDocumentCanonical = () => { diff --git a/app/scenes/Document/KeyedDocument.js b/app/scenes/Document/KeyedDocument.js new file mode 100644 index 000000000..72dd69d92 --- /dev/null +++ b/app/scenes/Document/KeyedDocument.js @@ -0,0 +1,16 @@ +// @flow +import * as React from 'react'; +import { inject } from 'mobx-react'; +import Document from '.'; + +class KeyedDocument extends React.Component<*> { + componentWillUnmount() { + this.props.ui.clearActiveDocument(); + } + + render() { + return ; + } +} + +export default inject('ui')(KeyedDocument); From 15bc0e7629e3dd3d8f985f7711fe9488c5dbb82f Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sun, 17 Feb 2019 00:39:06 -0800 Subject: [PATCH 043/237] =?UTF-8?q?Bump=20RME=20=E2=80=93=20Improves=20key?= =?UTF-8?q?board=20behavior=20around=20deleting=20inline=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 5a65834a7..746b2ed3d 100644 --- a/package.json +++ b/package.json @@ -151,7 +151,7 @@ "react-waypoint": "^7.3.1", "redis": "^2.6.2", "redis-lock": "^0.1.0", - "rich-markdown-editor": "^9.0.1", + "rich-markdown-editor": "^9.0.2", "safestart": "1.1.0", "sequelize": "4.28.6", "sequelize-cli": "^2.7.0", diff --git a/yarn.lock b/yarn.lock index 31bca1a24..e07375b88 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8571,9 +8571,9 @@ retry-axios@0.3.2, retry-axios@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-0.3.2.tgz#5757c80f585b4cc4c4986aa2ffd47a60c6d35e13" -rich-markdown-editor@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-9.0.1.tgz#8e45392069fba8555484c31761a78e9025b49888" +rich-markdown-editor@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-9.0.2.tgz#f3367058d62c277f9f04f1f34416a5c95092d0ce" dependencies: "@wikifactory/slate-edit-blockquote" "^0.7.1" "@wikifactory/slate-edit-code" "^0.16.0" From fbd311d352570162aee7e9dbe262cc1acadbdde3 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Mon, 18 Feb 2019 11:32:21 -0800 Subject: [PATCH 044/237] Add mindmeister support --- app/embeds/Mindmeister.js | 29 ++++++++++++++++++++++++ app/embeds/Mindmeister.test.js | 40 ++++++++++++++++++++++++++++++++++ app/embeds/index.js | 2 ++ 3 files changed, 71 insertions(+) create mode 100644 app/embeds/Mindmeister.js create mode 100644 app/embeds/Mindmeister.test.js diff --git a/app/embeds/Mindmeister.js b/app/embeds/Mindmeister.js new file mode 100644 index 000000000..7bbb3f4f9 --- /dev/null +++ b/app/embeds/Mindmeister.js @@ -0,0 +1,29 @@ +// @flow +import * as React from 'react'; +import Frame from './components/Frame'; + +const URL_REGEX = new RegExp( + '^https://([w.-]+.)?mindmeister.com(/maps/public_map_shell)?/(\\d+)(/.*)?$' +); + +type Props = { + url: string, + matches: string[], +}; + +export default class Mindmeister extends React.Component { + static ENABLED = [URL_REGEX]; + + render() { + console.log(this.props.matches); + const chartId = this.props.matches[3]; + + return ( + + ); + } +} diff --git a/app/embeds/Mindmeister.test.js b/app/embeds/Mindmeister.test.js new file mode 100644 index 000000000..0626df93f --- /dev/null +++ b/app/embeds/Mindmeister.test.js @@ -0,0 +1,40 @@ +/* eslint-disable flowtype/require-valid-file-annotation */ +import embeds from '.'; + +const { Mindmeister } = embeds; + +describe('Mindmeister', () => { + const match = Mindmeister.ENABLED[0]; + test('to be enabled on embed link', () => { + expect( + 'https://www.mindmeister.com/maps/public_map_shell/326377934/paper-digital-or-online-mind-mapping'.match( + match + ) + ).toBeTruthy(); + }); + + test('to be enabled on public link', () => { + expect( + 'https://www.mindmeister.com/326377934/paper-digital-or-online-mind-mapping'.match( + match + ) + ).toBeTruthy(); + }); + + test('to be enabled without www', () => { + expect( + 'https://mindmeister.com/326377934/paper-digital-or-online-mind-mapping'.match( + match + ) + ).toBeTruthy(); + }); + + test('to be enabled without slug', () => { + expect('https://mindmeister.com/326377934'.match(match)).toBeTruthy(); + }); + + test('to not be enabled elsewhere', () => { + expect('https://mindmeister.com'.match(match)).toBe(null); + expect('https://www.mindmeister.com/pricing'.match(match)).toBe(null); + }); +}); diff --git a/app/embeds/index.js b/app/embeds/index.js index dc2fdd9b3..5bff86bf8 100644 --- a/app/embeds/index.js +++ b/app/embeds/index.js @@ -9,6 +9,7 @@ import InVision from './InVision'; import Loom from './Loom'; import Lucidchart from './Lucidchart'; import Marvel from './Marvel'; +import Mindmeister from './Mindmeister'; import ModeAnalytics from './ModeAnalytics'; import Numeracy from './Numeracy'; import Prezi from './Prezi'; @@ -30,6 +31,7 @@ export default { Loom, Lucidchart, Marvel, + Mindmeister, ModeAnalytics, Numeracy, Prezi, From e283d15d7e9f494abb88607bfb3e9140e875fd08 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Mon, 18 Feb 2019 11:40:26 -0800 Subject: [PATCH 045/237] Add mindmeister content pages --- public/images/mindmeister.png | Bin 0 -> 6225 bytes public/images/screenshots/mindmeister.png | Bin 0 -> 59863 bytes server/pages/integrations/content.json | 7 +++++++ server/pages/integrations/mindmeister.md | 5 +++++ 4 files changed, 12 insertions(+) create mode 100644 public/images/mindmeister.png create mode 100644 public/images/screenshots/mindmeister.png create mode 100644 server/pages/integrations/mindmeister.md diff --git a/public/images/mindmeister.png b/public/images/mindmeister.png new file mode 100644 index 0000000000000000000000000000000000000000..f0d42ebc21c6a53f357d199c5183affe4d491f3b GIT binary patch literal 6225 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 literal 0 HcmV?d00001 diff --git a/server/pages/integrations/content.json b/server/pages/integrations/content.json index 81b3cc7a9..81fc7dd26 100644 --- a/server/pages/integrations/content.json +++ b/server/pages/integrations/content.json @@ -41,6 +41,13 @@ "category": "Collaboration", "description": "Create flowcharts and technical diagrams with ease" }, + { + "slug": "mindmeister", + "name": "Mindmeister", + "url": "https://mindmeister.com", + "category": "Collaboration", + "description": "Interactive and embeddable mind maps" + }, { "slug": "realtime-board", "name": "Realtime Board", diff --git a/server/pages/integrations/mindmeister.md b/server/pages/integrations/mindmeister.md new file mode 100644 index 000000000..cb2bef14d --- /dev/null +++ b/server/pages/integrations/mindmeister.md @@ -0,0 +1,5 @@ +In an Outline document, paste a link to a public [Mindmeister](https://mindmeister.com) mind map or embed link and it will be converted into an interactive, embedded map – right inside your document. + +![Mindmeister Outline Integration](/images/screenshots/mindmeister.png) + +> This integration works without any additional settings or authentication. From 19fc99944a80c67eb585096563e569fb84b1a034 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Tue, 19 Feb 2019 22:42:13 -0800 Subject: [PATCH 046/237] Adds 'post to channel' functionality. (#901) * Adds 'post to channel' functionality. Closes #613 * Add specs Update Slack integration marketing page * Fix specs * :green_heart: --- .env.sample | 1 + server/api/hooks.js | 68 ++++++++++++++++++++++++++-- server/api/hooks.test.js | 60 +++++++++++++++++++++++- server/pages/integrations/slack.md | 2 +- server/presenters/slackAttachment.js | 16 ++++++- 5 files changed, 138 insertions(+), 9 deletions(-) diff --git a/.env.sample b/.env.sample index bda81256c..77c6a5932 100644 --- a/.env.sample +++ b/.env.sample @@ -28,6 +28,7 @@ GOOGLE_ALLOWED_DOMAINS= # Third party credentials (optional) SLACK_VERIFICATION_TOKEN=PLxk6OlXXXXXVj3YYYY SLACK_APP_ID=A0XXXXXXX +SLACK_MESSAGE_ACTIONS=true GOOGLE_ANALYTICS_ID= BUGSNAG_KEY= GITHUB_ACCESS_TOKEN= diff --git a/server/api/hooks.js b/server/api/hooks.js index 86fb4f23e..45c1f0fbc 100644 --- a/server/api/hooks.js +++ b/server/api/hooks.js @@ -7,6 +7,7 @@ import { presentSlackAttachment } from '../presenters'; import * as Slack from '../slack'; const router = new Router(); +// triggered by a user posting a getoutline.com link in Slack router.post('hooks.unfurl', async ctx => { const { challenge, token, event } = ctx.body; if (challenge) return (ctx.body = ctx.body.challenge); @@ -46,6 +47,50 @@ router.post('hooks.unfurl', async ctx => { }); }); +// triggered by interactions with actions, dialogs, message buttons in Slack +router.post('hooks.interactive', async ctx => { + const { payload } = ctx.body; + ctx.assertPresent(payload, 'payload is required'); + + const data = JSON.parse(payload); + const { callback_id, token } = data; + ctx.assertPresent(token, 'token is required'); + ctx.assertPresent(callback_id, 'callback_id is required'); + + if (token !== process.env.SLACK_VERIFICATION_TOKEN) + throw new AuthenticationError('Invalid verification token'); + + const user = await User.find({ + where: { service: 'slack', serviceId: data.user.id }, + }); + if (!user) { + ctx.body = { + text: 'Sorry, we couldn’t find your user on this team in Outline.', + response_type: 'ephemeral', + replace_original: false, + }; + return; + } + + // we find the document based on the users teamId to ensure access + const document = await Document.find({ + where: { id: data.callback_id, teamId: user.teamId }, + }); + if (!document) throw new InvalidRequestError('Invalid document'); + + const team = await Team.findById(user.teamId); + + // respond with a public message that will be posted in the original channel + ctx.body = { + response_type: 'in_channel', + replace_original: false, + attachments: [ + presentSlackAttachment(document, team, document.getSummary()), + ], + }; +}); + +// triggered by the /outline command in Slack router.post('hooks.slack', async ctx => { const { token, user_id, text } = ctx.body; ctx.assertPresent(token, 'token is required'); @@ -53,7 +98,7 @@ router.post('hooks.slack', async ctx => { ctx.assertPresent(text, 'text is required'); if (token !== process.env.SLACK_VERIFICATION_TOKEN) - throw new AuthenticationError('Invalid token'); + throw new AuthenticationError('Invalid verification token'); const user = await User.find({ where: { @@ -61,11 +106,14 @@ router.post('hooks.slack', async ctx => { serviceId: user_id, }, }); - - if (!user) throw new InvalidRequestError('Invalid user'); + if (!user) { + ctx.body = { + text: 'Sorry, we couldn’t find your user on this team in Outline.', + }; + return; + } const team = await Team.findById(user.teamId); - const results = await Document.searchForUser(user, text, { limit: 5, }); @@ -81,7 +129,17 @@ router.post('hooks.slack', async ctx => { presentSlackAttachment( result.document, team, - queryIsInTitle ? undefined : result.context + queryIsInTitle ? undefined : result.context, + process.env.SLACK_MESSAGE_ACTIONS + ? [ + { + name: 'post', + text: 'Post to Channel', + type: 'button', + value: result.document.id, + }, + ] + : undefined ) ); } diff --git a/server/api/hooks.test.js b/server/api/hooks.test.js index 68031e928..e51b38038 100644 --- a/server/api/hooks.test.js +++ b/server/api/hooks.test.js @@ -128,7 +128,7 @@ describe('#hooks.slack', async () => { ); }); - it('should error if unknown user', async () => { + it('should respond with error if unknown user', async () => { const res = await server.post('/api/hooks.slack', { body: { token: process.env.SLACK_VERIFICATION_TOKEN, @@ -136,7 +136,10 @@ describe('#hooks.slack', async () => { text: 'Welcome', }, }); - expect(res.status).toEqual(400); + const body = await res.json(); + expect(res.status).toEqual(200); + expect(body.text.includes('Sorry')).toEqual(true); + expect(body.attachments).toEqual(undefined); }); it('should error if incorrect verification token', async () => { @@ -152,3 +155,56 @@ describe('#hooks.slack', async () => { expect(res.status).toEqual(401); }); }); + +describe('#hooks.interactive', async () => { + it('should respond with replacement message', async () => { + const user = await buildUser(); + const document = await buildDocument({ + title: 'This title contains a search term', + userId: user.id, + teamId: user.teamId, + }); + + const payload = JSON.stringify({ + token: process.env.SLACK_VERIFICATION_TOKEN, + user: { id: user.serviceId, name: user.name }, + callback_id: document.id, + }); + const res = await server.post('/api/hooks.interactive', { + body: { payload }, + }); + const body = await res.json(); + expect(res.status).toEqual(200); + expect(body.response_type).toEqual('in_channel'); + expect(body.attachments.length).toEqual(1); + expect(body.attachments[0].title).toEqual(document.title); + }); + + it('should respond with error if unknown user', async () => { + const payload = JSON.stringify({ + token: process.env.SLACK_VERIFICATION_TOKEN, + user: { id: 'not-a-user-id', name: 'unknown' }, + callback_id: 'doesnt-matter', + }); + const res = await server.post('/api/hooks.interactive', { + body: { payload }, + }); + const body = await res.json(); + expect(res.status).toEqual(200); + expect(body.text.includes('Sorry')).toEqual(true); + expect(body.attachments).toEqual(undefined); + }); + + it('should error if incorrect verification token', async () => { + const { user } = await seed(); + const payload = JSON.stringify({ + token: 'wrong-verification-token', + user: { id: user.serviceId, name: user.name }, + callback_id: 'doesnt-matter', + }); + const res = await server.post('/api/hooks.interactive', { + body: { payload }, + }); + expect(res.status).toEqual(401); + }); +}); diff --git a/server/pages/integrations/slack.md b/server/pages/integrations/slack.md index e01d1de8b..e7512189d 100644 --- a/server/pages/integrations/slack.md +++ b/server/pages/integrations/slack.md @@ -7,7 +7,7 @@ Sign In with Slack means your team doesn't have to worry about invites, password ## Search your Knowledgebase -Optionally [Connect to Slack](https://www.getoutline.com/settings/integrations/slack) to enable the `/outline` slack command. Once enabled team members can easily search your wiki from within Slack by typing `/outline search term`. +Optionally [Connect to Slack](https://www.getoutline.com/settings/integrations/slack) to enable the `/outline` slack command. Once enabled, team members can easily search your wiki from within Slack by typing `/outline search term`, and post results directly back to the Slack channel. ![Slack Search Integration](/images/screenshots/slack-search.png) diff --git a/server/presenters/slackAttachment.js b/server/presenters/slackAttachment.js index af7ec9d7c..265024904 100644 --- a/server/presenters/slackAttachment.js +++ b/server/presenters/slackAttachment.js @@ -1,7 +1,19 @@ // @flow import { Document, Team } from '../models'; -function present(document: Document, team: Team, context?: string) { +type Action = { + type: string, + text: string, + name: string, + value: string, +}; + +function present( + document: Document, + team: Team, + context?: string, + actions?: Action[] +) { // the context contains tags around search terms, we convert them here // to the markdown format that slack expects to receive. const text = context @@ -13,8 +25,10 @@ function present(document: Document, team: Team, context?: string) { title: document.title, title_link: `${team.url}${document.url}`, footer: document.collection.name, + callback_id: document.id, text, ts: document.getTimestamp(), + actions, }; } From 1d93acefebe5c5b9f3639008a15ee2e481df612b Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Wed, 20 Feb 2019 21:00:40 -0800 Subject: [PATCH 047/237] =?UTF-8?q?Bump=20RME=20=E2=80=93=20Fixes=20scroll?= =?UTF-8?q?=20to=20anchor=20closes=20#902?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 2 +- yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 746b2ed3d..3c3fa45b0 100644 --- a/package.json +++ b/package.json @@ -151,7 +151,7 @@ "react-waypoint": "^7.3.1", "redis": "^2.6.2", "redis-lock": "^0.1.0", - "rich-markdown-editor": "^9.0.2", + "rich-markdown-editor": "^9.0.3-1", "safestart": "1.1.0", "sequelize": "4.28.6", "sequelize-cli": "^2.7.0", diff --git a/yarn.lock b/yarn.lock index e07375b88..21ca9645d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8571,9 +8571,9 @@ retry-axios@0.3.2, retry-axios@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-0.3.2.tgz#5757c80f585b4cc4c4986aa2ffd47a60c6d35e13" -rich-markdown-editor@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-9.0.2.tgz#f3367058d62c277f9f04f1f34416a5c95092d0ce" +rich-markdown-editor@^9.0.3-1: + version "9.0.3-1" + resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-9.0.3-1.tgz#94f8b1949dd66e4d37d84e8227d77876adbdb2d5" dependencies: "@wikifactory/slate-edit-blockquote" "^0.7.1" "@wikifactory/slate-edit-code" "^0.16.0" From e3b105d1c08a16062bfc19744538553923bf2c0e Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Wed, 20 Feb 2019 21:08:54 -0800 Subject: [PATCH 048/237] Update Slack logo, closes #866 --- public/images/slack.png | Bin 3691 -> 6174 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/slack.png b/public/images/slack.png index d115ad0621f5c5e211aae9eb0140d588c0eecc4b..228f24d68dbed1163dc0b352ca23d406952eba2f 100755 GIT binary patch literal 6174 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 literal 3691 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 JPDHLkV1gNkV;ukh From b4796e5b35851e162ca41c697009eebc3644d1a3 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Thu, 28 Feb 2019 23:23:44 -0800 Subject: [PATCH 049/237] Fixes: Cookie encoding issues --- app/stores/AuthStore.js | 10 +++++----- package.json | 2 +- server/middlewares/authentication.js | 22 +++++++++++++--------- server/utils/renderpage.js | 4 +++- yarn.lock | 8 ++++---- 5 files changed, 26 insertions(+), 20 deletions(-) diff --git a/app/stores/AuthStore.js b/app/stores/AuthStore.js index df7937ba8..8deb015b9 100644 --- a/app/stores/AuthStore.js +++ b/app/stores/AuthStore.js @@ -1,7 +1,7 @@ // @flow import { observable, action, computed, autorun, runInAction } from 'mobx'; import invariant from 'invariant'; -import Cookie from 'js-cookie'; +import { getCookie, setCookie, removeCookie } from 'tiny-cookie'; import { client } from 'utils/ApiClient'; import { stripSubdomain } from 'shared/utils/domains'; import RootStore from 'stores/RootStore'; @@ -31,7 +31,7 @@ export default class AuthStore { this.rootStore = rootStore; this.user = data.user; this.team = data.team; - this.token = Cookie.get('accessToken'); + this.token = getCookie('accessToken'); if (this.token) setImmediate(() => this.fetch()); @@ -138,15 +138,15 @@ export default class AuthStore { this.token = null; // remove authentication token itself - Cookie.remove('accessToken', { path: '/' }); + removeCookie('accessToken', { path: '/' }); // remove session record on apex cookie const team = this.team; if (team) { - const sessions = Cookie.getJSON('sessions') || {}; + const sessions = JSON.parse(getCookie('sessions') || '{}'); delete sessions[team.id]; - Cookie.set('sessions', JSON.stringify(sessions), { + setCookie('sessions', JSON.stringify(sessions), { domain: stripSubdomain(window.location.hostname), }); this.team = null; diff --git a/package.json b/package.json index 3c3fa45b0..40146bbec 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,6 @@ "imports-loader": "0.6.5", "invariant": "^2.2.2", "isomorphic-fetch": "2.2.1", - "js-cookie": "^2.2.0", "js-search": "^1.4.2", "json-loader": "0.5.4", "jsonwebtoken": "7.0.1", @@ -163,6 +162,7 @@ "styled-components-breakpoint": "^2.1.1", "styled-components-grid": "^2.2.1", "styled-normalize": "^8.0.4", + "tiny-cookie": "^2.3.1", "tmp": "0.0.33", "uglifyjs-webpack-plugin": "1.2.5", "url-loader": "^0.6.2", diff --git a/server/middlewares/authentication.js b/server/middlewares/authentication.js index ee3970e51..efeb5035b 100644 --- a/server/middlewares/authentication.js +++ b/server/middlewares/authentication.js @@ -115,15 +115,19 @@ export default function auth(options?: { required?: boolean } = {}) { // to the teams subdomain if subdomains are enabled if (process.env.SUBDOMAINS_ENABLED === 'true' && team.subdomain) { // get any existing sessions (teams signed in) and add this team - const existing = JSON.parse(ctx.cookies.get('sessions') || '{}'); - const sessions = JSON.stringify({ - ...existing, - [team.id]: { - name: encodeURIComponent(team.name), - logoUrl: team.logoUrl, - url: encodeURIComponent(team.url), - }, - }); + const existing = JSON.parse( + decodeURIComponent(ctx.cookies.get('sessions') || '') || '{}' + ); + const sessions = encodeURIComponent( + JSON.stringify({ + ...existing, + [team.id]: { + name: team.name, + logoUrl: team.logoUrl, + url: team.url, + }, + }) + ); ctx.cookies.set('sessions', sessions, { httpOnly: false, expires, diff --git a/server/utils/renderpage.js b/server/utils/renderpage.js index 5801c75c4..f4007dd3c 100644 --- a/server/utils/renderpage.js +++ b/server/utils/renderpage.js @@ -15,7 +15,9 @@ const sheet = new ServerStyleSheet(); export default function renderpage(ctx: Object, children: React.Node) { let sessions = {}; try { - sessions = JSON.parse(ctx.cookies.get('sessions') || '{}'); + sessions = JSON.parse( + decodeURIComponent(ctx.cookies.get('sessions') || '') || '{}' + ); } catch (err) { console.error(`Sessions cookie could not be parsed: ${err}`); } diff --git a/yarn.lock b/yarn.lock index 21ca9645d..004f27b8a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5468,10 +5468,6 @@ js-beautify@^1.6.11: mkdirp "~0.5.0" nopt "~3.0.1" -js-cookie@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.0.tgz#1b2c279a6eece380a12168b92485265b35b1effb" - js-search@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/js-search/-/js-search-1.4.2.tgz#59a91e117d6badb20bf0d7643ba7577d5a81d7e2" @@ -9637,6 +9633,10 @@ timers-ext@0.1, timers-ext@^0.1.2: es5-ext "~0.10.14" next-tick "1" +tiny-cookie@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tiny-cookie/-/tiny-cookie-2.3.1.tgz#f0ea9fa194f2aed631dcd5e69ac0d6587be928c8" + tiny-emitter@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" From ad2e869dea7891d896445f060fbb4fc5cf160bc7 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 2 Mar 2019 14:55:39 -0800 Subject: [PATCH 050/237] :shirt: --- .flowconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/.flowconfig b/.flowconfig index 3c399b4c5..1eb0d77dc 100644 --- a/.flowconfig +++ b/.flowconfig @@ -4,6 +4,7 @@ .*/shared/.* [ignore] +.*/node_modules/tiny-cookie/flow/.* .*/node_modules/styled-components/.* .*/node_modules/polished/.* .*/node_modules/react-side-effect/.* From fa38ab60ebe5bd1d276743343ba6f81b31a1c00f Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 2 Mar 2019 14:58:56 -0800 Subject: [PATCH 051/237] Fixes: Unexpected token parsing sessions cookie (#905) --- .flowconfig | 1 + app/stores/AuthStore.js | 10 +++++----- package.json | 2 +- server/middlewares/authentication.js | 22 +++++++++++++--------- server/utils/renderpage.js | 4 +++- yarn.lock | 8 ++++---- 6 files changed, 27 insertions(+), 20 deletions(-) diff --git a/.flowconfig b/.flowconfig index 3c399b4c5..1eb0d77dc 100644 --- a/.flowconfig +++ b/.flowconfig @@ -4,6 +4,7 @@ .*/shared/.* [ignore] +.*/node_modules/tiny-cookie/flow/.* .*/node_modules/styled-components/.* .*/node_modules/polished/.* .*/node_modules/react-side-effect/.* diff --git a/app/stores/AuthStore.js b/app/stores/AuthStore.js index df7937ba8..8deb015b9 100644 --- a/app/stores/AuthStore.js +++ b/app/stores/AuthStore.js @@ -1,7 +1,7 @@ // @flow import { observable, action, computed, autorun, runInAction } from 'mobx'; import invariant from 'invariant'; -import Cookie from 'js-cookie'; +import { getCookie, setCookie, removeCookie } from 'tiny-cookie'; import { client } from 'utils/ApiClient'; import { stripSubdomain } from 'shared/utils/domains'; import RootStore from 'stores/RootStore'; @@ -31,7 +31,7 @@ export default class AuthStore { this.rootStore = rootStore; this.user = data.user; this.team = data.team; - this.token = Cookie.get('accessToken'); + this.token = getCookie('accessToken'); if (this.token) setImmediate(() => this.fetch()); @@ -138,15 +138,15 @@ export default class AuthStore { this.token = null; // remove authentication token itself - Cookie.remove('accessToken', { path: '/' }); + removeCookie('accessToken', { path: '/' }); // remove session record on apex cookie const team = this.team; if (team) { - const sessions = Cookie.getJSON('sessions') || {}; + const sessions = JSON.parse(getCookie('sessions') || '{}'); delete sessions[team.id]; - Cookie.set('sessions', JSON.stringify(sessions), { + setCookie('sessions', JSON.stringify(sessions), { domain: stripSubdomain(window.location.hostname), }); this.team = null; diff --git a/package.json b/package.json index 3c3fa45b0..40146bbec 100644 --- a/package.json +++ b/package.json @@ -105,7 +105,6 @@ "imports-loader": "0.6.5", "invariant": "^2.2.2", "isomorphic-fetch": "2.2.1", - "js-cookie": "^2.2.0", "js-search": "^1.4.2", "json-loader": "0.5.4", "jsonwebtoken": "7.0.1", @@ -163,6 +162,7 @@ "styled-components-breakpoint": "^2.1.1", "styled-components-grid": "^2.2.1", "styled-normalize": "^8.0.4", + "tiny-cookie": "^2.3.1", "tmp": "0.0.33", "uglifyjs-webpack-plugin": "1.2.5", "url-loader": "^0.6.2", diff --git a/server/middlewares/authentication.js b/server/middlewares/authentication.js index ee3970e51..efeb5035b 100644 --- a/server/middlewares/authentication.js +++ b/server/middlewares/authentication.js @@ -115,15 +115,19 @@ export default function auth(options?: { required?: boolean } = {}) { // to the teams subdomain if subdomains are enabled if (process.env.SUBDOMAINS_ENABLED === 'true' && team.subdomain) { // get any existing sessions (teams signed in) and add this team - const existing = JSON.parse(ctx.cookies.get('sessions') || '{}'); - const sessions = JSON.stringify({ - ...existing, - [team.id]: { - name: encodeURIComponent(team.name), - logoUrl: team.logoUrl, - url: encodeURIComponent(team.url), - }, - }); + const existing = JSON.parse( + decodeURIComponent(ctx.cookies.get('sessions') || '') || '{}' + ); + const sessions = encodeURIComponent( + JSON.stringify({ + ...existing, + [team.id]: { + name: team.name, + logoUrl: team.logoUrl, + url: team.url, + }, + }) + ); ctx.cookies.set('sessions', sessions, { httpOnly: false, expires, diff --git a/server/utils/renderpage.js b/server/utils/renderpage.js index 5801c75c4..f4007dd3c 100644 --- a/server/utils/renderpage.js +++ b/server/utils/renderpage.js @@ -15,7 +15,9 @@ const sheet = new ServerStyleSheet(); export default function renderpage(ctx: Object, children: React.Node) { let sessions = {}; try { - sessions = JSON.parse(ctx.cookies.get('sessions') || '{}'); + sessions = JSON.parse( + decodeURIComponent(ctx.cookies.get('sessions') || '') || '{}' + ); } catch (err) { console.error(`Sessions cookie could not be parsed: ${err}`); } diff --git a/yarn.lock b/yarn.lock index 21ca9645d..004f27b8a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5468,10 +5468,6 @@ js-beautify@^1.6.11: mkdirp "~0.5.0" nopt "~3.0.1" -js-cookie@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/js-cookie/-/js-cookie-2.2.0.tgz#1b2c279a6eece380a12168b92485265b35b1effb" - js-search@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/js-search/-/js-search-1.4.2.tgz#59a91e117d6badb20bf0d7643ba7577d5a81d7e2" @@ -9637,6 +9633,10 @@ timers-ext@0.1, timers-ext@^0.1.2: es5-ext "~0.10.14" next-tick "1" +tiny-cookie@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tiny-cookie/-/tiny-cookie-2.3.1.tgz#f0ea9fa194f2aed631dcd5e69ac0d6587be928c8" + tiny-emitter@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" From f705da4f3b2bedae1991e261632331943f2a48db Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 2 Mar 2019 15:39:18 -0800 Subject: [PATCH 052/237] Update dependencies --- yarn.lock | 5283 ++++++++++++++++++++++++++++------------------------- 1 file changed, 2790 insertions(+), 2493 deletions(-) diff --git a/yarn.lock b/yarn.lock index 004f27b8a..0b5bbe2dd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,27 +2,19 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" dependencies: "@babel/highlight" "^7.0.0" -"@babel/code-frame@^7.0.0-beta.35": - version "7.0.0-beta.36" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.36.tgz#2349d7ec04b3a06945ae173280ef8579b63728e4" +"@babel/generator@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.3.4.tgz#9aa48c1989257877a9d971296e5b73bfe72e446e" dependencies: - chalk "^2.0.0" - esutils "^2.0.2" - js-tokens "^3.0.0" - -"@babel/generator@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.2.tgz#18c816c70962640eab42fe8cae5f3947a5c65ccc" - dependencies: - "@babel/types" "^7.2.2" + "@babel/types" "^7.3.4" jsesc "^2.5.1" - lodash "^4.17.10" + lodash "^4.17.11" source-map "^0.5.0" trim-right "^1.0.1" @@ -46,7 +38,7 @@ dependencies: "@babel/types" "^7.0.0" -"@babel/helper-module-imports@^7.0.0": +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.0.0-beta.49": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" dependencies: @@ -66,9 +58,9 @@ esutils "^2.0.2" js-tokens "^4.0.0" -"@babel/parser@^7.0.0", "@babel/parser@^7.2.2", "@babel/parser@^7.2.3": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.3.tgz#32f5df65744b70888d17872ec106b02434ba1489" +"@babel/parser@^7.0.0", "@babel/parser@^7.2.2", "@babel/parser@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.3.4.tgz#a43357e4bbf4b92a437fb9e465c192848287f27c" "@babel/template@^7.1.0": version "7.2.2" @@ -79,33 +71,25 @@ "@babel/types" "^7.2.2" "@babel/traverse@^7.0.0": - version "7.2.3" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.3.tgz#7ff50cefa9c7c0bd2d81231fdac122f3957748d8" + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.3.4.tgz#1330aab72234f8dea091b08c4f8b9d05c7119e06" dependencies: "@babel/code-frame" "^7.0.0" - "@babel/generator" "^7.2.2" + "@babel/generator" "^7.3.4" "@babel/helper-function-name" "^7.1.0" "@babel/helper-split-export-declaration" "^7.0.0" - "@babel/parser" "^7.2.3" - "@babel/types" "^7.2.2" + "@babel/parser" "^7.3.4" + "@babel/types" "^7.3.4" debug "^4.1.0" globals "^11.1.0" - lodash "^4.17.10" + lodash "^4.17.11" -"@babel/types@^7.0.0": - version "7.1.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.5.tgz#12fe64e91a431234b7017b4227a78cc0eec4e081" +"@babel/types@^7.0.0", "@babel/types@^7.0.0-beta.49", "@babel/types@^7.2.2", "@babel/types@^7.3.4": + version "7.3.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.3.4.tgz#bf482eaeaffb367a28abbf9357a94963235d90ed" dependencies: esutils "^2.0.2" - lodash "^4.17.10" - to-fast-properties "^2.0.0" - -"@babel/types@^7.2.2": - version "7.2.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.2.tgz#44e10fc24e33af524488b716cdaee5360ea8ed1e" - dependencies: - esutils "^2.0.2" - lodash "^4.17.10" + lodash "^4.17.11" to-fast-properties "^2.0.0" "@emotion/is-prop-valid@^0.7.3": @@ -122,21 +106,39 @@ version "0.7.3" resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.7.3.tgz#6310a047f12d21a1036fb031317219892440416f" +"@octokit/rest@^15.2.6": + version "15.18.1" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-15.18.1.tgz#ec7fb0f8775ef64dc095fae6635411d3fbff9b62" + dependencies: + before-after-hook "^1.1.0" + btoa-lite "^1.0.0" + debug "^3.1.0" + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.0" + lodash "^4.17.4" + node-fetch "^2.1.1" + universal-user-agent "^2.0.0" + url-template "^2.0.8" + "@tommoor/remove-markdown@0.3.1": version "0.3.1" resolved "https://registry.yarnpkg.com/@tommoor/remove-markdown/-/remove-markdown-0.3.1.tgz#25e7b845d52fcfadf149a3a6a468a931fee7619b" "@types/geojson@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-1.0.3.tgz#fbcf7fa5eb6dd108d51385cc6987ec1f24214523" + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-1.0.6.tgz#3e02972728c69248c2af08d60a48cbb8680fffdf" "@types/node@*": - version "8.5.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.5.2.tgz#83b8103fa9a2c2e83d78f701a9aa7c9539739aa5" + version "11.10.4" + resolved "https://registry.yarnpkg.com/@types/node/-/node-11.10.4.tgz#3f5fc4f0f322805f009e00ab35a2ff3d6b778e42" -"@types/node@^6.0.48": - version "6.0.88" - resolved "https://registry.yarnpkg.com/@types/node/-/node-6.0.88.tgz#f618f11a944f6a18d92b5c472028728a3e3d4b66" +"@types/node@^10.11.7": + version "10.12.29" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.29.tgz#c2c8d2d27bb55649fbafe8ea1731658421f38acf" + +"@types/semver@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-5.5.0.tgz#146c2a29ee7d3bae4bf2fcb274636e264c813c45" "@wikifactory/slate-edit-blockquote@^0.7.1": version "0.7.1" @@ -155,19 +157,25 @@ version "0.6.0" resolved "https://registry.yarnpkg.com/@wikifactory/slate-trailing-block/-/slate-trailing-block-0.6.0.tgz#7cfba15707f55ea41583e03e809c8f3cc9b8b77f" -abab@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d" +abab@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" abbrev@1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f" + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" -accepts@^1.2.2, accepts@~1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" +abort-controller@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-2.0.2.tgz#f0c059173ac7fdc4dba73e3833102def407a6a29" dependencies: - mime-types "~2.1.16" + event-target-shim "^5.0.0" + +accepts@^1.3.5, accepts@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + dependencies: + mime-types "~2.1.18" negotiator "0.6.1" accepts@~1.2.12, accepts@~1.2.13: @@ -183,53 +191,55 @@ acorn-dynamic-import@^2.0.0: dependencies: acorn "^4.0.3" -acorn-globals@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" +acorn-globals@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.0.tgz#e3b6f8da3c1552a95ae627571f7dd6923bb54103" dependencies: - acorn "^5.0.0" + acorn "^6.0.1" + acorn-walk "^6.0.1" acorn-jsx@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e" +acorn-walk@^6.0.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" + acorn@^4.0.3: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.0.0, acorn@^5.1.2: - version "5.2.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" +acorn@^5.0.0, acorn@^5.5.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" -acorn@^6.0.2: - version "6.0.5" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.5.tgz#81730c0815f3f3b34d8efa95cb7430965f4d887a" +acorn@^6.0.1, acorn@^6.0.7: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" + +agent-base@4, agent-base@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + dependencies: + es6-promisify "^5.0.0" + +aggregate-error@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-1.0.0.tgz#888344dad0220a72e3af50906117f48771925fac" + dependencies: + clean-stack "^1.0.0" + indent-string "^3.0.0" ajv-keywords@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" ajv-keywords@^3.0.0, ajv-keywords@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" + version "3.4.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d" -ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" - -ajv@^5.0.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.2.tgz#47c68d69e86f5d953103b0074a9430dc63da5e39" - dependencies: - co "^4.6.0" - fast-deep-equal "^1.0.0" - json-schema-traverse "^0.3.0" - json-stable-stringify "^1.0.1" - -ajv@^5.1.0, ajv@^5.1.5: +ajv@^5.0.0, ajv@^5.1.5: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: @@ -238,27 +248,9 @@ ajv@^5.1.0, ajv@^5.1.5: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" -ajv@^6.0.1: - version "6.4.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.4.0.tgz#d3aff78e9277549771daf0164cff48482b754fc6" - dependencies: - fast-deep-equal "^1.0.0" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - uri-js "^3.0.2" - -ajv@^6.1.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.0.tgz#4c8affdf80887d8f132c9c52ab8a2dc4d0b7b24c" - dependencies: - fast-deep-equal "^2.0.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - uri-js "^4.2.1" - -ajv@^6.5.3, ajv@^6.6.1: - version "6.7.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.7.0.tgz#e3ce7bb372d6577bb1839f1dfdfcbf5ad2948d96" +ajv@^6.0.1, ajv@^6.1.0, ajv@^6.5.5, ajv@^6.9.1: + version "6.9.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.9.2.tgz#4927adb83e7f48e5a32b45729744c71ec39c9c7b" dependencies: fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" @@ -285,9 +277,15 @@ ansi-escapes@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" -ansi-escapes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" +ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + +ansi-gray@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" + dependencies: + ansi-wrap "0.1.0" ansi-html@0.0.7: version "0.0.7" @@ -309,12 +307,16 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -ansi-styles@^3.1.0, ansi-styles@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" dependencies: color-convert "^1.9.0" +ansi-wrap@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" + any-promise@^1.0.0, any-promise@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -326,9 +328,16 @@ anymatch@^1.3.0: micromatch "^2.1.5" normalize-path "^2.0.0" +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + app-root-path@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" + version "2.1.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.1.0.tgz#98bf6599327ecea199309866e8140368fd2e646a" append-transform@^0.4.0: version "0.4.0" @@ -336,11 +345,7 @@ append-transform@^0.4.0: dependencies: default-require-extensions "^1.0.0" -aproba@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.2.tgz#45c6629094de4e96f693ef7eab74ae079c240fc1" - -aproba@^1.1.1: +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -349,15 +354,15 @@ archy@^1.0.0: resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" dependencies: delegates "^1.0.0" readable-stream "^2.0.6" argparse@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" dependencies: sprintf-js "~1.0.2" @@ -374,10 +379,18 @@ arr-diff@^2.0.0: dependencies: arr-flatten "^1.0.1" -arr-flatten@^1.0.1: +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + array-differ@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" @@ -398,24 +411,26 @@ array-includes@^3.0.3: es-abstract "^1.7.0" array-slice@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.0.0.tgz#e73034f00dcc1f40876008fd20feae77bd4b7c2f" + version "1.1.0" + resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - -array-uniq@1.0.2, array-uniq@^1.0.1, array-uniq@^1.0.2: +array-uniq@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.2.tgz#5fcc373920775723cfd64d65c64bef53bf9eba6d" +array-uniq@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" -arrify@^1.0.0, arrify@^1.0.1: +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + +arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -424,31 +439,33 @@ asap@~2.0.3: resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" asn1.js@^4.0.0: - version "4.9.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.1.tgz#48ba240b45a9280e94748990ba597d216617fd40" + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" dependencies: bn.js "^4.0.0" inherits "^2.0.1" minimalistic-assert "^1.0.0" asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + dependencies: + safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - assert@^1.1.1: version "1.4.1" resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" dependencies: util "0.10.3" +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + ast-types-flow@0.0.7, ast-types-flow@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" @@ -457,25 +474,19 @@ astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" -async-each@^1.0.0: +async-each@^1.0.0, async-each@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" -async@^1.4.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" -async@^2.1.2, async@^2.4.1: - version "2.6.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" +async@^2.1.2, async@^2.1.4, async@^2.4.1, async@^2.5.0: + version "2.6.2" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" dependencies: - lodash "^4.14.0" - -async@^2.1.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.5.0.tgz#843190fd6b7357a0b9e1c956edddd5ec8462b54d" - dependencies: - lodash "^4.14.0" + lodash "^4.17.11" async@~0.2.6: version "0.2.10" @@ -485,13 +496,19 @@ asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + attr-accept@^1.0.3: - version "1.1.0" - resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-1.1.0.tgz#b5cd35227f163935a8f1de10ed3eba16941f6be6" + version "1.1.3" + resolved "https://registry.yarnpkg.com/attr-accept/-/attr-accept-1.1.3.tgz#48230c79f93790ef2775fcec4f0db0f5db41ca52" + dependencies: + core-js "^2.5.0" auto-bind@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/auto-bind/-/auto-bind-1.2.0.tgz#8b7e318aad53d43ba8a8ecaf0066d85d5f798cd6" + version "1.2.1" + resolved "https://registry.yarnpkg.com/auto-bind/-/auto-bind-1.2.1.tgz#807f7910b0210db9eefe133f3492c28e89698b96" autoprefixer@^6.3.1: version "6.7.7" @@ -524,31 +541,26 @@ autotrack@^2.4.1: source-map "^0.5.6" aws-sdk@^2.135.0: - version "2.135.0" - resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.135.0.tgz#81f4a47b99212f2f236bf5b11b0b3a3a02086db4" + version "2.413.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.413.0.tgz#65c2dbe53ecb3f964fd9f18a850f8f1adc55f598" dependencies: buffer "4.9.1" - crypto-browserify "1.0.9" - events "^1.1.1" + events "1.1.1" + ieee754 "1.1.8" jmespath "0.15.0" querystring "0.2.0" sax "1.2.1" url "0.10.3" - uuid "3.1.0" - xml2js "0.4.17" - xmlbuilder "4.2.1" - -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + uuid "3.3.2" + xml2js "0.4.19" aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" -aws4@^1.2.1, aws4@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" axios@^0.18.0: version "0.18.0" @@ -557,13 +569,13 @@ axios@^0.18.0: follow-redirects "^1.3.0" is-buffer "^1.1.5" -axobject-query@^2.0.1: +axobject-query@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" dependencies: ast-types-flow "0.0.7" -babel-code-frame@^6.11.0, babel-code-frame@^6.26.0: +babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: @@ -572,8 +584,8 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.26.0: js-tokens "^3.0.2" babel-core@^6.0.0, babel-core@^6.24.1, babel-core@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" dependencies: babel-code-frame "^6.26.0" babel-generator "^6.26.0" @@ -585,15 +597,15 @@ babel-core@^6.0.0, babel-core@^6.24.1, babel-core@^6.26.0: babel-traverse "^6.26.0" babel-types "^6.26.0" babylon "^6.18.0" - convert-source-map "^1.5.0" - debug "^2.6.8" + convert-source-map "^1.5.1" + debug "^2.6.9" json5 "^0.5.1" lodash "^4.17.4" minimatch "^3.0.4" path-is-absolute "^1.0.1" - private "^0.1.7" + private "^0.1.8" slash "^1.0.0" - source-map "^0.5.6" + source-map "^0.5.7" babel-eslint@^9.0.0: version "9.0.0" @@ -607,8 +619,8 @@ babel-eslint@^9.0.0: eslint-visitor-keys "^1.0.0" babel-generator@^6.18.0, babel-generator@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" dependencies: babel-messages "^6.23.0" babel-runtime "^6.26.0" @@ -616,7 +628,7 @@ babel-generator@^6.18.0, babel-generator@^6.26.0: detect-indent "^4.0.0" jsesc "^1.3.0" lodash "^4.17.4" - source-map "^0.5.6" + source-map "^0.5.7" trim-right "^1.0.1" babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: @@ -728,16 +740,16 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-jest@22, babel-jest@^22.0.4: - version "22.0.4" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.0.4.tgz#533c46de37d7c9d7612f408c76314be9277e0c26" +babel-jest@22, babel-jest@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.4.tgz#977259240420e227444ebe49e226a61e49ea659d" dependencies: babel-plugin-istanbul "^4.1.5" - babel-preset-jest "^22.0.3" + babel-preset-jest "^22.4.4" babel-loader@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126" + version "7.1.5" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68" dependencies: find-cache-dir "^1.0.0" loader-utils "^1.0.2" @@ -756,23 +768,27 @@ babel-plugin-check-es2015-constants@^6.22.0: babel-runtime "^6.22.0" babel-plugin-istanbul@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" + version "4.1.6" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" dependencies: + babel-plugin-syntax-object-rest-spread "^6.13.0" find-up "^2.1.0" - istanbul-lib-instrument "^1.7.5" - test-exclude "^4.1.1" + istanbul-lib-instrument "^1.10.1" + test-exclude "^4.2.1" -babel-plugin-jest-hoist@^22.0.3: - version "22.0.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.0.3.tgz#62cde5fe962fd41ae89c119f481ca5cd7dd48bb4" +babel-plugin-jest-hoist@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.4.tgz#b9851906eab34c7bf6f8c895a2b08bea1a844c0b" babel-plugin-lodash@^3.2.11: - version "3.2.11" - resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.2.11.tgz#21c8fdec9fe1835efaa737873e3902bdd66d5701" + version "3.3.4" + resolved "https://registry.yarnpkg.com/babel-plugin-lodash/-/babel-plugin-lodash-3.3.4.tgz#4f6844358a1340baed182adbeffa8df9967bc196" dependencies: + "@babel/helper-module-imports" "^7.0.0-beta.49" + "@babel/types" "^7.0.0-beta.49" glob "^7.1.1" - lodash "^4.17.2" + lodash "^4.17.10" + require-package-name "^2.0.1" babel-plugin-react-transform@^2.0.2: version "2.0.2" @@ -780,19 +796,15 @@ babel-plugin-react-transform@^2.0.2: dependencies: lodash "^4.6.1" -"babel-plugin-styled-components@>= 1": - version "1.8.0" - resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.8.0.tgz#9dd054c8e86825203449a852a5746f29f2dab857" +"babel-plugin-styled-components@>= 1", babel-plugin-styled-components@^1.1.7: + version "1.10.0" + resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.10.0.tgz#ff1f42ad2cc78c21f26b62266b8f564dbc862939" dependencies: "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-module-imports" "^7.0.0" + babel-plugin-syntax-jsx "^6.18.0" lodash "^4.17.10" -babel-plugin-styled-components@^1.1.7: - version "1.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-styled-components/-/babel-plugin-styled-components-1.2.0.tgz#8bb8f9e69119bb8dee408c8d36a0dfef5191f3c7" - dependencies: - stylis "^3.2.1" - babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" @@ -817,7 +829,7 @@ babel-plugin-syntax-flow@^6.18.0, babel-plugin-syntax-flow@^6.3.13: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" -babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: +babel-plugin-syntax-jsx@^6.18.0, babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" @@ -939,8 +951,8 @@ babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015 babel-template "^6.24.1" babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" dependencies: babel-plugin-transform-strict-mode "^6.24.1" babel-runtime "^6.26.0" @@ -1100,8 +1112,8 @@ babel-polyfill@^6.13.0, babel-polyfill@^6.26.0: regenerator-runtime "^0.10.5" babel-preset-env@^1.4.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.0.tgz#2de1c782a780a0a5d605d199c957596da43c44e4" + version "1.7.0" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-syntax-trailing-function-commas "^6.22.0" @@ -1130,15 +1142,15 @@ babel-preset-env@^1.4.0: babel-plugin-transform-es2015-unicode-regex "^6.22.0" babel-plugin-transform-exponentiation-operator "^6.22.0" babel-plugin-transform-regenerator "^6.22.0" - browserslist "^2.1.2" + browserslist "^3.2.6" invariant "^2.2.2" semver "^5.3.0" -babel-preset-jest@^22.0.3: - version "22.0.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.0.3.tgz#e2bb6f6b4a509d3ea0931f013db78c5a84856693" +babel-preset-jest@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.4.tgz#ec9fbd8bcd7dfd24b8b5320e0e688013235b7c39" dependencies: - babel-plugin-jest-hoist "^22.0.3" + babel-plugin-jest-hoist "^22.4.4" babel-plugin-syntax-object-rest-spread "^6.13.0" babel-preset-react-hmre@1.1.1: @@ -1218,13 +1230,13 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26 lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@^6.17.4, babylon@^6.18.0: +babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" bail@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/bail/-/bail-1.0.2.tgz#f7d6c1731630a9f9f0d4d35ed1f962e2074a1764" + version "1.0.3" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.3.tgz#63cfb9ddbac829b02a3128cd53224be78e6c21a3" balanced-match@^0.4.2: version "0.4.2" @@ -1235,16 +1247,24 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" base64-js@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" + version "1.3.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" base64-url@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-1.2.1.tgz#199fd661702a0e7b7dcae6e0698bb089c52f6d78" -base64url@2.0.0, base64url@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base64url/-/base64url-2.0.0.tgz#eac16e03ea1438eff9423d69baa36262ed1f70bb" +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" basic-auth-connect@1.0.0: version "1.0.0" @@ -1259,8 +1279,8 @@ batch@0.5.3: resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" dependencies: tweetnacl "^0.14.3" @@ -1268,17 +1288,25 @@ beeper@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" +before-after-hook@^1.1.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.3.2.tgz#7bfbf844ad670aa7a96b5a4e4e15bd74b08ed66b" + big-integer@^1.6.17: - version "1.6.28" - resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.28.tgz#8cef0fda3ccde8759c2c66efcfacc35aea658283" + version "1.6.42" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.42.tgz#91623ae5ceeff9a47416c56c9440a66f12f534f1" big.js@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978" + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" binary-extensions@^1.0.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0" + version "1.13.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.0.tgz#9523e001306a32444b907423f1de2164222f6ab1" binary@~0.3.0: version "0.3.0" @@ -1287,25 +1315,7 @@ binary@~0.3.0: buffers "~0.1.1" chainsaw "~0.1.0" -bindings@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7" - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - dependencies: - inherits "~2.0.0" - -bluebird@^3.0.5, bluebird@^3.3.5, bluebird@^3.4.1, bluebird@^3.4.6, bluebird@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c" - -bluebird@^3.3.4, bluebird@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" - -bluebird@^3.5.3: +bluebird@^3.3.5, bluebird@^3.4.1, bluebird@^3.4.6, bluebird@^3.5.0, bluebird@^3.5.1: version "3.5.3" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" @@ -1336,24 +1346,6 @@ boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" - -boom@4.x.x: - version "4.3.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" - dependencies: - hoek "4.x.x" - -boom@5.x.x: - version "5.2.0" - resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" - dependencies: - hoek "4.x.x" - boundless-arrow-key-navigation@^1.0.4, boundless-arrow-key-navigation@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/boundless-arrow-key-navigation/-/boundless-arrow-key-navigation-1.1.0.tgz#9b7908a32e2e8f8c1c6af3af68586fdcfe5c40ff" @@ -1399,8 +1391,8 @@ boundless-utils-uuid@^1.1.0: resolved "https://registry.yarnpkg.com/boundless-utils-uuid/-/boundless-utils-uuid-1.1.0.tgz#ae709f1d4fd3a4557ad4a5c77b1f0a9f701e3ed3" brace-expansion@^1.0.0, brace-expansion@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -1413,45 +1405,62 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" browser-process-hrtime@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" + version "0.1.3" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" browser-resolve@^1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" dependencies: resolve "1.1.7" browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.6.tgz#5e7725dbdef1fd5930d4ebab48567ce451c48a0a" + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" dependencies: - buffer-xor "^1.0.2" + buffer-xor "^1.0.3" cipher-base "^1.0.0" create-hash "^1.1.0" - evp_bytestokey "^1.0.0" + evp_bytestokey "^1.0.3" inherits "^2.0.1" + safe-buffer "^5.0.1" browserify-cipher@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" dependencies: browserify-aes "^1.0.4" browserify-des "^1.0.0" evp_bytestokey "^1.0.0" browserify-des@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" dependencies: cipher-base "^1.0.1" des.js "^1.0.0" inherits "^2.0.1" + safe-buffer "^5.1.2" browserify-rsa@^4.0.0: version "4.0.1" @@ -1485,12 +1494,12 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" -browserslist@^2.1.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.4.0.tgz#693ee93d01e66468a6348da5498e011f578f87f8" +browserslist@^3.2.6: + version "3.2.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" dependencies: - caniuse-lite "^1.0.30000718" - electron-to-chromium "^1.3.18" + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" bser@^2.0.0: version "2.0.0" @@ -1498,13 +1507,17 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" +btoa-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" buffer-from@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" buffer-indexof-polyfill@~1.0.0: version "1.0.1" @@ -1518,7 +1531,7 @@ buffer-writer@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-writer/-/buffer-writer-1.0.1.tgz#22a936901e3029afcd7547eb4487ceb697a3bf08" -buffer-xor@^1.0.2: +buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -1535,32 +1548,35 @@ buffers@~0.1.1: resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" bugsnag@^1.7.0: - version "1.12.1" - resolved "https://registry.yarnpkg.com/bugsnag/-/bugsnag-1.12.1.tgz#54e30ae0c3db1c5c298eecd9fe8ab4004a7ebba6" + version "1.12.2" + resolved "https://registry.yarnpkg.com/bugsnag/-/bugsnag-1.12.2.tgz#61b2a309f95a4b53e65517052ec46991f91ecb4d" dependencies: json-stringify-safe "~5.0.1" promise "7.x" request "^2.81.0" stack-trace "~0.0.9" -builtin-modules@^1.0.0, builtin-modules@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" +builtin-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" bull@^3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/bull/-/bull-3.5.2.tgz#9c85f205b17686efab2ee28aaa4388887360de32" + version "3.7.0" + resolved "https://registry.yarnpkg.com/bull/-/bull-3.7.0.tgz#ec9a8721a2cfb0421c501d28553ac1f9f025414d" dependencies: - bluebird "^3.5.3" - cron-parser "^2.5.0" + cron-parser "^2.7.3" debuglog "^1.0.0" - ioredis "^3.1.4" + get-port latest + ioredis "^4.5.1" lodash "^4.17.11" + p-timeout "^2.0.1" + promise.prototype.finally "^3.1.0" semver "^5.6.0" + util.promisify "^1.0.0" uuid "^3.2.1" bytes@1: @@ -1575,7 +1591,11 @@ bytes@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" -bytes@2.5.0, bytes@^2.3.0: +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + +bytes@^2.3.0: version "2.5.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.5.0.tgz#4c9423ea2d252c270c41b2bdefeff9bb6b62c06a" @@ -1597,6 +1617,27 @@ cacache@^10.0.4: unique-filename "^1.1.0" y18n "^4.0.0" +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cache-content-type@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-content-type/-/cache-content-type-1.0.1.tgz#035cde2b08ee2129f4a8315ea8f00a00dba1453c" + dependencies: + mime-types "^2.1.18" + ylru "^1.2.0" + callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" @@ -1624,7 +1665,7 @@ camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" -camelize@1.0.0: +camelize@1.0.0, camelize@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" @@ -1646,12 +1687,18 @@ caniuse-api@^1.5.2: lodash.uniq "^4.5.0" caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000726" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000726.tgz#9bb742f8d026a62df873bc03c06843d2255b60d7" + version "1.0.30000939" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000939.tgz#8cb54a9868fe040fbf2e2441408c68b7008912e8" -caniuse-lite@^1.0.30000718: - version "1.0.30000721" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000721.tgz#931a21a7bd85016300328d21f126d84b73437d35" +caniuse-lite@^1.0.30000844: + version "1.0.30000939" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000939.tgz#b9ab7ac9e861bf78840b80c5dfbc471a5cd7e679" + +capture-exit@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" + dependencies: + rsvp "^3.3.3" caseless@~0.12.0: version "0.12.0" @@ -1680,25 +1727,17 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.0, chalk@^2.0.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" dependencies: - ansi-styles "^3.1.0" + ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" - supports-color "^4.0.0" - -chalk@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.1.0.tgz#ac5becf14fa21b99c6c92ca7a7d7cfd5b17e743e" - dependencies: - ansi-styles "^3.1.0" - escape-string-regexp "^1.0.5" - supports-color "^4.0.0" + supports-color "^5.3.0" change-case@3.0.x: - version "3.0.1" - resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.0.1.tgz#ee5f5ad0415ad1ad9e8072cf49cd4cfa7660a554" + version "3.0.2" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.0.2.tgz#fd48746cce02f03f0a672577d1d3a8dc2eceb037" dependencies: camel-case "^3.0.0" constant-case "^2.0.0" @@ -1708,7 +1747,7 @@ change-case@3.0.x: is-upper-case "^1.1.0" lower-case "^1.1.1" lower-case-first "^1.0.0" - no-case "^2.2.0" + no-case "^2.3.2" param-case "^2.1.0" pascal-case "^2.0.0" path-case "^2.1.0" @@ -1720,16 +1759,16 @@ change-case@3.0.x: upper-case-first "^1.1.0" character-entities-legacy@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.1.tgz#f40779df1a101872bb510a3d295e1fccf147202f" + version "1.1.2" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz#7c6defb81648498222c9855309953d05f4d63a9c" character-entities@^1.0.0: - version "1.2.1" - resolved "https://registry.npmjs.org/character-entities/-/character-entities-1.2.1.tgz#f76871be5ef66ddb7f8f8e3478ecc374c27d6dca" + version "1.2.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.2.tgz#58c8f371c0774ef0ba9b2aca5f00d8f100e6e363" character-reference-invalid@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz#942835f750e4ec61a308e60c2ef8cc1011202efc" + version "1.1.2" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz#21e421ad3d84055952dab4a43a04e73cd425d3ed" chardet@^0.7.0: version "0.7.0" @@ -1739,7 +1778,7 @@ charenc@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" -chokidar@^1.4.3, chokidar@^1.7.0: +chokidar@^1.4.3: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" dependencies: @@ -1754,13 +1793,31 @@ chokidar@^1.4.3, chokidar@^1.7.0: optionalDependencies: fsevents "^1.0.0" -chownr@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" +chokidar@^2.0.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.2.tgz#9c23ea40b01638439e0513864d362aeacc5ad058" + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.0" + optionalDependencies: + fsevents "^1.2.7" -ci-info@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534" +chownr@^1.0.1, chownr@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" @@ -1769,19 +1826,24 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -circular-json@^0.3.1: - version "0.3.3" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" - clap@^1.0.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.0.tgz#59c90fe3e137104746ff19469a27a634ff68c857" + version "1.2.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" dependencies: chalk "^1.1.3" +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + classnames@^2.1.5, classnames@^2.2.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.3.tgz#551b774b6762a0c0a997187f7ba4f1d603961ac5" + version "2.2.6" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce" clean-css@3.4.x: version "3.4.28" @@ -1791,10 +1853,14 @@ clean-css@3.4.x: source-map "0.4.x" clean-css@^4.0.12: - version "4.1.9" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.9.tgz#35cee8ae7687a49b98034f70de00c4edd3826301" + version "4.2.1" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" dependencies: - source-map "0.5.x" + source-map "~0.6.0" + +clean-stack@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-1.3.0.tgz#9e821501ae979986c46b1d66d2d432db2fd4ae31" cli-color@~1.2.0: version "1.2.0" @@ -1835,8 +1901,8 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" clipboard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.0.tgz#4661dc972fb72a4c4770b8db78aa9b1caef52b50" + version "2.0.4" + resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-2.0.4.tgz#836dafd66cf0fea5d71ce5d5b0bf6e958009112d" dependencies: good-listener "^1.2.2" select "^1.1.2" @@ -1858,6 +1924,14 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + clone-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" @@ -1875,35 +1949,35 @@ clone@^0.2.0: resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" clone@^1.0.0, clone@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149" + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" clone@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" cloneable-readable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.0.0.tgz#a6290d413f217a61232f95e458ff38418cfb0117" + version "1.1.2" + resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.2.tgz#d591dee4a8f8bc15da43ce97dceeba13d43e2a65" dependencies: inherits "^2.0.1" - process-nextick-args "^1.0.6" - through2 "^2.0.1" + process-nextick-args "^2.0.0" + readable-stream "^2.3.5" cls-bluebird@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/cls-bluebird/-/cls-bluebird-2.0.1.tgz#c259a480ae02c0e506134307bb13db30446ee2e7" + version "2.1.0" + resolved "https://registry.yarnpkg.com/cls-bluebird/-/cls-bluebird-2.1.0.tgz#37ef1e080a8ffb55c2f4164f536f1919e7968aee" dependencies: is-bluebird "^1.0.2" shimmer "^1.1.0" cluster-key-slot@^1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.0.8.tgz#7654556085a65330932a2e8b5976f8e2d0b3e414" + version "1.0.12" + resolved "https://registry.yarnpkg.com/cluster-key-slot/-/cluster-key-slot-1.0.12.tgz#d5deff2a520717bc98313979b687309b2d368e29" co-body@^5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/co-body/-/co-body-5.1.1.tgz#d97781d1e3344ba4a820fd1806bddf8341505236" + version "5.2.0" + resolved "https://registry.yarnpkg.com/co-body/-/co-body-5.2.0.tgz#5a0a658c46029131e0e3a306f67647302f71c124" dependencies: inflation "^2.0.0" qs "^6.4.0" @@ -1925,25 +1999,40 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" collapse-white-space@^1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.3.tgz#4b906f670e5a963a87b76b0e1689643341b6023c" + version "1.0.4" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.4.tgz#ce05cf49e54c3277ae573036a26851ba430a0091" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" color-convert@^1.3.0, color-convert@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" dependencies: - color-name "^1.1.1" + color-name "1.1.3" -color-name@^1.0.0, color-name@^1.1.1: +color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" +color-name@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + color-string@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" dependencies: color-name "^1.0.0" +color-support@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + color@^0.11.0: version "0.11.4" resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" @@ -1960,13 +2049,17 @@ colormin@^1.0.5: css-color-names "0.0.4" has "^1.0.1" -colors@^1.1.2, colors@~1.1.2: +colors@^1.1.2: + version "1.3.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" + +colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" -combined-stream@^1.0.5, combined-stream@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" dependencies: delayed-stream "~1.0.0" @@ -1976,13 +2069,13 @@ commander@2.8.x: dependencies: graceful-readlink ">= 1.0.0" -commander@2.9.x, commander@^2.9.0: +commander@2.9.x: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: graceful-readlink ">= 1.0.0" -commander@^2.11.0: +commander@^2.11.0, commander@^2.19.0, commander@^2.9.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" @@ -1990,15 +2083,23 @@ commander@~2.13.0: version "2.13.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" +commander@~2.17.1: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" +component-emitter@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + compressible@^2.0.0, compressible@~2.0.5: - version "2.0.11" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.11.tgz#16718a75de283ed8e604041625a2064586797d8a" + version "2.0.16" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.16.tgz#a49bf9858f3821b64ce1be0296afc7380466a77f" dependencies: - mime-db ">= 1.29.0 < 2" + mime-db ">= 1.38.0 < 2" compression@~1.5.2: version "1.5.2" @@ -2028,9 +2129,9 @@ concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" -config-chain@~1.1.5: - version "1.1.11" - resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" +config-chain@^1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" dependencies: ini "^1.3.4" proto-list "~1.2.1" @@ -2061,15 +2162,6 @@ connect-timeout@~1.6.2: ms "0.7.1" on-headers "~1.0.0" -connect@3.6.2: - version "3.6.2" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.2.tgz#694e8d20681bfe490282c8ab886be98f09f42fe7" - dependencies: - debug "2.6.7" - finalhandler "1.0.3" - parseurl "~1.3.1" - utils-merge "1.0.0" - connect@^2.25.7: version "2.30.2" resolved "https://registry.yarnpkg.com/connect/-/connect-2.30.2.tgz#8da9bcbe8a054d3d318d74dfec903b5c39a1b609" @@ -2135,27 +2227,25 @@ contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" -content-disposition@~0.5.0: - version "0.5.2" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" - -content-security-policy-builder@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/content-security-policy-builder/-/content-security-policy-builder-1.1.0.tgz#d91f1b076236c119850c7dee9924bf55e05772b3" +content-disposition@~0.5.2: + version "0.5.3" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" dependencies: - dashify "^0.2.0" + safe-buffer "5.1.2" -content-type-parser@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94" +content-security-policy-builder@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/content-security-policy-builder/-/content-security-policy-builder-2.0.0.tgz#8749a1d542fcbe82237281ea9f716ce68b394dd2" -content-type@^1.0.0, content-type@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.2.tgz#b7d113aee7a8dd27bd21133c4dc2529df1721eed" +content-type@^1.0.4, content-type@~1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" -convert-source-map@^1.4.0, convert-source-map@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" +convert-source-map@^1.4.0, convert-source-map@^1.5.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + dependencies: + safe-buffer "~5.1.1" cookie-parser@~1.3.5: version "1.3.5" @@ -2172,12 +2262,12 @@ cookie@0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.1.3.tgz#e734a5c1417fce472d5aef82c381cabb64d1a435" -cookies@~0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.7.1.tgz#7c8a615f5481c61ab9f16c833731bcb8f663b99b" +cookies@~0.7.1: + version "0.7.3" + resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.7.3.tgz#7912ce21fbf2e8c2da70cf1c3f351aecf59dadfa" dependencies: - depd "~1.1.1" - keygrip "~1.0.2" + depd "~1.1.2" + keygrip "~1.0.3" copy-concurrently@^1.0.0: version "1.0.5" @@ -2190,6 +2280,10 @@ copy-concurrently@^1.0.0: rimraf "^2.5.4" run-queue "^1.0.0" +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + copy-to-clipboard@^3.0.6, copy-to-clipboard@^3.0.8: version "3.0.8" resolved "https://registry.yarnpkg.com/copy-to-clipboard/-/copy-to-clipboard-3.0.8.tgz#f4e82f4a8830dce4666b7eb8ded0c9bcc313aba9" @@ -2200,13 +2294,9 @@ copy-to@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5" -core-js@^1.0.0: - version "1.2.7" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" - core-js@^2.4.0, core-js@^2.5.0: - version "2.5.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" + version "2.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.5.tgz#44bc8d249e7fb2ff5d00e0341a7ffb94fbf67895" core-js@~2.3.0: version "2.3.0" @@ -2234,24 +2324,25 @@ crc@3.3.0: resolved "https://registry.yarnpkg.com/crc/-/crc-3.3.0.tgz#fa622e1bc388bf257309082d6b65200ce67090ba" create-ecdh@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" dependencies: bn.js "^4.1.0" elliptic "^6.0.0" create-hash@^1.1.0, create-hash@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" dependencies: cipher-base "^1.0.1" inherits "^2.0.1" - ripemd160 "^2.0.0" + md5.js "^1.3.4" + ripemd160 "^2.0.1" sha.js "^2.4.0" create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.6" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" dependencies: cipher-base "^1.0.3" create-hash "^1.1.0" @@ -2260,9 +2351,9 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -cron-parser@^2.5.0: - version "2.7.1" - resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.7.1.tgz#d08c00b1e220db564fd1cecb5019c8dd450f84d1" +cron-parser@^2.7.3: + version "2.7.3" + resolved "https://registry.yarnpkg.com/cron-parser/-/cron-parser-2.7.3.tgz#12603f89f5375af353a9357be2543d3172eac651" dependencies: is-nan "^1.2.1" moment-timezone "^0.5.23" @@ -2275,7 +2366,7 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.5: +cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" dependencies: @@ -2289,25 +2380,9 @@ crypt@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" - dependencies: - boom "2.x.x" - -cryptiles@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" - dependencies: - boom "5.x.x" - -crypto-browserify@1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-1.0.9.tgz#cc5449685dfb85eb11c9828acc7cb87ab5bbfcc0" - crypto-browserify@^3.11.0: - version "3.11.1" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.11.1.tgz#948945efc6757a400d6e5e5af47194d10064279f" + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" dependencies: browserify-cipher "^1.0.0" browserify-sign "^4.0.0" @@ -2319,6 +2394,7 @@ crypto-browserify@^3.11.0: pbkdf2 "^3.0.3" public-encrypt "^4.0.0" randombytes "^2.0.0" + randomfill "^1.0.3" csrf@~3.0.0: version "3.0.6" @@ -2337,21 +2413,21 @@ css-color-names@0.0.4: resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" css-loader@^0.28.7: - version "0.28.7" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.7.tgz#5f2ee989dd32edd907717f953317656160999c1b" + version "0.28.11" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7" dependencies: - babel-code-frame "^6.11.0" + babel-code-frame "^6.26.0" css-selector-tokenizer "^0.7.0" - cssnano ">=2.6.1 <4" + cssnano "^3.10.0" icss-utils "^2.1.0" loader-utils "^1.0.2" lodash.camelcase "^4.3.0" - object-assign "^4.0.1" + object-assign "^4.1.1" postcss "^5.0.6" - postcss-modules-extract-imports "^1.0.0" - postcss-modules-local-by-default "^1.0.1" - postcss-modules-scope "^1.0.0" - postcss-modules-values "^1.1.0" + postcss-modules-extract-imports "^1.2.0" + postcss-modules-local-by-default "^1.2.0" + postcss-modules-scope "^1.1.0" + postcss-modules-values "^1.3.0" postcss-value-parser "^3.3.0" source-list-map "^2.0.0" @@ -2365,30 +2441,30 @@ css-select@^1.1.0: nth-check "~1.0.1" css-selector-tokenizer@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" + version "0.7.1" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.1.tgz#a177271a8bca5019172f4f891fc6eed9cbf68d5d" dependencies: cssesc "^0.1.0" fastparse "^1.1.1" regexpu-core "^1.0.0" css-to-react-native@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.2.2.tgz#c077d0f7bf3e6c915a539e7325821c9dd01f9965" + version "2.3.0" + resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.3.0.tgz#bf80d24ec4a08e430306ef429c0586e6ed5485f7" dependencies: + camelize "^1.0.0" css-color-keywords "^1.0.0" - fbjs "^0.8.5" postcss-value-parser "^3.3.0" css-what@2.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + version "2.1.3" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" cssesc@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" -"cssnano@>=2.6.1 <4": +cssnano@^3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" dependencies: @@ -2433,12 +2509,12 @@ csso@~2.3.1: source-map "^0.5.3" cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": - version "0.3.2" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + version "0.3.6" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.6.tgz#f85206cee04efa841f3c5982a74ba96ab20d65ad" -"cssstyle@>= 0.2.37 < 0.3.0": - version "0.2.37" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" +cssstyle@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.2.1.tgz#3aceb2759eaf514ac1a21628d723d6043a819495" dependencies: cssom "0.3.x" @@ -2475,63 +2551,55 @@ dasherize@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dasherize/-/dasherize-2.0.0.tgz#6d809c9cd0cf7bb8952d80fc84fa13d47ddb1308" -dashify@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dashify/-/dashify-0.2.2.tgz#6a07415a01c91faf4a32e38d9dfba71f61cb20fe" - data-uri-regex@^0.1.2: version "0.1.4" resolved "https://registry.yarnpkg.com/data-uri-regex/-/data-uri-regex-0.1.4.tgz#1e1db6c8397eca8a48ecdb55ad1b927ec0bbac2e" +data-urls@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + date-fns@1.29.0: version "1.29.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" date-fns@^1.27.2: - version "1.28.5" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.5.tgz#257cfc45d322df45ef5658665967ee841cd73faf" + version "1.30.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" dateformat@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" + version "2.2.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" -debug@*, debug@2.6.8, debug@^2.2.0, debug@^2.6.1, debug@^2.6.3, debug@^2.6.8: - version "2.6.8" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" +debug@*, debug@^4.0.1, debug@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" dependencies: - ms "2.0.0" + ms "^2.1.1" -debug@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.7.tgz#92bad1f6d05bbb6bba22cca88bcd0ec894c2861e" - dependencies: - ms "2.0.0" - -debug@2.6.9, debug@^2.6.9: +debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.1, debug@^2.6.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" -debug@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.0.1.tgz#0564c612b521dc92d9f2988f0549e34f9c98db64" - dependencies: - ms "2.0.0" - -debug@^3.1.0: +debug@3.1.0, debug@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" -debug@^4.0.1, debug@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" +debug@^3.0.0, debug@^3.1.0, debug@^3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" dependencies: ms "^2.1.1" @@ -2549,6 +2617,10 @@ decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + decompress-response@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" @@ -2559,9 +2631,9 @@ deep-equal@^1.0.1, deep-equal@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" -deep-extend@~0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" deep-is@~0.1.3: version "0.1.3" @@ -2580,51 +2652,57 @@ defaults@^1.0.0: clone "^1.0.2" define-properties@^1.1.1, define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" -del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" delegate@^3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.1.3.tgz#9a8251a777d7025faa55737bc3b071742127a9fd" + version "3.2.0" + resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" denque@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/denque/-/denque-1.2.2.tgz#e06cf7cf0da8badc88cbdaabf8fc0a70d659f1d4" + version "1.4.0" + resolved "https://registry.yarnpkg.com/denque/-/denque-1.4.0.tgz#79e2f0490195502107f24d9553f374837dabc916" -depd@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.0.tgz#e1bd82c6aab6ced965b97b88b17ed3e528ca18c3" +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" -depd@1.1.1, depd@^1.1.0, depd@~1.1.0, depd@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" +depd@^1.1.0, depd@^1.1.2, depd@~1.1.0, depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" depd@~1.0.1: version "1.0.1" @@ -2641,7 +2719,7 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" -destroy@^1.0.3, destroy@~1.0.4: +destroy@^1.0.4, destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" @@ -2651,6 +2729,10 @@ detect-file@^0.1.0: dependencies: fs-exists-sync "^0.1.0" +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" @@ -2666,12 +2748,12 @@ detect-newline@^2.1.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" diff@^3.2.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.0.tgz#056695150d7aa93237ca7e378ac3b1682b7963b9" + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" diffie-hellman@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" dependencies: bn.js "^4.1.0" miller-rabin "^4.0.0" @@ -2698,18 +2780,24 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" -dom-converter@~0.1: - version "0.1.4" - resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" dependencies: - utila "~0.3" + esutils "^2.0.2" + +dom-converter@^0.2: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + dependencies: + utila "~0.4" dom-serializer@0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" dependencies: - domelementtype "~1.1.1" - entities "~1.1.1" + domelementtype "^1.3.0" + entities "^1.1.1" dom-utils@^0.9.0: version "0.9.0" @@ -2720,30 +2808,22 @@ dom-walk@^0.1.0: resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" domain-browser@^1.1.1: - version "1.1.7" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" -domelementtype@1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" +domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" -domelementtype@~1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" - -domexception@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.0.tgz#81fe5df81b3f057052cde3a9fa9bf536a85b9ab0" - -domhandler@2.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" dependencies: - domelementtype "1" + webidl-conversions "^4.0.2" -domutils@1.1: - version "1.1.6" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" +domhandler@^2.3.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" dependencies: domelementtype "1" @@ -2754,6 +2834,13 @@ domutils@1.5.1: dom-serializer "0" domelementtype "1" +domutils@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + dependencies: + dom-serializer "0" + domelementtype "1" + dont-sniff-mimetype@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dont-sniff-mimetype/-/dont-sniff-mimetype-1.0.0.tgz#5932890dc9f4e2f19e5eb02a20026e5e5efc8f58" @@ -2769,8 +2856,8 @@ dotenv@^4.0.0: resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" dottie@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.0.tgz#da191981c8b8d713ca0115d5898cf397c2f0ddd0" + version "2.0.1" + resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.1.tgz#697ad9d72004db7574d21f892466a3c285893659" double-ended-queue@^2.1.0-0: version "2.1.0-0" @@ -2796,18 +2883,9 @@ duplexer@^0.1.1, duplexer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" -duplexify@^3.2.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.1.tgz#4e1516be68838bc90a49994f0b39a6e5960befcd" - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -duplexify@^3.4.2, duplexify@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410" +duplexify@^3.2.0, duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" dependencies: end-of-stream "^1.0.0" inherits "^2.0.1" @@ -2815,43 +2893,44 @@ duplexify@^3.4.2, duplexify@^3.6.0: stream-shift "^1.0.0" ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" dependencies: jsbn "~0.1.0" + safer-buffer "^2.1.0" -ecdsa-sig-formatter@1.0.9: - version "1.0.9" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.9.tgz#4bc926274ec3b5abb5016e7e1d60921ac262b2a1" +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" dependencies: - base64url "^2.0.0" safe-buffer "^5.0.1" -editorconfig@^0.13.2: - version "0.13.3" - resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.13.3.tgz#e5219e587951d60958fd94ea9a9a008cdeff1b34" +editorconfig@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.2.tgz#047be983abb9ab3c2eefe5199cb2b7c5689f0702" dependencies: - bluebird "^3.0.5" - commander "^2.9.0" - lru-cache "^3.2.0" - semver "^5.1.0" + "@types/node" "^10.11.7" + "@types/semver" "^5.5.0" + commander "^2.19.0" + lru-cache "^4.1.3" + semver "^5.6.0" sigmund "^1.0.1" ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.18: - version "1.3.20" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.20.tgz#2eedd5ccbae7ddc557f68ad1fce9c172e915e4e5" +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.47: + version "1.3.113" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz#b1ccf619df7295aea17bc6951dc689632629e4a9" elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" elliptic@^6.0.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + version "6.4.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -2865,27 +2944,21 @@ emoji-regex@^6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" +emoji-regex@^7.0.1, emoji-regex@^7.0.2: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" -encodeurl@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" - encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" dependencies: iconv-lite "~0.4.13" -end-of-stream@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.0.tgz#7a90d833efda6cfa6eac0f4949dbb0fad3a63206" - dependencies: - once "^1.4.0" - -end-of-stream@^1.1.0: +end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" dependencies: @@ -2910,29 +2983,23 @@ enhanced-resolve@^3.4.0: object-assign "^4.0.1" tapable "^0.2.7" -entities@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" +entities@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" -errno@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" - dependencies: - prr "~0.0.0" - -errno@~0.1.7: +errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" dependencies: prr "~1.0.1" error-ex@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" dependencies: is-arrayish "^0.2.1" -error-inject@~1.0.0: +error-inject@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/error-inject/-/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37" @@ -2949,7 +3016,7 @@ errorhandler@~1.4.2: accepts "~1.3.0" escape-html "~1.0.3" -es-abstract@^1.11.0: +es-abstract@^1.11.0, es-abstract@^1.5.1, es-abstract@^1.7.0, es-abstract@^1.9.0: version "1.13.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" dependencies: @@ -2960,34 +3027,6 @@ es-abstract@^1.11.0: is-regex "^1.0.4" object-keys "^1.0.12" -es-abstract@^1.5.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-abstract@^1.7.0: - version "1.8.1" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.8.1.tgz#fd85a3bdfa67786ce7be7e1584678e119cd70c04" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.1" - has "^1.0.1" - is-callable "^1.1.3" - is-regex "^1.0.4" - -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" - dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" - es-to-primitive@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" @@ -2996,20 +3035,21 @@ es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.12, es5-ext@^0.10.14, es5-ext@^0.10.30, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2: - version "0.10.30" - resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.30.tgz#7141a16836697dbabfaaaeee41495ce29f52c939" +es5-ext@^0.10.12, es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: + version "0.10.48" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.48.tgz#9a0b31eeded39e64453bcedf6f9d50bbbfb43850" dependencies: - es6-iterator "2" - es6-symbol "~3.1" + es6-iterator "~2.0.3" + es6-symbol "~3.1.1" + next-tick "1" -es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512" +es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" dependencies: d "1" - es5-ext "^0.10.14" - es6-symbol "^3.1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" es6-map@^0.1.3: version "0.1.5" @@ -3026,14 +3066,20 @@ es6-promise@^3.0.2: version "3.3.1" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" -es6-promise@^4.0.5: - version "4.1.1" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.1.tgz#8811e90915d9a0dba36274f0b242dbda78f9c92a" +es6-promise@^4.0.3, es6-promise@^4.0.5: + version "4.2.6" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f" es6-promise@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.0.2.tgz#010d5858423a5f118979665f46486a95c6ee2bb6" +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + dependencies: + es6-promise "^4.0.3" + es6-set@~0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" @@ -3044,7 +3090,7 @@ es6-set@~0.1.5: es6-symbol "3.1.1" event-emitter "~0.3.5" -es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1: +es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" dependencies: @@ -3064,7 +3110,7 @@ escape-html@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.2.tgz#d77d32fa98e38c2f41ae85e9278e0e0e6ba1022c" -escape-html@~1.0.1, escape-html@~1.0.3: +escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -3072,16 +3118,16 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" -escodegen@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" +escodegen@^1.9.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.1.tgz#c485ff8d6b4cdb89e27f4a856e91f118401ca510" dependencies: esprima "^3.1.3" estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: - source-map "~0.5.6" + source-map "~0.6.1" escope@^3.6.0: version "3.6.0" @@ -3093,75 +3139,62 @@ escope@^3.6.0: estraverse "^4.1.1" eslint-config-react-app@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-3.0.6.tgz#addcae1359235941e95f3c96970b7ac8552e1130" + version "3.0.7" + resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-3.0.7.tgz#d58c9216ff285e2b4de0eb8403c28b0600e45b3e" dependencies: confusing-browser-globals "^1.0.5" -eslint-import-resolver-node@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz#4422574cde66a9a7b099938ee4d508a199e0e3cc" +eslint-import-resolver-node@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + dependencies: + debug "^2.6.9" + resolve "^1.5.0" + +eslint-module-utils@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz#546178dab5e046c8b562bbb50705e2456d7bda49" dependencies: debug "^2.6.8" - resolve "^1.2.0" + pkg-dir "^2.0.0" -eslint-module-utils@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" +eslint-plugin-flowtype@^2.40.1, eslint-plugin-flowtype@^2.46.1: + version "2.50.3" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.50.3.tgz#61379d6dce1d010370acd6681740fd913d68175f" dependencies: - debug "^2.6.8" - pkg-dir "^1.0.0" - -eslint-plugin-flowtype@^2.40.1: - version "2.40.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.40.1.tgz#f78a8e6a4cc6da831dd541eb61e803ff0279b796" - dependencies: - lodash "^4.15.0" - -eslint-plugin-flowtype@^2.46.1: - version "2.46.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.46.3.tgz#7e84131d87ef18b496b1810448593374860b4e8e" - dependencies: - lodash "^4.15.0" + lodash "^4.17.10" eslint-plugin-import@^2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8" + version "2.16.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz#97ac3e75d0791c4fac0e15ef388510217be7f66f" dependencies: contains-path "^0.1.0" - debug "^2.6.8" + debug "^2.6.9" 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" + eslint-import-resolver-node "^0.3.2" + eslint-module-utils "^2.3.0" + has "^1.0.3" + lodash "^4.17.11" + minimatch "^3.0.4" read-pkg-up "^2.0.0" - resolve "^1.6.0" + resolve "^1.9.0" eslint-plugin-jsx-a11y@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.2.tgz#69bca4890b36dcf0fe16dd2129d2d88b98f33f88" + version "6.2.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.1.tgz#4ebba9f339b600ff415ae4166e3e2e008831cf0c" dependencies: aria-query "^3.0.0" array-includes "^3.0.3" ast-types-flow "^0.0.7" - axobject-query "^2.0.1" + axobject-query "^2.0.2" damerau-levenshtein "^1.0.4" - emoji-regex "^6.5.1" + emoji-regex "^7.0.2" has "^1.0.3" jsx-ast-utils "^2.0.1" -eslint-plugin-prettier@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.4.0.tgz#85cab0775c6d5e3344ef01e78d960f166fb93aae" - dependencies: - fast-diff "^1.1.1" - jest-docblock "^21.0.0" - -eslint-plugin-prettier@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.6.0.tgz#33e4e228bdb06142d03c560ce04ec23f6c767dd7" +eslint-plugin-prettier@^2.4.0, eslint-plugin-prettier@^2.6.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-2.7.0.tgz#b4312dcf2c1d965379d7f9d5b5f8aaadc6a45904" dependencies: fast-diff "^1.1.1" jest-docblock "^21.0.0" @@ -3185,9 +3218,9 @@ eslint-scope@3.7.1: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" +eslint-scope@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.2.tgz#5f10cd6cabb1965bf479fa65745673439e21cb0e" dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" @@ -3201,52 +3234,51 @@ eslint-visitor-keys@^1.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" eslint@^5.12.1: - version "5.12.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.12.1.tgz#5ca9931fb9029d04e7be92b03ce3b58edfac7e3b" + version "5.15.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.15.0.tgz#f313a2f7c7628d39adeefdba4a9c41f842012c9e" dependencies: "@babel/code-frame" "^7.0.0" - ajv "^6.5.3" + ajv "^6.9.1" chalk "^2.1.0" cross-spawn "^6.0.5" debug "^4.0.1" - doctrine "^2.1.0" - eslint-scope "^4.0.0" + doctrine "^3.0.0" + eslint-scope "^4.0.2" eslint-utils "^1.3.1" eslint-visitor-keys "^1.0.0" - espree "^5.0.0" + espree "^5.0.1" esquery "^1.0.1" esutils "^2.0.2" - file-entry-cache "^2.0.0" + file-entry-cache "^5.0.1" functional-red-black-tree "^1.0.1" glob "^7.1.2" globals "^11.7.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" - inquirer "^6.1.0" + inquirer "^6.2.2" js-yaml "^3.12.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" - lodash "^4.17.5" + lodash "^4.17.11" minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.2" path-is-inside "^1.0.2" - pluralize "^7.0.0" progress "^2.0.0" regexpp "^2.0.1" semver "^5.5.1" strip-ansi "^4.0.0" strip-json-comments "^2.0.1" - table "^5.0.2" + table "^5.2.3" text-table "^0.2.0" -espree@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.0.tgz#fc7f984b62b36a0f543b13fb9cd7b9f4a7f5b65c" +espree@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" dependencies: - acorn "^6.0.2" + acorn "^6.0.7" acorn-jsx "^5.0.0" eslint-visitor-keys "^1.0.0" @@ -3259,8 +3291,8 @@ esprima@^3.1.3: resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" esquery@^1.0.1: version "1.0.1" @@ -3269,11 +3301,10 @@ esquery@^1.0.1: 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" esrever@^0.2.0: version "0.2.0" @@ -3288,8 +3319,8 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" etag@^1.5.1: - version "1.8.0" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.0.tgz#6f631aef336d6c46362b51764044ce216be3c051" + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" etag@~1.7.0: version "1.7.0" @@ -3302,7 +3333,7 @@ event-emitter@^0.3.5, event-emitter@~0.3.5: d "1" es5-ext "~0.10.14" -event-stream@~3.3.0: +event-stream@=3.3.4: version "3.3.4" resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" dependencies: @@ -3314,22 +3345,42 @@ event-stream@~3.3.0: stream-combiner "~0.0.4" through "~2.3.1" -events@^1.0.0, events@^1.1.1: +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + +events@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" -evp_bytestokey@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.2.tgz#f66bb88ecd57f71a766821e20283ea38c68bf80a" +events@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" dependencies: md5.js "^1.3.4" safe-buffer "^5.1.1" exec-sh@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10" + version "0.2.2" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" dependencies: - merge "^1.1.3" + merge "^1.2.0" + +execa@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" + dependencies: + cross-spawn "^6.0.0" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" execa@^0.7.0: version "0.7.0" @@ -3351,12 +3402,28 @@ exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" dependencies: is-posix-bracket "^0.1.0" +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" @@ -3369,26 +3436,26 @@ expand-tilde@^1.2.2: dependencies: os-homedir "^1.0.1" -expand-tilde@^2.0.2: +expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" dependencies: homedir-polyfill "^1.0.1" -expect-ct@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/expect-ct/-/expect-ct-0.1.0.tgz#52735678de18530890d8d7b95f0ac63640958094" +expect-ct@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/expect-ct/-/expect-ct-0.1.1.tgz#de84476a2dbcb85000d5903737e9bc8a5ba7b897" -expect@^22.0.3: - version "22.0.3" - resolved "https://registry.yarnpkg.com/expect/-/expect-22.0.3.tgz#bb486de7d41bf3eb60d3b16dfd1c158a4d91ddfa" +expect@^22.4.0: + version "22.4.3" + resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674" dependencies: ansi-styles "^3.2.0" - jest-diff "^22.0.3" - jest-get-type "^22.0.3" - jest-matcher-utils "^22.0.3" - jest-message-util "^22.0.3" - jest-regex-util "^22.0.3" + jest-diff "^22.4.3" + jest-get-type "^22.4.3" + jest-matcher-utils "^22.4.3" + jest-message-util "^22.4.3" + jest-regex-util "^22.4.3" exports-loader@^0.6.4: version "0.6.4" @@ -3411,11 +3478,24 @@ express-session@~1.11.3: uid-safe "~2.0.0" utils-merge "1.0.0" -extend@^3.0.0, extend@^3.0.1, extend@~3.0.0, extend@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" -external-editor@^3.0.0: +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.0, extend@^3.0.1, extend@^3.0.2, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + +external-editor@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" dependencies: @@ -3429,6 +3509,19 @@ extglob@^0.3.1: dependencies: is-extglob "^1.0.0" +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + extract-text-webpack-plugin@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz#5f043eaa02f9750a9258b78c0a6e0dc1408fb2f7" @@ -3438,28 +3531,34 @@ extract-text-webpack-plugin@^3.0.2: schema-utils "^0.3.0" webpack-sources "^1.0.1" -extsprintf@1.3.0, extsprintf@^1.2.0: +extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + fancy-log@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948" + version "1.3.3" + resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" dependencies: - chalk "^1.1.1" + ansi-gray "^0.1.1" + color-support "^1.1.3" + parse-node-version "^1.0.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-deep-equal@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" fast-diff@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.1.1.tgz#0aea0e4e605b6a2189f0e936d4b7fbaf1b7cfd9b" + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" fast-json-stable-stringify@^2.0.0: version "2.0.0" @@ -3470,8 +3569,8 @@ fast-levenshtein@~2.0.4: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" fastparse@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" + version "1.1.2" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" fb-watchman@^2.0.0: version "2.0.0" @@ -3479,36 +3578,16 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" -fbjs@^0.8.16: - version "0.8.16" - resolved "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.9" - -fbjs@^0.8.5, fbjs@^0.8.9: - version "0.8.14" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.14.tgz#d1dbe2be254c35a91e09f31f9cd50a40b2a0ed1c" - dependencies: - core-js "^1.0.0" - isomorphic-fetch "^2.1.1" - loose-envify "^1.0.0" - object-assign "^4.1.0" - promise "^7.1.1" - setimmediate "^1.0.5" - ua-parser-js "^0.7.9" +feature-policy@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/feature-policy/-/feature-policy-0.2.0.tgz#22096de49ab240176878ffe2bde2f6ff04d48c43" fetch-test-server@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fetch-test-server/-/fetch-test-server-1.1.0.tgz#91ebed50493995adf3b0af61c44d197570e5ce22" + version "1.2.0" + resolved "https://registry.yarnpkg.com/fetch-test-server/-/fetch-test-server-1.2.0.tgz#65f23af1d030c293249a49bbd1b51e45fc68eb69" dependencies: - debug "^2.2.0" - node-fetch "^1.5.1" + debug "^3.1.0" + node-fetch "^2.1.2" figures@^1.7.0: version "1.7.0" @@ -3523,19 +3602,18 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" + flat-cache "^2.0.1" file-loader@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.6.tgz#7b9a8f2c58f00a77fddf49e940f7ac978a3ea0e8" + version "1.1.11" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" dependencies: loader-utils "^1.0.2" - schema-utils "^0.3.0" + schema-utils "^0.4.5" filename-regex@^2.0.0: version "2.0.1" @@ -3549,15 +3627,24 @@ fileset@^2.0.2: minimatch "^3.0.3" fill-range@^2.1.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" dependencies: is-number "^2.1.0" isobject "^2.0.0" - randomatic "^1.1.3" + randomatic "^3.0.0" repeat-element "^1.1.2" repeat-string "^1.5.2" +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + finalhandler@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.4.0.tgz#965a52d9e8d05d2b857548541fb89b53a2497d9b" @@ -3567,18 +3654,6 @@ finalhandler@0.4.0: on-finished "~2.3.0" unpipe "~1.0.0" -finalhandler@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.0.3.tgz#ef47e77950e999780e86022a560e3217e0d0cc89" - dependencies: - debug "2.6.7" - encodeurl "~1.0.1" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.1" - statuses "~1.3.1" - unpipe "~1.0.0" - find-cache-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" @@ -3604,15 +3679,6 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" -findup-sync@^0.4.2: - version "0.4.3" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.3.tgz#40043929e7bc60adf0b7f4827c4c6e75a0deca12" - dependencies: - detect-file "^0.1.0" - is-glob "^2.0.1" - micromatch "^2.3.7" - resolve-dir "^0.1.0" - findup-sync@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-1.0.0.tgz#6f7e4b57b6ee3a4037b4414eaedea3f58f71e0ec" @@ -3622,9 +3688,18 @@ findup-sync@^1.0.0: micromatch "^2.3.7" resolve-dir "^0.1.0" +findup-sync@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" + dependencies: + detect-file "^1.0.0" + is-glob "^3.1.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + fined@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.0.tgz#b37dc844b76a2f5e7081e884f7c0ae344f153476" + version "1.1.1" + resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.1.tgz#95d88ff329123dd1a6950fdfcd321f746271e01f" dependencies: expand-tilde "^2.0.2" is-plain-object "^2.0.3" @@ -3636,18 +3711,21 @@ first-chunk-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" -flagged-respawn@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-0.3.2.tgz#ff191eddcd7088a675b2610fffc976be9b8074b5" +flagged-respawn@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" -flat-cache@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" dependencies: - circular-json "^0.3.1" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flatted@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.0.tgz#55122b6536ea496b4b44893ee2608141d10d9916" flatten@^1.0.2: version "1.0.2" @@ -3662,13 +3740,13 @@ flow-bin@0.86.0: resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.86.0.tgz#153a28722b4dc13b7200c74b644dd4d9f4969a11" flow-typed@^2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-2.4.0.tgz#3d2f48cf85df29df3bca6745b623726496ff4788" + version "2.5.1" + resolved "https://registry.yarnpkg.com/flow-typed/-/flow-typed-2.5.1.tgz#0ff565cc94d2af8c557744ba364b6f14726a6b9f" dependencies: + "@octokit/rest" "^15.2.6" babel-polyfill "^6.26.0" colors "^1.1.2" fs-extra "^5.0.0" - github "0.2.4" glob "^7.1.2" got "^7.1.0" md5 "^2.1.0" @@ -3682,19 +3760,19 @@ flow-typed@^2.4.0: yargs "^4.2.0" flush-write-stream@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" dependencies: - inherits "^2.0.1" - readable-stream "^2.0.4" + inherits "^2.0.3" + readable-stream "^2.3.6" follow-redirects@^1.3.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.0.tgz#234f49cf770b7f35b40e790f636ceba0c3a0ab77" + version "1.7.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.7.0.tgz#489ebc198dc0e7f64167bd23b03c4c19b5784c76" dependencies: - debug "^3.1.0" + debug "^3.2.6" -for-in@^1.0.1: +for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -3710,29 +3788,23 @@ for-own@^1.0.0: 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" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" dependencies: asynckit "^0.4.0" - combined-stream "^1.0.5" + combined-stream "^1.0.6" mime-types "^2.1.12" -form-data@~2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" + map-cache "^0.2.2" frameguard@3.0.0: version "3.0.0" @@ -3742,9 +3814,9 @@ fresh@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" -fresh@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e" +fresh@~0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" from2@^2.1.0: version "2.3.0" @@ -3779,17 +3851,9 @@ fs-extra@^3.0.1: jsonfile "^3.0.0" universalify "^0.1.0" -fs-extra@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.1.tgz#7fc0c6c8957f983f57f306a24e5b9ddd8d0dd880" - dependencies: - graceful-fs "^4.1.2" - jsonfile "^3.0.0" - universalify "^0.1.0" - -fs-extra@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b" +fs-extra@^4.0.1, fs-extra@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" @@ -3803,6 +3867,12 @@ fs-extra@^5.0.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-minipass@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + dependencies: + minipass "^2.2.1" + fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" @@ -3816,29 +3886,14 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -fsevents@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" +fsevents@^1.0.0, fsevents@^1.2.3, fsevents@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4" dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.36" + nan "^2.9.2" + node-pre-gyp "^0.10.0" -fsevents@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" - dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.39" - -fstream-ignore@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" - dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" - -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2, fstream@~1.0.10: +fstream@~1.0.10: version "1.0.11" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" dependencies: @@ -3847,7 +3902,7 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2, fstream@~1.0.10: mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2, function-bind@^1.1.1: +function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -3868,6 +3923,15 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" +gaxios@^1.0.4: + version "1.8.0" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-1.8.0.tgz#9ebde357782e138af30660a5e9aa30cb7d862401" + dependencies: + abort-controller "^2.0.2" + extend "^3.0.2" + https-proxy-agent "^2.2.1" + node-fetch "^2.3.0" + gaze@^0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f" @@ -3887,24 +3951,32 @@ generic-pool@2.4.3: resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-2.4.3.tgz#780c36f69dfad05a5a045dd37be7adca11a4f6ff" generic-pool@^3.1.8: - version "3.2.0" - resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.2.0.tgz#c1d485ecbd6f18c0513d4741d098a6715eaeeca8" + version "3.6.1" + resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.6.1.tgz#a51a8439ee86f0bbcf100fc1db3f45c86289deb4" get-caller-file@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" get-document@1: version "1.0.0" - resolved "https://registry.npmjs.org/get-document/-/get-document-1.0.0.tgz#4821bce66f1c24cb0331602be6cb6b12c4f01c4b" + resolved "https://registry.yarnpkg.com/get-document/-/get-document-1.0.0.tgz#4821bce66f1c24cb0331602be6cb6b12c4f01c4b" + +get-port@latest: + version "4.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + get-window@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/get-window/-/get-window-1.1.1.tgz#0750f8970c88a54ac1294deb97add9568b3db594" + version "1.1.2" + resolved "https://registry.yarnpkg.com/get-window/-/get-window-1.1.2.tgz#65fbaa999fb87f86ea5d30770f4097707044f47f" dependencies: get-document "1" @@ -3914,12 +3986,6 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" -github@0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/github/-/github-0.2.4.tgz#24fa7f0e13fa11b946af91134c51982a91ce538b" - dependencies: - mime "^1.2.11" - glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" @@ -3933,6 +3999,13 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + glob-stream@^3.1.5: version "3.1.18" resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b" @@ -3965,9 +4038,9 @@ glob@^4.3.1: minimatch "^2.0.1" once "^1.3.0" -glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" +glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -3991,6 +4064,14 @@ global-modules@^0.2.3: global-prefix "^0.1.4" is-windows "^0.2.0" +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + global-prefix@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f" @@ -4000,6 +4081,16 @@ global-prefix@^0.1.4: is-windows "^0.2.0" which "^1.2.12" +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + global@^4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" @@ -4008,24 +4099,13 @@ global@^4.3.0: process "~0.5.1" globals@^11.1.0, globals@^11.7.0: - version "11.10.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.10.0.tgz#1e09776dffda5e01816b3bb4077c8b59c24eaa50" + version "11.11.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - globule@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5" @@ -4035,8 +4115,8 @@ globule@~0.1.0: minimatch "~0.2.11" glogg@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5" + version "1.0.2" + resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" dependencies: sparkles "^1.0.0" @@ -4055,15 +4135,15 @@ good-listener@^1.2.2: delegate "^3.1.2" google-auth-library@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-1.5.0.tgz#d9068f8bad9017224a4c41abcdcb6cf6a704e83b" + version "1.6.1" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-1.6.1.tgz#9c73d831ad720c0c3048ab89d0ffdec714d07dd2" dependencies: axios "^0.18.0" gcp-metadata "^0.6.3" gtoken "^2.3.0" - jws "^3.1.4" + jws "^3.1.5" lodash.isstring "^4.0.1" - lru-cache "^4.1.2" + lru-cache "^4.1.3" retry-axios "^0.3.2" google-closure-compiler-js@^20170423.0.0: @@ -4075,11 +4155,11 @@ google-closure-compiler-js@^20170423.0.0: webpack-core "^0.6.8" google-p12-pem@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-1.0.2.tgz#c8a3843504012283a0dbffc7430b7c753ecd4b07" + version "1.0.3" + resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-1.0.3.tgz#3d8acc140573339a5bca7b2f6a4b206bbea6d8d7" dependencies: - node-forge "^0.7.4" - pify "^3.0.0" + node-forge "^0.7.5" + pify "^4.0.0" got@^3.2.0: version "3.3.1" @@ -4122,8 +4202,8 @@ graceful-fs@^3.0.0: natives "^1.1.0" graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" graceful-fs@~1.2.0: version "1.2.3" @@ -4138,14 +4218,14 @@ growly@^1.3.0: resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" gtoken@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-2.3.0.tgz#4e0ffc16432d7041a1b3dbc1d97aac17a5dc964a" + version "2.3.2" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-2.3.2.tgz#49890a866c1f44e173099be95515db5872a92151" dependencies: - axios "^0.18.0" + gaxios "^1.0.4" google-p12-pem "^1.0.0" - jws "^3.1.4" + jws "^3.1.5" mime "^2.2.0" - pify "^3.0.0" + pify "^4.0.0" gulp-help@~1.6.1: version "1.6.1" @@ -4208,40 +4288,29 @@ gzip-size@^3.0.0: duplexer "^0.1.1" handlebars@^4.0.3: - version "4.0.10" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.10.tgz#3d30c718b09a3d96f23ea4cc1f403c4d3ba9ff4f" + version "4.1.0" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.0.tgz#0d6a6f34ff1f63cecec8423aa4169827bf787c3a" dependencies: - async "^1.4.0" + async "^2.5.0" optimist "^0.6.1" - source-map "^0.4.4" + source-map "^0.6.1" optionalDependencies: - uglify-js "^2.6" - -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + uglify-js "^3.1.4" har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - -har-validator@~5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" - dependencies: - ajv "^5.1.0" + ajv "^6.5.5" har-schema "^2.0.0" harmony-reflect@^1.4.6: - version "1.5.1" - resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.5.1.tgz#b54ca617b00cc8aef559bbb17b3d85431dc7e329" + version "1.6.1" + resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.1.tgz#c108d4f2bb451efef7a37861fdbdae72c9bdefa9" has-ansi@^2.0.0: version "2.0.0" @@ -4268,8 +4337,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-symbols@^1.0.0: version "1.0.0" @@ -4285,24 +4354,39 @@ has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" -has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" dependencies: - function-bind "^1.0.2" + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" -has@^1.0.3: +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.1, has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" dependencies: function-bind "^1.1.1" -hash-base@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" - dependencies: - inherits "^2.0.1" - hash-base@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" @@ -4311,34 +4395,16 @@ hash-base@^3.0.0: safe-buffer "^5.0.1" hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" dependencies: inherits "^2.0.3" - minimalistic-assert "^1.0.0" + minimalistic-assert "^1.0.1" hashtag-regex@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/hashtag-regex/-/hashtag-regex-2.0.0.tgz#9b32413529e9ca28b41e7c6378e35677b178d5ad" -hawk@3.1.3, hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" - dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" - -hawk@~6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" - dependencies: - boom "4.x.x" - cryptiles "3.x.x" - hoek "4.x.x" - sntp "2.x.x" - he@1.1.x: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" @@ -4350,33 +4416,38 @@ header-case@^1.0.0: no-case "^2.2.0" upper-case "^1.1.3" -helmet-csp@2.5.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.5.1.tgz#5f3deec8f922fa7e074dbc3987c168a50573c36d" +helmet-crossdomain@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/helmet-crossdomain/-/helmet-crossdomain-0.3.0.tgz#707e2df930f13ad61f76ed08e1bb51ab2b2e85fa" + +helmet-csp@2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/helmet-csp/-/helmet-csp-2.7.1.tgz#e8e0b5186ffd4db625cfcce523758adbfadb9dca" dependencies: camelize "1.0.0" - content-security-policy-builder "1.1.0" + content-security-policy-builder "2.0.0" dasherize "2.0.0" - lodash.reduce "4.6.0" - platform "1.3.4" + platform "1.3.5" helmet@^3.6.1: - version "3.8.1" - resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.8.1.tgz#bef2b68ffbaa19759e858c19cca7db213bb58b2d" + version "3.15.1" + resolved "https://registry.yarnpkg.com/helmet/-/helmet-3.15.1.tgz#2c80d1a59138b6f23929605afca4b1c88b3298ec" dependencies: - connect "3.6.2" + depd "2.0.0" dns-prefetch-control "0.1.0" dont-sniff-mimetype "1.0.0" - expect-ct "0.1.0" + expect-ct "0.1.1" + feature-policy "0.2.0" frameguard "3.0.0" - helmet-csp "2.5.1" + helmet-crossdomain "0.3.0" + helmet-csp "2.7.1" hide-powered-by "1.0.0" hpkp "2.0.0" hsts "2.1.0" ienoopen "1.0.0" nocache "2.0.0" referrer-policy "1.1.0" - x-xss-protection "1.0.0" + x-xss-protection "1.1.0" hide-powered-by@1.0.0: version "1.0.0" @@ -4404,19 +4475,15 @@ hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" -hoek@4.x.x: - version "4.2.0" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" - hoist-non-react-statics@^2.5.0: version "2.5.5" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" hoist-non-react-statics@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.1.0.tgz#42414ccdfff019cd2168168be998c7b3bd5245c0" + version "3.3.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz#b09178f0122184fb95acf525daaecb4d8f45958b" dependencies: - react-is "^16.3.2" + react-is "^16.7.0" home-or-tmp@^2.0.0: version "2.0.0" @@ -4426,14 +4493,14 @@ home-or-tmp@^2.0.0: os-tmpdir "^1.0.1" homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" dependencies: parse-passwd "^1.0.0" hosted-git-info@^2.1.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" hpkp@2.0.0: version "2.0.0" @@ -4444,12 +4511,12 @@ hsts@2.1.0: resolved "https://registry.yarnpkg.com/hsts/-/hsts-2.1.0.tgz#cbd6c918a2385fee1dd5680bfb2b3a194c0121cc" html-comment-regex@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" + version "1.1.2" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" -html-encoding-sniffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" dependencies: whatwg-encoding "^1.0.1" @@ -4480,46 +4547,49 @@ html-webpack-plugin@2.17.0: pretty-error "^2.0.0" toposort "^0.2.12" -htmlparser2@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" +htmlparser2@^3.3.0: + version "3.10.1" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" dependencies: - domelementtype "1" - domhandler "2.1" - domutils "1.1" - readable-stream "1.0" + domelementtype "^1.3.1" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^3.1.1" -http-assert@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.3.0.tgz#a31a5cf88c873ecbb5796907d4d6f132e8c01e4a" +http-assert@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/http-assert/-/http-assert-1.4.0.tgz#0e550b4fca6adf121bbeed83248c17e62f593a9a" dependencies: deep-equal "~1.0.1" - http-errors "~1.6.1" + http-errors "~1.7.1" -http-errors@1.4.0, http-errors@^1.2.8, http-errors@^1.3.1: +http-errors@1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.4.0.tgz#6c0242dea6b3df7afda153c71089b31c6e82aabf" dependencies: inherits "2.0.1" statuses ">= 1.2.1 < 2" -http-errors@1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.1.tgz#5f8b8ed98aca545656bf572997387f904a722257" +http-errors@1.6.3, http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" dependencies: - depd "1.1.0" + depd "~1.1.2" inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" -http-errors@^1.6.1, http-errors@~1.6.1: - version "1.6.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" +http-errors@^1.3.1, http-errors@^1.6.1, http-errors@^1.6.3, http-errors@~1.7.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" dependencies: - depd "1.1.1" + depd "~1.1.2" inherits "2.0.3" - setprototypeof "1.0.3" - statuses ">= 1.3.1 < 2" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" http-errors@~1.3.1: version "1.3.1" @@ -4528,21 +4598,12 @@ http-errors@~1.3.1: inherits "~2.0.1" statuses "1" -http-errors@~1.5.0: - version "1.5.1" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.5.1.tgz#788c0d2c1de2c81b9e6e8c01843b6b97eb920750" +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" dependencies: - inherits "2.0.3" - setprototypeof "1.0.2" - statuses ">= 1.3.1 < 2" - -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" - dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" + agent-base "4" + debug "3.1.0" http-signature@~1.2.0: version "1.2.0" @@ -4556,6 +4617,13 @@ https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" +https-proxy-agent@^2.2.0, https-proxy-agent@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" + dependencies: + agent-base "^4.1.0" + debug "^3.1.0" + humanize-number@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/humanize-number/-/humanize-number-0.0.2.tgz#11c0af6a471643633588588048f1799541489c18" @@ -4568,11 +4636,13 @@ iconv-lite@0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" -iconv-lite@0.4.18, iconv-lite@~0.4.13: - version "0.4.18" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.18.tgz#23d8656b16aae6742ac29732ea8f0336a4789cf2" +iconv-lite@0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + dependencies: + safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" dependencies: @@ -4594,10 +4664,14 @@ identity-obj-proxy@^3.0.0: dependencies: harmony-reflect "^1.4.6" -ieee754@^1.1.4: +ieee754@1.1.8: version "1.1.8" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" +ieee754@^1.1.4: + version "1.1.12" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" + ienoopen@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ienoopen/-/ienoopen-1.0.0.tgz#346a428f474aac8f50cf3784ea2d0f16f62bda6b" @@ -4610,6 +4684,12 @@ ignore-by-default@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + dependencies: + minimatch "^3.0.4" + ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -4628,7 +4708,7 @@ immediate@~3.0.5: immutable@^3.8.2: version "3.8.2" - resolved "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" import-fresh@^3.0.0: version "3.0.0" @@ -4637,6 +4717,13 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" +import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + imports-loader@0.6.5: version "0.6.5" resolved "https://registry.yarnpkg.com/imports-loader/-/imports-loader-0.6.5.tgz#ae74653031d59e37b3c2fb2544ac61aeae3530a6" @@ -4689,47 +4776,41 @@ inherits@1: version "1.0.2" resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" -inherits@2, inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - -inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" -ini@^1.3.4, ini@~1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" -inquirer@^6.1.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.1.tgz#9943fc4882161bdb0b0c9276769c75b32dbfcd52" +ini@^1.3.4, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +inquirer@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.2.tgz#46941176f65c9eb20804627149b743a218f25406" dependencies: - ansi-escapes "^3.0.0" - chalk "^2.0.0" + ansi-escapes "^3.2.0" + chalk "^2.4.2" cli-cursor "^2.1.0" cli-width "^2.0.0" - external-editor "^3.0.0" + external-editor "^3.0.3" figures "^2.0.0" - lodash "^4.17.10" + lodash "^4.17.11" mute-stream "0.0.7" run-async "^2.2.0" - rxjs "^6.1.0" + rxjs "^6.4.0" string-width "^2.1.0" strip-ansi "^5.0.0" through "^2.3.6" interpret@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" -invariant@^2.2.1, invariant@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" - dependencies: - loose-envify "^1.0.0" - -invariant@^2.2.4: +invariant@^2.2.1, invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" dependencies: @@ -4739,52 +4820,51 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" -ioredis@^3.1.4: - version "3.2.2" - resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-3.2.2.tgz#b7d5ff3afd77bb9718bb2821329b894b9a44c00b" +ioredis@^4.5.1: + version "4.6.2" + resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.6.2.tgz#840847117fe0190a9309085847311a07183fc385" dependencies: - bluebird "^3.3.4" cluster-key-slot "^1.0.6" - debug "^2.6.9" + debug "^3.1.0" denque "^1.1.0" flexbuffer "0.0.6" - lodash.assign "^4.2.0" - lodash.bind "^4.2.1" - lodash.clone "^4.5.0" - lodash.clonedeep "^4.5.0" lodash.defaults "^4.2.0" - lodash.difference "^4.5.0" lodash.flatten "^4.4.0" - lodash.foreach "^4.5.0" - lodash.isempty "^4.4.0" - lodash.keys "^4.2.0" - lodash.noop "^3.0.1" - lodash.partial "^4.2.1" - lodash.pick "^4.4.0" - lodash.sample "^4.2.1" - lodash.shuffle "^4.2.0" - lodash.values "^4.3.0" - redis-commands "^1.2.0" - redis-parser "^2.4.0" + redis-commands "1.4.0" + redis-errors "^1.2.0" + redis-parser "^3.0.0" + standard-as-callback "^1.0.0" is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" -is-absolute@^0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb" +is-absolute@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" dependencies: - is-relative "^0.2.1" - is-windows "^0.2.0" + is-relative "^1.0.0" + is-windows "^1.0.1" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + dependencies: + kind-of "^6.0.0" is-alphabetical@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.1.tgz#c77079cc91d4efac775be1034bf2d243f95e6f08" + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.2.tgz#1fa6e49213cb7885b75d15862fb3f3d96c884f41" is-alphanumerical@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.1.tgz#dfb4aa4d1085e33bdb61c2dee9c80e9c6c19f53b" + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz#1138e9ae5040158dc6ff76b820acd6b7a181fd40" dependencies: is-alphabetical "^1.0.0" is-decimal "^1.0.0" @@ -4803,33 +4883,31 @@ is-bluebird@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-bluebird/-/is-bluebird-1.0.2.tgz#096439060f4aa411abee19143a84d6a55346d6e2" -is-buffer@^1.1.4: +is-buffer@^1.1.4, is-buffer@^1.1.5, is-buffer@~1.1.1: version "1.1.6" - resolved "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - -is-buffer@^1.1.5, is-buffer@~1.1.1: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" - -is-builtin-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" - dependencies: - builtin-modules "^1.0.0" - -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" is-callable@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" is-ci@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" dependencies: - ci-info "^1.0.0" + ci-info "^1.5.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + dependencies: + kind-of "^6.0.0" is-data-uri@^0.1.0: version "0.1.0" @@ -4842,8 +4920,24 @@ is-date-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" is-decimal@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.1.tgz#f5fb6a94996ad9e8e3761fbfbd091f1fca8c4e82" + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.2.tgz#894662d6a8709d307f3a276ca4339c8fa5dff0ff" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" is-dotfile@^1.0.0: version "1.0.3" @@ -4855,14 +4949,24 @@ is-equal-shallow@^0.1.3: dependencies: is-primitive "^2.0.0" -is-extendable@^0.1.1: +is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" @@ -4879,9 +4983,13 @@ is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" -is-generator-function@^1.0.3: - version "1.0.6" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.6.tgz#9e71653cd15fff341c79c4151460a131d31e9fc4" +is-generator-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" + +is-generator-function@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.7.tgz#d2132e529bb0000a7f80794d4bdf5cd5e5813522" is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" @@ -4889,18 +4997,26 @@ is-glob@^2.0.0, is-glob@^2.0.1: dependencies: is-extglob "^1.0.0" -is-hexadecimal@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz#6e084bbc92061fbb0971ec58b6ce6d404e24da69" +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" -is-hotkey@0.1.4: +is-glob@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz#b6e710d7d07bb66b98cb8cece5c9b4921deeb835" + +is-hotkey@0.1.4, is-hotkey@^0.1.1: version "0.1.4" resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.1.4.tgz#c34d2c85d6ec8d09a871dcf71931c8067a824c7d" -is-hotkey@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/is-hotkey/-/is-hotkey-0.1.1.tgz#b279a2fd108391be9aa93c6cb317f50357da549a" - is-image@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-image/-/is-image-1.0.1.tgz#6fd51a752a1a111506d060d952118b0b989b426e" @@ -4909,7 +5025,7 @@ is-image@^1.0.1: is-in-browser@^1.1.3: version "1.1.3" - resolved "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" + resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" is-lower-case@^1.1.0: version "1.1.3" @@ -4943,31 +5059,19 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + is-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" - dependencies: - path-is-inside "^1.0.1" - is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" -is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" dependencies: @@ -4995,11 +5099,11 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" -is-relative@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5" +is-relative@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" dependencies: - is-unc-path "^0.1.1" + is-unc-path "^1.0.0" is-retry-allowed@^1.0.0: version "1.1.0" @@ -5015,10 +5119,6 @@ is-svg@^2.0.0: dependencies: html-comment-regex "^1.1.0" -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" - is-symbol@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" @@ -5029,11 +5129,11 @@ is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" -is-unc-path@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9" +is-unc-path@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" dependencies: - unc-path-regex "^0.1.0" + unc-path-regex "^0.1.2" is-upper-case@^1.1.0: version "1.1.2" @@ -5042,28 +5142,36 @@ is-upper-case@^1.1.0: upper-case "^1.1.0" is-url@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.2.tgz#498905a593bf47cc2d9e7f738372bbf7696c7f26" + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" is-utf8@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" is-whitespace-character@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz#9ae0176f3282b65457a1992cdb084f8a5f833e3b" + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz#ede53b4c6f6fb3874533751ec9280d01928d03ed" is-window@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/is-window/-/is-window-1.0.2.tgz#2c896ca53db97de45d3c33133a65d8c9f563480d" + resolved "https://registry.yarnpkg.com/is-window/-/is-window-1.0.2.tgz#2c896ca53db97de45d3c33133a65d8c9f563480d" is-windows@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" +is-windows@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + is-word-character@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.1.tgz#5a03fa1ea91ace8a6eb0c7cd770eb86d65c8befb" + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.2.tgz#46a5dac3f2a1840898b91e576cd40d493f3ae553" + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" isarray@0.0.1: version "0.0.1" @@ -5093,9 +5201,9 @@ isobject@^3.0.0, isobject@^3.0.1: isomorphic-base64@^1.0.2: version "1.0.2" - resolved "https://registry.npmjs.org/isomorphic-base64/-/isomorphic-base64-1.0.2.tgz#f426aae82569ba8a4ec5ca73ad21a44ab1ee7803" + resolved "https://registry.yarnpkg.com/isomorphic-base64/-/isomorphic-base64-1.0.2.tgz#f426aae82569ba8a4ec5ca73ad21a44ab1ee7803" -isomorphic-fetch@2.2.1, isomorphic-fetch@^2.1.1: +isomorphic-fetch@2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" dependencies: @@ -5107,87 +5215,65 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" istanbul-api@^1.1.14: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.2.1.tgz#0c60a0515eb11c7d65c6b50bba2c6e999acd8620" + version "1.3.7" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa" dependencies: async "^2.1.4" fileset "^2.0.2" - istanbul-lib-coverage "^1.1.1" - istanbul-lib-hook "^1.1.0" - istanbul-lib-instrument "^1.9.1" - istanbul-lib-report "^1.1.2" - istanbul-lib-source-maps "^1.2.2" - istanbul-reports "^1.1.3" + istanbul-lib-coverage "^1.2.1" + istanbul-lib-hook "^1.2.2" + istanbul-lib-instrument "^1.10.2" + istanbul-lib-report "^1.1.5" + istanbul-lib-source-maps "^1.2.6" + istanbul-reports "^1.5.1" js-yaml "^3.7.0" mkdirp "^0.5.1" once "^1.4.0" -istanbul-lib-coverage@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.1.tgz#73bfb998885299415c93d38a3e9adf784a77a9da" +istanbul-lib-coverage@^1.1.1, istanbul-lib-coverage@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" -istanbul-lib-hook@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b" +istanbul-lib-hook@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.7.5: - version "1.7.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.7.5.tgz#adb596f8f0cb8b95e739206351a38a586af21b1e" - dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.17.4" - istanbul-lib-coverage "^1.1.1" - semver "^5.3.0" - -istanbul-lib-instrument@^1.8.0, istanbul-lib-instrument@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.1.tgz#250b30b3531e5d3251299fdd64b0b2c9db6b558e" +istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2, istanbul-lib-instrument@^1.8.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" babel-traverse "^6.18.0" babel-types "^6.18.0" babylon "^6.18.0" - istanbul-lib-coverage "^1.1.1" + istanbul-lib-coverage "^1.2.1" semver "^5.3.0" -istanbul-lib-report@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.2.tgz#922be27c13b9511b979bd1587359f69798c1d425" +istanbul-lib-report@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" dependencies: - istanbul-lib-coverage "^1.1.1" + istanbul-lib-coverage "^1.2.1" mkdirp "^0.5.1" path-parse "^1.0.5" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.1.tgz#a6fe1acba8ce08eebc638e572e294d267008aa0c" - dependencies: - debug "^2.6.3" - istanbul-lib-coverage "^1.1.1" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-lib-source-maps@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.2.tgz#750578602435f28a0c04ee6d7d9e0f2960e62c1c" +istanbul-lib-source-maps@^1.2.1, istanbul-lib-source-maps@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" dependencies: debug "^3.1.0" - istanbul-lib-coverage "^1.1.1" + istanbul-lib-coverage "^1.2.1" mkdirp "^0.5.1" rimraf "^2.6.1" source-map "^0.5.3" -istanbul-reports@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.3.tgz#3b9e1e8defb6d18b1d425da8e8b32c5a163f2d10" +istanbul-reports@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" dependencies: handlebars "^4.0.3" @@ -5198,40 +5284,43 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -jest-changed-files@^22.0.3: - version "22.0.3" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.0.3.tgz#3771315acfa24a0ed7e6c545de620db6f1b2d164" +jest-changed-files@^22.2.0: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.4.3.tgz#8882181e022c38bd46a2e4d18d44d19d90a90fb2" dependencies: throat "^4.0.0" jest-cli@22: - version "22.0.4" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.0.4.tgz#0052abaad45c57861c05da8ab5d27bad13ad224d" + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.4.tgz#68cd2a2aae983adb1e6638248ca21082fd6d9e90" dependencies: ansi-escapes "^3.0.0" chalk "^2.0.1" + exit "^0.1.2" glob "^7.1.2" graceful-fs "^4.1.11" + import-local "^1.0.0" is-ci "^1.0.10" istanbul-api "^1.1.14" istanbul-lib-coverage "^1.1.1" istanbul-lib-instrument "^1.8.0" istanbul-lib-source-maps "^1.2.1" - jest-changed-files "^22.0.3" - jest-config "^22.0.4" - jest-environment-jsdom "^22.0.4" - jest-get-type "^22.0.3" - jest-haste-map "^22.0.3" - jest-message-util "^22.0.3" - jest-regex-util "^22.0.3" - jest-resolve-dependencies "^22.0.3" - jest-runner "^22.0.4" - jest-runtime "^22.0.4" - jest-snapshot "^22.0.3" - jest-util "^22.0.4" - jest-worker "^22.0.3" + jest-changed-files "^22.2.0" + jest-config "^22.4.4" + jest-environment-jsdom "^22.4.1" + jest-get-type "^22.1.0" + jest-haste-map "^22.4.2" + jest-message-util "^22.4.0" + jest-regex-util "^22.1.0" + jest-resolve-dependencies "^22.1.0" + jest-runner "^22.4.4" + jest-runtime "^22.4.4" + jest-snapshot "^22.4.0" + jest-util "^22.4.1" + jest-validate "^22.4.4" + jest-worker "^22.2.2" micromatch "^2.3.11" - node-notifier "^5.1.2" + node-notifier "^5.2.1" realpath-native "^1.0.0" rimraf "^2.5.4" slash "^1.0.0" @@ -5240,104 +5329,105 @@ jest-cli@22: which "^1.2.12" yargs "^10.0.3" -jest-config@^22.0.4: - version "22.0.4" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.0.4.tgz#9c2a46c0907b1a1af54d9cdbf18e99b447034e11" +jest-config@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.4.tgz#72a521188720597169cd8b4ff86934ef5752d86a" dependencies: chalk "^2.0.1" glob "^7.1.1" - jest-environment-jsdom "^22.0.4" - jest-environment-node "^22.0.4" - jest-get-type "^22.0.3" - jest-jasmine2 "^22.0.4" - jest-regex-util "^22.0.3" - jest-resolve "^22.0.4" - jest-util "^22.0.4" - jest-validate "^22.0.3" - pretty-format "^22.0.3" + jest-environment-jsdom "^22.4.1" + jest-environment-node "^22.4.1" + jest-get-type "^22.1.0" + jest-jasmine2 "^22.4.4" + jest-regex-util "^22.1.0" + jest-resolve "^22.4.2" + jest-util "^22.4.1" + jest-validate "^22.4.4" + pretty-format "^22.4.0" -jest-diff@^22.0.3: - version "22.0.3" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.0.3.tgz#ffed5aba6beaf63bb77819ba44dd520168986321" +jest-diff@^22.4.0, jest-diff@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030" dependencies: chalk "^2.0.1" diff "^3.2.0" - jest-get-type "^22.0.3" - pretty-format "^22.0.3" + jest-get-type "^22.4.3" + pretty-format "^22.4.3" jest-docblock@^21.0.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" -jest-docblock@^22.0.3: - version "22.0.3" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.0.3.tgz#c33aa22682b9fc68a5373f5f82994428a2ded601" +jest-docblock@^22.4.0, jest-docblock@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.3.tgz#50886f132b42b280c903c592373bb6e93bb68b19" dependencies: detect-newline "^2.1.0" -jest-environment-jsdom@^22.0.4: - version "22.0.4" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.0.4.tgz#5723d4e724775ed38948de792e62f2d6a7f452df" +jest-environment-jsdom@^22.4.1: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e" dependencies: - jest-mock "^22.0.3" - jest-util "^22.0.4" + jest-mock "^22.4.3" + jest-util "^22.4.3" jsdom "^11.5.1" -jest-environment-node@^22.0.4: - version "22.0.4" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.0.4.tgz#068671f85a545f96a5469be3a3dd228fca79c709" +jest-environment-node@^22.4.1: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129" dependencies: - jest-mock "^22.0.3" - jest-util "^22.0.4" + jest-mock "^22.4.3" + jest-util "^22.4.3" -jest-get-type@^22.0.3: - version "22.0.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.0.3.tgz#fa894b677c0fcd55eff3fd8ee28c7be942e32d36" +jest-get-type@^22.1.0, jest-get-type@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" -jest-haste-map@^22.0.3: - version "22.0.3" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.0.3.tgz#c9ecb5c871c5465d4bde4139e527fa0dc784aa2d" +jest-haste-map@^22.4.2: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.3.tgz#25842fa2ba350200767ac27f658d58b9d5c2e20b" dependencies: fb-watchman "^2.0.0" graceful-fs "^4.1.11" - jest-docblock "^22.0.3" - jest-worker "^22.0.3" + jest-docblock "^22.4.3" + jest-serializer "^22.4.3" + jest-worker "^22.4.3" micromatch "^2.3.11" sane "^2.0.0" -jest-jasmine2@^22.0.4: - version "22.0.4" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.0.4.tgz#f7c0965116efe831ec674dc954b0134639b3dcee" +jest-jasmine2@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.4.tgz#c55f92c961a141f693f869f5f081a79a10d24e23" dependencies: - callsites "^2.0.0" chalk "^2.0.1" - expect "^22.0.3" + co "^4.6.0" + expect "^22.4.0" graceful-fs "^4.1.11" - jest-diff "^22.0.3" - jest-matcher-utils "^22.0.3" - jest-message-util "^22.0.3" - jest-snapshot "^22.0.3" + is-generator-fn "^1.0.0" + jest-diff "^22.4.0" + jest-matcher-utils "^22.4.0" + jest-message-util "^22.4.0" + jest-snapshot "^22.4.0" + jest-util "^22.4.1" source-map-support "^0.5.0" -jest-leak-detector@^22.0.3: - version "22.0.3" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.0.3.tgz#b64904f0e8954a11edb79b0809ff4717fa762d99" +jest-leak-detector@^22.4.0: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz#2b7b263103afae8c52b6b91241a2de40117e5b35" dependencies: - pretty-format "^22.0.3" - optionalDependencies: - weak "^1.0.1" + pretty-format "^22.4.3" -jest-matcher-utils@^22.0.3: - version "22.0.3" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.0.3.tgz#2ec15ca1af7dcabf4daddc894ccce224b948674e" +jest-matcher-utils@^22.4.0, jest-matcher-utils@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff" dependencies: chalk "^2.0.1" - jest-get-type "^22.0.3" - pretty-format "^22.0.3" + jest-get-type "^22.4.3" + pretty-format "^22.4.3" -jest-message-util@^22.0.3: - version "22.0.3" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.0.3.tgz#bf674b2762ef2dd53facf2136423fcca264976df" +jest-message-util@^22.4.0, jest-message-util@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7" dependencies: "@babel/code-frame" "^7.0.0-beta.35" chalk "^2.0.1" @@ -5345,57 +5435,60 @@ jest-message-util@^22.0.3: slash "^1.0.0" stack-utils "^1.0.1" -jest-mock@^22.0.3: - version "22.0.3" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.0.3.tgz#c875e47b5b729c6c020a2fab317b275c0cf88961" +jest-mock@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7" -jest-regex-util@^22.0.3: - version "22.0.3" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.0.3.tgz#c5c10229de5ce2b27bf4347916d95b802ae9aa4d" +jest-regex-util@^22.1.0, jest-regex-util@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af" -jest-resolve-dependencies@^22.0.3: - version "22.0.3" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.0.3.tgz#202ddf370069702cd1865a1952fcc7e52c92720e" +jest-resolve-dependencies@^22.1.0: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz#e2256a5a846732dc3969cb72f3c9ad7725a8195e" dependencies: - jest-regex-util "^22.0.3" + jest-regex-util "^22.4.3" -jest-resolve@^22.0.4: - version "22.0.4" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.0.4.tgz#a6e47f55e9388c7341b5e9732aedc6fe30906121" +jest-resolve@^22.4.2: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea" dependencies: browser-resolve "^1.11.2" chalk "^2.0.1" -jest-runner@^22.0.4: - version "22.0.4" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.0.4.tgz#3aa43a31b05ce8271539df580c2eb916023d3367" +jest-runner@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.4.tgz#dfca7b7553e0fa617e7b1291aeb7ce83e540a907" dependencies: - jest-config "^22.0.4" - jest-docblock "^22.0.3" - jest-haste-map "^22.0.3" - jest-jasmine2 "^22.0.4" - jest-leak-detector "^22.0.3" - jest-message-util "^22.0.3" - jest-runtime "^22.0.4" - jest-util "^22.0.4" - jest-worker "^22.0.3" + exit "^0.1.2" + jest-config "^22.4.4" + jest-docblock "^22.4.0" + jest-haste-map "^22.4.2" + jest-jasmine2 "^22.4.4" + jest-leak-detector "^22.4.0" + jest-message-util "^22.4.0" + jest-runtime "^22.4.4" + jest-util "^22.4.1" + jest-worker "^22.2.2" throat "^4.0.0" -jest-runtime@^22.0.4: - version "22.0.4" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.0.4.tgz#8f69aa7b5fbb3acd35dc262cbf654e563f69b7b4" +jest-runtime@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.4.tgz#9ba7792fc75582a5be0f79af6f8fe8adea314048" dependencies: babel-core "^6.0.0" - babel-jest "^22.0.4" + babel-jest "^22.4.4" babel-plugin-istanbul "^4.1.5" chalk "^2.0.1" convert-source-map "^1.4.0" + exit "^0.1.2" graceful-fs "^4.1.11" - jest-config "^22.0.4" - jest-haste-map "^22.0.3" - jest-regex-util "^22.0.3" - jest-resolve "^22.0.4" - jest-util "^22.0.4" + jest-config "^22.4.4" + jest-haste-map "^22.4.2" + jest-regex-util "^22.1.0" + jest-resolve "^22.4.2" + jest-util "^22.4.1" + jest-validate "^22.4.4" json-stable-stringify "^1.0.1" micromatch "^2.3.11" realpath-native "^1.0.0" @@ -5404,41 +5497,46 @@ jest-runtime@^22.0.4: write-file-atomic "^2.1.0" yargs "^10.0.3" -jest-snapshot@^22.0.3: - version "22.0.3" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.0.3.tgz#a949b393781d2fdb4773f6ea765dd67ad1da291e" +jest-serializer@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.3.tgz#a679b81a7f111e4766235f4f0c46d230ee0f7436" + +jest-snapshot@^22.4.0: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2" dependencies: chalk "^2.0.1" - jest-diff "^22.0.3" - jest-matcher-utils "^22.0.3" + jest-diff "^22.4.3" + jest-matcher-utils "^22.4.3" mkdirp "^0.5.1" natural-compare "^1.4.0" - pretty-format "^22.0.3" + pretty-format "^22.4.3" -jest-util@^22.0.4: - version "22.0.4" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.0.4.tgz#d920a513e0645aaab030cee38e4fe7d5bed8bb6d" +jest-util@^22.4.1, jest-util@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac" dependencies: callsites "^2.0.0" chalk "^2.0.1" graceful-fs "^4.1.11" is-ci "^1.0.10" - jest-message-util "^22.0.3" - jest-validate "^22.0.3" + jest-message-util "^22.4.3" mkdirp "^0.5.1" + source-map "^0.6.0" -jest-validate@^22.0.3: - version "22.0.3" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.0.3.tgz#2850d949a36c48b1a40f7eebae1d8539126f7829" +jest-validate@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.4.tgz#1dd0b616ef46c995de61810d85f57119dbbcec4d" dependencies: chalk "^2.0.1" - jest-get-type "^22.0.3" + jest-config "^22.4.4" + jest-get-type "^22.1.0" leven "^2.1.0" - pretty-format "^22.0.3" + pretty-format "^22.4.0" -jest-worker@^22.0.3: - version "22.0.3" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.0.3.tgz#30433faca67814a8f80559f75ab2ceaa61332fd2" +jest-worker@^22.2.2, jest-worker@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.4.3.tgz#5c421417cba1c0abf64bf56bd5fb7968d79dd40b" dependencies: merge-stream "^1.0.1" @@ -5446,7 +5544,7 @@ jmespath@0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" -joi@^6.10.1, joi@~6.10.1: +joi@~6.10.1: version "6.10.1" resolved "https://registry.yarnpkg.com/joi/-/joi-6.10.1.tgz#4d50c318079122000fe5f16af1ff8e1917b77e06" dependencies: @@ -5456,17 +5554,18 @@ joi@^6.10.1, joi@~6.10.1: topo "1.x.x" js-base64@^2.1.9: - version "2.2.0" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.2.0.tgz#5e8a8d193a908198dd23d1704826d207b0e5a8f6" + version "2.5.1" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" js-beautify@^1.6.11: - version "1.6.14" - resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.6.14.tgz#d3b8f7322d02b9277d58bd238264c327e58044cd" + version "1.9.0" + resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.9.0.tgz#2562fcdee340f9f962ae2ec4a8a40e7aaa6d964f" dependencies: - config-chain "~1.1.5" - editorconfig "^0.13.2" + config-chain "^1.1.12" + editorconfig "^0.15.2" + glob "^7.1.3" mkdirp "~0.5.0" - nopt "~3.0.1" + nopt "~4.0.1" js-search@^1.4.2: version "1.4.2" @@ -5476,24 +5575,17 @@ js-string-escape@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" -js-tokens@^3.0.0, js-tokens@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" - -js-tokens@^4.0.0: +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" -js-yaml@^3.12.0: - version "3.12.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600" - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.4.3, js-yaml@^3.7.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0" +js-yaml@^3.12.0, js-yaml@^3.4.3, js-yaml@^3.7.0: + version "3.12.2" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.2.tgz#ef1d067c5a9d9cb65bd72f285b5d8105c77f14fc" dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -5510,33 +5602,35 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" jsdom@^11.5.1: - version "11.5.1" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.5.1.tgz#5df753b8d0bca20142ce21f4f6c039f99a992929" + version "11.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" dependencies: - abab "^1.0.3" - acorn "^5.1.2" - acorn-globals "^4.0.0" + abab "^2.0.0" + acorn "^5.5.3" + acorn-globals "^4.1.0" array-equal "^1.0.0" - browser-process-hrtime "^0.1.2" - content-type-parser "^1.0.1" cssom ">= 0.3.2 < 0.4.0" - cssstyle ">= 0.2.37 < 0.3.0" - domexception "^1.0.0" - escodegen "^1.9.0" - html-encoding-sniffer "^1.0.1" - left-pad "^1.2.0" - nwmatcher "^1.4.3" - parse5 "^3.0.2" - pn "^1.0.0" - request "^2.83.0" - request-promise-native "^1.0.3" - sax "^1.2.1" - symbol-tree "^3.2.1" - tough-cookie "^2.3.3" + cssstyle "^1.0.0" + data-urls "^1.0.0" + domexception "^1.0.1" + escodegen "^1.9.1" + html-encoding-sniffer "^1.0.2" + left-pad "^1.3.0" + nwsapi "^2.0.7" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.87.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.4" + w3c-hr-time "^1.0.1" webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.1" - whatwg-url "^6.3.0" - xml-name-validator "^2.0.1" + whatwg-encoding "^1.0.3" + whatwg-mimetype "^2.1.0" + whatwg-url "^6.4.1" + ws "^5.2.0" + xml-name-validator "^3.0.0" jsesc@^1.3.0: version "1.3.0" @@ -5588,6 +5682,12 @@ json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + dependencies: + minimist "^1.2.0" + jsonfile@^2.1.0: version "2.4.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -5602,7 +5702,7 @@ jsonfile@^3.0.0: jsonfile@^4.0.0: version "4.0.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" optionalDependencies: graceful-fs "^4.1.6" @@ -5619,15 +5719,19 @@ jsonwebtoken@7.0.1: ms "^0.7.1" xtend "^4.0.1" -jsonwebtoken@7.4.1: - version "7.4.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-7.4.1.tgz#7ca324f5215f8be039cd35a6c45bb8cb74a448fb" +jsonwebtoken@8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.3.0.tgz#056c90eee9a65ed6e6c72ddb0a1d325109aaf643" dependencies: - joi "^6.10.1" - jws "^3.1.4" + jws "^3.1.5" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" lodash.once "^4.0.0" - ms "^2.0.0" - xtend "^4.0.1" + ms "^2.1.1" jsprim@^1.2.2: version "1.4.1" @@ -5654,28 +5758,26 @@ jszip@3.1.5: pako "~1.0.2" readable-stream "~2.0.6" -jwa@^1.1.4: - version "1.1.5" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.5.tgz#a0552ce0220742cd52e153774a32905c30e756e5" +jwa@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.0.tgz#8f61dc799acf0309f2d4b22a91ce73d6d2bb206c" dependencies: - base64url "2.0.0" buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.9" + ecdsa-sig-formatter "1.0.11" safe-buffer "^5.0.1" -jws@^3.0.0, jws@^3.1.4: - version "3.1.4" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.4.tgz#f9e8b9338e8a847277d6444b1464f61880e050a2" +jws@^3.0.0, jws@^3.1.5: + version "3.2.1" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.1.tgz#d79d4216a62c9afa0a3d5e8b5356d75abdeb2be5" dependencies: - base64url "^2.0.0" - jwa "^1.1.4" + jwa "^1.2.0" safe-buffer "^5.0.1" -keygrip@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.0.2.tgz#ad3297c557069dea8bcfe7a4fa491b75c5ddeb91" +keygrip@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/keygrip/-/keygrip-1.0.3.tgz#399d709f0aed2bab0a059e0cdd3a5023a053e1dc" -kind-of@^3.0.2: +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" dependencies: @@ -5687,6 +5789,14 @@ kind-of@^4.0.0: dependencies: is-buffer "^1.1.5" +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + klaw@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" @@ -5706,9 +5816,9 @@ koa-compose@^3.0.0, koa-compose@^3.2.1: dependencies: any-promise "^1.1.0" -koa-compose@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.0.0.tgz#2800a513d9c361ef0d63852b038e4f6f2d5a773c" +koa-compose@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/koa-compose/-/koa-compose-4.1.0.tgz#507306b9371901db41121c812e923d0d67d3e877" koa-compress@2.0.0: version "2.0.0" @@ -5743,11 +5853,12 @@ koa-is-json@^1.0.0: resolved "https://registry.yarnpkg.com/koa-is-json/-/koa-is-json-1.0.0.tgz#273c07edcdcb8df6a2c1ab7d59ee76491451ec14" koa-jwt@^3.2.1: - version "3.2.2" - resolved "https://registry.yarnpkg.com/koa-jwt/-/koa-jwt-3.2.2.tgz#680de615869678a795838270190d7a44581e334e" + version "3.5.1" + resolved "https://registry.yarnpkg.com/koa-jwt/-/koa-jwt-3.5.1.tgz#0b20e45c3a0f93c9a8df42f1057b3ae004e0f849" dependencies: - jsonwebtoken "7.4.1" - koa-unless "1.0.0" + jsonwebtoken "8.3.0" + koa-unless "1.0.7" + p-any "1.1.0" koa-logger@^2.0.1: version "2.0.1" @@ -5766,8 +5877,11 @@ koa-mount@^3.0.0: koa-compose "^3.2.1" koa-onerror@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/koa-onerror/-/koa-onerror-4.0.0.tgz#2c1bbf0ac9352e702f161591ddf1e8373716d507" + version "4.1.0" + resolved "https://registry.yarnpkg.com/koa-onerror/-/koa-onerror-4.1.0.tgz#7949c7651941e67b11813bf1fad03c2d34470b1c" + dependencies: + escape-html "^1.0.3" + stream-wormhole "^1.1.0" koa-router@7.0.1: version "7.0.1" @@ -5779,14 +5893,14 @@ koa-router@7.0.1: methods "^1.0.1" path-to-regexp "^1.1.1" -koa-send@^4.1.0: - version "4.1.1" - resolved "https://registry.npmjs.org/koa-send/-/koa-send-4.1.1.tgz#bd3fa116b1f592f5fff23c9670aae69787f6cb57" +koa-send@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/koa-send/-/koa-send-4.1.3.tgz#0822207bbf5253a414c8f1765ebc29fa41353cb6" dependencies: debug "^2.6.3" http-errors "^1.6.1" mz "^2.6.0" - resolve-path "^1.3.3" + resolve-path "^1.4.0" koa-sendfile@2.0.0: version "2.0.0" @@ -5801,15 +5915,15 @@ koa-sslify@2.1.2: resolved "https://registry.yarnpkg.com/koa-sslify/-/koa-sslify-2.1.2.tgz#8947fd53949d69d539607814097863c1ecf38f30" koa-static@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/koa-static/-/koa-static-4.0.1.tgz#b99521ed848d7adb79acae9c824d8d8277a8c4d5" + version "4.0.3" + resolved "https://registry.yarnpkg.com/koa-static/-/koa-static-4.0.3.tgz#5f93ad00fb1905db9ce46667c0e8bb7d22abfcd8" dependencies: - debug "^2.6.8" - koa-send "^4.1.0" + debug "^3.1.0" + koa-send "^4.1.3" -koa-unless@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/koa-unless/-/koa-unless-1.0.0.tgz#5aa57384bc882568afc90ac04852a3d58658aeeb" +koa-unless@1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/koa-unless/-/koa-unless-1.0.7.tgz#b9df375e2b4da3043918d48622520c2c0b79f032" koa-webpack-dev-middleware@1.4.5: version "1.4.5" @@ -5824,33 +5938,33 @@ koa-webpack-hot-middleware@1.0.3: webpack-hot-middleware "2.x" koa@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/koa/-/koa-2.3.0.tgz#9e1e8e4da401839c57b8527eadc57f76127555a7" + version "2.7.0" + resolved "https://registry.yarnpkg.com/koa/-/koa-2.7.0.tgz#7e00843506942b9d82c6cc33749f657c6e5e7adf" dependencies: - accepts "^1.2.2" - content-disposition "~0.5.0" - content-type "^1.0.0" - cookies "~0.7.0" - debug "*" + accepts "^1.3.5" + cache-content-type "^1.0.0" + content-disposition "~0.5.2" + content-type "^1.0.4" + cookies "~0.7.1" + debug "~3.1.0" delegates "^1.0.0" - depd "^1.1.0" - destroy "^1.0.3" - error-inject "~1.0.0" - escape-html "~1.0.1" - fresh "^0.5.0" - http-assert "^1.1.0" - http-errors "^1.2.8" - is-generator-function "^1.0.3" - koa-compose "^4.0.0" + depd "^1.1.2" + destroy "^1.0.4" + error-inject "^1.0.0" + escape-html "^1.0.3" + fresh "~0.5.2" + http-assert "^1.3.0" + http-errors "^1.6.3" + is-generator-function "^1.0.7" + koa-compose "^4.1.0" koa-convert "^1.2.0" koa-is-json "^1.0.0" - mime-types "^2.0.7" - on-finished "^2.1.0" - only "0.0.2" - parseurl "^1.3.0" - statuses "^1.2.0" - type-is "^1.5.5" - vary "^1.0.0" + on-finished "^2.3.0" + only "~0.0.2" + parseurl "^1.3.2" + statuses "^1.5.0" + type-is "^1.6.16" + vary "^1.1.2" latest-version@^1.0.0: version "1.0.1" @@ -5868,9 +5982,9 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -left-pad@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" leven@^2.1.0: version "2.1.0" @@ -5890,16 +6004,15 @@ lie@~3.1.0: immediate "~3.0.5" liftoff@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.3.0.tgz#a98f2ff67183d8ba7cfaca10548bd7ff0550b385" + version "2.5.0" + resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz#2009291bb31cea861bbf10a7c15a28caf75c31ec" dependencies: extend "^3.0.0" - findup-sync "^0.4.2" + findup-sync "^2.0.0" fined "^1.0.1" - flagged-respawn "^0.3.2" - lodash.isplainobject "^4.0.4" - lodash.isstring "^4.0.1" - lodash.mapvalues "^4.4.0" + flagged-respawn "^1.0.0" + is-plain-object "^2.0.4" + object.map "^1.0.0" rechoir "^0.6.2" resolve "^1.1.7" @@ -5945,8 +6058,8 @@ listr-update-renderer@^0.2.0: strip-ansi "^3.0.1" listr-verbose-renderer@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.0.tgz#44dc01bb0c34a03c572154d4d08cde9b1dc5620f" + version "0.4.1" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" dependencies: chalk "^1.1.3" cli-cursor "^1.0.2" @@ -5994,8 +6107,8 @@ load-json-file@^2.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" + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" loader-utils@0.2.x, loader-utils@^0.2.14: version "0.2.17" @@ -6007,12 +6120,12 @@ loader-utils@0.2.x, loader-utils@^0.2.14: object-assign "^4.0.1" loader-utils@^1.0.2, loader-utils@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" dependencies: - big.js "^3.1.3" + big.js "^5.2.2" emojis-list "^2.0.0" - json5 "^0.5.0" + json5 "^1.0.1" locate-path@^2.0.0: version "2.0.0" @@ -6084,14 +6197,10 @@ lodash.assign@^3.0.0: lodash._createassigner "^3.0.0" lodash.keys "^3.0.0" -lodash.assign@^4.0.3, lodash.assign@^4.0.6, lodash.assign@^4.2.0: +lodash.assign@^4.0.3, lodash.assign@^4.0.6: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" -lodash.bind@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.bind/-/lodash.bind-4.2.1.tgz#7ae3017e939622ac31b7d7d7dcb1b34db1690d35" - lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" @@ -6100,14 +6209,6 @@ lodash.chunk@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz#66e5ce1f76ed27b4303d8c6512e8d1216e8106bc" -lodash.clone@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6" - -lodash.clonedeep@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - lodash.defaults@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c" @@ -6119,10 +6220,6 @@ lodash.defaults@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" -lodash.difference@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.difference/-/lodash.difference-4.5.0.tgz#9ccb4e505d486b91651345772885a2df27fd017c" - lodash.escape@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" @@ -6133,9 +6230,9 @@ lodash.flatten@^4.2.0, lodash.flatten@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" -lodash.foreach@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz#1a6a35eace401280c7f06dddec35165ab27e3e53" +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" lodash.isarguments@^3.0.0: version "3.1.0" @@ -6145,11 +6242,19 @@ lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" -lodash.isempty@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e" +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" -lodash.isplainobject@^4.0.4: +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + +lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" @@ -6165,50 +6270,18 @@ lodash.keys@^3.0.0: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" -lodash.keys@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205" - -lodash.mapvalues@^4.4.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c" - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" -lodash.noop@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash.noop/-/lodash.noop-3.0.1.tgz#38188f4d650a3a474258439b96ec45b32617133c" - lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" -lodash.partial@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.partial/-/lodash.partial-4.2.1.tgz#49f3d8cfdaa3bff8b3a91d127e923245418961d4" - -lodash.pick@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3" - -lodash.reduce@4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.reduce/-/lodash.reduce-4.6.0.tgz#f1ab6b839299ad48f784abbf476596f03b914d3b" - lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" -lodash.sample@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/lodash.sample/-/lodash.sample-4.2.1.tgz#5e4291b0c753fa1abeb0aab8fb29df1b66f07f6d" - -lodash.shuffle@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.shuffle/-/lodash.shuffle-4.2.0.tgz#145b5053cf875f6f5c2a33f48b6e9948c6ec7b4b" - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -6238,19 +6311,7 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash.values@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.values/-/lodash.values-4.3.0.tgz#a3a6c2b0ebecc5c2cba1c17e6e620fe81b53d347" - -"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.11.1, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.0, lodash@^4.17.1, lodash@^4.17.2, lodash@^4.17.4, lodash@^4.6.1: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - -lodash@^4.1.1: - version "4.17.5" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" - -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.5: +"lodash@>=3.5 <5", lodash@^4.1.1, lodash@^4.11.1, lodash@^4.17.0, lodash@^4.17.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.6.1: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" @@ -6275,11 +6336,11 @@ longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" dependencies: - js-tokens "^3.0.0" + js-tokens "^3.0.0 || ^4.0.0" lower-case-first@^1.0.0: version "1.0.2" @@ -6292,29 +6353,16 @@ lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" lowercase-keys@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" lru-cache@2: version "2.7.3" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" -lru-cache@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee" - dependencies: - pseudomap "^1.0.1" - -lru-cache@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -lru-cache@^4.1.1, lru-cache@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" +lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.3: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" dependencies: pseudomap "^1.0.2" yallist "^2.1.2" @@ -6325,23 +6373,29 @@ lru-queue@0.1: dependencies: es5-ext "~0.10.2" -macaddress@^0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" +macos-release@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.0.0.tgz#7dddf4caf79001a851eb4fba7fb6034f251276ab" make-dir@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51" + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" dependencies: pify "^3.0.0" +make-iterator@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" + dependencies: + kind-of "^6.0.2" + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" dependencies: tmpl "1.0.x" -map-cache@^0.2.0: +map-cache@^0.2.0, map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -6349,20 +6403,31 @@ map-stream@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + markdown-escapes@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.1.tgz#1994df2d3af4811de59a6714934c2b2292734518" + version "1.0.2" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.2.tgz#e639cbde7b99c841c0bacc8a07982873b46d2122" math-expression-evaluator@^1.2.14: version "1.2.17" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" +math-random@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" + md5.js@^1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" dependencies: hash-base "^3.0.0" inherits "^2.0.1" + safe-buffer "^5.1.2" md5@^2.1.0: version "2.2.1" @@ -6372,6 +6437,12 @@ md5@^2.1.0: crypt "~0.0.1" is-buffer "~1.1.1" +mdast-add-list-metadata@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdast-add-list-metadata/-/mdast-add-list-metadata-1.0.1.tgz#95e73640ce2fc1fa2dcb7ec443d09e2bfe7db4cf" + dependencies: + unist-util-visit-parents "1.1.2" + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -6383,21 +6454,21 @@ mem@^1.1.0: mimic-fn "^1.0.0" memoize-one@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-4.0.3.tgz#cdfdd942853f1a1b4c71c5336b8c49da0bf0273c" + version "4.1.0" + resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-4.1.0.tgz#a2387c58c03fff27ca390c31b764a79addf3f906" memoizee@^0.4.3: - version "0.4.9" - resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.9.tgz#ea1c005f5c4c31d89a4a10e24db83fbf61cdd4f3" + version "0.4.14" + resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.14.tgz#07a00f204699f9a95c2d9e77218271c7cd610d57" dependencies: d "1" - es5-ext "^0.10.30" + es5-ext "^0.10.45" es6-weak-map "^2.0.2" event-emitter "^0.3.5" is-promise "^2.1" lru-queue "0.1" next-tick "1" - timers-ext "^0.1.2" + timers-ext "^0.1.5" memory-fs@^0.4.0, memory-fs@~0.4.1: version "0.4.1" @@ -6412,18 +6483,18 @@ merge-stream@^1.0.1: dependencies: readable-stream "^2.0.1" -merge@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" +merge@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" method-override@~2.3.5: - version "2.3.9" - resolved "https://registry.yarnpkg.com/method-override/-/method-override-2.3.9.tgz#bd151f2ce34cf01a76ca400ab95c012b102d8f71" + version "2.3.10" + resolved "https://registry.yarnpkg.com/method-override/-/method-override-2.3.10.tgz#e3daf8d5dee10dd2dce7d4ae88d62bbee77476b4" dependencies: - debug "2.6.8" + debug "2.6.9" methods "~1.1.2" - parseurl "~1.3.1" - vary "~1.1.1" + parseurl "~1.3.2" + vary "~1.1.2" methods@^1.0.1, methods@~1.1.2: version "1.1.2" @@ -6447,50 +6518,60 @@ micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: parse-glob "^3.0.4" regex-cache "^0.4.2" +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + miller-rabin@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.0.tgz#4a62fb1d42933c05583982f4c716f6fb9e6c6d3d" + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" dependencies: bn.js "^4.0.0" brorand "^1.0.1" -"mime-db@>= 1.29.0 < 2", mime-db@~1.30.0: - version "1.30.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" +"mime-db@>= 1.38.0 < 2", mime-db@~1.38.0: + version "1.38.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" -mime-types@^2.0.7, mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.6, mime-types@~2.1.7, mime-types@~2.1.9: - version "2.1.17" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" +mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.18, mime-types@~2.1.19, mime-types@~2.1.6, mime-types@~2.1.9: + version "2.1.22" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd" dependencies: - mime-db "~1.30.0" + mime-db "~1.38.0" mime@1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" -mime@^1.2.11: - version "1.2.11" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" - -mime@^1.3.4: - version "1.4.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.0.tgz#69e9e0db51d44f2a3b56e48b7817d7d137f1a343" - -mime@^1.4.1: +mime@^1.4.1, mime@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" mime@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" + version "2.4.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.0.tgz#e051fd881358585f3279df333fe694da0bcffdd6" mimic-fn@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" mimic-response@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e" + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" min-document@^2.19.0: version "2.19.0" @@ -6498,9 +6579,9 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" -minimalistic-assert@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" @@ -6512,7 +6593,7 @@ minimatch@^2.0.1: dependencies: brace-expansion "^1.0.0" -minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@^3.0.0, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -6525,7 +6606,7 @@ minimatch@~0.2.11: lru-cache "2" sigmund "~1.0.0" -minimist@0.0.8, minimist@~0.0.1: +minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" @@ -6533,6 +6614,23 @@ minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +minipass@^2.2.1, minipass@^2.3.4: + version "2.3.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" + dependencies: + minipass "^2.2.1" + mississippi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" @@ -6548,6 +6646,13 @@ mississippi@^2.0.0: stream-each "^1.1.0" through2 "^2.0.0" +mixin-deep@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -6559,8 +6664,8 @@ mobx-react-devtools@^6.0.3: resolved "https://registry.yarnpkg.com/mobx-react-devtools/-/mobx-react-devtools-6.0.3.tgz#4d536c8cdd77d9f4b81f5e8415d7bedccc6a2a99" mobx-react@^5.4.2: - version "5.4.2" - resolved "https://registry.yarnpkg.com/mobx-react/-/mobx-react-5.4.2.tgz#53db594dbb44752c15b53c355babaa94a6af5934" + version "5.4.3" + resolved "https://registry.yarnpkg.com/mobx-react/-/mobx-react-5.4.3.tgz#6709b7dd89670c40e9815914ac2ca49cc02bfb47" dependencies: hoist-non-react-statics "^3.0.0" react-lifecycles-compat "^3.0.2" @@ -6569,25 +6674,15 @@ mobx@4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/mobx/-/mobx-4.6.0.tgz#88a8ed21ff81b8861778c4b0d38e3dcdd1a7ddde" -moment-timezone@^0.5.23: +moment-timezone@^0.5.23, moment-timezone@^0.5.4: version "0.5.23" resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.23.tgz#7cbb00db2c14c71b19303cb47b0fb0a6d8651463" dependencies: moment ">= 2.9.0" -moment-timezone@^0.5.4: - version "0.5.13" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.13.tgz#99ce5c7d827262eb0f1f702044177f60745d7b90" - dependencies: - moment ">= 2.9.0" - -moment@2.x.x, "moment@>= 2.9.0", moment@^2.16.0, moment@^2.17.1: - version "2.18.1" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f" - -moment@^2.13.0: - version "2.13.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.13.0.tgz#24162d99521e6d40f99ae6939e806d2139eaac52" +moment@2.x.x, "moment@>= 2.9.0", moment@^2.13.0, moment@^2.16.0, moment@^2.17.1: + version "2.24.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" morgan@~1.6.1: version "1.6.1" @@ -6610,7 +6705,7 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" -ms@0.7.1, ms@^0.7.1: +ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" @@ -6618,10 +6713,14 @@ ms@0.7.2: version "0.7.2" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" -ms@2.0.0, ms@^2.0.0: +ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" +ms@^0.7.1: + version "0.7.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" + ms@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" @@ -6643,33 +6742,37 @@ mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" -mz@2: - version "2.6.0" - resolved "https://registry.yarnpkg.com/mz/-/mz-2.6.0.tgz#c8b8521d958df0a4f2768025db69c719ee4ef1ce" - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -mz@^2.6.0: +mz@2, mz@^2.6.0: version "2.7.0" - resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" dependencies: any-promise "^1.0.0" object-assign "^4.0.1" thenify-all "^1.0.0" -nan@^2.0.5: - version "2.8.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" +nan@^2.9.2: + version "2.12.1" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.12.1.tgz#7b1aa193e9aa86057e3c7bbd0ac448e770925552" -nan@^2.3.0: - version "2.3.5" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.3.5.tgz#822a0dc266290ce4cd3a12282ca3e7e364668a08" +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" natives@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31" + version "1.1.6" + resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz#a603b4a498ab77173612b9ea1acdec4d980f00bb" natural-compare@^1.4.0: version "1.4.0" @@ -6685,6 +6788,14 @@ ncname@1.0.x: dependencies: xml-char-classes "^1.0.0" +needle@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e" + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" + negotiator@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.5.3.tgz#269d5c476810ec92edbe7b6c2f28316384f9a7e8" @@ -6693,6 +6804,10 @@ negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" +neo-async@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" + nested-error-stacks@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz#19f619591519f096769a5ba9a86e6eeec823c3cf" @@ -6707,9 +6822,9 @@ nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" -no-case@^2.2.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.1.tgz#7aeba1c73a52184265554b7dc03baf720df80081" +no-case@^2.2.0, no-case@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" dependencies: lower-case "^1.1.1" @@ -6717,24 +6832,28 @@ nocache@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/nocache/-/nocache-2.0.0.tgz#202b48021a0c4cbde2df80de15a17443c8b43980" -node-fetch@^1.0.1, node-fetch@^1.5.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.2.tgz#c54e9aac57e432875233525f3c891c4159ffefd7" +node-fetch@^1.0.1: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" dependencies: encoding "^0.1.11" is-stream "^1.0.1" -node-forge@^0.7.4: - version "0.7.5" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" +node-fetch@^2.1.1, node-fetch@^2.1.2, node-fetch@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.3.0.tgz#1a1d940bbfb916a1d3e0219f037e89e71f8c5fa5" + +node-forge@^0.7.5: + version "0.7.6" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.6.tgz#fdf3b418aee1f94f0ef642cd63486c77ca9724ac" node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" node-libs-browser@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" + version "2.2.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.0.tgz#c72f60d9d46de08a940dedbb25f3ffa2f9bbaa77" dependencies: assert "^1.1.1" browserify-zlib "^0.2.0" @@ -6743,7 +6862,7 @@ node-libs-browser@^2.0.0: constants-browserify "^1.0.0" crypto-browserify "^3.11.0" domain-browser "^1.1.1" - events "^1.0.0" + events "^3.0.0" https-browserify "^1.0.0" os-browserify "^0.3.0" path-browserify "0.0.0" @@ -6757,51 +6876,37 @@ node-libs-browser@^2.0.0: timers-browserify "^2.0.4" tty-browserify "0.0.0" url "^0.11.0" - util "^0.10.3" + util "^0.11.0" vm-browserify "0.0.4" -node-notifier@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.1.2.tgz#2fa9e12605fa10009d44549d6fcd8a63dde0e4ff" +node-notifier@^5.2.1: + version "5.4.0" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.0.tgz#7b455fdce9f7de0c63538297354f3db468426e6a" dependencies: growly "^1.3.0" - semver "^5.3.0" - shellwords "^0.1.0" - which "^1.2.12" + is-wsl "^1.1.0" + semver "^5.5.0" + shellwords "^0.1.1" + which "^1.3.0" -node-pre-gyp@^0.6.36: - version "0.6.36" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786" - dependencies: - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.0.2" - rc "^1.1.7" - request "^2.81.0" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" - -node-pre-gyp@^0.6.39: - version "0.6.39" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" +node-pre-gyp@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" dependencies: detect-libc "^1.0.2" - hawk "3.1.3" mkdirp "^0.5.1" + needle "^2.2.1" nopt "^4.0.1" + npm-packlist "^1.1.6" npmlog "^4.0.2" - rc "^1.1.7" - request "2.81.0" + rc "^1.2.7" rimraf "^2.6.1" semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" + tar "^4" nodemailer@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-4.4.0.tgz#571989e524a906fb83b1518f3e4c0d3140db24af" + version "4.7.0" + resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-4.7.0.tgz#4420e06abfffd77d0618f184ea49047db84f4ad8" nodemon@1.11.0: version "1.11.0" @@ -6818,7 +6923,7 @@ nodemon@1.11.0: undefsafe "0.0.3" update-notifier "0.5.0" -nopt@^4.0.1: +nopt@^4.0.1, nopt@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" dependencies: @@ -6831,31 +6936,29 @@ nopt@~1.0.10: dependencies: abbrev "1" -nopt@~3.0.1: - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - dependencies: - abbrev "1" - normalize-git-url@3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/normalize-git-url/-/normalize-git-url-3.0.2.tgz#8e5f14be0bdaedb73e07200310aa416c27350fc4" normalize-package-data@^2.3.2: - version "2.4.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" dependencies: hosted-git-info "^2.1.4" - is-builtin-module "^1.0.0" + resolve "^1.10.0" semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.0, normalize-path@^2.0.1: +normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: remove-trailing-separator "^1.0.1" +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" @@ -6869,9 +6972,20 @@ normalize-url@^1.4.0: query-string "^4.1.0" sort-keys "^1.0.0" +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + +npm-packlist@^1.1.6: + version "1.4.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-path@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.3.tgz#15cff4e1c89a38da77f56f6055b24f975dfb2bbe" + version "2.0.4" + resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" dependencies: which "^1.2.10" @@ -6899,8 +7013,8 @@ npmlog@^4.0.2: set-blocking "~2.0.0" nth-check@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" dependencies: boolbase "~1.0.0" @@ -6912,13 +7026,13 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" -nwmatcher@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" +nwsapi@^2.0.7: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.1.1.tgz#08d6d75e69fd791bdea31507ffafe8c843b67e9c" -oauth-sign@~0.8.1, oauth-sign@~0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" object-assign@4.1.0: version "4.1.0" @@ -6932,13 +7046,23 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-keys@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" -object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" +object-keys@^1.0.12: + version "1.1.0" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.0.tgz#11bd22348dd2e096a045ab06f6c85bcc340fa032" + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" object.defaults@^1.1.0: version "1.1.0" @@ -6965,6 +7089,13 @@ object.getownpropertydescriptors@^2.0.3: define-properties "^1.1.2" es-abstract "^1.5.1" +object.map@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" + dependencies: + for-own "^1.0.0" + make-iterator "^1.0.0" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -6972,23 +7103,23 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" -object.pick@^1.2.0: +object.pick@^1.2.0, object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" dependencies: isobject "^3.0.1" -on-finished@^2.1.0, on-finished@~2.3.0: +on-finished@^2.3.0, on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" dependencies: ee-first "1.1.1" on-headers@~1.0.0, on-headers@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" -once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -7010,7 +7141,7 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -only@0.0.2: +only@~0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4" @@ -7075,13 +7206,20 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" +os-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.0.0.tgz#e1434dbfddb8e74b44c98b56797d951b7648a5d9" + dependencies: + macos-release "^2.0.0" + windows-release "^3.1.0" + os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" osenv@^0.1.0, osenv@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" @@ -7098,6 +7236,12 @@ oy-vey@^0.10.0: object-assign "^4.1.1" sanitizer "^0.1.3" +p-any@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-any/-/p-any-1.1.0.tgz#1d03835c7eed1e34b8e539c47b7b60d0d015d4e1" + dependencies: + p-some "^2.0.0" + p-cancelable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" @@ -7107,8 +7251,10 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" p-limit@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + dependencies: + p-try "^1.0.0" p-locate@^2.0.0: version "2.0.0" @@ -7117,15 +7263,31 @@ p-locate@^2.0.0: p-limit "^1.1.0" p-map@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.1.1.tgz#05f5e4ae97a068371bc2a5cc86bfbdbc19c4ae7a" + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + +p-some@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-some/-/p-some-2.0.1.tgz#65d87c8b154edbcf5221d167778b6d2e150f6f06" + dependencies: + aggregate-error "^1.0.0" p-timeout@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.0.tgz#9820f99434c5817868b4f34809ee5291660d5b6c" + version "1.2.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" dependencies: p-finally "^1.0.0" +p-timeout@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + package-json@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/package-json/-/package-json-1.2.0.tgz#c8ecac094227cdf76a316874ed05e27cc939a0e0" @@ -7138,8 +7300,8 @@ packet-reader@0.3.1: resolved "https://registry.yarnpkg.com/packet-reader/-/packet-reader-0.3.1.tgz#cd62e60af8d7fea8a705ec4ff990871c46871f27" pako@~1.0.2, pako@~1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" parallel-transform@^1.1.0: version "1.1.0" @@ -7162,18 +7324,19 @@ parent-module@^1.0.0: callsites "^3.0.0" parse-asn1@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" + version "5.1.4" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" dependencies: asn1.js "^4.0.0" browserify-aes "^1.0.0" create-hash "^1.1.0" evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" -parse-entities@^1.0.2: - version "1.1.1" - resolved "https://registry.npmjs.org/parse-entities/-/parse-entities-1.1.1.tgz#8112d88471319f27abae4d64964b122fe4e1b890" +parse-entities@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.1.tgz#2c761ced065ba7dc68148580b5a225e4918cdd69" dependencies: character-entities "^1.0.0" character-entities-legacy "^1.0.0" @@ -7183,10 +7346,10 @@ parse-entities@^1.0.2: is-hexadecimal "^1.0.0" parse-filepath@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.1.tgz#159d6155d43904d16c10ef698911da1e91969b73" + version "1.0.2" + resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" dependencies: - is-absolute "^0.2.3" + is-absolute "^1.0.0" map-cache "^0.2.0" path-root "^0.1.1" @@ -7205,19 +7368,21 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse-node-version@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" + parse-passwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" -parse5@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" - dependencies: - "@types/node" "*" +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" -parseurl@^1.3.0, parseurl@~1.3.0, parseurl@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56" +parseurl@^1.3.2, parseurl@~1.3.0, parseurl@~1.3.1, parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" pascal-case@^2.0.0: version "2.0.1" @@ -7226,6 +7391,10 @@ pascal-case@^2.0.0: camel-case "^3.0.0" upper-case-first "^1.1.0" +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + passthrough-counter@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/passthrough-counter/-/passthrough-counter-1.0.0.tgz#1967d9e66da572b5c023c787db112a387ab166fa" @@ -7240,6 +7409,10 @@ path-case@^2.1.0: dependencies: no-case "^2.2.0" +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" @@ -7254,7 +7427,7 @@ path-is-absolute@1.0.1, path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-is-inside@^1.0.1, path-is-inside@^1.0.2: +path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" @@ -7262,11 +7435,7 @@ path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" -path-parse@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" - -path-parse@^1.0.6: +path-parse@^1.0.5, path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" @@ -7311,8 +7480,8 @@ pause@0.1.0: resolved "https://registry.yarnpkg.com/pause/-/pause-0.1.0.tgz#ebc8a4a8619ff0b8a81ac1513c3434ff469fdb74" pbkdf2@^3.0.3: - version "3.0.13" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.13.tgz#c37d295531e786b1da3e3eadc840426accb0ae25" + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -7320,10 +7489,6 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -7338,6 +7503,10 @@ pg-hstore@2.3.2: dependencies: underscore "^1.7.0" +pg-int8@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c" + pg-pool@1.*: version "1.8.0" resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-1.8.0.tgz#f7ec73824c37a03f076f51bfdf70e340147c4f37" @@ -7346,9 +7515,10 @@ pg-pool@1.*: object-assign "4.1.0" pg-types@1.*: - version "1.12.1" - resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-1.12.1.tgz#d64087e3903b58ffaad279e7595c52208a14c3d2" + version "1.13.0" + resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-1.13.0.tgz#75f490b8a8abf75f1386ef5ec4455ecf6b345c63" dependencies: + pg-int8 "1.0.1" postgres-array "~1.0.0" postgres-bytea "~1.0.0" postgres-date "~1.0.0" @@ -7381,6 +7551,10 @@ pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" +pify@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -7391,34 +7565,28 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" -pkg-dir@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" - dependencies: - find-up "^1.0.0" - pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" dependencies: find-up "^2.1.0" -platform@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.4.tgz#6f0fb17edaaa48f21442b3a975c063130f1c3ebd" +platform@1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444" -pluralize@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" - -pn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.0.0.tgz#1cf5a30b0d806cd18f88fc41a6b5d4ad615b3ba9" +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" polished@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/polished/-/polished-1.2.1.tgz#83c18a85bf9d7023477cfc7049763b657d50f0f7" +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + postcss-calc@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" @@ -7474,11 +7642,10 @@ postcss-discard-unused@^2.2.1: uniqs "^2.0.0" postcss-filter-plugins@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" + version "2.0.3" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" dependencies: postcss "^5.0.4" - uniqid "^4.0.0" postcss-merge-idents@^2.1.5: version "2.1.7" @@ -7541,27 +7708,27 @@ postcss-minify-selectors@^2.0.4: postcss "^5.0.14" postcss-selector-parser "^2.0.0" -postcss-modules-extract-imports@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85" +postcss-modules-extract-imports@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz#dc87e34148ec7eab5f791f7cd5849833375b741a" dependencies: postcss "^6.0.1" -postcss-modules-local-by-default@^1.0.1: +postcss-modules-local-by-default@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" dependencies: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" -postcss-modules-scope@^1.0.0: +postcss-modules-scope@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" dependencies: css-selector-tokenizer "^0.7.0" postcss "^6.0.1" -postcss-modules-values@^1.1.0: +postcss-modules-values@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" dependencies: @@ -7637,8 +7804,8 @@ postcss-unique-selectors@^2.0.2: uniqs "^2.0.0" postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" postcss-zindex@^2.0.1: version "2.2.0" @@ -7649,8 +7816,8 @@ postcss-zindex@^2.0.1: uniqs "^2.0.0" postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: - version "5.2.17" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.17.tgz#cf4f597b864d65c8a492b2eabe9d706c879c388b" + version "5.2.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" dependencies: chalk "^1.1.3" js-base64 "^2.1.9" @@ -7658,16 +7825,16 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0 supports-color "^3.2.3" postcss@^6.0.1: - version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.11.tgz#f48db210b1d37a7f7ab6499b7a54982997ab6f72" + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" dependencies: - chalk "^2.1.0" - source-map "^0.5.7" - supports-color "^4.4.0" + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" postgres-array@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-1.0.2.tgz#8e0b32eb03bf77a5c0a7851e0441c169a256a238" + version "1.0.3" + resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-1.0.3.tgz#c561fc3b266b21451fc6555384f4986d78ec80f5" postgres-bytea@~1.0.0: version "1.0.0" @@ -7678,8 +7845,8 @@ postgres-date@~1.0.0: resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.3.tgz#e2d89702efdb258ff9d9cee0fe91bd06975257a8" postgres-interval@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.1.1.tgz#acdb0f897b4b1c6e496d9d4e0a853e1c428f06f0" + version "1.2.0" + resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695" dependencies: xtend "^4.0.0" @@ -7697,7 +7864,7 @@ preserve@^0.2.0: prettier@1.8.2: version "1.8.2" - resolved "https://registry.npmjs.org/prettier/-/prettier-1.8.2.tgz#bff83e7fd573933c607875e5ba3abbdffb96aeb8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.8.2.tgz#bff83e7fd573933c607875e5ba3abbdffb96aeb8" pretty-error@^2.0.0: version "2.1.1" @@ -7706,9 +7873,9 @@ pretty-error@^2.0.0: renderkid "^2.0.1" utila "~0.4" -pretty-format@^22.0.3: - version "22.0.3" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.0.3.tgz#a2bfa59fc33ad24aa4429981bb52524b41ba5dd7" +pretty-format@^22.4.0, pretty-format@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f" dependencies: ansi-regex "^3.0.0" ansi-styles "^3.2.0" @@ -7723,18 +7890,18 @@ prismjs@^1.15.0: optionalDependencies: clipboard "^2.0.0" -private@^0.1.6, private@^0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1" +private@^0.1.6, private@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" -process-nextick-args@^1.0.6, process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - -process-nextick-args@~2.0.0: +process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" @@ -7744,72 +7911,67 @@ process@~0.5.1: resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" progress@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" -promise@7.x, promise@^7.1.1: +promise.prototype.finally@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/promise.prototype.finally/-/promise.prototype.finally-3.1.0.tgz#66f161b1643636e50e7cf201dc1b84a857f3864e" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.9.0" + function-bind "^1.1.1" + +promise@7.x: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" dependencies: asap "~2.0.3" -prop-types@>=15.5.6, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8: - version "15.5.10" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.5.10.tgz#2797dfc3126182e3a95e3dfbb2e893ddd7456154" +prop-types@>=15.5.6, prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.6, prop-types@^15.5.7, prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2: + version "15.7.2" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" dependencies: - fbjs "^0.8.9" - loose-envify "^1.3.1" - -prop-types@^15.0.0, prop-types@^15.5.7, prop-types@^15.6.0: - version "15.6.0" - resolved "https://registry.npmjs.org/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" - dependencies: - fbjs "^0.8.16" - loose-envify "^1.3.1" - object-assign "^4.1.1" - -prop-types@^15.5.6, prop-types@^15.6.1, prop-types@^15.6.2: - version "15.6.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" - dependencies: - loose-envify "^1.3.1" + loose-envify "^1.4.0" object-assign "^4.1.1" + react-is "^16.8.1" proto-list@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" -prr@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" - prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" ps-tree@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" + version "1.2.0" + resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" dependencies: - event-stream "~3.3.0" + event-stream "=3.3.4" -pseudomap@^1.0.1, pseudomap@^1.0.2: +pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" +psl@^1.1.24, psl@^1.1.28: + version "1.1.31" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" + public-encrypt@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" dependencies: bn.js "^4.1.0" browserify-rsa "^4.0.0" create-hash "^1.1.0" parse-asn1 "^5.0.0" randombytes "^2.0.1" + safe-buffer "^5.1.2" pui-css-tooltips@=8.3.3: version "8.3.3" @@ -7832,8 +7994,8 @@ pump@^2.0.0, pump@^2.0.1: once "^1.3.1" pumpify@^1.3.3: - version "1.5.0" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.0.tgz#30c905a26c88fa0074927af07256672b474b1c15" + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" dependencies: duplexify "^3.6.0" inherits "^2.0.3" @@ -7847,25 +8009,25 @@ punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" -punycode@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" q@^1.1.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.0.tgz#dd01bac9d06d30e6f219aecb8253ee9ebdc308f1" + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" qs@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/qs/-/qs-4.0.0.tgz#c31d9b74ec27df75e543a86c78728ed8d4623607" -qs@^6.4.0, qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" +qs@^6.4.0: + version "6.6.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.6.0.tgz#a99c0f69a8d26bf7ef012f871cdabb0aee4424c2" -qs@~6.5.1: - version "6.5.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" query-string@^4.1.0, query-string@^4.3.4: version "4.3.4" @@ -7886,19 +8048,27 @@ random-bytes@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" -randomatic@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" +randomatic@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" -randombytes@^2.0.0, randombytes@^2.0.1: - version "2.0.5" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79" +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" dependencies: safe-buffer "^5.1.0" +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + randomstring@1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/randomstring/-/randomstring-1.1.5.tgz#6df0628f75cbd5932930d9fe3ab4e956a18518c3" @@ -7914,12 +8084,12 @@ range-parser@~1.0.3: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.0.3.tgz#6872823535c692e2c2a0103826afd82c2e0ff175" raw-body@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.0.tgz#f79ce1acacaba5b6362d33454d785d7129f4bc67" + version "2.3.3" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" dependencies: - bytes "2.5.0" - http-errors "1.6.1" - iconv-lite "0.4.18" + bytes "3.0.0" + http-errors "1.6.3" + iconv-lite "0.4.23" unpipe "1.0.0" raw-body@~2.1.2: @@ -7934,11 +8104,11 @@ raw-loader@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" -rc@^1.0.1, rc@^1.1.7: - version "1.2.1" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.1.tgz#2e03e8e42ee450b8cb3dce65be1bf8974e1dfd95" +rc@^1.0.1, rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" dependencies: - deep-extend "~0.4.0" + deep-extend "^0.6.0" ini "~1.3.0" minimist "^1.2.0" strip-json-comments "~2.0.1" @@ -7962,28 +8132,28 @@ react-create-component-from-tag-prop@^1.4.0: resolved "https://registry.yarnpkg.com/react-create-component-from-tag-prop/-/react-create-component-from-tag-prop-1.4.0.tgz#a1b3ad06cecb185cd1ba4215f937bd03c69979a9" react-deep-force-update@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.1.tgz#bcd31478027b64b3339f108921ab520b4313dc2c" + version "1.1.2" + resolved "https://registry.yarnpkg.com/react-deep-force-update/-/react-deep-force-update-1.1.2.tgz#3d2ae45c2c9040cbb1772be52f8ea1ade6ca2ee1" react-dom@^16.6.0: - version "16.6.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.6.1.tgz#5476e08694ae504ae385a28b62ecc4fe3a29add9" + version "16.8.3" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.8.3.tgz#ae236029e66210783ac81999d3015dfc475b9c32" dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.11.0" + scheduler "^0.13.3" react-dropzone@4.2.1: version "4.2.1" - resolved "https://registry.npmjs.org/react-dropzone/-/react-dropzone-4.2.1.tgz#695e80bd0b065f1181e69f2d0f6d1d5cc72664c9" + resolved "https://registry.yarnpkg.com/react-dropzone/-/react-dropzone-4.2.1.tgz#695e80bd0b065f1181e69f2d0f6d1d5cc72664c9" dependencies: attr-accept "^1.0.3" prop-types "^15.5.7" react-helmet@^5.2.0: version "5.2.0" - resolved "https://registry.npmjs.org/react-helmet/-/react-helmet-5.2.0.tgz#a81811df21313a6d55c5f058c4aeba5d6f3d97a7" + resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-5.2.0.tgz#a81811df21313a6d55c5f058c4aeba5d6f3d97a7" dependencies: deep-equal "^1.0.1" object-assign "^4.1.1" @@ -7992,62 +8162,49 @@ react-helmet@^5.2.0: react-immutable-proptypes@^2.1.0: version "2.1.0" - resolved "https://registry.npmjs.org/react-immutable-proptypes/-/react-immutable-proptypes-2.1.0.tgz#023d6f39bb15c97c071e9e60d00d136eac5fa0b4" + resolved "https://registry.yarnpkg.com/react-immutable-proptypes/-/react-immutable-proptypes-2.1.0.tgz#023d6f39bb15c97c071e9e60d00d136eac5fa0b4" -react-is@^16.3.2: - version "16.6.3" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.6.3.tgz#d2d7462fcfcbe6ec0da56ad69047e47e56e7eac0" +react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1: + version "16.8.3" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.3.tgz#4ad8b029c2a718fc0cfc746c8d4e1b7221e5387d" -react-is@^16.6.0: - version "16.6.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.6.1.tgz#f77b1c3d901be300abe8d58645b7a59e794e5982" - -react-keydown@^1.7.3: - version "1.9.4" - resolved "https://registry.yarnpkg.com/react-keydown/-/react-keydown-1.9.4.tgz#22718ac95edb64dd840dfc4350abf7e693ea0b7f" +react-keydown@^1.7.3, react-keydown@^1.9.7: + version "1.9.8" + resolved "https://registry.yarnpkg.com/react-keydown/-/react-keydown-1.9.8.tgz#2c11cf82b43aa57aec48539419c8f5f1d4008809" dependencies: core-js "^2.5.0" -react-keydown@^1.9.7: - version "1.9.7" - resolved "https://registry.yarnpkg.com/react-keydown/-/react-keydown-1.9.7.tgz#cd168d4b0194b6ef71bca47e5c1cbc5d24ab5498" - dependencies: - core-js "^2.5.0" - -react-lifecycles-compat@^3.0.2: +react-lifecycles-compat@^3.0.0, react-lifecycles-compat@^3.0.2: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" react-markdown@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/react-markdown/-/react-markdown-3.0.2.tgz#e6e25a9c141a5dbada2fb016513cc5398515205c" + version "3.6.0" + resolved "https://registry.yarnpkg.com/react-markdown/-/react-markdown-3.6.0.tgz#29f6aaab5270c8ef0a5e234093a873ec3e01722b" dependencies: - prop-types "^15.6.0" - remark-parse "^4.0.0" + mdast-add-list-metadata "1.0.1" + prop-types "^15.6.1" + remark-parse "^5.0.0" unified "^6.1.5" - unist-util-visit "^1.1.3" + unist-util-visit "^1.3.0" xtend "^4.0.1" react-medium-image-zoom@^3.0.10: - version "3.0.10" - resolved "https://registry.yarnpkg.com/react-medium-image-zoom/-/react-medium-image-zoom-3.0.10.tgz#7e011844b02605aef0500b36f10dcc2808731583" + version "3.0.15" + resolved "https://registry.yarnpkg.com/react-medium-image-zoom/-/react-medium-image-zoom-3.0.15.tgz#c566c08225cff9c7c6454fe66b570609ffa2991d" react-modal@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/react-modal/-/react-modal-3.1.2.tgz#6e1fd656315d6fc62a1edda2b5aecc9752ac6bca" + version "3.8.1" + resolved "https://registry.yarnpkg.com/react-modal/-/react-modal-3.8.1.tgz#7300f94a6f92a2e17994de0be6ccb61734464c9e" dependencies: exenv "^1.2.0" prop-types "^15.5.10" + react-lifecycles-compat "^3.0.0" + warning "^3.0.0" -react-portal@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/react-portal/-/react-portal-4.0.0.tgz#d327b495dc72a305e8a3e351f212a2d94677f913" - dependencies: - prop-types "^15.5.8" - -react-portal@^4.1.4: - version "4.1.5" - resolved "https://registry.yarnpkg.com/react-portal/-/react-portal-4.1.5.tgz#6665d4d2a92d47d6f8b07a6529e26fc52d5cccde" +react-portal@^4.0.0, react-portal@^4.1.4: + version "4.2.0" + resolved "https://registry.yarnpkg.com/react-portal/-/react-portal-4.2.0.tgz#5400831cdb0ae64dccb8128121cf076089ab1afd" dependencies: prop-types "^15.5.8" @@ -8082,8 +8239,8 @@ react-router@^4.3.1: warning "^4.0.1" react-side-effect@^1.1.0: - version "1.1.3" - resolved "https://registry.npmjs.org/react-side-effect/-/react-side-effect-1.1.3.tgz#512c25abe0dec172834c4001ec5c51e04d41bc5c" + version "1.1.5" + resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-1.1.5.tgz#f26059e50ed9c626d91d661b9f3c8bb38cd0ff2d" dependencies: exenv "^1.2.1" shallowequal "^1.0.1" @@ -8100,20 +8257,20 @@ react-transform-hmr@^1.0.3: react-proxy "^1.1.7" react-waypoint@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/react-waypoint/-/react-waypoint-7.3.1.tgz#abb165d9b6c9590f8d82ceafbe61c2c887262a37" + version "7.3.4" + resolved "https://registry.yarnpkg.com/react-waypoint/-/react-waypoint-7.3.4.tgz#6f4a167ca71c0877576699d6980089f001137f90" dependencies: consolidated-events "^1.1.0" prop-types "^15.0.0" react@^16.6.0: - version "16.6.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.6.1.tgz#ee2aef4f0a09e494594882029821049772f915fe" + version "16.8.3" + resolved "https://registry.yarnpkg.com/react/-/react-16.8.3.tgz#c6f988a2ce895375de216edcfaedd6b9a76451d9" dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.11.0" + scheduler "^0.13.3" read-all-stream@^3.0.0: version "3.1.0" @@ -8152,7 +8309,7 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.4: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: @@ -8164,7 +8321,7 @@ read-pkg@^2.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@1.0, "readable-stream@>=1.0.33-1 <1.1.0-0": +"readable-stream@>=1.0.33-1 <1.1.0-0": version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" dependencies: @@ -8173,17 +8330,13 @@ readable-stream@1.0, "readable-stream@>=1.0.33-1 <1.1.0-0": isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.6, readable-stream@^2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" +readable-stream@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.2.0.tgz#de17f229864c120a9f56945756e4f32c4045245d" dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - safe-buffer "~5.1.1" - string_decoder "~1.0.3" - util-deprecate "~1.0.1" + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" readable-stream@~1.1.8, readable-stream@~1.1.9: version "1.1.14" @@ -8217,18 +8370,17 @@ readable-stream@~2.1.5: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readdirp@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" +readdirp@^2.0.0, readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" dependencies: - graceful-fs "^4.1.2" - minimatch "^3.0.2" + graceful-fs "^4.1.11" + micromatch "^3.1.10" readable-stream "^2.0.2" - set-immediate-shim "^1.0.1" realpath-native@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0" + version "1.1.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" dependencies: util.promisify "^1.0.0" @@ -8239,8 +8391,8 @@ rechoir@^0.6.2: resolve "^1.1.6" redbox-react@^1.2.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.5.0.tgz#04dab11557d26651bf3562a67c22ace56c5d3967" + version "1.6.0" + resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.6.0.tgz#e753ac02595bc1bf695b3935889a4f5b1b5a21a1" dependencies: error-stack-parser "^1.3.6" object-assign "^4.0.1" @@ -8251,18 +8403,28 @@ redefine@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/redefine/-/redefine-0.2.1.tgz#e89ee7a6f24d19fff62590569332dc60380a89a3" -redis-commands@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.3.1.tgz#81d826f45fa9c8b2011f4cd7a0fe597d241d442b" +redis-commands@1.4.0, redis-commands@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.4.0.tgz#52f9cf99153efcce56a8f86af986bd04e988602f" + +redis-errors@^1.0.0, redis-errors@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/redis-errors/-/redis-errors-1.2.0.tgz#eb62d2adb15e4eaf4610c04afe1529384250abad" redis-lock@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/redis-lock/-/redis-lock-0.1.0.tgz#8ece665aece03e30076556c8cf1be31ed892e762" + version "0.1.4" + resolved "https://registry.yarnpkg.com/redis-lock/-/redis-lock-0.1.4.tgz#e83590bee22b5f01cdb65bfbd88d988045356272" -redis-parser@^2.4.0, redis-parser@^2.6.0: +redis-parser@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-2.6.0.tgz#52ed09dacac108f1a631c07e9b69941e7a19504b" +redis-parser@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redis-parser/-/redis-parser-3.0.0.tgz#b66d828cdcafe6b4b8a428a7def4c6bcac31c8b4" + dependencies: + redis-errors "^1.0.0" + redis@^2.6.2: version "2.8.0" resolved "https://registry.yarnpkg.com/redis/-/redis-2.8.0.tgz#202288e3f58c49f6079d97af7a10e1303ae14b02" @@ -8290,16 +8452,16 @@ referrer-policy@1.1.0: resolved "https://registry.yarnpkg.com/referrer-policy/-/referrer-policy-1.1.0.tgz#35774eb735bf50fb6c078e83334b472350207d79" regenerate@^1.2.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" regenerator-runtime@^0.10.5: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" regenerator-runtime@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" regenerator-transform@^0.10.0: version "0.10.1" @@ -8315,6 +8477,13 @@ regex-cache@^0.4.2: dependencies: is-equal-shallow "^0.1.3" +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -8355,9 +8524,9 @@ relateurl@0.2.x: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" -remark-parse@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/remark-parse/-/remark-parse-4.0.0.tgz#99f1f049afac80382366e2e0d0bd55429dd45d8b" +remark-parse@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" dependencies: collapse-white-space "^1.0.2" is-alphabetical "^1.0.0" @@ -8365,7 +8534,7 @@ remark-parse@^4.0.0: is-whitespace-character "^1.0.0" is-word-character "^1.0.0" markdown-escapes "^1.0.0" - parse-entities "^1.0.2" + parse-entities "^1.1.0" repeat-string "^1.5.4" state-toggle "^1.0.0" trim "0.0.1" @@ -8380,20 +8549,20 @@ remove-trailing-separator@^1.0.1: resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" renderkid@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319" + version "2.0.3" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.3.tgz#380179c2ff5ae1365c522bf2fcfcff01c5b74149" dependencies: css-select "^1.1.0" - dom-converter "~0.1" - htmlparser2 "~3.3.0" + dom-converter "^0.2" + htmlparser2 "^3.3.0" strip-ansi "^3.0.0" - utila "~0.3" + utila "^0.4.0" repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" -repeat-string@^1.5.2, repeat-string@^1.5.4: +repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" @@ -8417,73 +8586,44 @@ replace-ext@1.0.0, replace-ext@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" -request-promise-core@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" +request-promise-core@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.2.tgz#339f6aababcafdb31c799ff158700336301d3346" dependencies: - lodash "^4.13.1" + lodash "^4.17.11" -request-promise-native@^1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" +request-promise-native@^1.0.5: + version "1.0.7" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.7.tgz#a49868a624bdea5069f1251d0a836e0d89aa2c59" dependencies: - request-promise-core "1.1.1" - stealthy-require "^1.1.0" - tough-cookie ">=2.3.3" + request-promise-core "1.1.2" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" -request@2.81.0, request@^2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" - -request@^2.83.0: - version "2.83.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" +request@^2.81.0, request@^2.87.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" dependencies: aws-sign2 "~0.7.0" - aws4 "^1.6.0" + aws4 "^1.8.0" caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" + combined-stream "~1.0.6" + extend "~3.0.2" forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" + form-data "~2.3.2" + har-validator "~5.1.0" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" + mime-types "~2.1.19" + oauth-sign "~0.9.0" performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" tunnel-agent "^0.6.0" - uuid "^3.1.0" + uuid "^3.3.2" require-directory@^2.1.1: version "2.1.1" @@ -8497,6 +8637,16 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" +require-package-name@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/require-package-name/-/require-package-name-2.0.1.tgz#c11e97276b65b8e2923f75dabf5fb2ef0c3841b9" + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + dependencies: + resolve-from "^3.0.0" + resolve-dir@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" @@ -8504,34 +8654,43 @@ resolve-dir@^0.1.0: expand-tilde "^1.2.2" global-modules "^0.2.3" +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" -resolve-path@^1.3.3: - version "1.3.3" - resolved "https://registry.npmjs.org/resolve-path/-/resolve-path-1.3.3.tgz#4d83aba6468c2b8e632a575e3f52b0fa0dbe1a5c" +resolve-path@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/resolve-path/-/resolve-path-1.4.0.tgz#c4bda9f5efb2fce65247873ab36bb4d834fe16f7" dependencies: - http-errors "~1.5.0" + http-errors "~1.6.2" path-is-absolute "1.0.1" resolve-pathname@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.2.0.tgz#7e9ae21ed815fd63ab189adeee64dc831eefa879" +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.0.0, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.2.0, resolve@^1.3.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.4.0.tgz#a75be01c53da25d934a98ebd0e4c4a7312f92a86" - dependencies: - path-parse "^1.0.5" - -resolve@^1.6.0, resolve@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.9.0.tgz#a14c6fdfa8f92a7df1d996cb7105fa744658ea06" +resolve@^1.0.0, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.3, resolve@^1.5.0, resolve@^1.9.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" dependencies: path-parse "^1.0.6" @@ -8556,6 +8715,10 @@ restore-cursor@^2.0.0: onetime "^2.0.0" signal-exit "^3.0.2" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + retry-as-promised@^2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-2.3.2.tgz#cd974ee4fd9b5fe03cbf31871ee48221c07737b7" @@ -8609,23 +8772,17 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" +rimraf@2, rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" dependencies: - glob "^7.0.5" - -rimraf@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - dependencies: - glob "^7.0.5" + glob "^7.1.3" ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" dependencies: - hash-base "^2.0.0" + hash-base "^3.0.0" inherits "^2.0.1" rndm@1.2.0: @@ -8637,10 +8794,10 @@ rollup-plugin-memory@^2.0.0: resolved "https://registry.yarnpkg.com/rollup-plugin-memory/-/rollup-plugin-memory-2.0.0.tgz#0a8ac6b57fa0e714f89a15c3ac82bc93f89c47c5" rollup-plugin-node-resolve@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.0.2.tgz#38babc12fd404cc2ba1ff68648fe43fa3ffee6b0" + version "3.4.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz#908585eda12e393caac7498715a01e08606abc89" dependencies: - builtin-modules "^1.1.0" + builtin-modules "^2.0.0" is-module "^1.0.0" resolve "^1.1.6" @@ -8650,6 +8807,10 @@ rollup@^0.41.4: dependencies: source-map-support "^0.4.0" +rsvp@^3.3.3: + version "3.6.2" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" + run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" @@ -8663,22 +8824,28 @@ run-queue@^1.0.0, run-queue@^1.0.3: aproba "^1.1.1" rxjs@^5.0.0-beta.11: - version "5.4.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.4.3.tgz#0758cddee6033d68e0fd53676f0f3596ce3d483f" + version "5.5.12" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" dependencies: - symbol-observable "^1.0.1" + symbol-observable "1.0.1" -rxjs@^6.1.0: - version "6.3.3" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55" +rxjs@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" dependencies: tslib "^1.9.0" -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" -"safer-buffer@>= 2.1.2 < 3": +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -8690,18 +8857,19 @@ safestart@1.1.0: semver "5.3.0" sane@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.2.0.tgz#d6d2e2fcab00e3d283c93b912b7c3a20846f1d56" + version "2.5.2" + resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" dependencies: - anymatch "^1.3.0" + anymatch "^2.0.0" + capture-exit "^1.2.0" exec-sh "^0.2.0" fb-watchman "^2.0.0" - minimatch "^3.0.2" + micromatch "^3.1.4" minimist "^1.1.1" walker "~1.0.5" watch "~0.18.0" optionalDependencies: - fsevents "^1.1.1" + fsevents "^1.2.3" sanitizer@^0.1.3: version "0.1.3" @@ -8711,13 +8879,13 @@ sax@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" -sax@>=0.6.0, sax@^1.2.1, sax@~1.2.1: +sax@>=0.6.0, sax@^1.2.4, sax@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" -scheduler@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.11.0.tgz#def1f1bfa6550cc57981a87106e65e8aea41a6b5" +scheduler@^0.13.3: + version "0.13.3" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.13.3.tgz#bed3c5850f62ea9c716a4d781f9daeb9b2a58896" dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -8729,8 +8897,8 @@ schema-utils@^0.3.0: ajv "^5.0.0" schema-utils@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" + version "0.4.7" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" dependencies: ajv "^6.1.0" ajv-keywords "^3.1.0" @@ -8741,7 +8909,7 @@ select@^1.1.2: selection-is-backward@^1.0.0: version "1.0.0" - resolved "https://registry.npmjs.org/selection-is-backward/-/selection-is-backward-1.0.0.tgz#97a54633188a511aba6419fc5c1fa91b467e6be1" + resolved "https://registry.yarnpkg.com/selection-is-backward/-/selection-is-backward-1.0.0.tgz#97a54633188a511aba6419fc5c1fa91b467e6be1" semver-diff@^2.0.0: version "2.1.0" @@ -8749,11 +8917,11 @@ 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: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" +"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.3.0, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" -semver@4.3.2, semver@^4.1.0: +semver@4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.2.tgz#c7a07158a80bedd052355b770d82d6640f803be7" @@ -8761,13 +8929,9 @@ semver@5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -semver@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" - -semver@^5.5.1, semver@^5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" +semver@^4.1.0: + version "4.3.6" + resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" send@0.13.2: version "0.13.2" @@ -8841,8 +9005,8 @@ sequencify@~0.0.7: resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c" serialize-javascript@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" + version "1.6.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879" serve-favicon@~2.3.0: version "2.3.2" @@ -8877,31 +9041,46 @@ set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" -set-immediate-shim@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" -setimmediate@^1.0.4, setimmediate@^1.0.5, setimmediate@~1.0.4: +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +setimmediate@^1.0.4, setimmediate@~1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" -setprototypeof@1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz#81a552141ec104b88e89ce383103ad5c66564d08" +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" -setprototypeof@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" sha.js@^2.4.0, sha.js@^2.4.8: - version "2.4.8" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.8.tgz#37068c2c476b6baf402d14a49c67f597921f634f" + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" dependencies: inherits "^2.0.1" + safe-buffer "^5.0.1" shallowequal@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/shallowequal/-/shallowequal-1.0.2.tgz#1561dbdefb8c01408100319085764da3fcf83f8f" + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" shebang-command@^1.2.0: version "1.2.0" @@ -8913,13 +9092,13 @@ shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" -shellwords@^0.1.0: +shellwords@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" shimmer@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.1.0.tgz#97d7377137ffbbab425522e429fe0aa89a488b35" + version "1.2.1" + resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" sigmund@^1.0.1, sigmund@~1.0.0: version "1.0.1" @@ -8933,9 +9112,9 @@ slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" -slate-base64-serializer@^0.2.94: - version "0.2.94" - resolved "https://registry.yarnpkg.com/slate-base64-serializer/-/slate-base64-serializer-0.2.94.tgz#b908c3af481b9a0ead78f313653414c4b2b4b2d5" +slate-base64-serializer@^0.2.95: + version "0.2.95" + resolved "https://registry.yarnpkg.com/slate-base64-serializer/-/slate-base64-serializer-0.2.95.tgz#018ccf749f0f0f62fc2d5f4722fd770d359cf76b" dependencies: isomorphic-base64 "^1.0.2" @@ -8952,8 +9131,8 @@ slate-dev-environment@^0.2.1: is-in-browser "^1.1.3" slate-dev-logger@^0.1.0: - version "0.1.36" - resolved "https://registry.npmjs.org/slate-dev-logger/-/slate-dev-logger-0.1.36.tgz#ecdb37dbf944dfc742bab23b6a20d5a0472db95e" + version "0.1.43" + resolved "https://registry.yarnpkg.com/slate-dev-logger/-/slate-dev-logger-0.1.43.tgz#77f6ca7207fcbf453a5516f3aa8b19794d1d26dc" slate-drop-or-paste-images@^0.9.1: version "0.9.1" @@ -8985,21 +9164,25 @@ slate-paste-linkify@^0.7.0: dependencies: is-url "^1.2.2" -slate-plain-serializer@0.6.33, slate-plain-serializer@^0.6.33: +slate-plain-serializer@0.6.33: version "0.6.33" resolved "https://registry.yarnpkg.com/slate-plain-serializer/-/slate-plain-serializer-0.6.33.tgz#b731ecd8757f0d402ab36823f4be641c3f11a229" -slate-prop-types@^0.5.24: - version "0.5.24" - resolved "https://registry.yarnpkg.com/slate-prop-types/-/slate-prop-types-0.5.24.tgz#ecff6584e250d88ff8384ff2bd820eec7d296913" +slate-plain-serializer@^0.6.34: + version "0.6.34" + resolved "https://registry.yarnpkg.com/slate-plain-serializer/-/slate-plain-serializer-0.6.34.tgz#8775edc1190d5fe3c7196eb0ad665607d0547a87" -slate-react-placeholder@^0.1.12: - version "0.1.12" - resolved "https://registry.yarnpkg.com/slate-react-placeholder/-/slate-react-placeholder-0.1.12.tgz#d09936acf1570f9178d3a40a56ff0616f67e1fd7" +slate-prop-types@^0.5.25: + version "0.5.25" + resolved "https://registry.yarnpkg.com/slate-prop-types/-/slate-prop-types-0.5.25.tgz#bbee28fec3eacb51209bc48eea1962374b8a44b5" + +slate-react-placeholder@^0.1.13: + version "0.1.13" + resolved "https://registry.yarnpkg.com/slate-react-placeholder/-/slate-react-placeholder-0.1.13.tgz#2e442d88b189bff203bdac454a05ce2637a19000" slate-react@^0.21.15: - version "0.21.15" - resolved "https://registry.yarnpkg.com/slate-react/-/slate-react-0.21.15.tgz#f616f59f2fd91755704c21512972b87f3df76a9e" + version "0.21.16" + resolved "https://registry.yarnpkg.com/slate-react/-/slate-react-0.21.16.tgz#fa13b2228ffa6f4d9325bb61995d0231a62ff7b5" dependencies: debug "^3.1.0" get-window "^1.1.1" @@ -9009,12 +9192,12 @@ slate-react@^0.21.15: prop-types "^15.5.8" react-immutable-proptypes "^2.1.0" selection-is-backward "^1.0.0" - slate-base64-serializer "^0.2.94" + slate-base64-serializer "^0.2.95" slate-dev-environment "^0.2.1" slate-hotkeys "^0.2.8" - slate-plain-serializer "^0.6.33" - slate-prop-types "^0.5.24" - slate-react-placeholder "^0.1.12" + slate-plain-serializer "^0.6.34" + slate-prop-types "^0.5.25" + slate-react-placeholder "^0.1.13" tiny-invariant "^1.0.1" tiny-warning "^0.0.3" @@ -9045,9 +9228,9 @@ slice-ansi@1.0.0: dependencies: is-fullwidth-code-point "^2.0.0" -slice-ansi@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.0.0.tgz#5373bdb8559b45676e8541c66916cdd6251612e7" +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" dependencies: ansi-styles "^3.2.0" astral-regex "^1.0.0" @@ -9064,8 +9247,8 @@ slug@0.9.1: unicode ">= 0.3.1" slugify@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.3.0.tgz#787919259d28c825fbcae6da2e01c77a109793f6" + version "1.3.4" + resolved "https://registry.yarnpkg.com/slugify/-/slugify-1.3.4.tgz#78d2792d7222b55cd9fc81fa018df99af779efeb" snake-case@^2.1.0: version "2.1.0" @@ -9073,17 +9256,32 @@ snake-case@^2.1.0: dependencies: no-case "^2.2.0" -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" dependencies: - hoek "2.x.x" + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" -sntp@2.x.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" dependencies: - hoek "4.x.x" + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" sort-keys@^1.0.0: version "1.1.2" @@ -9092,38 +9290,47 @@ sort-keys@^1.0.0: is-plain-obj "^1.0.0" source-list-map@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" source-list-map@~0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" -source-map-support@^0.4.0: +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.4.0, source-map-support@^0.4.15: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" dependencies: source-map "^0.5.6" -source-map-support@^0.4.15: - version "0.4.17" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.17.tgz#6f2150553e6375375d0ccb3180502b78c18ba430" - dependencies: - source-map "^0.5.6" - source-map-support@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.0.tgz#2018a7ad2bdf8faf2691e5fddab26bed5a2bacab" + version "0.5.10" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.10.tgz#2214080bc9d51832511ee2bab96e3c2f9353120c" dependencies: + buffer-from "^1.0.0" source-map "^0.6.0" +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + source-map@0.1.x: version "0.1.43" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" dependencies: amdefine ">=0.0.4" -source-map@0.4.x, source-map@^0.4.4, source-map@~0.4.1: +source-map@0.4.x, source-map@~0.4.1: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" dependencies: @@ -9133,37 +9340,51 @@ source-map@0.5.6: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412" -source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.6: +source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" sourcemapped-stacktrace@^1.1.6: - version "1.1.7" - resolved "https://registry.yarnpkg.com/sourcemapped-stacktrace/-/sourcemapped-stacktrace-1.1.7.tgz#17e05374ff78b71a9d89ad3975a49f22725ba935" + version "1.1.9" + resolved "https://registry.yarnpkg.com/sourcemapped-stacktrace/-/sourcemapped-stacktrace-1.1.9.tgz#c744a99936b33b6891409f4d45c3d2b28ecded4a" dependencies: source-map "0.5.6" sparkles@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" + version "1.0.1" + resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" -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@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" dependencies: - spdx-license-ids "^1.0.2" + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" -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.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" -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@^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@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz#81c0ce8f21474756148bbb5f3bfc0f36bf15d76e" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" split@0.3: version "0.3.3" @@ -9182,17 +9403,17 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" - dashdash "^1.12.0" - getpass "^0.1.1" - optionalDependencies: bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" ecc-jsbn "~0.1.1" + getpass "^0.1.1" jsbn "~0.1.0" + safer-buffer "^2.0.2" tweetnacl "~0.14.0" ssri@^5.2.4: @@ -9206,8 +9427,8 @@ stack-trace@~0.0.9: resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" stack-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" + version "1.0.2" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" stackframe@^0.3.1: version "0.3.1" @@ -9217,25 +9438,36 @@ staged-git-files@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" -state-toggle@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.0.tgz#d20f9a616bb4f0c3b98b91922d25b640aa2bc425" +standard-as-callback@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-1.0.2.tgz#d0813289db00f8bd5e0f29e74744cb63706707c8" -statuses@1, "statuses@>= 1.2.1 < 2", "statuses@>= 1.3.1 < 2", statuses@^1.0.0, statuses@^1.2.0, statuses@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" +state-toggle@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.1.tgz#c3cb0974f40a6a0f8e905b96789eb41afa1cde3a" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +statuses@1, "statuses@>= 1.2.1 < 2", "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.0.0, statuses@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" statuses@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.2.1.tgz#dded45cc18256d51ed40aec142489d5c61026d28" -stealthy-require@^1.1.0: +stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" stream-browserify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" dependencies: inherits "~2.0.1" readable-stream "^2.0.2" @@ -9247,8 +9479,8 @@ stream-combiner@~0.0.4: duplexer "~0.1.1" stream-consume@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.0.tgz#a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f" + version "0.1.1" + resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.1.tgz#d3bdb598c2bd0ae82b8cac7ac50b1107a7996c48" stream-counter@~0.2.0: version "0.2.0" @@ -9257,19 +9489,19 @@ stream-counter@~0.2.0: readable-stream "~1.1.8" stream-each@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" dependencies: end-of-stream "^1.1.0" stream-shift "^1.0.0" stream-http@^2.7.2: - version "2.7.2" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" - readable-stream "^2.2.6" + readable-stream "^2.3.6" to-arraybuffer "^1.0.0" xtend "^4.0.0" @@ -9281,6 +9513,10 @@ stream-to-observable@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" +stream-wormhole@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stream-wormhole/-/stream-wormhole-1.1.0.tgz#300aff46ced553cfec642a05251885417693c33d" + strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" @@ -9300,13 +9536,13 @@ string-length@^2.0.0: string-replace-to-array@^1.0.3: version "1.0.3" - resolved "https://registry.npmjs.org/string-replace-to-array/-/string-replace-to-array-1.0.3.tgz#c93eba999a5ee24d731aebbaf5aba36b5f18f7bf" + resolved "https://registry.yarnpkg.com/string-replace-to-array/-/string-replace-to-array-1.0.3.tgz#c93eba999a5ee24d731aebbaf5aba36b5f18f7bf" dependencies: invariant "^2.2.1" lodash.flatten "^4.2.0" lodash.isstring "^4.0.1" -string-width@^1.0.1, string-width@^1.0.2: +string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" dependencies: @@ -9314,16 +9550,24 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string_decoder@^1.0.0, string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" +string-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.0.0.tgz#5a1690a57cc78211fffd9bf24bbe24d090604eb1" + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.0.0" + +string_decoder@^1.0.0, string_decoder@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" dependencies: safe-buffer "~5.1.0" @@ -9337,10 +9581,6 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringstream@~0.0.4, stringstream@~0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -9391,17 +9631,13 @@ style-loader@^0.18.2: loader-utils "^1.0.2" schema-utils "^0.3.0" -styled-components-breakpoint@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/styled-components-breakpoint/-/styled-components-breakpoint-2.1.0.tgz#839370362c1e084a23d1155286c9a8a1f2af853f" - -styled-components-breakpoint@^2.1.1: +styled-components-breakpoint@^2.0.2, styled-components-breakpoint@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/styled-components-breakpoint/-/styled-components-breakpoint-2.1.1.tgz#37c1b92b0e96c1bbc5d293724d7a114daaa15fca" styled-components-grid@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/styled-components-grid/-/styled-components-grid-2.2.1.tgz#900c0ac91970f40d04eb17795eab6b9bd4ca9ca9" + version "2.2.2" + resolved "https://registry.yarnpkg.com/styled-components-grid/-/styled-components-grid-2.2.2.tgz#bc723318da1288d8771a4bee324b5f97ff3c2df4" dependencies: react-create-component-from-tag-prop "^1.4.0" styled-components-breakpoint "^2.0.2" @@ -9423,20 +9659,16 @@ styled-components@^4.1.3: supports-color "^5.5.0" styled-normalize@^8.0.4: - version "8.0.4" - resolved "https://registry.yarnpkg.com/styled-normalize/-/styled-normalize-8.0.4.tgz#6a0885dc16c61d88813dab8f5137da928fe0c947" + version "8.0.6" + resolved "https://registry.yarnpkg.com/styled-normalize/-/styled-normalize-8.0.6.tgz#f27f87292f46aa79ad6db6339aff5db529df3c91" stylis-rule-sheet@^0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz#44e64a2b076643f4b52e5ff71efc04d8c3c4a430" -stylis@^3.2.1: - version "3.2.15" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.2.15.tgz#1800f829fdf3cf0d647ae6cdb5fb70a1fd81c3e2" - stylis@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.0.tgz#016fa239663d77f868fef5b67cf201c4b7c701e1" + version "3.5.4" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe" supports-color@^2.0.0: version "2.0.0" @@ -9448,19 +9680,13 @@ supports-color@^3.1.2, supports-color@^3.2.3: dependencies: has-flag "^1.0.0" -supports-color@^4.0.0, supports-color@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" - dependencies: - has-flag "^2.0.0" - supports-color@^4.2.1: version "4.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" dependencies: has-flag "^2.0.0" -supports-color@^5.5.0: +supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" dependencies: @@ -9485,11 +9711,11 @@ swap-case@^1.1.0: lower-case "^1.1.1" upper-case "^1.1.1" -symbol-observable@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" -symbol-tree@^3.2.1: +symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" @@ -9504,55 +9730,47 @@ table@^4.0.2: slice-ansi "1.0.0" string-width "^2.1.1" -table@^5.0.2: - version "5.2.1" - resolved "https://registry.yarnpkg.com/table/-/table-5.2.1.tgz#e78463702b1be9f7131c39860bcfb1b81114c2a1" +table@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/table/-/table-5.2.3.tgz#cde0cc6eb06751c009efab27e8c820ca5b67b7f2" dependencies: - ajv "^6.6.1" + ajv "^6.9.1" lodash "^4.17.11" - slice-ansi "2.0.0" - string-width "^2.1.1" + slice-ansi "^2.1.0" + string-width "^3.0.0" tapable@^0.2.7: - version "0.2.8" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" + version "0.2.9" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8" -tar-pack@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" +tar@^4: + version "4.4.8" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" dependencies: - debug "^2.2.0" - fstream "^1.0.10" - fstream-ignore "^1.0.5" - once "^1.3.3" - readable-stream "^2.1.4" - rimraf "^2.5.1" - tar "^2.2.1" - uid-number "^0.0.6" - -tar@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" - dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.3.4" + minizlib "^1.1.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" terraformer-wkt-parser@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/terraformer-wkt-parser/-/terraformer-wkt-parser-1.1.2.tgz#336a0c8fc82094a5aff83288f69aedecd369bf0c" + version "1.2.0" + resolved "https://registry.yarnpkg.com/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.0.tgz#c9d6ac3dff25f4c0bd344e961f42694961834c34" dependencies: + "@types/geojson" "^1.0.0" terraformer "~1.0.5" terraformer@~1.0.5: - version "1.0.8" - resolved "https://registry.yarnpkg.com/terraformer/-/terraformer-1.0.8.tgz#51e0ad89746fcf2161dc6f65aa70e42377c8b593" - dependencies: + version "1.0.9" + resolved "https://registry.yarnpkg.com/terraformer/-/terraformer-1.0.9.tgz#77851fef4a49c90b345dc53cf26809fdf29dcda6" + optionalDependencies: "@types/geojson" "^1.0.0" -test-exclude@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.1.1.tgz#4d84964b0966b0087ecc334a2ce002d3d9341e26" +test-exclude@^4.2.1: + version "4.2.3" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" dependencies: arrify "^1.0.1" micromatch "^2.3.11" @@ -9587,11 +9805,11 @@ through2@^0.6.1: readable-stream ">=1.0.33-1 <1.1.0-0" xtend ">=4.0.0 <4.1.0-0" -through2@^2.0.0, through2@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" dependencies: - readable-stream "^2.1.5" + readable-stream "~2.3.6" xtend "~4.0.1" through@2, through@^2.3.6, through@^2.3.8, through@~2.3, through@~2.3.1: @@ -9609,8 +9827,8 @@ time-stamp@^1.0.0: resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" time-stamp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" + version "2.2.0" + resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.2.0.tgz#917e0a66905688790ec7bbbde04046259af83f57" timed-out@^2.0.0: version "2.0.0" @@ -9621,16 +9839,16 @@ timed-out@^4.0.0: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" timers-browserify@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6" + version "2.0.10" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" dependencies: setimmediate "^1.0.4" -timers-ext@0.1, timers-ext@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.2.tgz#61cc47a76c1abd3195f14527f978d58ae94c5204" +timers-ext@0.1, timers-ext@^0.1.5: + version "0.1.7" + resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" dependencies: - es5-ext "~0.10.14" + es5-ext "~0.10.46" next-tick "1" tiny-cookie@^2.3.1: @@ -9638,8 +9856,8 @@ tiny-cookie@^2.3.1: resolved "https://registry.yarnpkg.com/tiny-cookie/-/tiny-cookie-2.3.1.tgz#f0ea9fa194f2aed631dcd5e69ac0d6587be928c8" tiny-emitter@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" + version "2.1.0" + resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz#1d1a56edfc51c43e863cbb5382a72330e3555423" tiny-invariant@^1.0.1: version "1.0.3" @@ -9682,12 +9900,34 @@ to-no-case@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/to-no-case/-/to-no-case-1.0.2.tgz#c722907164ef6b178132c8e69930212d1b4aa16a" +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + to-pascal-case@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/to-pascal-case/-/to-pascal-case-1.0.0.tgz#0bbdc8df448886ba01535e543327048d0aa1ce78" dependencies: to-space-case "^1.0.0" +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + to-space-case@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/to-space-case/-/to-space-case-1.0.0.tgz#b052daafb1b2b29dc770cea0163e5ec0ebc9fc17" @@ -9698,6 +9938,10 @@ toggle-selection@^1.0.3: version "1.0.6" resolved "https://registry.yarnpkg.com/toggle-selection/-/toggle-selection-1.0.6.tgz#6e45b1263f2017fa0acc7d89d78b15b8bf77da32" +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + topo@1.x.x: version "1.1.0" resolved "https://registry.yarnpkg.com/topo/-/topo-1.1.0.tgz#e9d751615d1bb87dc865db182fa1ca0a5ef536d5" @@ -9718,19 +9962,21 @@ touch@1.0.0: dependencies: nopt "~1.0.10" -tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.3: - version "2.3.3" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" +tough-cookie@^2.3.3, tough-cookie@^2.3.4: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + dependencies: + psl "^1.1.24" punycode "^1.4.1" -tough-cookie@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a" - dependencies: - punycode "^1.4.1" - -tr46@^1.0.0: +tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" dependencies: @@ -9745,16 +9991,16 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" trim-trailing-lines@^1.0.0: - version "1.1.0" - resolved "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.0.tgz#7aefbb7808df9d669f6da2e438cac8c46ada7684" + version "1.1.1" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz#e0ec0810fd3c3f1730516b45f49083caaf2774d9" trim@0.0.1: version "0.0.1" - resolved "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" trough@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/trough/-/trough-1.0.1.tgz#a9fd8b0394b0ae8fff82e0633a0a36ccad5b5f86" + version "1.0.3" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.3.tgz#e29bd1614c6458d44869fc28b255ab7857ef7c24" tslib@^1.9.0: version "1.9.3" @@ -9784,12 +10030,12 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-is@^1.5.5, type-is@^1.6.14, type-is@~1.6.6: - version "1.6.15" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" +type-is@^1.6.14, type-is@^1.6.16, type-is@~1.6.6: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" dependencies: media-typer "0.3.0" - mime-types "~2.1.15" + mime-types "~2.1.18" type-of@^2.0.1: version "2.0.1" @@ -9799,10 +10045,6 @@ typedarray@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" -ua-parser-js@^0.7.9: - version "0.7.14" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.14.tgz#110d53fa4c3f326c121292bbeac904d2e03387ca" - uglify-es@^3.3.4: version "3.3.9" resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" @@ -9810,7 +10052,7 @@ uglify-es@^3.3.4: commander "~2.13.0" source-map "~0.6.1" -uglify-js@2.6.x, uglify-js@^2.6: +uglify-js@2.6.x: version "2.6.4" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.6.4.tgz#65ea2fb3059c9394692f15fed87c2b36c16b9adf" dependencies: @@ -9828,6 +10070,13 @@ uglify-js@^2.8.29: optionalDependencies: uglify-to-browserify "~1.0.0" +uglify-js@^3.1.4: + version "3.4.9" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" + dependencies: + commander "~2.17.1" + source-map "~0.6.1" + uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" @@ -9853,10 +10102,6 @@ uglifyjs-webpack-plugin@^0.4.6: uglify-js "^2.8.29" webpack-sources "^1.0.1" -uid-number@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - uid-safe@2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.4.tgz#3ad6f38368c6d4c8c75ec17623fb79aa1d071d81" @@ -9879,7 +10124,7 @@ umzug@^1.12.0: redefine "^0.2.0" resolve "^1.0.0" -unc-path-regex@^0.1.0: +unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" @@ -9888,12 +10133,12 @@ undefsafe@0.0.3: resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-0.0.3.tgz#ecca3a03e56b9af17385baac812ac83b994a962f" underscore@^1.7.0: - version "1.8.3" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.8.3.tgz#4f3fb53b106e6097fcf9cb4109f2a5e9bdfa5022" + version "1.9.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" unherit@^1.0.4: - version "1.1.0" - resolved "https://registry.npmjs.org/unherit/-/unherit-1.1.0.tgz#6b9aaedfbf73df1756ad9e316dd981885840cd7d" + version "1.1.1" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.1.tgz#132748da3e88eab767e08fabfbb89c5e9d28628c" dependencies: inherits "^2.0.1" xtend "^4.0.1" @@ -9903,40 +10148,42 @@ unherit@^1.0.4: resolved "https://registry.yarnpkg.com/unicode/-/unicode-11.0.1.tgz#735bd422ec75cf28d396eb224d535d168d5f1db6" unified@^6.1.5: - version "6.1.6" - resolved "https://registry.npmjs.org/unified/-/unified-6.1.6.tgz#5ea7f807a0898f1f8acdeefe5f25faa010cc42b1" + version "6.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" dependencies: bail "^1.0.0" extend "^3.0.0" is-plain-obj "^1.1.0" trough "^1.0.0" vfile "^2.0.0" - x-is-function "^1.0.4" x-is-string "^0.1.0" +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" -uniqid@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" - dependencies: - macaddress "^0.2.8" - uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" unique-filename@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" dependencies: unique-slug "^2.0.0" unique-slug@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" + version "2.0.1" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.1.tgz#5e9edc6d1ce8fb264db18a507ef9bd8544451ca6" dependencies: imurmurhash "^0.1.4" @@ -9944,37 +10191,60 @@ unique-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b" -unist-util-is@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.1.tgz#0c312629e3f960c66e931e812d3d80e77010947b" +unist-util-is@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" unist-util-remove-position@^1.0.0: - version "1.1.1" - resolved "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.1.tgz#5a85c1555fc1ba0c101b86707d15e50fa4c871bb" + version "1.1.2" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz#86b5dad104d0bbfbeb1db5f5c92f3570575c12cb" dependencies: unist-util-visit "^1.1.0" unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.1.tgz#3ccbdc53679eed6ecf3777dd7f5e3229c1b6aa3c" + version "1.1.2" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" -unist-util-visit@^1.1.0, unist-util-visit@^1.1.3: - version "1.2.0" - resolved "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.2.0.tgz#9dc78d1f95cd242e865f7f93f327d3296bb9a718" +unist-util-visit-parents@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-1.1.2.tgz#f6e3afee8bdbf961c0e6f028ea3c0480028c3d06" + +unist-util-visit-parents@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217" dependencies: - unist-util-is "^2.1.1" + unist-util-is "^2.1.2" + +unist-util-visit@^1.1.0, unist-util-visit@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1" + dependencies: + unist-util-visit-parents "^2.0.0" + +universal-user-agent@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-2.0.3.tgz#9f6f09f9cc33de867bb720d84c08069b14937c6c" + dependencies: + os-name "^3.0.0" universalify@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + unzipper@^0.8.11: - version "0.8.13" - resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.8.13.tgz#ea889ca10cdda4dcf604e632f19fc5f81871beae" + version "0.8.14" + resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.8.14.tgz#ade0524cd2fc14d11b8de258be22f9d247d3f79b" dependencies: big-integer "^1.6.17" binary "~0.3.0" @@ -9986,6 +10256,10 @@ unzipper@^0.8.11: readable-stream "~2.1.5" setimmediate "~1.0.4" +upath@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" + update-notifier@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-0.5.0.tgz#07b5dc2066b3627ab3b4f530130f7eddda07a4cc" @@ -10008,24 +10282,16 @@ upper-case@^1.0.3, upper-case@^1.1.0, upper-case@^1.1.1, upper-case@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" -uri-js@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-3.0.2.tgz#f90b858507f81dea4dcfbb3c4c3dbfa2b557faaa" - dependencies: - punycode "^2.1.0" - -uri-js@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.1.tgz#4595a80a51f356164e22970df64c7abd6ade9850" - dependencies: - punycode "^2.1.0" - uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" dependencies: punycode "^2.1.0" +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + url-loader@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-0.6.2.tgz#a007a7109620e9d988d14bce677a1decb9a993f7" @@ -10040,6 +10306,10 @@ url-parse-lax@^1.0.0: dependencies: prepend-http "^1.0.1" +url-template@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21" + url-to-options@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" @@ -10058,11 +10328,15 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" -util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -10073,17 +10347,19 @@ util.promisify@^1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" -util@0.10.3, util@^0.10.3: +util@0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" dependencies: inherits "2.0.1" -utila@~0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + dependencies: + inherits "2.0.3" -utila@~0.4: +utila@^0.4.0, utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" @@ -10095,18 +10371,14 @@ uuid@2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.2.tgz#48bd5698f0677e3c7901a1c46ef15b1643794726" -uuid@3.1.0, uuid@^3.0.0, uuid@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" +uuid@3.3.2, uuid@^3.0.0, uuid@^3.2.1, uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" uuid@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" -uuid@^3.2.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" - v8flags@^2.0.2: version "2.1.1" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" @@ -10114,35 +10386,35 @@ v8flags@^2.0.2: user-home "^1.1.1" 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.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" dependencies: - spdx-correct "~1.0.0" - spdx-expression-parse "~1.0.0" + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" validator@5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/validator/-/validator-5.2.0.tgz#e66fb3ec352348c1f7232512328738d8d66a9689" validator@^9.1.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-9.2.0.tgz#ad216eed5f37cac31a6fe00ceab1f6b88bded03e" + version "9.4.1" + resolved "https://registry.yarnpkg.com/validator/-/validator-9.4.1.tgz#abf466d398b561cd243050112c6ff1de6cc12663" value-equal@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7" -vary@^1.0.0, vary@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37" +vary@^1.1.2, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" vary@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/vary/-/vary-1.0.1.tgz#99e4981566a286118dfb2b817357df7993376d10" vendors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" + version "1.0.2" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" verror@1.10.0: version "1.10.0" @@ -10153,18 +10425,18 @@ verror@1.10.0: extsprintf "^1.2.0" vfile-location@^2.0.0: - version "2.0.2" - resolved "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.2.tgz#d3675c59c877498e492b4756ff65e4af1a752255" + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.4.tgz#2a5e7297dd0d9e2da4381464d04acc6b834d3e55" vfile-message@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/vfile-message/-/vfile-message-1.0.0.tgz#a6adb0474ea400fa25d929f1d673abea6a17e359" + version "1.1.1" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" dependencies: unist-util-stringify-position "^1.1.1" vfile@^2.0.0: version "2.3.0" - resolved "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" dependencies: is-buffer "^1.1.4" replace-ext "1.0.0" @@ -10204,8 +10476,8 @@ vinyl@^0.5.0: replace-ext "0.0.1" vinyl@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c" + version "2.2.0" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" dependencies: clone "^2.1.1" clone-buffer "^1.0.0" @@ -10220,6 +10492,12 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + dependencies: + browser-process-hrtime "^0.1.2" + walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" @@ -10233,8 +10511,8 @@ warning@^3.0.0: loose-envify "^1.0.0" warning@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.2.tgz#aa6876480872116fa3e11d434b0d0d8d91e44607" + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" dependencies: loose-envify "^1.0.0" @@ -10246,21 +10524,14 @@ watch@~0.18.0: minimist "^1.2.0" watchpack@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" + version "1.6.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" dependencies: - async "^2.1.2" - chokidar "^1.7.0" + chokidar "^2.0.2" graceful-fs "^4.1.2" + neo-async "^2.5.0" -weak@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/weak/-/weak-1.0.1.tgz#ab99aab30706959aa0200cb8cf545bb9cb33b99e" - dependencies: - bindings "^1.2.1" - nan "^2.0.5" - -webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: +webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -10272,18 +10543,18 @@ webpack-core@^0.6.8: source-map "~0.4.1" webpack-dev-middleware@^1.10.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.0.tgz#d34efefb2edda7e1d3b5dbe07289513219651709" + version "1.12.2" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz#f8fc1120ce3b4fc5680ceecb43d777966b21105e" dependencies: memory-fs "~0.4.1" - mime "^1.3.4" + mime "^1.5.0" path-is-absolute "^1.0.0" range-parser "^1.0.3" time-stamp "^2.0.0" webpack-hot-middleware@2.x: - version "2.18.2" - resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.18.2.tgz#84dee643f037c3d59c9de142548430371aa8d3b2" + version "2.24.3" + resolved "https://registry.yarnpkg.com/webpack-hot-middleware/-/webpack-hot-middleware-2.24.3.tgz#5bb76259a8fc0d97463ab517640ba91d3382d4a6" dependencies: ansi-html "0.0.7" html-entities "^1.2.0" @@ -10298,8 +10569,8 @@ webpack-manifest-plugin@^1.3.2: lodash ">=3.5 <5" webpack-sources@^1.0.1, webpack-sources@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" + version "1.3.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" dependencies: source-list-map "^2.0.0" source-map "~0.6.1" @@ -10331,23 +10602,35 @@ webpack@3.10.0: webpack-sources "^1.0.1" yargs "^8.0.2" -whatwg-encoding@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4" +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" dependencies: - iconv-lite "0.4.13" + iconv-lite "0.4.24" whatwg-fetch@>=0.10.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb" -whatwg-url@^6.3.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" +whatwg-mimetype@^2.1.0, whatwg-mimetype@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + +whatwg-url@^6.4.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" dependencies: lodash.sortby "^4.7.0" - tr46 "^1.0.0" - webidl-conversions "^4.0.1" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" whet.extend@~0.9.9: version "0.9.9" @@ -10361,17 +10644,17 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@^1.2.10, which@^1.2.12, which@^1.2.9, which@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" +which@^1.2.10, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" dependencies: - string-width "^1.0.2" + string-width "^1.0.2 || 2" window-size@0.1.0: version "0.1.0" @@ -10381,11 +10664,17 @@ window-size@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" -wkx@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/wkx/-/wkx-0.4.1.tgz#2fc171b5e9cb55c6256fef4bde1f21be413befee" +windows-release@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.1.0.tgz#8d4a7e266cbf5a233f6c717dac19ce00af36e12e" dependencies: - "@types/node" "^6.0.48" + execa "^0.10.0" + +wkx@^0.4.1: + version "0.4.6" + resolved "https://registry.yarnpkg.com/wkx/-/wkx-0.4.6.tgz#228ab592e6457382ea6fb79fc825058d07fce523" + dependencies: + "@types/node" "*" wordwrap@0.0.2: version "0.0.2" @@ -10425,30 +10714,32 @@ write-file-atomic@^1.1.2: slide "^1.1.5" write-file-atomic@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + version "2.4.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.2.tgz#a7181706dfba17855d221140a9c06e15fcdd87b9" dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" signal-exit "^3.0.2" -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" dependencies: mkdirp "^0.5.1" -x-is-function@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/x-is-function/-/x-is-function-1.0.4.tgz#5d294dc3d268cbdd062580e0c5df77a391d1fa1e" +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + dependencies: + async-limiter "~1.0.0" x-is-string@^0.1.0: version "0.1.0" - resolved "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" + resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" -x-xss-protection@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/x-xss-protection/-/x-xss-protection-1.0.0.tgz#898afb93869b24661cf9c52f9ee8db8ed0764dd9" +x-xss-protection@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/x-xss-protection/-/x-xss-protection-1.1.0.tgz#4f1898c332deb1e7f2be1280efb3e2c53d69c1a7" xdg-basedir@^2.0.0: version "2.0.0" @@ -10460,22 +10751,20 @@ xml-char-classes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d" -xml-name-validator@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" -xml2js@0.4.17: - version "0.4.17" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868" +xml2js@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.19.tgz#686c20f213209e94abf0d1bcf1efaa291c7827a7" dependencies: sax ">=0.6.0" - xmlbuilder "^4.1.0" + xmlbuilder "~9.0.1" -xmlbuilder@4.2.1, xmlbuilder@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5" - dependencies: - lodash "^4.0.0" +xmlbuilder@~9.0.1: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.1" @@ -10493,6 +10782,10 @@ yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + yargs-parser@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" @@ -10506,17 +10799,17 @@ yargs-parser@^7.0.0: dependencies: camelcase "^4.1.0" -yargs-parser@^8.0.0: +yargs-parser@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" dependencies: camelcase "^4.1.0" yargs@^10.0.3: - version "10.0.3" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.0.3.tgz#6542debd9080ad517ec5048fb454efe9e4d4aaae" + version "10.1.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" dependencies: - cliui "^3.2.0" + cliui "^4.0.0" decamelize "^1.1.1" find-up "^2.1.0" get-caller-file "^1.0.1" @@ -10527,7 +10820,7 @@ yargs@^10.0.3: string-width "^2.0.0" which-module "^2.0.0" y18n "^3.2.1" - yargs-parser "^8.0.0" + yargs-parser "^8.1.0" yargs@^4.2.0: version "4.8.1" @@ -10574,3 +10867,7 @@ yargs@~3.10.0: cliui "^2.1.0" decamelize "^1.0.0" window-size "0.1.0" + +ylru@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ylru/-/ylru-1.2.1.tgz#f576b63341547989c1de7ba288760923b27fe84f" From 78ee921244aa34a98b80e207f5598d52a28f111d Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 2 Mar 2019 15:51:02 -0800 Subject: [PATCH 053/237] Upgrade slug dependency --- package.json | 2 +- yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 40146bbec..2c82fbf50 100644 --- a/package.json +++ b/package.json @@ -155,7 +155,7 @@ "sequelize": "4.28.6", "sequelize-cli": "^2.7.0", "sequelize-encrypted": "0.1.0", - "slug": "0.9.1", + "slug": "^1.0.0", "string-replace-to-array": "^1.0.3", "style-loader": "^0.18.2", "styled-components": "^4.1.3", diff --git a/yarn.lock b/yarn.lock index 0b5bbe2dd..d1d37117a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9240,9 +9240,9 @@ slide@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" -slug@0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/slug/-/slug-0.9.1.tgz#af08f608a7c11516b61778aa800dce84c518cfda" +slug@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slug/-/slug-1.0.0.tgz#503be07b150226a42abf7a9c52d345e6b163fea8" dependencies: unicode ">= 0.3.1" From 565a0006c9e2f91bcd432ccc5755c5c3bbfd8857 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 2 Mar 2019 15:56:41 -0800 Subject: [PATCH 054/237] Remove lint-staged dependency --- flow-typed/npm/lint-staged_vx.x.x.js | 143 ------------------ package.json | 10 +- yarn.lock | 213 +-------------------------- 3 files changed, 5 insertions(+), 361 deletions(-) delete mode 100644 flow-typed/npm/lint-staged_vx.x.x.js diff --git a/flow-typed/npm/lint-staged_vx.x.x.js b/flow-typed/npm/lint-staged_vx.x.x.js deleted file mode 100644 index b56be6cee..000000000 --- a/flow-typed/npm/lint-staged_vx.x.x.js +++ /dev/null @@ -1,143 +0,0 @@ -// flow-typed signature: 8ca9af500578f9f609c7590a5c521cf1 -// flow-typed version: <>/lint-staged_v^3.4.0/flow_v0.86.0 - -/** - * This is an autogenerated libdef stub for: - * - * 'lint-staged' - * - * Fill this stub out by replacing all the `any` types. - * - * Once filled out, we encourage you to share your work with the - * community by sending a pull request to: - * https://github.com/flowtype/flow-typed - */ - -declare module 'lint-staged' { - declare module.exports: any; -} - -/** - * We include stubs for each file inside this npm package in case you need to - * require those files directly. Feel free to delete any files that aren't - * needed. - */ -declare module 'lint-staged/src/calcChunkSize' { - declare module.exports: any; -} - -declare module 'lint-staged/src/findBin' { - declare module.exports: any; -} - -declare module 'lint-staged/src/generateTasks' { - declare module.exports: any; -} - -declare module 'lint-staged/src/index' { - declare module.exports: any; -} - -declare module 'lint-staged/src/readConfigOption' { - declare module.exports: any; -} - -declare module 'lint-staged/src/runScript' { - declare module.exports: any; -} - -declare module 'lint-staged/test/__mocks__/execa' { - declare module.exports: any; -} - -declare module 'lint-staged/test/__mocks__/npm-which' { - declare module.exports: any; -} - -declare module 'lint-staged/test/calcChunkSize.spec' { - declare module.exports: any; -} - -declare module 'lint-staged/test/findBin.spec' { - declare module.exports: any; -} - -declare module 'lint-staged/test/generateTasks.spec' { - declare module.exports: any; -} - -declare module 'lint-staged/test/readConfigOption.spec' { - declare module.exports: any; -} - -declare module 'lint-staged/test/runScript-mock-findBin.spec' { - declare module.exports: any; -} - -declare module 'lint-staged/test/runScript-mock-pMap.spec' { - declare module.exports: any; -} - -declare module 'lint-staged/test/runScript.spec' { - declare module.exports: any; -} - -declare module 'lint-staged/wallaby' { - declare module.exports: any; -} - -// Filename aliases -declare module 'lint-staged/index' { - declare module.exports: $Exports<'lint-staged'>; -} -declare module 'lint-staged/index.js' { - declare module.exports: $Exports<'lint-staged'>; -} -declare module 'lint-staged/src/calcChunkSize.js' { - declare module.exports: $Exports<'lint-staged/src/calcChunkSize'>; -} -declare module 'lint-staged/src/findBin.js' { - declare module.exports: $Exports<'lint-staged/src/findBin'>; -} -declare module 'lint-staged/src/generateTasks.js' { - declare module.exports: $Exports<'lint-staged/src/generateTasks'>; -} -declare module 'lint-staged/src/index.js' { - declare module.exports: $Exports<'lint-staged/src/index'>; -} -declare module 'lint-staged/src/readConfigOption.js' { - declare module.exports: $Exports<'lint-staged/src/readConfigOption'>; -} -declare module 'lint-staged/src/runScript.js' { - declare module.exports: $Exports<'lint-staged/src/runScript'>; -} -declare module 'lint-staged/test/__mocks__/execa.js' { - declare module.exports: $Exports<'lint-staged/test/__mocks__/execa'>; -} -declare module 'lint-staged/test/__mocks__/npm-which.js' { - declare module.exports: $Exports<'lint-staged/test/__mocks__/npm-which'>; -} -declare module 'lint-staged/test/calcChunkSize.spec.js' { - declare module.exports: $Exports<'lint-staged/test/calcChunkSize.spec'>; -} -declare module 'lint-staged/test/findBin.spec.js' { - declare module.exports: $Exports<'lint-staged/test/findBin.spec'>; -} -declare module 'lint-staged/test/generateTasks.spec.js' { - declare module.exports: $Exports<'lint-staged/test/generateTasks.spec'>; -} -declare module 'lint-staged/test/readConfigOption.spec.js' { - declare module.exports: $Exports<'lint-staged/test/readConfigOption.spec'>; -} -declare module 'lint-staged/test/runScript-mock-findBin.spec.js' { - declare module.exports: $Exports<'lint-staged/test/runScript-mock-findBin.spec'>; -} -declare module 'lint-staged/test/runScript-mock-pMap.spec.js' { - declare module.exports: $Exports<'lint-staged/test/runScript-mock-pMap.spec'>; -} -declare module 'lint-staged/test/runScript.spec.js' { - declare module.exports: $Exports<'lint-staged/test/runScript.spec'>; -} -declare module 'lint-staged/wallaby.js' { - declare module.exports: $Exports<'lint-staged/wallaby'>; -} diff --git a/package.json b/package.json index 2c82fbf50..ebebaf3ca 100644 --- a/package.json +++ b/package.json @@ -19,14 +19,7 @@ "test": "npm run test:app && npm run test:server", "test:app": "jest", "test:server": "jest --config=server/.jestconfig.json --runInBand --forceExit", - "test:watch": "jest --config=server/.jestconfig.json --runInBand --forceExit --watchAll", - "precommit": "lint-staged" - }, - "lint-staged": { - "*.js": [ - "eslint --fix", - "git add" - ] + "test:watch": "jest --config=server/.jestconfig.json --runInBand --forceExit --watchAll" }, "jest": { "verbose": false, @@ -187,7 +180,6 @@ "jest-cli": "22", "koa-webpack-dev-middleware": "1.4.5", "koa-webpack-hot-middleware": "1.0.3", - "lint-staged": "^3.4.0", "mobx-react-devtools": "^6.0.3", "nodemon": "1.11.0", "prettier": "1.8.2", diff --git a/yarn.lock b/yarn.lock index d1d37117a..ac8a36aef 100644 --- a/yarn.lock +++ b/yarn.lock @@ -273,10 +273,6 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -ansi-escapes@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" - ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -335,10 +331,6 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -app-root-path@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.1.0.tgz#98bf6599327ecea199309866e8140368fd2e646a" - append-transform@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" @@ -1717,7 +1709,7 @@ chainsaw@~0.1.0: dependencies: traverse ">=0.3.0 <0.4" -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -1873,29 +1865,12 @@ cli-color@~1.2.0: memoizee "^0.4.3" timers-ext "0.1" -cli-cursor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - dependencies: - restore-cursor "^1.0.1" - cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" dependencies: restore-cursor "^2.0.0" -cli-spinners@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" - -cli-truncate@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" - dependencies: - slice-ansi "0.0.4" - string-width "^1.0.1" - cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" @@ -2075,7 +2050,7 @@ commander@2.9.x: dependencies: graceful-readlink ">= 1.0.0" -commander@^2.11.0, commander@^2.19.0, commander@^2.9.0: +commander@^2.11.0, commander@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" @@ -2306,19 +2281,6 @@ core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" -cosmiconfig@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-1.1.0.tgz#0dea0f9804efdfb929fbb1b188e25553ea053d37" - dependencies: - graceful-fs "^4.1.2" - js-yaml "^3.4.3" - minimist "^1.2.0" - object-assign "^4.0.1" - os-homedir "^1.0.1" - parse-json "^2.2.0" - pinkie-promise "^2.0.0" - require-from-string "^1.1.0" - crc@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/crc/-/crc-3.3.0.tgz#fa622e1bc388bf257309082d6b65200ce67090ba" @@ -2567,10 +2529,6 @@ date-fns@1.29.0: version "1.29.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" -date-fns@^1.27.2: - version "1.30.1" - resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" - date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" @@ -2924,10 +2882,6 @@ electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.47: version "1.3.113" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.113.tgz#b1ccf619df7295aea17bc6951dc689632629e4a9" -elegant-spinner@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" - elliptic@^6.0.0: version "6.4.1" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" @@ -3398,10 +3352,6 @@ exenv@^1.2.0, exenv@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - exit@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" @@ -3589,13 +3539,6 @@ fetch-test-server@^1.1.0: debug "^3.1.0" node-fetch "^2.1.2" -figures@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -4735,12 +4678,6 @@ imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - dependencies: - repeating "^2.0.0" - indent-string@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" @@ -5583,7 +5520,7 @@ js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.12.0, js-yaml@^3.4.3, js-yaml@^3.7.0: +js-yaml@^3.12.0, js-yaml@^3.7.0: version "3.12.2" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.2.tgz#ef1d067c5a9d9cb65bd72f285b5d8105c77f14fc" dependencies: @@ -6022,71 +5959,10 @@ line-height@^0.3.1: dependencies: computed-style "~0.1.3" -lint-staged@^3.4.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-3.6.1.tgz#24423c8b7bd99d96e15acd1ac8cb392a78e58582" - dependencies: - app-root-path "^2.0.0" - cosmiconfig "^1.1.0" - execa "^0.7.0" - listr "^0.12.0" - lodash.chunk "^4.2.0" - minimatch "^3.0.0" - npm-which "^3.0.1" - p-map "^1.1.1" - staged-git-files "0.0.4" - listenercount@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/listenercount/-/listenercount-1.0.1.tgz#84c8a72ab59c4725321480c975e6508342e70937" -listr-silent-renderer@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" - -listr-update-renderer@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz#ca80e1779b4e70266807e8eed1ad6abe398550f9" - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - elegant-spinner "^1.0.1" - figures "^1.7.0" - indent-string "^3.0.0" - log-symbols "^1.0.2" - log-update "^1.0.2" - strip-ansi "^3.0.1" - -listr-verbose-renderer@^0.4.0: - version "0.4.1" - resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" - dependencies: - chalk "^1.1.3" - cli-cursor "^1.0.2" - date-fns "^1.27.2" - figures "^1.7.0" - -listr@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.12.0.tgz#6bce2c0f5603fa49580ea17cd6a00cc0e5fa451a" - dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - figures "^1.7.0" - indent-string "^2.1.0" - is-promise "^2.1.0" - is-stream "^1.1.0" - listr-silent-renderer "^1.1.1" - listr-update-renderer "^0.2.0" - listr-verbose-renderer "^0.4.0" - log-symbols "^1.0.2" - log-update "^1.0.2" - ora "^0.2.3" - p-map "^1.1.1" - rxjs "^5.0.0-beta.11" - stream-to-observable "^0.1.0" - strip-ansi "^3.0.1" - load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -6205,10 +6081,6 @@ lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" -lodash.chunk@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.chunk/-/lodash.chunk-4.2.0.tgz#66e5ce1f76ed27b4303d8c6512e8d1216e8106bc" - lodash.defaults@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c" @@ -6319,19 +6191,6 @@ lodash@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551" -log-symbols@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - dependencies: - chalk "^1.0.0" - -log-update@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1" - dependencies: - ansi-escapes "^1.0.0" - cli-cursor "^1.0.2" - longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" @@ -6983,26 +6842,12 @@ npm-packlist@^1.1.6: ignore-walk "^3.0.1" npm-bundled "^1.0.1" -npm-path@^2.0.2: - version "2.0.4" - resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" - dependencies: - which "^1.2.10" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" dependencies: path-key "^2.0.0" -npm-which@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa" - dependencies: - commander "^2.9.0" - npm-path "^2.0.2" - which "^1.2.10" - npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -7131,10 +6976,6 @@ once@~1.3.0: dependencies: wrappy "1" -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -7163,15 +7004,6 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" -ora@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4" - dependencies: - chalk "^1.1.1" - cli-cursor "^1.0.2" - cli-spinners "^0.1.2" - object-assign "^4.0.1" - orchestrator@^0.3.0: version "0.3.8" resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e" @@ -7262,10 +7094,6 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" -p-map@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" - p-some@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/p-some/-/p-some-2.0.1.tgz#65d87c8b154edbcf5221d167778b6d2e150f6f06" @@ -8629,10 +8457,6 @@ require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" -require-from-string@^1.1.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" - require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" @@ -8701,13 +8525,6 @@ response-time@~2.3.1: depd "~1.1.0" on-headers "~1.0.1" -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -8823,12 +8640,6 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@^5.0.0-beta.11: - version "5.5.12" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" - dependencies: - symbol-observable "1.0.1" - rxjs@^6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.4.0.tgz#f3bb0fe7bda7fb69deac0c16f17b50b0b8790504" @@ -9218,10 +9029,6 @@ slate@^0.44.10: tiny-warning "^0.0.3" type-of "^2.0.1" -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - slice-ansi@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" @@ -9434,10 +9241,6 @@ stackframe@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-0.3.1.tgz#33aa84f1177a5548c8935533cbfeb3420975f5a4" -staged-git-files@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" - standard-as-callback@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/standard-as-callback/-/standard-as-callback-1.0.2.tgz#d0813289db00f8bd5e0f29e74744cb63706707c8" @@ -9509,10 +9312,6 @@ stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" -stream-to-observable@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" - stream-wormhole@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/stream-wormhole/-/stream-wormhole-1.1.0.tgz#300aff46ced553cfec642a05251885417693c33d" @@ -9711,10 +9510,6 @@ swap-case@^1.1.0: lower-case "^1.1.1" upper-case "^1.1.1" -symbol-observable@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" - symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" @@ -10644,7 +10439,7 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@^1.2.10, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0: +which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: From 4a90c57dfe78e2a645aa699b56ba3ed98881ae6e Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 2 Mar 2019 16:02:44 -0800 Subject: [PATCH 055/237] More dependency upgrades --- package.json | 12 +- yarn.lock | 433 +++++++++++++++++++++++---------------------------- 2 files changed, 199 insertions(+), 246 deletions(-) diff --git a/package.json b/package.json index ebebaf3ca..d00ea960b 100644 --- a/package.json +++ b/package.json @@ -166,7 +166,7 @@ }, "devDependencies": { "babel-eslint": "^9.0.0", - "babel-jest": "22", + "babel-jest": "^22.0.0", "eslint": "^5.12.1", "eslint-config-react-app": "^3.0.6", "eslint-plugin-flowtype": "^2.40.1", @@ -175,13 +175,13 @@ "eslint-plugin-prettier": "^2.4.0", "eslint-plugin-react": "^7.12.4", "fetch-test-server": "^1.1.0", - "flow-bin": "0.86.0", + "flow-bin": "^0.86.0", "identity-obj-proxy": "^3.0.0", - "jest-cli": "22", - "koa-webpack-dev-middleware": "1.4.5", - "koa-webpack-hot-middleware": "1.0.3", + "jest-cli": "^22.0.0", + "koa-webpack-dev-middleware": "^1.4.5", + "koa-webpack-hot-middleware": "^1.0.3", "mobx-react-devtools": "^6.0.3", - "nodemon": "1.11.0", + "nodemon": "^1.18.10", "prettier": "1.8.2", "rimraf": "^2.5.4" }, diff --git a/yarn.lock b/yarn.lock index ac8a36aef..7a986c829 100644 --- a/yarn.lock +++ b/yarn.lock @@ -273,6 +273,12 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + dependencies: + string-width "^2.0.0" + ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" @@ -317,13 +323,6 @@ any-promise@^1.0.0, any-promise@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" - anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -466,7 +465,7 @@ astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" -async-each@^1.0.0, async-each@^1.0.1: +async-each@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" @@ -732,7 +731,7 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-jest@22, babel-jest@^22.4.4: +babel-jest@^22.0.0, babel-jest@^22.4.4: version "22.4.4" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.4.tgz#977259240420e227444ebe49e226a61e49ea659d" dependencies: @@ -1382,6 +1381,18 @@ boundless-utils-uuid@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/boundless-utils-uuid/-/boundless-utils-uuid-1.1.0.tgz#ae709f1d4fd3a4557ad4a5c77b1f0a9f701e3ed3" +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + brace-expansion@^1.0.0, brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1653,7 +1664,7 @@ camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" -camelcase@^4.1.0: +camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -1692,6 +1703,10 @@ capture-exit@^1.2.0: dependencies: rsvp "^3.3.3" +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -1770,22 +1785,7 @@ charenc@~0.0.1: version "0.0.2" resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" -chokidar@^1.4.3: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - dependencies: - anymatch "^1.3.0" - async-each "^1.0.0" - glob-parent "^2.0.0" - inherits "^2.0.1" - is-binary-path "^1.0.0" - is-glob "^2.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.0.0" - optionalDependencies: - fsevents "^1.0.0" - -chokidar@^2.0.2: +chokidar@^2.0.2, chokidar@^2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.2.tgz#9c23ea40b01638439e0513864d362aeacc5ad058" dependencies: @@ -1854,6 +1854,10 @@ clean-stack@^1.0.0: version "1.3.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-1.3.0.tgz#9e821501ae979986c46b1d66d2d432db2fd4ae31" +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + cli-color@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.2.0.tgz#3a5ae74fd76b6267af666e69e2afbbd01def34d1" @@ -2111,18 +2115,16 @@ config-chain@^1.1.12: ini "^1.3.4" proto-list "~1.2.1" -configstore@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-1.4.0.tgz#c35781d0501d268c25c54b8b17f6240e8a4fb021" +configstore@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.2.tgz#c6f25defaeef26df12dd33414b001fe81a543f8f" dependencies: + dot-prop "^4.1.0" graceful-fs "^4.1.2" - mkdirp "^0.5.0" - object-assign "^4.0.1" - os-tmpdir "^1.0.0" - osenv "^0.1.0" - uuid "^2.0.1" - write-file-atomic "^1.1.2" - xdg-basedir "^2.0.0" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" confusing-browser-globals@^1.0.5: version "1.0.5" @@ -2292,6 +2294,12 @@ create-ecdh@^4.0.0: bn.js "^4.1.0" elliptic "^6.0.0" +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + dependencies: + capture-stack-trace "^1.0.0" + create-hash@^1.1.0, create-hash@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" @@ -2358,6 +2366,10 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + csrf@~3.0.0: version "3.0.6" resolved "https://registry.yarnpkg.com/csrf/-/csrf-3.0.6.tgz#b61120ddceeafc91e76ed5313bb5c0b2667b710a" @@ -2809,6 +2821,12 @@ dot-case@^2.1.0: dependencies: no-case "^2.2.0" +dot-prop@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + dependencies: + is-obj "^1.0.0" + dotenv@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" @@ -2837,11 +2855,11 @@ duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" -duplexer@^0.1.1, duplexer@~0.1.1: +duplexer@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" -duplexify@^3.2.0, duplexify@^3.4.2, duplexify@^3.6.0: +duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" dependencies: @@ -3016,10 +3034,6 @@ es6-map@^0.1.3: es6-symbol "~3.1.1" event-emitter "~0.3.5" -es6-promise@^3.0.2: - version "3.3.1" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" - es6-promise@^4.0.3, es6-promise@^4.0.5: version "4.2.6" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.6.tgz#b685edd8258886365ea62b57d30de28fadcd974f" @@ -3287,18 +3301,6 @@ event-emitter@^0.3.5, event-emitter@~0.3.5: d "1" es5-ext "~0.10.14" -event-stream@=3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" - dependencies: - duplexer "~0.1.1" - from "~0" - map-stream "~0.1.0" - pause-stream "0.0.11" - split "0.3" - stream-combiner "~0.0.4" - through "~2.3.1" - event-target-shim@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" @@ -3678,7 +3680,7 @@ flexbuffer@0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/flexbuffer/-/flexbuffer-0.0.6.tgz#039fdf23f8823e440c38f3277e6fef1174215b30" -flow-bin@0.86.0: +flow-bin@^0.86.0: version "0.86.0" resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.86.0.tgz#153a28722b4dc13b7200c74b644dd4d9f4969a11" @@ -3768,10 +3770,6 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -from@~0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" - fs-exists-sync@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" @@ -3829,7 +3827,7 @@ fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" -fsevents@^1.0.0, fsevents@^1.2.3, fsevents@^1.2.7: +fsevents@^1.2.3, fsevents@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4" dependencies: @@ -4000,6 +3998,12 @@ glob@~3.1.21: inherits "1" minimatch "~0.2.11" +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + dependencies: + ini "^1.3.4" + global-modules@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" @@ -4104,20 +4108,21 @@ google-p12-pem@^1.0.0: node-forge "^0.7.5" pify "^4.0.0" -got@^3.2.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/got/-/got-3.3.1.tgz#e5d0ed4af55fc3eef4d56007769d98192bcb2eca" +got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" dependencies: - duplexify "^3.2.0" - infinity-agent "^2.0.0" + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" is-stream "^1.0.0" lowercase-keys "^1.0.0" - nested-error-stacks "^1.0.0" - object-assign "^3.0.0" - prepend-http "^1.0.0" - read-all-stream "^3.0.0" - timed-out "^2.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" got@^7.1.0: version "7.1.0" @@ -4623,7 +4628,7 @@ iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" -ignore-by-default@^1.0.0: +ignore-by-default@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" @@ -4660,6 +4665,10 @@ import-fresh@^3.0.0: parent-module "^1.0.0" resolve-from "^4.0.0" +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + import-local@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" @@ -4690,10 +4699,6 @@ indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" -infinity-agent@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/infinity-agent/-/infinity-agent-2.0.3.tgz#45e0e2ff7a9eb030b27d62b74b3744b7a7ac4216" - inflation@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/inflation/-/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f" @@ -4964,6 +4969,13 @@ is-in-browser@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + is-lower-case@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393" @@ -5000,10 +5012,20 @@ is-number@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + is-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + dependencies: + path-is-inside "^1.0.1" + is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -5227,7 +5249,7 @@ jest-changed-files@^22.2.0: dependencies: throat "^4.0.0" -jest-cli@22: +jest-cli@^22.0.0: version "22.4.4" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.4.tgz#68cd2a2aae983adb1e6638248ca21082fd6d9e90" dependencies: @@ -5862,13 +5884,13 @@ koa-unless@1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/koa-unless/-/koa-unless-1.0.7.tgz#b9df375e2b4da3043918d48622520c2c0b79f032" -koa-webpack-dev-middleware@1.4.5: - version "1.4.5" - resolved "https://registry.yarnpkg.com/koa-webpack-dev-middleware/-/koa-webpack-dev-middleware-1.4.5.tgz#78e50668bb6d8c063fbc858ff2bc235b7464550d" +koa-webpack-dev-middleware@^1.4.5: + version "1.4.6" + resolved "https://registry.yarnpkg.com/koa-webpack-dev-middleware/-/koa-webpack-dev-middleware-1.4.6.tgz#6ec20d3648c3c80b5edb0b721a6838f66a1fc47a" dependencies: webpack-dev-middleware "^1.10.0" -koa-webpack-hot-middleware@1.0.3: +koa-webpack-hot-middleware@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/koa-webpack-hot-middleware/-/koa-webpack-hot-middleware-1.0.3.tgz#df6aafbf2d77153101e37e6a4ae70235b466f8c0" dependencies: @@ -5903,11 +5925,11 @@ koa@^2.2.0: type-is "^1.6.16" vary "^1.1.2" -latest-version@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-1.0.1.tgz#72cfc46e3e8d1be651e1ebb54ea9f6ea96f374bb" +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" dependencies: - package-json "^1.0.0" + package-json "^4.0.0" lazy-cache@^1.0.3: version "1.0.4" @@ -6010,13 +6032,6 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" - lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" @@ -6029,18 +6044,6 @@ lodash._basevalues@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" -lodash._bindcallback@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - -lodash._createassigner@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" - dependencies: - lodash._bindcallback "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash.restparam "^3.0.0" - lodash._getnative@^3.0.0: version "3.9.1" resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" @@ -6065,14 +6068,6 @@ lodash._root@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" -lodash.assign@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" - dependencies: - lodash._baseassign "^3.0.0" - lodash._createassigner "^3.0.0" - lodash.keys "^3.0.0" - lodash.assign@^4.0.3, lodash.assign@^4.0.6: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" @@ -6081,13 +6076,6 @@ lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" -lodash.defaults@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c" - dependencies: - lodash.assign "^3.0.0" - lodash.restparam "^3.0.0" - lodash.defaults@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" @@ -6258,10 +6246,6 @@ map-cache@^0.2.0, map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" -map-stream@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" - map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -6359,7 +6343,7 @@ methods@^1.0.1, methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" -micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: +micromatch@^2.3.11, micromatch@^2.3.7: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: @@ -6452,7 +6436,7 @@ minimatch@^2.0.1: dependencies: brace-expansion "^1.0.0" -minimatch@^3.0.0, minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -6667,12 +6651,6 @@ neo-async@^2.5.0: version "2.6.0" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" -nested-error-stacks@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz#19f619591519f096769a5ba9a86e6eeec823c3cf" - dependencies: - inherits "~2.0.1" - next-tick@1: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" @@ -6767,20 +6745,20 @@ nodemailer@^4.4.0: version "4.7.0" resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-4.7.0.tgz#4420e06abfffd77d0618f184ea49047db84f4ad8" -nodemon@1.11.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.11.0.tgz#226c562bd2a7b13d3d7518b49ad4828a3623d06c" +nodemon@^1.18.10: + version "1.18.10" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.18.10.tgz#3ba63f64eb4c283cf3e4f75f30817e9d4f393afe" dependencies: - chokidar "^1.4.3" - debug "^2.2.0" - es6-promise "^3.0.2" - ignore-by-default "^1.0.0" - lodash.defaults "^3.1.2" - minimatch "^3.0.0" - ps-tree "^1.0.1" - touch "1.0.0" - undefsafe "0.0.3" - update-notifier "0.5.0" + chokidar "^2.1.0" + debug "^3.1.0" + ignore-by-default "^1.0.1" + minimatch "^3.0.4" + pstree.remy "^1.1.6" + semver "^5.5.0" + supports-color "^5.2.0" + touch "^3.1.0" + undefsafe "^2.0.2" + update-notifier "^2.5.0" nopt@^4.0.1, nopt@~4.0.1: version "4.0.1" @@ -6808,7 +6786,7 @@ normalize-package-data@^2.3.2: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" -normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: +normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: @@ -7049,7 +7027,7 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" -osenv@^0.1.0, osenv@^0.1.4: +osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" dependencies: @@ -7116,12 +7094,14 @@ p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" -package-json@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-1.2.0.tgz#c8ecac094227cdf76a316874ed05e27cc939a0e0" +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" dependencies: - got "^3.2.0" - registry-url "^3.0.0" + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" packet-reader@0.3.1: version "0.3.1" @@ -7255,7 +7235,7 @@ path-is-absolute@1.0.1, path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-is-inside@^1.0.2: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" @@ -7297,12 +7277,6 @@ path-type@^2.0.0: dependencies: pify "^2.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" - dependencies: - through "~2.3" - pause@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/pause/-/pause-0.1.0.tgz#ebc8a4a8619ff0b8a81ac1513c3434ff469fdb74" @@ -7776,12 +7750,6 @@ prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" -ps-tree@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" - dependencies: - event-stream "=3.3.4" - pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" @@ -7790,6 +7758,10 @@ psl@^1.1.24, psl@^1.1.28: version "1.1.31" resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" +pstree.remy@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.6.tgz#73a55aad9e2d95814927131fbf4dc1b62d259f47" + public-encrypt@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" @@ -7932,7 +7904,7 @@ raw-loader@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" -rc@^1.0.1, rc@^1.2.7: +rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" dependencies: @@ -8100,13 +8072,6 @@ react@^16.6.0: prop-types "^15.6.2" scheduler "^0.13.3" -read-all-stream@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/read-all-stream/-/read-all-stream-3.1.0.tgz#35c3e177f2078ef789ee4bfafa4373074eaef4fa" - dependencies: - pinkie-promise "^2.0.0" - readable-stream "^2.0.0" - read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" @@ -8198,7 +8163,7 @@ readable-stream@~2.1.5: string_decoder "~0.10.x" util-deprecate "~1.0.1" -readdirp@^2.0.0, readdirp@^2.2.1: +readdirp@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" dependencies: @@ -8332,7 +8297,14 @@ regexpu-core@^2.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" -registry-url@^3.0.0: +registry-auth-token@^3.0.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" dependencies: @@ -8394,12 +8366,6 @@ repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" -repeating@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac" - dependencies: - is-finite "^1.0.0" - repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" @@ -8728,7 +8694,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.3.0, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" @@ -9043,10 +9009,6 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" -slide@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" - slug@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slug/-/slug-1.0.0.tgz#503be07b150226a42abf7a9c52d345e6b163fea8" @@ -9193,12 +9155,6 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -split@0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" - dependencies: - through "2" - split@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" @@ -9275,12 +9231,6 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" -stream-combiner@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" - dependencies: - duplexer "~0.1.1" - stream-consume@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.1.tgz#d3bdb598c2bd0ae82b8cac7ac50b1107a7996c48" @@ -9320,12 +9270,6 @@ strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" -string-length@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac" - dependencies: - strip-ansi "^3.0.0" - string-length@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" @@ -9485,7 +9429,7 @@ supports-color@^4.2.1: dependencies: has-flag "^2.0.0" -supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: +supports-color@^5.2.0, supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" dependencies: @@ -9550,6 +9494,12 @@ tar@^4: safe-buffer "^5.1.2" yallist "^3.0.2" +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + dependencies: + execa "^0.7.0" + terraformer-wkt-parser@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/terraformer-wkt-parser/-/terraformer-wkt-parser-1.2.0.tgz#c9d6ac3dff25f4c0bd344e961f42694961834c34" @@ -9607,7 +9557,7 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through@2, through@^2.3.6, through@^2.3.8, through@~2.3, through@~2.3.1: +through@2, through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" @@ -9625,10 +9575,6 @@ time-stamp@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.2.0.tgz#917e0a66905688790ec7bbbde04046259af83f57" -timed-out@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-2.0.0.tgz#f38b0ae81d3747d628001f41dafc652ace671c0a" - timed-out@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" @@ -9751,9 +9697,9 @@ toposort@^0.2.12: version "0.2.12" resolved "https://registry.yarnpkg.com/toposort/-/toposort-0.2.12.tgz#c7d2984f3d48c217315cc32d770888b779491e81" -touch@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/touch/-/touch-1.0.0.tgz#449cbe2dbae5a8c8038e30d71fa0ff464947c4de" +touch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" dependencies: nopt "~1.0.10" @@ -9923,9 +9869,11 @@ unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" -undefsafe@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-0.0.3.tgz#ecca3a03e56b9af17385baac812ac83b994a962f" +undefsafe@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.2.tgz#225f6b9e0337663e0d8e7cfd686fc2836ccace76" + dependencies: + debug "^2.2.0" underscore@^1.7.0: version "1.9.1" @@ -9986,6 +9934,12 @@ unique-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b" +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + dependencies: + crypto-random-string "^1.0.0" + unist-util-is@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" @@ -10037,6 +9991,10 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + unzipper@^0.8.11: version "0.8.14" resolved "https://registry.yarnpkg.com/unzipper/-/unzipper-0.8.14.tgz#ade0524cd2fc14d11b8de258be22f9d247d3f79b" @@ -10055,17 +10013,20 @@ upath@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" -update-notifier@0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-0.5.0.tgz#07b5dc2066b3627ab3b4f530130f7eddda07a4cc" +update-notifier@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" dependencies: - chalk "^1.0.0" - configstore "^1.0.0" + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" is-npm "^1.0.0" - latest-version "^1.0.0" - repeating "^1.1.2" + latest-version "^3.0.0" semver-diff "^2.0.0" - string-length "^1.0.0" + xdg-basedir "^3.0.0" upper-case-first@^1.1.0, upper-case-first@^1.1.2: version "1.1.2" @@ -10170,10 +10131,6 @@ uuid@3.3.2, uuid@^3.0.0, uuid@^3.2.1, uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" -uuid@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" - v8flags@^2.0.2: version "2.1.1" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" @@ -10451,6 +10408,12 @@ wide-align@^1.1.0: dependencies: string-width "^1.0.2 || 2" +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + dependencies: + string-width "^2.1.1" + window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" @@ -10500,15 +10463,7 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -write-file-atomic@^1.1.2: - version "1.3.4" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - slide "^1.1.5" - -write-file-atomic@^2.1.0: +write-file-atomic@^2.0.0, write-file-atomic@^2.1.0: version "2.4.2" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.2.tgz#a7181706dfba17855d221140a9c06e15fcdd87b9" dependencies: @@ -10536,11 +10491,9 @@ x-xss-protection@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/x-xss-protection/-/x-xss-protection-1.1.0.tgz#4f1898c332deb1e7f2be1280efb3e2c53d69c1a7" -xdg-basedir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-2.0.0.tgz#edbc903cc385fc04523d966a335504b5504d1bd2" - dependencies: - os-homedir "^1.0.0" +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" xml-char-classes@^1.0.0: version "1.0.0" From 18aa3f3787e88ae772e6e5d73478f0d1b645dde2 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 2 Mar 2019 16:16:46 -0800 Subject: [PATCH 056/237] Fix specs, thanks for the breaking minor change jest --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index d00ea960b..381fe029b 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "test:watch": "jest --config=server/.jestconfig.json --runInBand --forceExit --watchAll" }, "jest": { + "testURL": "http://localhost", "verbose": false, "roots": [ "app", From f1c14f943e218ccfc9f7c4f85b1d5a357c1dec18 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 2 Mar 2019 20:35:28 -0800 Subject: [PATCH 057/237] Bump RME --- package.json | 2 +- yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 381fe029b..f6113237b 100644 --- a/package.json +++ b/package.json @@ -144,7 +144,7 @@ "react-waypoint": "^7.3.1", "redis": "^2.6.2", "redis-lock": "^0.1.0", - "rich-markdown-editor": "^9.0.3-1", + "rich-markdown-editor": "^9.0.4", "safestart": "1.1.0", "sequelize": "4.28.6", "sequelize-cli": "^2.7.0", diff --git a/yarn.lock b/yarn.lock index 7a986c829..2e7f6a499 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8513,9 +8513,9 @@ retry-axios@0.3.2, retry-axios@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-0.3.2.tgz#5757c80f585b4cc4c4986aa2ffd47a60c6d35e13" -rich-markdown-editor@^9.0.3-1: - version "9.0.3-1" - resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-9.0.3-1.tgz#94f8b1949dd66e4d37d84e8227d77876adbdb2d5" +rich-markdown-editor@^9.0.4: + version "9.0.4" + resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-9.0.4.tgz#68e78b0443beb0745db6fd19fad0df1a0f411fcc" dependencies: "@wikifactory/slate-edit-blockquote" "^0.7.1" "@wikifactory/slate-edit-code" "^0.16.0" From 67ed017122848e6862e6db0577b35234bdee9432 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 2 Mar 2019 21:11:36 -0800 Subject: [PATCH 058/237] Fixes: toString of undefined --- server/middlewares/validation.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/middlewares/validation.js b/server/middlewares/validation.js index fd9a36714..f6225fb2f 100644 --- a/server/middlewares/validation.js +++ b/server/middlewares/validation.js @@ -24,8 +24,8 @@ export default function validation() { } }; - ctx.assertUuid = (value, message) => { - if (!validator.isUUID(value.toString() || '')) { + ctx.assertUuid = (value = '', message) => { + if (!validator.isUUID(value)) { throw new ValidationError(message); } }; From 8b639682ffd4e911d46cd9fa019b5b01b503cb5e Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 2 Mar 2019 21:17:26 -0800 Subject: [PATCH 059/237] Guard against empty error messages --- app/stores/UiStore.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/stores/UiStore.js b/app/stores/UiStore.js index 01f9bf4ab..de704082e 100644 --- a/app/stores/UiStore.js +++ b/app/stores/UiStore.js @@ -88,6 +88,8 @@ class UiStore { message: string, type?: 'warning' | 'error' | 'info' | 'success' = 'success' ) => { + if (!message) return; + const id = v4(); const createdAt = new Date().toISOString(); this.toasts.set(id, { message, type, createdAt, id }); From d91f4045c9516a1610086e2c7c98604940859b8e Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 2 Mar 2019 21:43:07 -0800 Subject: [PATCH 060/237] Add favicon to serverside html --- server/static/index.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server/static/index.html b/server/static/index.html index fc1dfa372..49a454d45 100644 --- a/server/static/index.html +++ b/server/static/index.html @@ -3,6 +3,8 @@ Outline + + -
    - -
    +
    + \ No newline at end of file diff --git a/server/static/index.html b/server/static/index.html index 49a454d45..87eef72b8 100644 --- a/server/static/index.html +++ b/server/static/index.html @@ -23,21 +23,15 @@ flex: 1; min-height: 100vh; } - - #sidebar-placeholder { - position: fixed; - top: 0; - bottom: 0; - left: 0; - width: 280px; - background: #F4F7FA; - } -
    - -
    +
    + diff --git a/server/utils/renderpage.js b/server/utils/renderpage.js index f4007dd3c..53d169586 100644 --- a/server/utils/renderpage.js +++ b/server/utils/renderpage.js @@ -8,7 +8,7 @@ import { ThemeProvider, } from 'styled-components'; import Layout from '../pages/components/Layout'; -import theme from '../../shared/styles/theme'; +import { light } from '../../shared/styles/theme'; const sheet = new ServerStyleSheet(); @@ -28,7 +28,7 @@ export default function renderpage(ctx: Object, children: React.Node) { const html = ReactDOMServer.renderToString( - + {children} diff --git a/shared/components/TeamLogo.js b/shared/components/TeamLogo.js index 6d9f2b09f..c6f85bce7 100644 --- a/shared/components/TeamLogo.js +++ b/shared/components/TeamLogo.js @@ -1,12 +1,13 @@ // @flow import styled from 'styled-components'; +import { darken } from 'polished'; const TeamLogo = styled.img` width: 38px; height: 38px; border-radius: 4px; background: ${props => props.theme.white}; - border: 1px solid ${props => props.theme.slateLight}; + border: 1px solid ${props => darken(0.1, props.theme.sidebarBackground)}; `; export default TeamLogo; diff --git a/shared/styles/base.js b/shared/styles/base.js deleted file mode 100644 index 4231af751..000000000 --- a/shared/styles/base.js +++ /dev/null @@ -1,84 +0,0 @@ -// @flow -import theme from './theme'; - -export default ` - @font-face { - font-family: 'Lato'; - src: url('/fonts/LatoLatin-Semibold.woff') format('woff'); - } - - * { - box-sizing: border-box; - } - - html, - body { - width: 100%; - min-height: 100vh; - margin: 0; - padding: 0; - } - - body, - button, - input, - optgroup, - select, - textarea { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, - Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; - } - - body { - font-size: 16px; - line-height: 1.5; - color: ${theme.text}; - - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - text-rendering: optimizeLegibility; - } - - a { - color: ${theme.blue}; - text-decoration: none; - cursor: pointer; - } - - h1, - h2, - h3, - h4, - h5, - h6 { - font-family: 'Lato',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen, Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif; - font-weight: 500; - line-height: 1.25; - margin-top: 1em; - margin-bottom: 0.5em; - color: ${theme.text}; - } - h1 { font-size: 2.25em; } - h2 { font-size: 1.5em; } - h3 { font-size: 1.25em; } - h4 { font-size: 1em; } - h5 { font-size: 0.875em; } - h6 { font-size: 0.75em; } - - p, - dl, - ol, - ul, - pre, - blockquote { - margin-top: 1em; - margin-bottom: 1em; - } - - hr { - border: 0; - height: 0; - border-top: 1px solid rgba(0, 0, 0, 0.1); - border-bottom: 1px solid rgba(255, 255, 255, 0.3); - } -`; diff --git a/shared/styles/globals.js b/shared/styles/globals.js index 0f36fd88a..3639bf893 100644 --- a/shared/styles/globals.js +++ b/shared/styles/globals.js @@ -1,9 +1,86 @@ // @flow import styledNormalize from 'styled-normalize'; import { createGlobalStyle } from 'styled-components'; -import base from './base'; export default createGlobalStyle` ${styledNormalize} - ${base} + + @font-face { + font-family: 'Lato'; + src: url('/fonts/LatoLatin-Semibold.woff') format('woff'); + } + + * { + box-sizing: border-box; + } + + html, + body { + width: 100%; + min-height: 100vh; + margin: 0; + padding: 0; + } + + body, + button, + input, + optgroup, + select, + textarea { + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, + Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + } + + body { + font-size: 16px; + line-height: 1.5; + color: ${props => props.theme.text}; + + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + } + + a { + color: ${props => props.theme.primary}; + text-decoration: none; + cursor: pointer; + } + + h1, + h2, + h3, + h4, + h5, + h6 { + font-family: 'Lato',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen, Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif; + font-weight: 500; + line-height: 1.25; + margin-top: 1em; + margin-bottom: 0.5em; + color: ${props => props.theme.text}; + } + h1 { font-size: 2.25em; } + h2 { font-size: 1.5em; } + h3 { font-size: 1.25em; } + h4 { font-size: 1em; } + h5 { font-size: 0.875em; } + h6 { font-size: 0.75em; } + + p, + dl, + ol, + ul, + pre, + blockquote { + margin-top: 1em; + margin-bottom: 1em; + } + + hr { + border: 0; + height: 0; + border-top: 1px solid ${props => props.theme.divider}; + } `; diff --git a/shared/styles/theme.js b/shared/styles/theme.js index b8dc020c0..b480663ae 100644 --- a/shared/styles/theme.js +++ b/shared/styles/theme.js @@ -1,18 +1,10 @@ // @flow -const theme = { - fontFamily: - "-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen, Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif", - monospaceFontFamily: `Menlo, Consolas, 'Liberation Mono', monospace;`, - fontWeight: 400, +import { darken, lighten } from 'polished'; - text: '#171B35', - link: '#1AB6FF', - primary: '#1AB6FF', - placeholder: '#b1becc', - danger: '#D0021B', - warning: '#f08a24', - success: '#2f3336', - info: '#a0d3e8', +const colors = { + almostBlack: '#111319', + lightBlack: '#2F3336', + almostWhite: '#E6E6E6', slate: '#9BA6B2', slateLight: '#DAE1E9', @@ -22,19 +14,131 @@ const theme = { smokeLight: '#F9FBFC', smokeDark: '#E8EBED', - white: '#FFFFFF', - blue: '#1AB6FF', - black: '#000000', - blackLight: '#2f3336', + white: '#FFF', + white10: 'rgba(255, 255, 255, 0.1)', + black: '#000', + black05: 'rgba(0, 0, 0, 0.05)', + black10: 'rgba(0, 0, 0, 0.1)', + black50: 'rgba(0, 0, 0, 0.50)', + primary: '#1AB6FF', + yellow: '#FBCA04', + danger: '#D0021B', + warning: '#f08a24', + success: '#2f3336', + info: '#a0d3e8', +}; + +const spacing = { padding: '1.5vw 1.875vw', vpadding: '1.5vw', hpadding: '1.875vw', sidebarWidth: '280px', sidebarMinWidth: '250px', sidebarMaxWidth: '350px', - - contentHeaderBackground: 'hsl(180, 58%, 85%)', }; -export default theme; +export const base = { + ...colors, + ...spacing, + fontFamily: + "-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Oxygen, Ubuntu,Cantarell,'Open Sans','Helvetica Neue',sans-serif", + fontWeight: 400, + link: colors.primary, +}; + +export const light = { + ...base, + background: colors.white, + + text: colors.almostBlack, + textSecondary: colors.slateDark, + textTertiary: colors.slate, + placeholder: '#B1BECC', + + sidebarBackground: 'rgb(244, 247, 250)', + sidebarItemBackground: colors.black05, + sidebarText: 'rgb(78, 92, 110)', + + menuBackground: colors.white, + menuShadow: + '0 0 0 1px rgba(0, 0, 0, 0.05), 0 4px 8px rgba(0, 0, 0, 0.08), 0 2px 4px rgba(0, 0, 0, 0.08)', + divider: colors.slateLight, + inputBorder: colors.slateLight, + inputBorderFocused: colors.slate, + + listItemHoverBackground: colors.smoke, + listItemHoverBorder: colors.smokeDark, + + toolbarBackground: colors.lightBlack, + toolbarInput: colors.white10, + toolbarItem: colors.white, + + buttonBackground: colors.lightBlack, + buttonText: colors.white, + buttonNeutralBackground: colors.white, + buttonNeutralText: colors.almostBlack, + + tooltipBackground: colors.almostBlack, + tooltipText: colors.white, + + blockToolbarBackground: colors.smoke, + blockToolbarTrigger: colors.slate, + blockToolbarTriggerIcon: colors.white, + blockToolbarItem: colors.almostBlack, + + quote: colors.slateLight, + codeBackground: colors.smoke, + codeBorder: colors.smokeDark, + embedBorder: '#DDD #DDD #CCC', + horizontalRule: colors.smokeDark, +}; + +export const dark = { + ...base, + background: colors.almostBlack, + + text: colors.almostWhite, + textSecondary: lighten(0.2, colors.slate), + textTertiary: colors.slate, + placeholder: darken(0.5, '#B1BECC'), + + sidebarBackground: colors.black50, + sidebarItemBackground: colors.black50, + sidebarText: colors.slate, + + menuBackground: lighten(0.015, colors.almostBlack), + menuShadow: + '0 0 0 1px rgba(0, 0, 0, 0.1), 0 8px 16px rgba(0, 0, 0, 0.3), 0 2px 4px rgba(0, 0, 0, 0.08)', + divider: colors.slate, + inputBorder: colors.slateDark, + inputBorderFocused: colors.slate, + + listItemHoverBackground: colors.black10, + listItemHoverBorder: colors.black50, + + toolbarBackground: colors.white, + toolbarInput: colors.black10, + toolbarItem: colors.lightBlack, + + buttonBackground: colors.white, + buttonText: colors.lightBlack, + buttonNeutralBackground: colors.almostBlack, + buttonNeutralText: colors.white, + + tooltipBackground: colors.white, + tooltipText: colors.lightBlack, + + blockToolbarBackground: colors.white, + blockToolbarTrigger: colors.almostWhite, + blockToolbarTriggerIcon: colors.almostBlack, + blockToolbarItem: colors.lightBlack, + + quote: colors.almostWhite, + codeBackground: colors.almostBlack, + codeBorder: colors.black50, + embedBorder: colors.black50, + horizontalRule: colors.almostWhite, +}; + +export default light; diff --git a/yarn.lock b/yarn.lock index a726d58ac..daf4fed12 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7038,6 +7038,10 @@ outline-icons@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/outline-icons/-/outline-icons-1.6.0.tgz#6c7897d354e6bd77ca5498cd3a989b8cb9482574" +outline-icons@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/outline-icons/-/outline-icons-1.7.0.tgz#093f2f18c80bf5577bc31a6ff41460f2feb76fb7" + oy-vey@^0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/oy-vey/-/oy-vey-0.10.0.tgz#16160f837f0ea3d0340adfc2377ba93d1ed9ce76" From 0c2d9f2f9c11a99f49d5a6ee1188656664c8c93b Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Tue, 12 Mar 2019 22:11:33 -0700 Subject: [PATCH 072/237] Tweak subheading colors --- app/components/Divider.js | 21 ------------------- .../DocumentHistory/DocumentHistory.js | 2 +- app/components/Subheading.js | 4 ++-- app/components/Tab.js | 4 ++-- app/components/Tabs.js | 2 +- shared/components/TeamLogo.js | 3 +-- shared/styles/theme.js | 2 +- 7 files changed, 8 insertions(+), 30 deletions(-) delete mode 100644 app/components/Divider.js diff --git a/app/components/Divider.js b/app/components/Divider.js deleted file mode 100644 index 6b67bc89b..000000000 --- a/app/components/Divider.js +++ /dev/null @@ -1,21 +0,0 @@ -// @flow -import * as React from 'react'; -import styled from 'styled-components'; -import Flex from 'shared/components/Flex'; - -const Divider = () => { - return ( - - - - ); -}; - -const Content = styled.span` - display: flex; - width: 50%; - margin: 20px 0; - border-bottom: 1px solid #eee; -`; - -export default Divider; diff --git a/app/components/DocumentHistory/DocumentHistory.js b/app/components/DocumentHistory/DocumentHistory.js index 82cd35047..8bb0e23ae 100644 --- a/app/components/DocumentHistory/DocumentHistory.js +++ b/app/components/DocumentHistory/DocumentHistory.js @@ -133,7 +133,7 @@ const Loading = styled.div` const Wrapper = styled(Flex)` min-width: ${props => props.theme.sidebarWidth}; - border-left: 1px solid ${props => props.theme.slateLight}; + border-left: 1px solid ${props => props.theme.divider}; overflow: scroll; overscroll-behavior: none; `; diff --git a/app/components/Subheading.js b/app/components/Subheading.js index 84dad4f85..378365a3a 100644 --- a/app/components/Subheading.js +++ b/app/components/Subheading.js @@ -5,9 +5,9 @@ const Subheading = styled.h3` font-size: 11px; font-weight: 500; text-transform: uppercase; - color: ${props => props.theme.textTertiary}; letter-spacing: 0.04em; - border-bottom: 1px solid ${props => props.theme.textTertiary}; + color: ${props => props.theme.divider}; + border-bottom: 1px solid ${props => props.theme.divider}; padding-bottom: 8px; margin-top: 30px; margin-bottom: 10px; diff --git a/app/components/Tab.js b/app/components/Tab.js index 6b974655d..13ea079e4 100644 --- a/app/components/Tab.js +++ b/app/components/Tab.js @@ -8,7 +8,7 @@ const NavItem = styled(NavLink)` font-size: 11px; font-weight: 500; text-transform: uppercase; - color: ${props => props.theme.textTertiary}; + color: ${props => props.theme.divider}; letter-spacing: 0.04em; margin-right: 24px; padding-bottom: 8px; @@ -21,7 +21,7 @@ const NavItem = styled(NavLink)` function Tab(props: *) { const activeStyle = { paddingBottom: '5px', - borderBottom: `3px solid ${props.theme.textTertiary}`, + borderBottom: `3px solid ${props.theme.divider}`, color: props.theme.textTertiary, }; diff --git a/app/components/Tabs.js b/app/components/Tabs.js index d1c1f239e..1f0860368 100644 --- a/app/components/Tabs.js +++ b/app/components/Tabs.js @@ -2,7 +2,7 @@ import styled from 'styled-components'; const Tabs = styled.nav` - border-bottom: 1px solid ${props => props.theme.textTertiary}; + border-bottom: 1px solid ${props => props.theme.divider}; margin-top: 22px; margin-bottom: 10px; `; diff --git a/shared/components/TeamLogo.js b/shared/components/TeamLogo.js index c6f85bce7..115e8a6ae 100644 --- a/shared/components/TeamLogo.js +++ b/shared/components/TeamLogo.js @@ -1,13 +1,12 @@ // @flow import styled from 'styled-components'; -import { darken } from 'polished'; const TeamLogo = styled.img` width: 38px; height: 38px; border-radius: 4px; background: ${props => props.theme.white}; - border: 1px solid ${props => darken(0.1, props.theme.sidebarBackground)}; + border: 1px solid ${props => props.theme.divider}; `; export default TeamLogo; diff --git a/shared/styles/theme.js b/shared/styles/theme.js index b480663ae..540255b39 100644 --- a/shared/styles/theme.js +++ b/shared/styles/theme.js @@ -110,7 +110,7 @@ export const dark = { menuBackground: lighten(0.015, colors.almostBlack), menuShadow: '0 0 0 1px rgba(0, 0, 0, 0.1), 0 8px 16px rgba(0, 0, 0, 0.3), 0 2px 4px rgba(0, 0, 0, 0.08)', - divider: colors.slate, + divider: darken(0.2, colors.slate), inputBorder: colors.slateDark, inputBorderFocused: colors.slate, From 680a9245bdaffcef20d901d1c9ebe2c7f6110e3f Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Tue, 12 Mar 2019 22:33:24 -0700 Subject: [PATCH 073/237] More text color tweaking --- app/components/Subheading.js | 2 +- app/components/Tab.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/components/Subheading.js b/app/components/Subheading.js index 378365a3a..0339251f4 100644 --- a/app/components/Subheading.js +++ b/app/components/Subheading.js @@ -6,7 +6,7 @@ const Subheading = styled.h3` font-weight: 500; text-transform: uppercase; letter-spacing: 0.04em; - color: ${props => props.theme.divider}; + color: ${props => props.theme.textTertiary}; border-bottom: 1px solid ${props => props.theme.divider}; padding-bottom: 8px; margin-top: 30px; diff --git a/app/components/Tab.js b/app/components/Tab.js index 13ea079e4..ea4abfec2 100644 --- a/app/components/Tab.js +++ b/app/components/Tab.js @@ -8,7 +8,7 @@ const NavItem = styled(NavLink)` font-size: 11px; font-weight: 500; text-transform: uppercase; - color: ${props => props.theme.divider}; + color: ${props => props.theme.textTertiary}; letter-spacing: 0.04em; margin-right: 24px; padding-bottom: 8px; From 7b7ec52eeedf9ed105614f3b64e6c490b85c44e5 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Tue, 12 Mar 2019 23:54:35 -0700 Subject: [PATCH 074/237] Bump production dependencies with open CVEs --- package.json | 6 ++-- server/api/middlewares/cache.js | 6 ++-- yarn.lock | 57 +++++++++++---------------------- 3 files changed, 24 insertions(+), 45 deletions(-) diff --git a/package.json b/package.json index fd2e1fefe..17bca0fbf 100644 --- a/package.json +++ b/package.json @@ -84,7 +84,7 @@ "copy-to-clipboard": "^3.0.6", "css-loader": "^0.28.7", "date-fns": "1.29.0", - "debug": "2.6.9", + "debug": "^4.1.1", "dotenv": "^4.0.0", "emoji-regex": "^6.5.1", "exports-loader": "^0.6.4", @@ -101,7 +101,7 @@ "isomorphic-fetch": "2.2.1", "js-search": "^1.4.2", "json-loader": "0.5.4", - "jsonwebtoken": "7.0.1", + "jsonwebtoken": "^8.5.0", "jszip": "3.1.5", "koa": "^2.2.0", "koa-bodyparser": "4.2.0", @@ -117,7 +117,7 @@ "koa-sendfile": "2.0.0", "koa-sslify": "2.1.2", "koa-static": "^4.0.1", - "lodash": "^4.17.4", + "lodash": "^4.17.11", "mobx": "4.6.0", "mobx-react": "^5.4.2", "natural-sort": "^1.0.0", diff --git a/server/api/middlewares/cache.js b/server/api/middlewares/cache.js index 7caf9dddd..b47008e64 100644 --- a/server/api/middlewares/cache.js +++ b/server/api/middlewares/cache.js @@ -2,7 +2,7 @@ import debug from 'debug'; import { type Context } from 'koa'; -const debugCache = debug('cache'); +const log = debug('cache'); export default function cache() { return async function cacheMiddleware(ctx: Context, next: () => Promise<*>) { @@ -14,9 +14,9 @@ export default function cache() { ctx.cache.get = async (id, def) => { if (ctx.cache[id]) { - debugCache(`hit: ${id}`); + log(`hit: ${id}`); } else { - debugCache(`miss: ${id}`); + log(`miss: ${id}`); ctx.cache.set(id, await def()); } return ctx.cache[id]; diff --git a/yarn.lock b/yarn.lock index daf4fed12..320d4f9f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2553,7 +2553,7 @@ dateformat@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" -debug@*, debug@^4.0.1, debug@^4.1.0: +debug@*, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" dependencies: @@ -4419,10 +4419,6 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - hoist-non-react-statics@^2.5.0: version "2.5.5" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47" @@ -5140,10 +5136,6 @@ isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" -isemail@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/isemail/-/isemail-1.2.0.tgz#be03df8cc3e29de4d2c5df6501263f1fa4595e9a" - isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -5503,15 +5495,6 @@ jmespath@0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.15.0.tgz#a3f222a9aae9f966f5d27c796510e28091764217" -joi@~6.10.1: - version "6.10.1" - resolved "https://registry.yarnpkg.com/joi/-/joi-6.10.1.tgz#4d50c318079122000fe5f16af1ff8e1917b77e06" - dependencies: - hoek "2.x.x" - isemail "1.x.x" - moment "2.x.x" - topo "1.x.x" - js-base64@^2.1.9: version "2.5.1" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" @@ -5669,15 +5652,6 @@ jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" -jsonwebtoken@7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-7.0.1.tgz#4aba9fea3552c8f1d415d4117ab80aa09d6af55e" - dependencies: - joi "~6.10.1" - jws "^3.0.0" - ms "^0.7.1" - xtend "^4.0.1" - jsonwebtoken@8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.3.0.tgz#056c90eee9a65ed6e6c72ddb0a1d325109aaf643" @@ -5692,6 +5666,21 @@ jsonwebtoken@8.3.0: lodash.once "^4.0.0" ms "^2.1.1" +jsonwebtoken@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.0.tgz#ebd0ca2a69797816e1c5af65b6c759787252947e" + dependencies: + jws "^3.2.1" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^5.6.0" + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -5725,7 +5714,7 @@ jwa@^1.2.0: ecdsa-sig-formatter "1.0.11" safe-buffer "^5.0.1" -jws@^3.0.0, jws@^3.1.5: +jws@^3.1.5, jws@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.1.tgz#d79d4216a62c9afa0a3d5e8b5356d75abdeb2be5" dependencies: @@ -6523,7 +6512,7 @@ moment-timezone@^0.5.23, moment-timezone@^0.5.4: dependencies: moment ">= 2.9.0" -moment@2.x.x, "moment@>= 2.9.0", moment@^2.13.0, moment@^2.16.0, moment@^2.17.1: +"moment@>= 2.9.0", moment@^2.13.0, moment@^2.16.0, moment@^2.17.1: version "2.24.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" @@ -6560,10 +6549,6 @@ ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" -ms@^0.7.1: - version "0.7.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.3.tgz#708155a5e44e33f5fd0fc53e81d0d40a91be1fff" - ms@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" @@ -9687,12 +9672,6 @@ toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" -topo@1.x.x: - version "1.1.0" - resolved "https://registry.yarnpkg.com/topo/-/topo-1.1.0.tgz#e9d751615d1bb87dc865db182fa1ca0a5ef536d5" - dependencies: - hoek "2.x.x" - toposort-class@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/toposort-class/-/toposort-class-1.0.1.tgz#7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988" From aba3d2570068eeb514450c64c2039ac1f81dcb75 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Wed, 13 Mar 2019 09:03:51 -0700 Subject: [PATCH 075/237] logger.warn does not exist --- server/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/index.js b/server/index.js index 927245855..d5fd69350 100644 --- a/server/index.js +++ b/server/index.js @@ -91,7 +91,7 @@ if (process.env.NODE_ENV === 'development') { app.on('error', (error, ctx) => { // we don't need to report every time a request stops to the bug tracker if (error.code === 'EPIPE' || error.code === 'ECONNRESET') { - logger.warn('Connection error', { error }); + console.warn('Connection error', { error }); } else { bugsnag.koaHandler(error, ctx); } From 12ea37e71e621fb91d02e16ca4e36d9a2bf692e6 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Wed, 13 Mar 2019 22:45:49 -0700 Subject: [PATCH 076/237] Fixes: Text color on disabled buttons --- app/components/Button.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/Button.js b/app/components/Button.js index b6c596743..b6825c788 100644 --- a/app/components/Button.js +++ b/app/components/Button.js @@ -34,7 +34,7 @@ const RealButton = styled.button` &:disabled { cursor: default; pointer-events: none; - color: ${props => lighten(0.2, props.theme.buttonText)}; + color: ${props => props.theme.textTertiary}; } ${props => From 3ef507c1374fc58ae0156125a3f7040ff1040ef5 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Wed, 13 Mar 2019 22:59:25 -0700 Subject: [PATCH 077/237] Fixes #918 - Add extra at bottom of document --- app/components/ClickablePadding.js | 1 + 1 file changed, 1 insertion(+) diff --git a/app/components/ClickablePadding.js b/app/components/ClickablePadding.js index 7cb739c15..1340338ee 100644 --- a/app/components/ClickablePadding.js +++ b/app/components/ClickablePadding.js @@ -2,6 +2,7 @@ import styled from 'styled-components'; const ClickablePadding = styled.div` + min-height: 6em; cursor: ${({ onClick }) => (onClick ? 'text' : 'default')}; ${({ grow }) => grow && `flex-grow: 100;`}; `; From 3fcfae257fe4e203f6ad76d7a297fbe85435b700 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Wed, 13 Mar 2019 23:00:41 -0700 Subject: [PATCH 078/237] Small flow issues --- app/utils/ApiClient.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/utils/ApiClient.js b/app/utils/ApiClient.js index fef4a73cd..95ef9df57 100644 --- a/app/utils/ApiClient.js +++ b/app/utils/ApiClient.js @@ -101,7 +101,7 @@ class ApiClient { }; // Helpers - constructQueryString = (data: Object) => { + constructQueryString = (data: { [key: string]: string }) => { return map( data, (v, k) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}` From a7d49e9042a62e4cfe503fbf17124d355b5d3da0 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Wed, 13 Mar 2019 23:11:03 -0700 Subject: [PATCH 079/237] Bump production dependencies with open CVEs closes #916 --- package.json | 3 +- yarn.lock | 1342 ++++++++------------------------------------------ 2 files changed, 210 insertions(+), 1135 deletions(-) diff --git a/package.json b/package.json index 17bca0fbf..eb9d61fe6 100644 --- a/package.json +++ b/package.json @@ -106,7 +106,6 @@ "koa": "^2.2.0", "koa-bodyparser": "4.2.0", "koa-compress": "2.0.0", - "koa-connect": "1.0.0", "koa-convert": "1.2.0", "koa-helmet": "3.2.0", "koa-jwt": "^3.2.1", @@ -147,7 +146,7 @@ "rich-markdown-editor": "^9.0.5", "safestart": "1.1.0", "sequelize": "4.28.6", - "sequelize-cli": "^2.7.0", + "sequelize-cli": "^5.4.0", "sequelize-encrypted": "0.1.0", "slug": "^1.0.0", "string-replace-to-array": "^1.0.3", diff --git a/yarn.lock b/yarn.lock index 320d4f9f9..0a8ba00f2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -175,20 +175,13 @@ abort-controller@^2.0.2: dependencies: event-target-shim "^5.0.0" -accepts@^1.3.5, accepts@~1.3.0: +accepts@^1.3.5: version "1.3.5" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" dependencies: mime-types "~2.1.18" negotiator "0.6.1" -accepts@~1.2.12, accepts@~1.2.13: - version "1.2.13" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.2.13.tgz#e5f1f3928c6d95fd96558c36ec3d9d0de4a6ecea" - dependencies: - mime-types "~2.1.6" - negotiator "0.5.3" - acorn-dynamic-import@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" @@ -287,12 +280,6 @@ ansi-escapes@^3.0.0, ansi-escapes@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" -ansi-gray@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" - dependencies: - ansi-wrap "0.1.0" - ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" @@ -319,10 +306,6 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-wrap@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" - any-promise@^1.0.0, any-promise@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" @@ -344,10 +327,6 @@ aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" -archy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - are-we-there-yet@~1.1.2: version "1.1.5" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" @@ -386,14 +365,6 @@ arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" -array-differ@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" - -array-each@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-each/-/array-each-1.0.1.tgz#a794af0c05ab1752846ee753a1f211a05ba0c44f" - array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" @@ -405,18 +376,10 @@ array-includes@^3.0.3: define-properties "^1.1.2" es-abstract "^1.7.0" -array-slice@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-1.1.0.tgz#e368ea15f89bc7069f7ffb89aec3a6c7d4ac22d4" - array-uniq@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.2.tgz#5fcc373920775723cfd64d65c64bef53bf9eba6d" -array-uniq@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" @@ -1185,7 +1148,7 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@^6.1.18, babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-runtime@^6.1.18, babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.23.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: @@ -1245,10 +1208,6 @@ base64-js@^1.0.2: version "1.3.0" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" -base64-url@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/base64-url/-/base64-url-1.2.1.tgz#199fd661702a0e7b7dcae6e0698bb089c52f6d78" - base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -1261,28 +1220,12 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" -basic-auth-connect@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/basic-auth-connect/-/basic-auth-connect-1.0.0.tgz#fdb0b43962ca7b40456a7c2bb48fe173da2d2122" - -basic-auth@~1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.0.4.tgz#030935b01de7c9b94a824b29f3fccb750d3a5290" - -batch@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/batch/-/batch-0.5.3.tgz#3f3414f380321743bfc1042f9a83ff1d5824d464" - bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" dependencies: tweetnacl "^0.14.3" -beeper@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" - before-after-hook@^1.1.0: version "1.3.2" resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.3.2.tgz#7bfbf844ad670aa7a96b5a4e4e15bd74b08ed66b" @@ -1310,7 +1253,7 @@ binary@~0.3.0: buffers "~0.1.1" chainsaw "~0.1.0" -bluebird@^3.3.5, bluebird@^3.4.1, bluebird@^3.4.6, bluebird@^3.5.0, bluebird@^3.5.1: +bluebird@^3.3.5, bluebird@^3.4.6, bluebird@^3.5.1, bluebird@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.3.tgz#7d01c6f9616c9a51ab0f8c549a79dfe6ec33efa7" @@ -1322,21 +1265,6 @@ bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" -body-parser@~1.13.3: - version "1.13.3" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.13.3.tgz#c08cf330c3358e151016a05746f13f029c97fa97" - dependencies: - bytes "2.1.0" - content-type "~1.0.1" - debug "~2.2.0" - depd "~1.0.1" - http-errors "~1.3.1" - iconv-lite "0.4.11" - on-finished "~2.3.0" - qs "4.0.0" - raw-body "~2.1.2" - type-is "~1.6.6" - boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -1397,7 +1325,7 @@ boxen@^1.2.1: term-size "^1.2.0" widest-line "^2.0.0" -brace-expansion@^1.0.0, brace-expansion@^1.1.7: +brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" dependencies: @@ -1590,14 +1518,6 @@ bytes@1: version "1.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" -bytes@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.1.0.tgz#ac93c410e2ffc9cc7cf4b464b38289067f5e47b4" - -bytes@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" - bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -1672,6 +1592,10 @@ camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" +camelcase@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.2.0.tgz#e7522abda5ed94cc0489e1b8466610e88404cf45" + camelize@1.0.0, camelize@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" @@ -1728,7 +1652,7 @@ chainsaw@~0.1.0: dependencies: traverse ">=0.3.0 <0.4" -chalk@^1.0.0, chalk@^1.1.3: +chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -1862,16 +1786,16 @@ cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" -cli-color@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.2.0.tgz#3a5ae74fd76b6267af666e69e2afbbd01def34d1" +cli-color@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cli-color/-/cli-color-1.4.0.tgz#7d10738f48526824f8fe7da51857cb0f572fe01f" dependencies: ansi-regex "^2.1.1" d "1" - es5-ext "^0.10.12" - es6-iterator "2" - memoizee "^0.4.3" - timers-ext "0.1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + memoizee "^0.4.14" + timers-ext "^0.1.5" cli-cursor@^2.1.0: version "2.1.0" @@ -1919,19 +1843,11 @@ clone-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" -clone-stats@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" - clone-stats@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" -clone@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" - -clone@^1.0.0, clone@^1.0.2: +clone@^1.0.2: version "1.0.4" resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" @@ -2012,10 +1928,6 @@ color-string@^0.3.0: dependencies: color-name "^1.0.0" -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - color@^0.11.0: version "0.11.4" resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" @@ -2078,23 +1990,12 @@ component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" -compressible@^2.0.0, compressible@~2.0.5: +compressible@^2.0.0: version "2.0.16" resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.16.tgz#a49bf9858f3821b64ce1be0296afc7380466a77f" dependencies: mime-db ">= 1.38.0 < 2" -compression@~1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.5.2.tgz#b03b8d86e6f8ad29683cba8df91ddc6ffc77b395" - dependencies: - accepts "~1.2.12" - bytes "2.1.0" - compressible "~2.0.5" - debug "~2.2.0" - on-headers "~1.0.0" - vary "~1.0.1" - computed-style@~0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/computed-style/-/computed-style-0.1.4.tgz#7f344fd8584b2e425bedca4a1afc0e300bb05d74" @@ -2134,51 +2035,6 @@ confusing-browser-globals@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.5.tgz#0171050cfdd4261e278978078bc00c4d88e135f4" -connect-timeout@~1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/connect-timeout/-/connect-timeout-1.6.2.tgz#de9a5ec61e33a12b6edaab7b5f062e98c599b88e" - dependencies: - debug "~2.2.0" - http-errors "~1.3.1" - ms "0.7.1" - on-headers "~1.0.0" - -connect@^2.25.7: - version "2.30.2" - resolved "https://registry.yarnpkg.com/connect/-/connect-2.30.2.tgz#8da9bcbe8a054d3d318d74dfec903b5c39a1b609" - dependencies: - basic-auth-connect "1.0.0" - body-parser "~1.13.3" - bytes "2.1.0" - compression "~1.5.2" - connect-timeout "~1.6.2" - content-type "~1.0.1" - cookie "0.1.3" - cookie-parser "~1.3.5" - cookie-signature "1.0.6" - csurf "~1.8.3" - debug "~2.2.0" - depd "~1.0.1" - errorhandler "~1.4.2" - express-session "~1.11.3" - finalhandler "0.4.0" - fresh "0.3.0" - http-errors "~1.3.1" - method-override "~2.3.5" - morgan "~1.6.1" - multiparty "3.3.2" - on-headers "~1.0.0" - parseurl "~1.3.0" - pause "0.1.0" - qs "4.0.0" - response-time "~2.3.1" - serve-favicon "~2.3.0" - serve-index "~1.7.2" - serve-static "~1.10.0" - type-is "~1.6.6" - utils-merge "1.0.0" - vhost "~3.0.1" - console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" @@ -2218,7 +2074,7 @@ content-security-policy-builder@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/content-security-policy-builder/-/content-security-policy-builder-2.0.0.tgz#8749a1d542fcbe82237281ea9f716ce68b394dd2" -content-type@^1.0.4, content-type@~1.0.1: +content-type@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" @@ -2228,21 +2084,6 @@ convert-source-map@^1.4.0, convert-source-map@^1.5.1: dependencies: safe-buffer "~5.1.1" -cookie-parser@~1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.3.5.tgz#9d755570fb5d17890771227a02314d9be7cf8356" - dependencies: - cookie "0.1.3" - cookie-signature "1.0.6" - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - -cookie@0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.1.3.tgz#e734a5c1417fce472d5aef82c381cabb64d1a435" - cookies@~0.7.1: version "0.7.3" resolved "https://registry.yarnpkg.com/cookies/-/cookies-0.7.3.tgz#7912ce21fbf2e8c2da70cf1c3f351aecf59dadfa" @@ -2287,10 +2128,6 @@ core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" -crc@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/crc/-/crc-3.3.0.tgz#fa622e1bc388bf257309082d6b65200ce67090ba" - create-ecdh@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" @@ -2374,14 +2211,6 @@ crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" -csrf@~3.0.0: - version "3.0.6" - resolved "https://registry.yarnpkg.com/csrf/-/csrf-3.0.6.tgz#b61120ddceeafc91e76ed5313bb5c0b2667b710a" - dependencies: - rndm "1.2.0" - tsscmp "1.0.5" - uid-safe "2.1.4" - css-color-keywords@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" @@ -2496,15 +2325,6 @@ cssstyle@^1.0.0: dependencies: cssom "0.3.x" -csurf@~1.8.3: - version "1.8.3" - resolved "https://registry.yarnpkg.com/csurf/-/csurf-1.8.3.tgz#23f2a13bf1d8fce1d0c996588394442cba86a56a" - dependencies: - cookie "0.1.3" - cookie-signature "1.0.6" - csrf "~3.0.0" - http-errors "~1.3.1" - cyclist@~0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" @@ -2549,45 +2369,35 @@ date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -dateformat@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" - debug@*, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" dependencies: ms "^2.1.1" -debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.1, debug@^2.6.3, debug@^2.6.8, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - dependencies: - ms "2.0.0" - debug@3.1.0, debug@~3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" +debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.1, debug@^2.6.3, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + debug@^3.0.0, debug@^3.1.0, debug@^3.2.6: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" dependencies: ms "^2.1.1" -debug@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" - dependencies: - ms "0.7.1" - debuglog@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: +decamelize@^1.0.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" @@ -2619,12 +2429,6 @@ default-require-extensions@^1.0.0: dependencies: strip-bom "^2.0.0" -defaults@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" - dependencies: - clone "^1.0.2" - define-properties@^1.1.1, define-properties@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -2674,18 +2478,10 @@ depd@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" -depd@^1.1.0, depd@^1.1.2, depd@~1.1.0, depd@~1.1.2: +depd@^1.1.0, depd@^1.1.2, depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" -depd@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.0.1.tgz#80aec64c9d6d97e65cc2a9caa93c0aa6abf73aaa" - -deprecated@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19" - des.js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" @@ -2693,20 +2489,10 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" -destroy@^1.0.4, destroy@~1.0.4: +destroy@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" -detect-file@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63" - dependencies: - fs-exists-sync "^0.1.0" - -detect-file@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" - detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" @@ -2843,12 +2629,6 @@ double-ended-queue@^2.1.0-0: version "2.1.0-0" resolved "https://registry.yarnpkg.com/double-ended-queue/-/double-ended-queue-2.1.0-0.tgz#103d3527fd31528f40188130c841efdd78264e5c" -duplexer2@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" - dependencies: - readable-stream "~1.1.9" - duplexer2@~0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" @@ -2940,12 +2720,6 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -end-of-stream@~0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf" - dependencies: - once "~1.3.0" - ends-with@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/ends-with/-/ends-with-0.2.0.tgz#2f9da98d57a50cfda4571ce4339000500f4e6b8a" @@ -2985,13 +2759,6 @@ error-stack-parser@^1.3.6: dependencies: stackframe "^0.3.1" -errorhandler@~1.4.2: - version "1.4.3" - resolved "https://registry.yarnpkg.com/errorhandler/-/errorhandler-1.4.3.tgz#b7b70ed8f359e9db88092f2d20c0f831420ad83f" - dependencies: - accepts "~1.3.0" - escape-html "~1.0.3" - es-abstract@^1.11.0, es-abstract@^1.5.1, es-abstract@^1.7.0, es-abstract@^1.9.0: version "1.13.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" @@ -3011,7 +2778,7 @@ es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.12, es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: +es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@^0.10.9, es5-ext@~0.10.14, es5-ext@~0.10.2, es5-ext@~0.10.46: version "0.10.48" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.48.tgz#9a0b31eeded39e64453bcedf6f9d50bbbfb43850" dependencies: @@ -3019,7 +2786,15 @@ es5-ext@^0.10.12, es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.45, es5-ext@ es6-symbol "~3.1.1" next-tick "1" -es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: +es5-ext@^0.10.46: + version "0.10.49" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.49.tgz#059a239de862c94494fec28f8150c977028c6c5e" + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.1" + next-tick "^1.0.0" + +es6-iterator@^2.0.1, es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" dependencies: @@ -3078,11 +2853,7 @@ es6-weak-map@^2.0.1, es6-weak-map@^2.0.2: es6-iterator "^2.0.1" es6-symbol "^3.1.1" -escape-html@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.2.tgz#d77d32fa98e38c2f41ae85e9278e0e0e6ba1022c" - -escape-html@^1.0.3, escape-html@~1.0.3: +escape-html@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -3294,10 +3065,6 @@ etag@^1.5.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" -etag@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.7.0.tgz#03d30b5f67dd6e632d2945d30d6652731a34d5d8" - event-emitter@^0.3.5, event-emitter@~0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" @@ -3354,6 +3121,18 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + exenv@^1.2.0, exenv@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" @@ -3386,18 +3165,6 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -expand-tilde@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449" - dependencies: - os-homedir "^1.0.1" - -expand-tilde@^2.0.0, expand-tilde@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" - dependencies: - homedir-polyfill "^1.0.1" - expect-ct@0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/expect-ct/-/expect-ct-0.1.1.tgz#de84476a2dbcb85000d5903737e9bc8a5ba7b897" @@ -3420,20 +3187,6 @@ exports-loader@^0.6.4: loader-utils "^1.0.2" source-map "0.5.x" -express-session@~1.11.3: - version "1.11.3" - resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.11.3.tgz#5cc98f3f5ff84ed835f91cbf0aabd0c7107400af" - dependencies: - cookie "0.1.3" - cookie-signature "1.0.6" - crc "3.3.0" - debug "~2.2.0" - depd "~1.0.1" - on-headers "~1.0.0" - parseurl "~1.3.0" - uid-safe "~2.0.0" - utils-merge "1.0.0" - extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -3495,15 +3248,6 @@ extsprintf@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" -fancy-log@^1.1.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" - dependencies: - ansi-gray "^0.1.1" - color-support "^1.1.3" - parse-node-version "^1.0.0" - time-stamp "^1.0.0" - fast-deep-equal@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" @@ -3594,15 +3338,6 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -finalhandler@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.4.0.tgz#965a52d9e8d05d2b857548541fb89b53a2497d9b" - dependencies: - debug "~2.2.0" - escape-html "1.0.2" - on-finished "~2.3.0" - unpipe "~1.0.0" - find-cache-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" @@ -3611,10 +3346,6 @@ find-cache-dir@^1.0.0: make-dir "^1.0.0" pkg-dir "^2.0.0" -find-index@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4" - find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -3628,41 +3359,11 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" -findup-sync@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-1.0.0.tgz#6f7e4b57b6ee3a4037b4414eaedea3f58f71e0ec" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" dependencies: - detect-file "^0.1.0" - is-glob "^2.0.1" - micromatch "^2.3.7" - resolve-dir "^0.1.0" - -findup-sync@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" - dependencies: - detect-file "^1.0.0" - is-glob "^3.1.0" - micromatch "^3.0.4" - resolve-dir "^1.0.1" - -fined@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/fined/-/fined-1.1.1.tgz#95d88ff329123dd1a6950fdfcd321f746271e01f" - dependencies: - expand-tilde "^2.0.2" - is-plain-object "^2.0.3" - object.defaults "^1.1.0" - object.pick "^1.2.0" - parse-filepath "^1.0.1" - -first-chunk-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" - -flagged-respawn@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-1.0.1.tgz#e7de6f1279ddd9ca9aac8a5971d618606b3aab41" + locate-path "^3.0.0" flat-cache@^2.0.1: version "2.0.1" @@ -3731,12 +3432,6 @@ 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" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -3759,10 +3454,6 @@ frameguard@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/frameguard/-/frameguard-3.0.0.tgz#7bcad469ee7b96e91d12ceb3959c78235a9272e9" -fresh@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.3.0.tgz#651f838e22424e7566de161d8358caa199f83d4f" - fresh@~0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -3774,10 +3465,6 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-exists-sync@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" - fs-extra@^0.30.0: version "0.30.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" @@ -3796,7 +3483,7 @@ fs-extra@^3.0.1: jsonfile "^3.0.0" universalify "^0.1.0" -fs-extra@^4.0.1, fs-extra@^4.0.2: +fs-extra@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" dependencies: @@ -3812,6 +3499,14 @@ fs-extra@^5.0.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + fs-minipass@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" @@ -3877,12 +3572,6 @@ gaxios@^1.0.4: https-proxy-agent "^2.2.1" node-fetch "^2.3.0" -gaze@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f" - dependencies: - globule "~0.1.0" - gcp-metadata@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-0.6.3.tgz#4550c08859c528b370459bd77a7187ea0bdbc4ab" @@ -3915,6 +3604,12 @@ get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + dependencies: + pump "^3.0.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -3951,38 +3646,6 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-stream@^3.1.5: - version "3.1.18" - resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b" - dependencies: - glob "^4.3.1" - glob2base "^0.0.12" - minimatch "^2.0.1" - ordered-read-streams "^0.1.0" - through2 "^0.6.1" - unique-stream "^1.0.0" - -glob-watcher@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b" - dependencies: - gaze "^0.5.1" - -glob2base@^0.0.12: - version "0.0.12" - resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56" - dependencies: - find-index "^0.1.1" - -glob@^4.3.1: - version "4.5.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f" - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "^2.0.1" - once "^1.3.0" - glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" @@ -3994,54 +3657,12 @@ glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3: once "^1.3.0" path-is-absolute "^1.0.0" -glob@~3.1.21: - version "3.1.21" - resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd" - dependencies: - graceful-fs "~1.2.0" - inherits "1" - minimatch "~0.2.11" - global-dirs@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" dependencies: ini "^1.3.4" -global-modules@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d" - dependencies: - global-prefix "^0.1.4" - is-windows "^0.2.0" - -global-modules@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" - dependencies: - global-prefix "^1.0.1" - is-windows "^1.0.1" - resolve-dir "^1.0.0" - -global-prefix@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f" - dependencies: - homedir-polyfill "^1.0.0" - ini "^1.3.4" - is-windows "^0.2.0" - which "^1.2.12" - -global-prefix@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" - dependencies: - expand-tilde "^2.0.2" - homedir-polyfill "^1.0.1" - ini "^1.3.4" - is-windows "^1.0.1" - which "^1.2.14" - global@^4.3.0: version "4.3.2" resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" @@ -4057,20 +3678,6 @@ globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" -globule@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5" - dependencies: - glob "~3.1.21" - lodash "~1.0.1" - minimatch "~0.2.11" - -glogg@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.2.tgz#2d7dd702beda22eb3bffadf880696da6d846313f" - dependencies: - sparkles "^1.0.0" - golery-slate-prism@0.6.0-golery.2: version "0.6.0-golery.2" resolved "https://registry.yarnpkg.com/golery-slate-prism/-/golery-slate-prism-0.6.0-golery.2.tgz#d56ae8f2dc8056c752da18cb06298dbf84a3d1b4" @@ -4143,20 +3750,10 @@ got@^7.1.0: url-parse-lax "^1.0.0" url-to-options "^1.0.1" -graceful-fs@^3.0.0: - version "3.0.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" - dependencies: - natives "^1.1.0" - graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" -graceful-fs@~1.2.0: - version "1.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364" - "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" @@ -4175,60 +3772,6 @@ gtoken@^2.3.0: mime "^2.2.0" pify "^4.0.0" -gulp-help@~1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/gulp-help/-/gulp-help-1.6.1.tgz#261db186e18397fef3f6a2c22e9c315bfa88ae0c" - dependencies: - chalk "^1.0.0" - object-assign "^3.0.0" - -gulp-util@^3.0.0: - version "3.0.8" - resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" - dependencies: - array-differ "^1.0.0" - array-uniq "^1.0.2" - beeper "^1.0.0" - chalk "^1.0.0" - dateformat "^2.0.0" - fancy-log "^1.1.0" - gulplog "^1.0.0" - has-gulplog "^0.1.0" - lodash._reescape "^3.0.0" - lodash._reevaluate "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.template "^3.0.0" - minimist "^1.1.0" - multipipe "^0.1.2" - object-assign "^3.0.0" - replace-ext "0.0.1" - through2 "^2.0.0" - vinyl "^0.5.0" - -gulp@^3.9.1: - version "3.9.1" - resolved "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz#571ce45928dd40af6514fc4011866016c13845b4" - dependencies: - archy "^1.0.0" - chalk "^1.0.0" - deprecated "^0.0.1" - gulp-util "^3.0.0" - interpret "^1.0.0" - liftoff "^2.1.0" - minimist "^1.1.0" - orchestrator "^0.3.0" - pretty-hrtime "^1.0.0" - semver "^4.1.0" - tildify "^1.0.0" - v8flags "^2.0.2" - vinyl-fs "^0.3.0" - -gulplog@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" - dependencies: - glogg "^1.0.0" - gzip-size@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-3.0.0.tgz#546188e9bdc337f673772f81660464b389dce520" @@ -4278,12 +3821,6 @@ has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" -has-gulplog@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" - dependencies: - sparkles "^1.0.0" - has-symbol-support-x@^1.4.1: version "1.4.2" resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" @@ -4436,12 +3973,6 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" -homedir-polyfill@^1.0.0, homedir-polyfill@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" - dependencies: - parse-passwd "^1.0.0" - hosted-git-info@^2.1.4: version "2.7.1" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" @@ -4535,13 +4066,6 @@ http-errors@^1.3.1, http-errors@^1.6.1, http-errors@^1.6.3, http-errors@~1.7.1: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-errors@~1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.3.1.tgz#197e22cdebd4198585e8694ef6786197b91ed942" - dependencies: - inherits "~2.0.1" - statuses "1" - http-proxy-agent@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" @@ -4572,14 +4096,6 @@ humanize-number@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/humanize-number/-/humanize-number-0.0.2.tgz#11c0af6a471643633588588048f1799541489c18" -iconv-lite@0.4.11: - version "0.4.11" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.11.tgz#2ecb42fd294744922209a2e7c404dac8793d8ade" - -iconv-lite@0.4.13: - version "0.4.13" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2" - iconv-lite@0.4.23: version "0.4.23" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" @@ -4710,10 +4226,6 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" - inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -4758,6 +4270,10 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + ioredis@^4.5.1: version "4.6.2" resolved "https://registry.yarnpkg.com/ioredis/-/ioredis-4.6.2.tgz#840847117fe0190a9309085847311a07183fc385" @@ -4777,13 +4293,6 @@ is-absolute-url@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" -is-absolute@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" - dependencies: - is-relative "^1.0.0" - is-windows "^1.0.1" - is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -5054,12 +4563,6 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" -is-relative@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" - dependencies: - is-unc-path "^1.0.0" - is-retry-allowed@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" @@ -5084,12 +4587,6 @@ is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" -is-unc-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" - dependencies: - unc-path-regex "^0.1.2" - is-upper-case@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f" @@ -5112,11 +4609,7 @@ is-window@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-window/-/is-window-1.0.2.tgz#2c896ca53db97de45d3c33133a65d8c9f563480d" -is-windows@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" - -is-windows@^1.0.1, is-windows@^1.0.2: +is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" @@ -5499,7 +4992,7 @@ js-base64@^2.1.9: version "2.5.1" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" -js-beautify@^1.6.11: +js-beautify@^1.8.8: version "1.9.0" resolved "https://registry.yarnpkg.com/js-beautify/-/js-beautify-1.9.0.tgz#2562fcdee340f9f962ae2ec4a8a40e7aaa6d964f" dependencies: @@ -5777,12 +5270,6 @@ koa-compress@2.0.0: koa-is-json "^1.0.0" statuses "^1.0.0" -koa-connect@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/koa-connect/-/koa-connect-1.0.0.tgz#0aecf10df15f32526ad15815115cb3d40aece705" - dependencies: - connect "^2.25.7" - koa-convert@1.2.0, koa-convert@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/koa-convert/-/koa-convert-1.2.0.tgz#da40875df49de0539098d1700b50820cebcd21d0" @@ -5930,6 +5417,12 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + dependencies: + invert-kv "^2.0.0" + left-pad@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" @@ -5951,19 +5444,6 @@ lie@~3.1.0: dependencies: immediate "~3.0.5" -liftoff@^2.1.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.5.0.tgz#2009291bb31cea861bbf10a7c15a28caf75c31ec" - dependencies: - extend "^3.0.0" - findup-sync "^2.0.0" - fined "^1.0.1" - flagged-respawn "^1.0.0" - is-plain-object "^2.0.4" - object.map "^1.0.0" - rechoir "^0.6.2" - resolve "^1.1.7" - line-height@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/line-height/-/line-height-0.3.1.tgz#4b1205edde182872a5efa3c8f620b3187a9c54c9" @@ -6021,41 +5501,12 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - -lodash._basetostring@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" - -lodash._basevalues@^3.0.0: +locate-path@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - -lodash._reescape@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" - -lodash._reevaluate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" - -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - -lodash._root@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" lodash.assign@^4.0.3, lodash.assign@^4.0.6: version "4.2.0" @@ -6069,12 +5520,6 @@ lodash.defaults@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" -lodash.escape@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" - dependencies: - lodash._root "^3.0.0" - lodash.flatten@^4.2.0, lodash.flatten@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" @@ -6083,14 +5528,6 @@ lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - lodash.isboolean@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" @@ -6111,14 +5548,6 @@ 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: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -6127,47 +5556,18 @@ lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" -lodash.restparam@^3.0.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" -lodash.template@^3.0.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" - dependencies: - lodash._basecopy "^3.0.0" - lodash._basetostring "^3.0.0" - lodash._basevalues "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.escape "^3.0.0" - lodash.keys "^3.0.0" - lodash.restparam "^3.0.0" - lodash.templatesettings "^3.0.0" - -lodash.templatesettings@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.escape "^3.0.0" - lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -"lodash@>=3.5 <5", lodash@^4.1.1, lodash@^4.11.1, lodash@^4.17.0, lodash@^4.17.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.6.1: +"lodash@>=3.5 <5", lodash@^4.1.1, lodash@^4.11.1, lodash@^4.17.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.6.1: version "4.17.11" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" -lodash@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551" - longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" @@ -6192,10 +5592,6 @@ lowercase-keys@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" -lru-cache@2: - version "2.7.3" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" - lru-cache@^4.0.1, lru-cache@^4.1.1, lru-cache@^4.1.3: version "4.1.5" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" @@ -6219,19 +5615,19 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" -make-iterator@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/make-iterator/-/make-iterator-1.0.1.tgz#29b33f312aa8f547c4a5e490f56afcec99133ad6" - dependencies: - kind-of "^6.0.2" - makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" dependencies: tmpl "1.0.x" -map-cache@^0.2.0, map-cache@^0.2.2: +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -6285,11 +5681,19 @@ mem@^1.1.0: dependencies: mimic-fn "^1.0.0" +mem@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.2.0.tgz#5ee057680ed9cb8dad8a78d820f9a8897a102025" + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + memoize-one@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-4.1.0.tgz#a2387c58c03fff27ca390c31b764a79addf3f906" -memoizee@^0.4.3: +memoizee@^0.4.14: version "0.4.14" resolved "https://registry.yarnpkg.com/memoizee/-/memoizee-0.4.14.tgz#07a00f204699f9a95c2d9e77218271c7cd610d57" dependencies: @@ -6319,20 +5723,11 @@ merge@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.1.tgz#38bebf80c3220a8a487b6fcfb3941bb11720c145" -method-override@~2.3.5: - version "2.3.10" - resolved "https://registry.yarnpkg.com/method-override/-/method-override-2.3.10.tgz#e3daf8d5dee10dd2dce7d4ae88d62bbee77476b4" - dependencies: - debug "2.6.9" - methods "~1.1.2" - parseurl "~1.3.2" - vary "~1.1.2" - -methods@^1.0.1, methods@~1.1.2: +methods@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" -micromatch@^2.3.11, micromatch@^2.3.7: +micromatch@^2.3.11: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: @@ -6350,7 +5745,7 @@ micromatch@^2.3.11, micromatch@^2.3.7: parse-glob "^3.0.4" regex-cache "^0.4.2" -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: +micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" dependencies: @@ -6379,16 +5774,12 @@ miller-rabin@^4.0.0: version "1.38.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad" -mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.18, mime-types@~2.1.19, mime-types@~2.1.6, mime-types@~2.1.9: +mime-types@^2.1.12, mime-types@^2.1.18, mime-types@~2.1.18, mime-types@~2.1.19: version "2.1.22" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd" dependencies: mime-db "~1.38.0" -mime@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53" - mime@^1.4.1, mime@^1.5.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -6401,6 +5792,10 @@ mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" +mimic-fn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.0.0.tgz#0913ff0b121db44ef5848242c38bbb35d44cabde" + mimic-response@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" @@ -6419,30 +5814,17 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" -minimatch@^2.0.1: - version "2.0.10" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" - dependencies: - brace-expansion "^1.0.0" - minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: brace-expansion "^1.1.7" -minimatch@~0.2.11: - version "0.2.14" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a" - dependencies: - lru-cache "2" - sigmund "~1.0.0" - minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: +minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -6512,20 +5894,10 @@ moment-timezone@^0.5.23, moment-timezone@^0.5.4: dependencies: moment ">= 2.9.0" -"moment@>= 2.9.0", moment@^2.13.0, moment@^2.16.0, moment@^2.17.1: +"moment@>= 2.9.0", moment@^2.13.0: version "2.24.0" resolved "https://registry.yarnpkg.com/moment/-/moment-2.24.0.tgz#0d055d53f5052aa653c9f6eb68bb5d12bf5c2b5b" -morgan@~1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.6.1.tgz#5fd818398c6819cba28a7cd6664f292fe1c0bbf2" - dependencies: - basic-auth "~1.0.3" - debug "~2.2.0" - depd "~1.0.1" - on-finished "~2.3.0" - on-headers "~1.0.0" - move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -6537,14 +5909,6 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" -ms@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" - -ms@0.7.2: - version "0.7.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -6553,19 +5917,6 @@ ms@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" -multiparty@3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/multiparty/-/multiparty-3.3.2.tgz#35de6804dc19643e5249f3d3e3bdc6c8ce301d3f" - dependencies: - readable-stream "~1.1.9" - stream-counter "~0.2.0" - -multipipe@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" - dependencies: - duplexer2 "0.0.2" - mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" @@ -6598,10 +5949,6 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -natives@^1.1.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz#a603b4a498ab77173612b9ea1acdec4d980f00bb" - natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -6624,10 +5971,6 @@ needle@^2.2.1: iconv-lite "^0.4.4" sax "^1.2.4" -negotiator@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.5.3.tgz#269d5c476810ec92edbe7b6c2f28316384f9a7e8" - negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" @@ -6636,7 +5979,7 @@ neo-async@^2.5.0: version "2.6.0" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" -next-tick@1: +next-tick@1, next-tick@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" @@ -6846,10 +6189,6 @@ object-assign@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.0.tgz#7a3b3d0e98063d43f4c03f2e8ae6cd51a86883a0" -object-assign@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" - object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -6872,15 +6211,6 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.defaults@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/object.defaults/-/object.defaults-1.1.0.tgz#3a7f868334b407dea06da16d88d5cd29e435fecf" - dependencies: - array-each "^1.0.1" - array-slice "^1.0.0" - for-own "^1.0.0" - isobject "^3.0.0" - object.fromentries@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.0.tgz#49a543d92151f8277b3ac9600f1e930b189d30ab" @@ -6897,13 +6227,6 @@ object.getownpropertydescriptors@^2.0.3: define-properties "^1.1.2" es-abstract "^1.5.1" -object.map@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.map/-/object.map-1.0.1.tgz#cf83e59dc8fcc0ad5f4250e1f78b3b81bd801d37" - dependencies: - for-own "^1.0.0" - make-iterator "^1.0.0" - object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -6911,34 +6234,24 @@ object.omit@^2.0.0: for-own "^0.1.4" is-extendable "^0.1.1" -object.pick@^1.2.0, object.pick@^1.3.0: +object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" dependencies: isobject "^3.0.1" -on-finished@^2.3.0, on-finished@~2.3.0: +on-finished@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" dependencies: ee-first "1.1.1" -on-headers@~1.0.0, on-headers@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: wrappy "1" -once@~1.3.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20" - dependencies: - wrappy "1" - onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" @@ -6967,23 +6280,11 @@ optionator@^0.8.1, optionator@^0.8.2: type-check "~0.3.2" wordwrap "~1.0.0" -orchestrator@^0.3.0: - version "0.3.8" - resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e" - dependencies: - end-of-stream "~0.1.5" - sequencify "~0.0.7" - stream-consume "~0.1.0" - -ordered-read-streams@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126" - os-browserify@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" -os-homedir@^1.0.0, os-homedir@^1.0.1: +os-homedir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" @@ -7001,6 +6302,14 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" +os-locale@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + os-name@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.0.0.tgz#e1434dbfddb8e74b44c98b56797d951b7648a5d9" @@ -7045,22 +6354,42 @@ p-cancelable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" +p-is-promise@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.0.0.tgz#7554e3d572109a87e1f3f53f6a7d85d1b194f4c5" + p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" dependencies: p-try "^1.0.0" +p-limit@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" dependencies: p-limit "^1.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + dependencies: + p-limit "^2.0.0" + p-some@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/p-some/-/p-some-2.0.1.tgz#65d87c8b154edbcf5221d167778b6d2e150f6f06" @@ -7083,6 +6412,10 @@ p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" +p-try@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" + package-json@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" @@ -7142,14 +6475,6 @@ parse-entities@^1.1.0: is-decimal "^1.0.0" is-hexadecimal "^1.0.0" -parse-filepath@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" - dependencies: - is-absolute "^1.0.0" - map-cache "^0.2.0" - path-root "^0.1.1" - parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -7165,19 +6490,11 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" -parse-node-version@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b" - -parse-passwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" - parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" -parseurl@^1.3.2, parseurl@~1.3.0, parseurl@~1.3.1, parseurl@~1.3.2: +parseurl@^1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" @@ -7236,16 +6553,6 @@ path-parse@^1.0.5, path-parse@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" -path-root-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" - -path-root@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" - dependencies: - path-root-regex "^0.1.0" - path-to-regexp@^1.1.1, path-to-regexp@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" @@ -7266,10 +6573,6 @@ path-type@^2.0.0: dependencies: pify "^2.0.0" -pause@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/pause/-/pause-0.1.0.tgz#ebc8a4a8619ff0b8a81ac1513c3434ff469fdb74" - pbkdf2@^3.0.3: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" @@ -7671,10 +6974,6 @@ pretty-format@^22.4.0, pretty-format@^22.4.3: ansi-regex "^3.0.0" ansi-styles "^3.2.0" -pretty-hrtime@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" - prismjs@^1.15.0: version "1.15.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.15.0.tgz#8801d332e472091ba8def94976c8877ad60398d9" @@ -7782,6 +7081,13 @@ pump@^2.0.0, pump@^2.0.1: end-of-stream "^1.1.0" once "^1.3.1" +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + pumpify@^1.3.3: version "1.5.1" resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" @@ -7806,10 +7112,6 @@ q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" -qs@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-4.0.0.tgz#c31d9b74ec27df75e543a86c78728ed8d4623607" - qs@^6.4.0: version "6.6.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.6.0.tgz#a99c0f69a8d26bf7ef012f871cdabb0aee4424c2" @@ -7833,10 +7135,6 @@ querystring@0.2.0, querystring@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" -random-bytes@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" - randomatic@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" @@ -7868,10 +7166,6 @@ range-parser@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" -range-parser@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.0.3.tgz#6872823535c692e2c2a0103826afd82c2e0ff175" - raw-body@^2.2.0: version "2.3.3" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.3.tgz#1b324ece6b5706e153855bc1148c65bb7f6ea0c3" @@ -7881,14 +7175,6 @@ raw-body@^2.2.0: iconv-lite "0.4.23" unpipe "1.0.0" -raw-body@~2.1.2: - version "2.1.7" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.1.7.tgz#adfeace2e4fb3098058014d08c072dcc59758774" - dependencies: - bytes "2.4.0" - iconv-lite "0.4.13" - unpipe "1.0.0" - raw-loader@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" @@ -8103,15 +7389,6 @@ read-pkg@^2.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@>=1.0.33-1 <1.1.0-0": - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readable-stream@^3.1.1: version "3.2.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.2.0.tgz#de17f229864c120a9f56945756e4f32c4045245d" @@ -8120,15 +7397,6 @@ readable-stream@^3.1.1: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~1.1.8, readable-stream@~1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readable-stream@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" @@ -8166,12 +7434,6 @@ realpath-native@^1.0.0: dependencies: util.promisify "^1.0.0" -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - dependencies: - resolve "^1.1.6" - redbox-react@^1.2.2: version "1.6.0" resolved "https://registry.yarnpkg.com/redbox-react/-/redbox-react-1.6.0.tgz#e753ac02595bc1bf695b3935889a4f5b1b5a21a1" @@ -8181,10 +7443,6 @@ redbox-react@^1.2.2: prop-types "^15.5.4" sourcemapped-stacktrace "^1.1.6" -redefine@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/redefine/-/redefine-0.2.1.tgz#e89ee7a6f24d19fff62590569332dc60380a89a3" - redis-commands@1.4.0, redis-commands@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/redis-commands/-/redis-commands-1.4.0.tgz#52f9cf99153efcce56a8f86af986bd04e988602f" @@ -8361,10 +7619,6 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -replace-ext@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" - replace-ext@1.0.0, replace-ext@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" @@ -8426,20 +7680,6 @@ resolve-cwd@^2.0.0: dependencies: resolve-from "^3.0.0" -resolve-dir@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e" - dependencies: - expand-tilde "^1.2.2" - global-modules "^0.2.3" - -resolve-dir@^1.0.0, resolve-dir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" - dependencies: - expand-tilde "^2.0.0" - global-modules "^1.0.0" - resolve-from@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" @@ -8467,19 +7707,12 @@ resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.0.0, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.3, resolve@^1.5.0, resolve@^1.9.0: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.5.0, resolve@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" dependencies: path-parse "^1.0.6" -response-time@~2.3.1: - version "2.3.2" - resolved "https://registry.yarnpkg.com/response-time/-/response-time-2.3.2.tgz#ffa71bab952d62f7c1d49b7434355fbc68dffc5a" - dependencies: - depd "~1.1.0" - on-headers "~1.0.1" - restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" @@ -8557,10 +7790,6 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rndm@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/rndm/-/rndm-1.2.0.tgz#f33fe9cfb52bbfd520aa18323bc65db110a1b76c" - rollup-plugin-memory@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/rollup-plugin-memory/-/rollup-plugin-memory-2.0.0.tgz#0a8ac6b57fa0e714f89a15c3ac82bc93f89c47c5" @@ -8695,27 +7924,6 @@ semver@5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" -semver@^4.1.0: - version "4.3.6" - resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" - -send@0.13.2: - version "0.13.2" - resolved "https://registry.yarnpkg.com/send/-/send-0.13.2.tgz#765e7607c8055452bba6f0b052595350986036de" - dependencies: - debug "~2.2.0" - depd "~1.1.0" - destroy "~1.0.4" - escape-html "~1.0.3" - etag "~1.7.0" - fresh "0.3.0" - http-errors "~1.3.1" - mime "1.3.4" - ms "0.7.1" - on-finished "~2.3.0" - range-parser "~1.0.3" - statuses "~1.2.1" - sentence-case@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-2.1.1.tgz#1f6e2dda39c168bf92d13f86d4a918933f667ed4" @@ -8723,22 +7931,18 @@ sentence-case@^2.1.0: no-case "^2.2.0" upper-case-first "^1.1.2" -sequelize-cli@^2.7.0: - version "2.8.0" - resolved "https://registry.yarnpkg.com/sequelize-cli/-/sequelize-cli-2.8.0.tgz#4304cce60e499169603f838dedbab421c9849e74" +sequelize-cli@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/sequelize-cli/-/sequelize-cli-5.4.0.tgz#6a2c2af331466414d8b2ecb6912e24d2de0d04b5" dependencies: - bluebird "^3.5.0" - cli-color "~1.2.0" - findup-sync "^1.0.0" - fs-extra "^4.0.1" - gulp "^3.9.1" - gulp-help "~1.6.1" - js-beautify "^1.6.11" - lodash "^4.17.4" - moment "^2.17.1" - resolve "^1.3.3" - umzug "^1.12.0" - yargs "^8.0.1" + bluebird "^3.5.3" + cli-color "^1.4.0" + fs-extra "^7.0.1" + js-beautify "^1.8.8" + lodash "^4.17.5" + resolve "^1.5.0" + umzug "^2.1.0" + yargs "^12.0.5" sequelize-encrypted@0.1.0: version "0.1.0" @@ -8766,43 +7970,10 @@ sequelize@4.28.6: validator "^9.1.0" wkx "^0.4.1" -sequencify@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c" - serialize-javascript@^1.4.0: version "1.6.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.6.1.tgz#4d1f697ec49429a847ca6f442a2a755126c4d879" -serve-favicon@~2.3.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/serve-favicon/-/serve-favicon-2.3.2.tgz#dd419e268de012ab72b319d337f2105013f9381f" - dependencies: - etag "~1.7.0" - fresh "0.3.0" - ms "0.7.2" - parseurl "~1.3.1" - -serve-index@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.7.3.tgz#7a057fc6ee28dc63f64566e5fa57b111a86aecd2" - dependencies: - accepts "~1.2.13" - batch "0.5.3" - debug "~2.2.0" - escape-html "~1.0.3" - http-errors "~1.3.1" - mime-types "~2.1.9" - parseurl "~1.3.1" - -serve-static@~1.10.0: - version "1.10.3" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.10.3.tgz#ce5a6ecd3101fed5ec09827dac22a9c29bfb0535" - dependencies: - escape-html "~1.0.3" - parseurl "~1.3.1" - send "0.13.2" - set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -8866,7 +8037,7 @@ shimmer@^1.1.0: version "1.2.1" resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.1.tgz#610859f7de327b587efebf501fb43117f9aff337" -sigmund@^1.0.1, sigmund@~1.0.0: +sigmund@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" @@ -9112,10 +8283,6 @@ sourcemapped-stacktrace@^1.1.6: dependencies: source-map "0.5.6" -sparkles@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.1.tgz#008db65edce6c50eec0c5e228e1945061dd0437c" - spdx-correct@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" @@ -9201,14 +8368,10 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" -statuses@1, "statuses@>= 1.2.1 < 2", "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.0.0, statuses@^1.5.0: +"statuses@>= 1.2.1 < 2", "statuses@>= 1.4.0 < 2", "statuses@>= 1.5.0 < 2", statuses@^1.0.0, statuses@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" -statuses@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.2.1.tgz#dded45cc18256d51ed40aec142489d5c61026d28" - stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" @@ -9220,16 +8383,6 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" -stream-consume@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.1.tgz#d3bdb598c2bd0ae82b8cac7ac50b1107a7996c48" - -stream-counter@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/stream-counter/-/stream-counter-0.2.0.tgz#ded266556319c8b0e222812b9cf3b26fa7d947de" - dependencies: - readable-stream "~1.1.8" - stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" @@ -9335,13 +8488,6 @@ strip-bom@3.0.0, strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" -strip-bom@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794" - dependencies: - first-chunk-stream "^1.0.0" - is-utf8 "^0.2.0" - strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -9532,13 +8678,6 @@ throat@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" -through2@^0.6.1: - version "0.6.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" - dependencies: - readable-stream ">=1.0.33-1 <1.1.0-0" - xtend ">=4.0.0 <4.1.0-0" - through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -9550,16 +8689,6 @@ through@2, through@^2.3.6, through@^2.3.8: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" -tildify@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a" - dependencies: - os-homedir "^1.0.0" - -time-stamp@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" - time-stamp@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.2.0.tgz#917e0a66905688790ec7bbbde04046259af83f57" @@ -9574,7 +8703,7 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" -timers-ext@0.1, timers-ext@^0.1.5: +timers-ext@^0.1.5: version "0.1.7" resolved "https://registry.yarnpkg.com/timers-ext/-/timers-ext-0.1.7.tgz#6f57ad8578e07a3fb9f91d9387d65647555e25c6" dependencies: @@ -9730,10 +8859,6 @@ tslib@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" -tsscmp@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/tsscmp/-/tsscmp-1.0.5.tgz#7dc4a33af71581ab4337da91d85ca5427ebd9a97" - tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" @@ -9754,7 +8879,7 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-is@^1.6.14, type-is@^1.6.16, type-is@~1.6.6: +type-is@^1.6.14, type-is@^1.6.16: version "1.6.16" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" dependencies: @@ -9826,31 +8951,12 @@ uglifyjs-webpack-plugin@^0.4.6: uglify-js "^2.8.29" webpack-sources "^1.0.1" -uid-safe@2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.4.tgz#3ad6f38368c6d4c8c75ec17623fb79aa1d071d81" +umzug@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/umzug/-/umzug-2.2.0.tgz#6160bdc1817e4a63a625946775063c638623e62e" dependencies: - random-bytes "~1.0.0" - -uid-safe@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.0.0.tgz#a7f3c6ca64a1f6a5d04ec0ef3e4c3d5367317137" - dependencies: - base64-url "1.2.1" - -umzug@^1.12.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/umzug/-/umzug-1.12.0.tgz#a79c91f2862eee3130c6c347f2b90ad68a66e8b8" - dependencies: - bluebird "^3.4.1" - lodash "^4.17.0" - moment "^2.16.0" - redefine "^0.2.0" - resolve "^1.0.0" - -unc-path-regex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + babel-runtime "^6.23.0" + bluebird "^3.5.3" undefsafe@^2.0.2: version "2.0.2" @@ -9913,10 +9019,6 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -unique-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b" - unique-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" @@ -9963,7 +9065,7 @@ universalify@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" -unpipe@1.0.0, unpipe@~1.0.0: +unpipe@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -10071,10 +9173,6 @@ use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" -user-home@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" - util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -10102,10 +9200,6 @@ utila@^0.4.0, utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" -utils-merge@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" - uuid@2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.2.tgz#48bd5698f0677e3c7901a1c46ef15b1643794726" @@ -10114,12 +9208,6 @@ uuid@3.3.2, uuid@^3.0.0, uuid@^3.2.1, uuid@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" -v8flags@^2.0.2: - version "2.1.1" - resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" - dependencies: - user-home "^1.1.1" - validate-npm-package-license@^3.0.1: version "3.0.4" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" @@ -10139,14 +9227,10 @@ value-equal@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-0.4.0.tgz#c5bdd2f54ee093c04839d71ce2e4758a6890abc7" -vary@^1.1.2, vary@~1.1.2: +vary@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" -vary@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.0.1.tgz#99e4981566a286118dfb2b817357df7993376d10" - vendors@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" @@ -10178,38 +9262,6 @@ vfile@^2.0.0: unist-util-stringify-position "^1.0.0" vfile-message "^1.0.0" -vhost@~3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/vhost/-/vhost-3.0.2.tgz#2fb1decd4c466aa88b0f9341af33dc1aff2478d5" - -vinyl-fs@^0.3.0: - version "0.3.14" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6" - dependencies: - defaults "^1.0.0" - glob-stream "^3.1.5" - glob-watcher "^0.0.6" - graceful-fs "^3.0.0" - mkdirp "^0.5.0" - strip-bom "^1.0.0" - through2 "^0.6.1" - vinyl "^0.4.0" - -vinyl@^0.4.0: - version "0.4.6" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" - dependencies: - clone "^0.2.0" - clone-stats "^0.0.1" - -vinyl@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" - dependencies: - clone "^1.0.0" - clone-stats "^0.0.1" - replace-ext "0.0.1" - vinyl@^2.0.1: version "2.2.0" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" @@ -10379,7 +9431,7 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0: +which@^1.2.12, which@^1.2.9, which@^1.3.0: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: @@ -10497,7 +9549,7 @@ xmlbuilder@~9.0.1: version "9.0.7" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: +xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -10505,7 +9557,7 @@ y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" -y18n@^4.0.0: +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" @@ -10517,6 +9569,13 @@ yallist@^3.0.0, yallist@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" @@ -10553,6 +9612,23 @@ yargs@^10.0.3: y18n "^3.2.1" yargs-parser "^8.1.0" +yargs@^12.0.5: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + dependencies: + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1" + yargs@^4.2.0: version "4.8.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" @@ -10572,7 +9648,7 @@ yargs@^4.2.0: y18n "^3.2.1" yargs-parser "^2.4.1" -yargs@^8.0.1, yargs@^8.0.2: +yargs@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" dependencies: From f80c3c6877c16d72c9c485d2da3bc5843247dd6f Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Wed, 13 Mar 2019 23:22:12 -0700 Subject: [PATCH 080/237] Fixed: Return error when Slack auth fails to help with debugging --- server/auth/slack.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/server/auth/slack.js b/server/auth/slack.js index b93b12e97..d3ffce1ff 100644 --- a/server/auth/slack.js +++ b/server/auth/slack.js @@ -29,8 +29,12 @@ router.get('slack.callback', auth({ required: false }), async ctx => { ctx.assertPresent(code || error, 'code is required'); ctx.assertPresent(state, 'state is required'); - if (state !== ctx.cookies.get('state') || error) { - ctx.redirect(`/?notice=auth-error`); + if (state !== ctx.cookies.get('state')) { + ctx.redirect('/?notice=auth-error'); + return; + } + if (error) { + ctx.redirect(`/?notice=auth-error&error=${error}`); return; } From 1ef528bbd75890c58bba44bf64de86aab34b1e55 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Wed, 13 Mar 2019 23:49:54 -0700 Subject: [PATCH 081/237] Bump RME - closes #915 --- package.json | 2 +- yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index eb9d61fe6..da046eaae 100644 --- a/package.json +++ b/package.json @@ -143,7 +143,7 @@ "react-waypoint": "^7.3.1", "redis": "^2.6.2", "redis-lock": "^0.1.0", - "rich-markdown-editor": "^9.0.5", + "rich-markdown-editor": "^9.0.6", "safestart": "1.1.0", "sequelize": "4.28.6", "sequelize-cli": "^5.4.0", diff --git a/yarn.lock b/yarn.lock index 0a8ba00f2..078e89fd1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7735,9 +7735,9 @@ retry-axios@0.3.2, retry-axios@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-0.3.2.tgz#5757c80f585b4cc4c4986aa2ffd47a60c6d35e13" -rich-markdown-editor@^9.0.5: - version "9.0.5" - resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-9.0.5.tgz#6c679d41a8cbcfdbe03de7f9fe4629820b829248" +rich-markdown-editor@^9.0.6: + version "9.0.6" + resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-9.0.6.tgz#9d963e099cac15bf729a32448ab6a19bf10ca8ca" dependencies: "@tommoor/slate-edit-list" "0.19.0-0" "@wikifactory/slate-edit-blockquote" "^0.7.1" From 52a029a657524bad7bc0a8098d9e45cceb2790f9 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Wed, 13 Mar 2019 23:50:52 -0700 Subject: [PATCH 082/237] :shirt: --- app/components/Button.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/Button.js b/app/components/Button.js index b6825c788..35d6f5625 100644 --- a/app/components/Button.js +++ b/app/components/Button.js @@ -1,7 +1,7 @@ // @flow import * as React from 'react'; import styled from 'styled-components'; -import { darken, lighten } from 'polished'; +import { darken } from 'polished'; const RealButton = styled.button` display: inline-block; From 49e5748a4f06431e6d082678115f36432b6dc48e Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 30 Mar 2019 23:34:56 -0700 Subject: [PATCH 083/237] Change dev ports to reduce clashes --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index bbb229434..86b565acf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,7 @@ RUN mkdir -p $APP_PATH WORKDIR $APP_PATH COPY . $APP_PATH -RUN yarn +RUN yarn install --pure-lockfile RUN cp -r /opt/outline/node_modules /opt/node_modules CMD yarn build && yarn start From 76bb6c4341cc8b8eecfdb282853a36669f6a4183 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 30 Mar 2019 23:35:09 -0700 Subject: [PATCH 084/237] Change dev ports to reduce clashes --- docker-compose.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index cc46862fc..ce4cce7a3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,11 +3,11 @@ services: redis: image: redis ports: - - "6379:6379" + - "6389:6379" postgres: image: postgres ports: - - "5432:5432" + - "5433:5432" environment: POSTGRES_USER: user POSTGRES_PASSWORD: pass From 20a54bd2e9846c4a5a7756b3e2904930fd18df75 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 30 Mar 2019 23:35:53 -0700 Subject: [PATCH 085/237] Don't publish by default --- app/scenes/Document/Document.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/scenes/Document/Document.js b/app/scenes/Document/Document.js index 8451a0e18..713306e60 100644 --- a/app/scenes/Document/Document.js +++ b/app/scenes/Document/Document.js @@ -201,7 +201,7 @@ class DocumentScene extends React.Component { handleOpenMoveModal = () => (this.moveModalOpen = true); onSaveAndExit = () => { - this.onSave({ done: true, publish: true }); + this.onSave({ done: true }); }; onSave = async ( From 1883e77d5cc8b03ce3d57d78f03678a8df43d8bf Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 30 Mar 2019 23:36:02 -0700 Subject: [PATCH 086/237] Bump RME, improve perf --- app/scenes/Document/components/Editor.js | 4 +++- app/scenes/Document/components/Header.js | 4 ++-- package.json | 2 +- yarn.lock | 19 +++++++------------ 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/app/scenes/Document/components/Editor.js b/app/scenes/Document/components/Editor.js index 67cb5879b..0f9b02198 100644 --- a/app/scenes/Document/components/Editor.js +++ b/app/scenes/Document/components/Editor.js @@ -29,13 +29,15 @@ class DocumentEditor extends React.Component { }; render() { - const { readOnly } = this.props; + const { readOnly, defaultValue } = this.props; return ( (this.editor = ref)} plugins={plugins} + options={{ normalize: !defaultValue }} + defaultValue={defaultValue} {...this.props} /> { )} - {!isEditing && ( + {canEdit && ( diff --git a/app/scenes/Drafts.js b/app/scenes/Drafts.js index 2e471b0b7..de0f7f32a 100644 --- a/app/scenes/Drafts.js +++ b/app/scenes/Drafts.js @@ -9,6 +9,7 @@ import { ListPlaceholder } from 'components/LoadingPlaceholder'; import Empty from 'components/Empty'; import PageTitle from 'components/PageTitle'; import DocumentList from 'components/DocumentList'; +import Subheading from 'components/Subheading'; import NewDocumentMenu from 'menus/NewDocumentMenu'; import Actions, { Action } from 'components/Actions'; import DocumentsStore from 'stores/DocumentsStore'; @@ -33,8 +34,14 @@ class Drafts extends React.Component { Drafts {showLoading && } - {showEmpty && You’ve not got any drafts at the moment.} - + {showEmpty ? ( + You’ve not got any drafts at the moment. + ) : ( + + Documents + + + )} } /> diff --git a/app/scenes/UserProfile.js b/app/scenes/UserProfile.js index 4600f84fc..5bb8a248b 100644 --- a/app/scenes/UserProfile.js +++ b/app/scenes/UserProfile.js @@ -56,11 +56,11 @@ class UserProfile extends React.Component { )} - Recently updated Recently updated} empty={ {user.name} hasn’t updated any documents yet. } diff --git a/app/stores/DocumentsStore.js b/app/stores/DocumentsStore.js index e9ac95130..59ca18670 100644 --- a/app/stores/DocumentsStore.js +++ b/app/stores/DocumentsStore.js @@ -20,7 +20,12 @@ export default class DocumentsStore extends BaseStore { } @computed - get recentlyViewed(): * { + get all(): Document[] { + return filter(this.orderedData, d => !d.archivedAt && !d.deletedAt); + } + + @computed + get recentlyViewed(): Document[] { return orderBy( compact(this.recentlyViewedIds.map(id => this.data.get(id))), 'updatedAt', @@ -29,16 +34,13 @@ export default class DocumentsStore extends BaseStore { } @computed - get recentlyUpdated(): * { - return orderBy(Array.from(this.data.values()), 'updatedAt', 'desc'); + get recentlyUpdated(): Document[] { + return orderBy(this.all, 'updatedAt', 'desc'); } createdByUser(userId: string): * { return orderBy( - filter( - Array.from(this.data.values()), - document => document.createdBy.id === userId - ), + filter(this.all, d => d.createdBy.id === userId), 'updatedAt', 'desc' ); @@ -53,7 +55,7 @@ export default class DocumentsStore extends BaseStore { publishedInCollection(collectionId: string): Document[] { return filter( - Array.from(this.data.values()), + this.all, document => document.collectionId === collectionId && !!document.publishedAt ); @@ -93,7 +95,15 @@ export default class DocumentsStore extends BaseStore { @computed get starred(): Document[] { - return filter(this.orderedData, d => d.starred); + return filter(this.all, d => d.starred); + } + + @computed + get archived(): Document[] { + return filter( + orderBy(this.orderedData, 'archivedAt', 'desc'), + d => d.archivedAt + ); } @computed @@ -104,7 +114,7 @@ export default class DocumentsStore extends BaseStore { @computed get drafts(): Document[] { return filter( - orderBy(Array.from(this.data.values()), 'updatedAt', 'desc'), + orderBy(this.all, 'updatedAt', 'desc'), doc => !doc.publishedAt ); } @@ -137,6 +147,11 @@ export default class DocumentsStore extends BaseStore { } }; + @action + fetchArchived = async (options: ?PaginationParams): Promise<*> => { + return this.fetchNamedPage('archived', options); + }; + @action fetchRecentlyUpdated = async (options: ?PaginationParams): Promise<*> => { return this.fetchNamedPage('list', options); @@ -331,15 +346,32 @@ export default class DocumentsStore extends BaseStore { } @action - restore = async (document: Document, revision: Revision) => { + archive = async (document: Document) => { + const res = await client.post('/documents.archive', { + id: document.id, + }); + runInAction('Document#archive', () => { + invariant(res && res.data, 'Data should be available'); + document.updateFromJson(res.data); + }); + + const collection = this.getCollectionForDocument(document); + if (collection) collection.refresh(); + }; + + @action + restore = async (document: Document, revision?: Revision) => { const res = await client.post('/documents.restore', { id: document.id, - revisionId: revision.id, + revisionId: revision ? revision.id : undefined, }); runInAction('Document#restore', () => { invariant(res && res.data, 'Data should be available'); document.updateFromJson(res.data); }); + + const collection = this.getCollectionForDocument(document); + if (collection) collection.refresh(); }; pin = (document: Document) => { @@ -359,7 +391,7 @@ export default class DocumentsStore extends BaseStore { }; getByUrl = (url: string = ''): ?Document => { - return find(Array.from(this.data.values()), doc => url.endsWith(doc.urlId)); + return find(this.orderedData, doc => url.endsWith(doc.urlId)); }; getCollectionForDocument(document: Document) { diff --git a/app/stores/UiStore.js b/app/stores/UiStore.js index 5e2c36477..0b1214ef1 100644 --- a/app/stores/UiStore.js +++ b/app/stores/UiStore.js @@ -40,7 +40,7 @@ class UiStore { setActiveDocument = (document: Document): void => { this.activeDocumentId = document.id; - if (document.publishedAt) { + if (document.publishedAt && !document.isArchived && !document.isDeleted) { this.activeCollectionId = document.collectionId; } }; diff --git a/docker-compose.yml b/docker-compose.yml index ce4cce7a3..6273ec5b1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,11 +3,11 @@ services: redis: image: redis ports: - - "6389:6379" + - "6380:6379" postgres: image: postgres ports: - - "5433:5432" + - "5434:5432" environment: POSTGRES_USER: user POSTGRES_PASSWORD: pass diff --git a/flow-typed/npm/koa_v2.x.x.js b/flow-typed/npm/koa_v2.x.x.js index 30ef20994..72b2ed2b6 100644 --- a/flow-typed/npm/koa_v2.x.x.js +++ b/flow-typed/npm/koa_v2.x.x.js @@ -1,3 +1,4 @@ +// @flow // flow-typed signature: 225656ba2479b8c1dd8b10776913e73f // flow-typed version: b7d0245d00/koa_v2.x.x/flow_>=v0.47.x @@ -43,7 +44,7 @@ declare module 'koa' { url: string, header: SimpleHeader, }; - declare type RequestInspect = void | RequestJSON; + declare type RequestInspect = void | RequestJSON; declare type Request = { app: Application, req: http$IncomingMessage, @@ -75,13 +76,13 @@ declare module 'koa' { type: string, url: string, - charset: string | void, - length: number | void, + charset: string | void, + length: number | void, // Those functions comes from https://github.com/jshttp/accepts/blob/master/index.js // request.js$L445 // https://github.com/jshttp/accepts/blob/master/test/type.js - accepts: ((args: string[]) => string | false) & + accepts: ((args: string[]) => string | false) & // ToDo: There is an issue https://github.com/facebook/flow/issues/3009 // if you meet some error here, temporarily add an additional annotation // like: `request.accepts((['json', 'text']:Array))` to fix it. @@ -90,7 +91,7 @@ declare module 'koa' { // https://github.com/jshttp/accepts/blob/master/index.js#L153 // https://github.com/jshttp/accepts/blob/master/test/charset.js - acceptsCharsets: ((args: string[]) => buffer$Encoding | false) & + acceptsCharsets: ((args: string[]) => buffer$Encoding | false) & // ToDo: https://github.com/facebook/flow/issues/3009 // if you meet some error here, see L70. ((arg: string, ...args: string[]) => buffer$Encoding | false) & @@ -98,7 +99,7 @@ declare module 'koa' { // https://github.com/jshttp/accepts/blob/master/index.js#L119 // https://github.com/jshttp/accepts/blob/master/test/encoding.js - acceptsEncodings: ((args: string[]) => string | false) & + acceptsEncodings: ((args: string[]) => string | false) & // ToDo: https://github.com/facebook/flow/issues/3009 // if you meet some error here, see L70. ((arg: string, ...args: string[]) => string | false) & @@ -121,7 +122,7 @@ declare module 'koa' { * If there is no content type, `false` is returned. * Otherwise, it returns the first `type` that matches. */ - is: ((args: string[]) => null | false | string) & + is: ((args: string[]) => null | false | string) & ((arg: string, ...args: string[]) => null | false | string) & (() => string), // should return the mime type @@ -165,7 +166,7 @@ declare module 'koa' { writable: boolean, // charset: string, // doesn't find in response.js - length: number | void, + length: number | void, append: (field: string, val: string | string[]) => void, attachment: (filename?: string) => void, @@ -178,7 +179,7 @@ declare module 'koa' { redirect: (url: string, alt?: string) => void, remove: (field: string) => void, // https://github.com/koajs/koa/blob/v2.x/lib/response.js#L418 - set: ((field: string, val: string | string[]) => void) & + set: ((field: string, val: string | string[]) => void) & ((field: { [key: string]: string | string[] }) => void), vary: (field: string) => void, @@ -217,7 +218,7 @@ declare module 'koa' { name: string, value: string, options?: CookiesSetOptions - ) => Context) & + ) => Context) & // delete cookie (an outbound header with an expired date is used.) ((name: string) => Context), }; @@ -320,7 +321,7 @@ declare module 'koa' { res: http$ServerResponse ) => void; env: string; - keys?: Array | Object; // https://github.com/crypto-utils/keygrip + keys?: Array | Object; // https://github.com/crypto-utils/keygrip middleware: Array; proxy: boolean; // when true proxy header fields will be trusted request: Request; diff --git a/flow-typed/npm/slug_v0.9.x.js b/flow-typed/npm/slug_v0.9.x.js index 52ad3914f..be0fdd050 100644 --- a/flow-typed/npm/slug_v0.9.x.js +++ b/flow-typed/npm/slug_v0.9.x.js @@ -1,7 +1,8 @@ +// @flow // flow-typed signature: c499686d8ed4b3da5bd13133389c6088 // flow-typed version: b43dff3e0e/slug_v0.9.x/flow_>=v0.25.x -type SlugMode = 'rfc3986' | 'pretty' +type SlugMode = 'rfc3986' | 'pretty'; declare module 'slug' { declare type SlugOptions = { @@ -12,14 +13,14 @@ declare module 'slug' { remove?: ?RegExp, lower?: boolean, symbols?: boolean, - } + }; declare module.exports: { - (input: string, optionOrReplacement?: string | SlugOptions): string, - defaults: { - mode: 'pretty', - charmap: { [key: string]: string }, - multicharmap: { [key: string]: string }, - modes: { [key: SlugMode]: SlugOptions } - } - } + (input: string, optionOrReplacement?: string | SlugOptions): string, + defaults: { + mode: 'pretty' | 'rfc3986', + charmap: { [key: string]: string }, + multicharmap: { [key: string]: string }, + modes: { [key: SlugMode]: SlugOptions }, + }, + }; } diff --git a/package.json b/package.json index a3caa29d3..5a8c8e285 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,8 @@ "build": "npm run clean && npm run build:webpack", "start": "NODE_ENV=production node index.js", "dev": "NODE_ENV=development nodemon --watch server index.js", - "lint": "npm run lint:flow && npm run lint:js", - "lint:js": "eslint app server", - "lint:flow": "flow", + "lint": "eslint app server", + "flow": "flow", "deploy": "git push heroku master", "heroku-postbuild": "npm run build && npm run sequelize:migrate", "sequelize:create-migration": "sequelize migration:create", @@ -121,7 +120,7 @@ "mobx-react": "^5.4.2", "natural-sort": "^1.0.0", "nodemailer": "^4.4.0", - "outline-icons": "^1.7.0", + "outline-icons": "^1.8.0-0", "oy-vey": "^0.10.0", "pg": "^6.1.5", "pg-hstore": "2.3.2", diff --git a/server/api/documents.js b/server/api/documents.js index 8dd470108..40863e81e 100644 --- a/server/api/documents.js +++ b/server/api/documents.js @@ -100,6 +100,38 @@ router.post('documents.pinned', auth(), pagination(), async ctx => { }; }); +router.post('documents.archived', auth(), pagination(), async ctx => { + const { sort = 'updatedAt' } = ctx.body; + let direction = ctx.body.direction; + if (direction !== 'ASC') direction = 'DESC'; + + const user = ctx.state.user; + const collectionIds = await user.collectionIds(); + + const documents = await Document.findAll({ + where: { + teamId: user.teamId, + collectionId: collectionIds, + archivedAt: { + // $FlowFixMe + [Op.ne]: null, + }, + }, + order: [[sort, direction]], + offset: ctx.state.pagination.offset, + limit: ctx.state.pagination.limit, + }); + + const data = await Promise.all( + documents.map(document => presentDocument(ctx, document)) + ); + + ctx.body = { + pagination: ctx.state.pagination, + data, + }; +}); + router.post('documents.viewed', auth(), pagination(), async ctx => { let { sort = 'updatedAt', direction } = ctx.body; if (direction !== 'ASC') direction = 'DESC'; @@ -235,7 +267,7 @@ router.post('documents.info', auth({ required: false }), async ctx => { }, ], }); - if (!share) { + if (!share || share.document.archivedAt) { throw new InvalidRequestError('Document could not be found for shareId'); } document = share.document; @@ -300,18 +332,29 @@ router.post('documents.revisions', auth(), pagination(), async ctx => { router.post('documents.restore', auth(), async ctx => { const { id, revisionId } = ctx.body; ctx.assertPresent(id, 'id is required'); - ctx.assertPresent(revisionId, 'revisionId is required'); const user = ctx.state.user; const document = await Document.findById(id); - authorize(user, 'update', document); - const revision = await Revision.findById(revisionId); - authorize(document, 'restore', revision); + if (document.archivedAt) { + authorize(user, 'unarchive', document); - document.text = revision.text; - document.title = revision.title; - await document.save(); + // restore a previously archived document + await document.unarchive(user.id); + + // restore a document to a specific revision + } else if (revisionId) { + authorize(user, 'update', document); + + const revision = await Revision.findById(revisionId); + authorize(document, 'restore', revision); + + document.text = revision.text; + document.title = revision.title; + await document.save(); + } else { + ctx.assertPresent(revisionId, 'revisionId is required'); + } ctx.body = { data: await presentDocument(ctx, document), @@ -530,20 +573,30 @@ router.post('documents.move', auth(), async ctx => { }; }); +router.post('documents.archive', auth(), async ctx => { + const { id } = ctx.body; + ctx.assertPresent(id, 'id is required'); + + const user = ctx.state.user; + const document = await Document.findById(id); + authorize(user, 'archive', document); + + await document.archive(user.id); + + ctx.body = { + data: await presentDocument(ctx, document), + }; +}); + router.post('documents.delete', auth(), async ctx => { const { id } = ctx.body; ctx.assertPresent(id, 'id is required'); + const user = ctx.state.user; const document = await Document.findById(id); - authorize(ctx.state.user, 'delete', document); + authorize(user, 'delete', document); - const collection = document.collection; - if (collection && collection.type === 'atlas') { - // Delete document and all of its children - await collection.removeDocument(document); - } - - await document.destroy(); + await document.delete(); ctx.body = { success: true, diff --git a/server/api/documents.test.js b/server/api/documents.test.js index d54bae93f..1feac2f43 100644 --- a/server/api/documents.test.js +++ b/server/api/documents.test.js @@ -27,6 +27,18 @@ describe('#documents.info', async () => { expect(body.data.id).toEqual(document.id); }); + it('should return archived document', async () => { + const { user, document } = await seed(); + await document.archive(user.id); + const res = await server.post('/api/documents.info', { + body: { token: user.getJwtToken(), id: document.id }, + }); + const body = await res.json(); + + expect(res.status).toEqual(200); + expect(body.data.id).toEqual(document.id); + }); + it('should not return published document in collection not a member of', async () => { const { user, document, collection } = await seed(); collection.private = true; @@ -86,6 +98,20 @@ describe('#documents.info', async () => { expect(res.status).toEqual(400); }); + it('should not return document from archived shareId', async () => { + const { document, user } = await seed(); + const share = await buildShare({ + documentId: document.id, + teamId: document.teamId, + }); + await document.archive(user.id); + + const res = await server.post('/api/documents.info', { + body: { shareId: share.id }, + }); + expect(res.status).toEqual(400); + }); + it('should return document from shareId with token', async () => { const { user, document, collection } = await seed(); const share = await buildShare({ @@ -420,6 +446,24 @@ describe('#documents.search', async () => { expect(body.data.length).toEqual(0); }); + it('should not return archived documents', async () => { + const { user } = await seed(); + const document = await buildDocument({ + title: 'search term', + text: 'search term', + teamId: user.teamId, + }); + await document.archive(user.id); + + const res = await server.post('/api/documents.search', { + body: { token: user.getJwtToken(), query: 'search term' }, + }); + const body = await res.json(); + + expect(res.status).toEqual(200); + expect(body.data.length).toEqual(0); + }); + it('should not return documents in private collections not a member of', async () => { const { user } = await seed(); const collection = await buildCollection({ private: true }); @@ -449,6 +493,66 @@ describe('#documents.search', async () => { }); }); +describe('#documents.archived', async () => { + it('should return archived documents', async () => { + const { user } = await seed(); + const document = await buildDocument({ + userId: user.id, + teamId: user.teamId, + }); + await document.archive(user.id); + + const res = await server.post('/api/documents.archived', { + body: { token: user.getJwtToken() }, + }); + const body = await res.json(); + + expect(res.status).toEqual(200); + expect(body.data.length).toEqual(1); + }); + + it('should not return deleted documents', async () => { + const { user } = await seed(); + const document = await buildDocument({ + userId: user.id, + teamId: user.teamId, + }); + await document.delete(); + + const res = await server.post('/api/documents.archived', { + body: { token: user.getJwtToken() }, + }); + const body = await res.json(); + + expect(res.status).toEqual(200); + expect(body.data.length).toEqual(0); + }); + + it('should not return documents in private collections not a member of', async () => { + const { user } = await seed(); + const collection = await buildCollection({ private: true }); + + const document = await buildDocument({ + teamId: user.teamId, + collectionId: collection.id, + }); + await document.archive(user.id); + + const res = await server.post('/api/documents.archived', { + body: { token: user.getJwtToken() }, + }); + const body = await res.json(); + + expect(res.status).toEqual(200); + expect(body.data.length).toEqual(0); + }); + + it('should require authentication', async () => { + const res = await server.post('/api/documents.archived'); + expect(res.status).toEqual(401); + }); +}); + describe('#documents.viewed', async () => { it('should return empty result if no views', async () => { const { user } = await seed(); @@ -577,7 +681,37 @@ describe('#documents.pin', async () => { }); }); -describe('#documents.restore', async () => { +describe('#documents.restore', () => { + it('should allow restore of archived documents', async () => { + const { user, document } = await seed(); + await document.archive(user.id); + + const res = await server.post('/api/documents.restore', { + body: { token: user.getJwtToken(), id: document.id }, + }); + const body = await res.json(); + expect(body.data.archivedAt).toEqual(null); + }); + + it('should restore archived when previous parent is archived', async () => { + const { user, document } = await seed(); + const childDocument = await buildDocument({ + userId: user.id, + teamId: user.teamId, + collectionId: document.collectionId, + parentDocumentId: document.id, + }); + await childDocument.archive(user.id); + await document.archive(user.id); + + const res = await server.post('/api/documents.restore', { + body: { token: user.getJwtToken(), id: childDocument.id }, + }); + const body = await res.json(); + expect(body.data.parentDocumentId).toEqual(undefined); + expect(body.data.archivedAt).toEqual(null); + }); + it('should restore the document to a previous version', async () => { const { user, document } = await seed(); const revision = await Revision.findOne({ @@ -855,6 +989,22 @@ describe('#documents.update', async () => { expect(body.data.collection.documents[0].title).toBe('Updated title'); }); + it('should not edit archived document', async () => { + const { user, document } = await seed(); + await document.archive(); + + const res = await server.post('/api/documents.update', { + body: { + token: user.getJwtToken(), + id: document.id, + title: 'Updated title', + text: 'Updated text', + lastRevision: document.revision, + }, + }); + expect(res.status).toEqual(403); + }); + it('should not create new version when autosave=true', async () => { const { user, document } = await seed(); @@ -974,6 +1124,24 @@ describe('#documents.update', async () => { }); }); +describe('#documents.archive', async () => { + it('should allow archiving document', async () => { + const { user, document } = await seed(); + const res = await server.post('/api/documents.archive', { + body: { token: user.getJwtToken(), id: document.id }, + }); + expect(res.status).toEqual(200); + }); + + it('should require authentication', async () => { + const { document } = await seed(); + const res = await server.post('/api/documents.archive', { + body: { id: document.id }, + }); + expect(res.status).toEqual(401); + }); +}); + describe('#documents.delete', async () => { it('should allow deleting document', async () => { const { user, document } = await seed(); diff --git a/server/migrations/20190404035736-add-archive.js b/server/migrations/20190404035736-add-archive.js new file mode 100644 index 000000000..09c3636b4 --- /dev/null +++ b/server/migrations/20190404035736-add-archive.js @@ -0,0 +1,11 @@ +module.exports = { + up: async (queryInterface, Sequelize) => { + await queryInterface.addColumn('documents', 'archivedAt', { + type: Sequelize.DATE, + allowNull: true + }); + }, + down: async (queryInterface, Sequelize) => { + await queryInterface.removeColumn('documents', 'archivedAt'); + } +} \ No newline at end of file diff --git a/server/models/Collection.js b/server/models/Collection.js index f73d9a574..0cbef17fb 100644 --- a/server/models/Collection.js +++ b/server/models/Collection.js @@ -1,5 +1,5 @@ // @flow -import _ from 'lodash'; +import { find, remove } from 'lodash'; import slug from 'slug'; import randomstring from 'randomstring'; import { DataTypes, sequelize } from '../sequelize'; @@ -7,14 +7,10 @@ import { asyncLock } from '../redis'; import events from '../events'; import Document from './Document'; import CollectionUser from './CollectionUser'; -import Event from './Event'; import { welcomeMessage } from '../utils/onboarding'; -// $FlowIssue invalid flow-typed slug.defaults.mode = 'rfc3986'; -const allowedCollectionTypes = [['atlas', 'journal']]; - const Collection = sequelize.define( 'collection', { @@ -30,7 +26,7 @@ const Collection = sequelize.define( private: DataTypes.BOOLEAN, type: { type: DataTypes.STRING, - validate: { isIn: allowedCollectionTypes }, + validate: { isIn: [['atlas', 'journal']] }, }, /* type: atlas */ @@ -40,10 +36,10 @@ const Collection = sequelize.define( tableName: 'collections', paranoid: true, hooks: { - beforeValidate: collection => { + beforeValidate: (collection: Collection) => { collection.urlId = collection.urlId || randomstring.generate(10); }, - afterCreate: async collection => { + afterCreate: async (collection: Collection) => { const team = await collection.getTeam(); const collections = await team.getCollections(); @@ -115,7 +111,7 @@ Collection.associate = models => { ); }; -Collection.addHook('afterDestroy', async model => { +Collection.addHook('afterDestroy', async (model: Collection) => { await Document.destroy({ where: { collectionId: model.id, @@ -123,19 +119,19 @@ Collection.addHook('afterDestroy', async model => { }); }); -Collection.addHook('afterCreate', model => +Collection.addHook('afterCreate', (model: Collection) => events.add({ name: 'collections.create', model }) ); -Collection.addHook('afterDestroy', model => +Collection.addHook('afterDestroy', (model: Collection) => events.add({ name: 'collections.delete', model }) ); -Collection.addHook('afterUpdate', model => +Collection.addHook('afterUpdate', (model: Collection) => events.add({ name: 'collections.update', model }) ); -Collection.addHook('afterCreate', (model, options) => { +Collection.addHook('afterCreate', (model: Collection, options) => { if (model.private) { return CollectionUser.findOrCreate({ where: { @@ -154,23 +150,16 @@ Collection.addHook('afterCreate', (model, options) => { // Instance methods Collection.prototype.addDocumentToStructure = async function( - document, - index, + document: Document, + index: number, options = {} ) { if (!this.documentStructure) return; - const existingData = { - old: this.documentStructure, - documentId: document, - parentDocumentId: document.parentDocumentId, - index, - }; - // documentStructure can only be updated by one request at the time + // documentStructure can only be updated by one request at a time const unlock = await asyncLock(`collection-${this.id}`); - // If moving existing document with children, use existing structure to - // keep everything in shape and not loose documents + // If moving existing document with children, use existing structure const documentJson = { ...document.toJSON(), ...options.documentJson, @@ -206,18 +195,7 @@ Collection.prototype.addDocumentToStructure = async function( // Sequelize doesn't seem to set the value with splice on JSONB field this.documentStructure = this.documentStructure; - await this.save(); - - await Event.create({ - name: 'Collection#addDocumentToStructure', - data: { - ...existingData, - new: this.documentStructure, - }, - collectionId: this.id, - teamId: this.teamId, - }); - + await this.save(options); unlock(); return this; @@ -226,7 +204,9 @@ Collection.prototype.addDocumentToStructure = async function( /** * Update document's title and url in the documentStructure */ -Collection.prototype.updateDocument = async function(updatedDocument) { +Collection.prototype.updateDocument = async function( + updatedDocument: Document +) { if (!this.documentStructure) return; // documentStructure can only be updated by one request at the time @@ -261,98 +241,56 @@ Collection.prototype.updateDocument = async function(updatedDocument) { Collection.prototype.moveDocument = async function(document, index) { if (!this.documentStructure) return; - const documentJson = await this.removeDocument(document, { - deleteDocument: false, - }); + const documentJson = await this.removeDocumentInStructure(document); await this.addDocumentToStructure(document, index, { documentJson }); - - return this; }; -type DeleteDocumentOptions = { - deleteDocument: boolean, +Collection.prototype.deleteDocument = async function(document) { + await this.removeDocumentInStructure(document, { save: true }); + await document.deleteWithChildren(); }; -/** - * removeDocument is used for both deleting documents (deleteDocument: true) - * and removing them temporarily from the structure while they are being moved - * (deleteDocument: false). - */ -Collection.prototype.removeDocument = async function( +Collection.prototype.removeDocumentInStructure = async function( document, - options: DeleteDocumentOptions = { deleteDocument: true } + options?: { save?: boolean } ) { if (!this.documentStructure) return; - let returnValue; + let unlock; - // documentStructure can only be updated by one request at the time - const unlock = await asyncLock('testLock'); + if (options && options.save) { + // documentStructure can only be updated by one request at the time + unlock = await asyncLock(`collection-${this.id}`); + } - const existingData = { - old: this.documentStructure, - documentId: document, - parentDocumentId: document.parentDocumentId, - options, - }; - - // Helper to destroy all child documents for a document - const deleteChildren = async documentId => { - const childDocuments = await Document.findAll({ - where: { parentDocumentId: documentId }, - }); - childDocuments.forEach(async child => { - await deleteChildren(child.id); - await child.destroy(); - }); - }; - - // Prune, and destroy if needed, from the document structure - const deleteFromChildren = async (children, id) => { + const removeFromChildren = async (children, id) => { children = await Promise.all( children.map(async childDocument => { return { ...childDocument, - children: await deleteFromChildren(childDocument.children, id), + children: await removeFromChildren(childDocument.children, id), }; }) ); - const match = _.find(children, { id }); + const match = find(children, { id }); if (match) { - if (!options.deleteDocument && !returnValue) returnValue = match; - _.remove(children, { id }); - - if (options.deleteDocument) { - const childDocument = await Document.findById(id); - // Delete the actual document - if (childDocument) await childDocument.destroy(); - // Delete all child documents - await deleteChildren(id); - } + if (!returnValue) returnValue = match; + remove(children, { id }); } return children; }; - this.documentStructure = await deleteFromChildren( + this.documentStructure = await removeFromChildren( this.documentStructure, document.id ); - if (options.deleteDocument) await this.save(); - - await Event.create({ - name: 'Collection#removeDocument', - data: { - ...existingData, - new: this.documentStructure, - }, - collectionId: this.id, - teamId: this.teamId, - }); - - await unlock(); + if (options && options.save) { + await this.save(options); + if (unlock) await unlock(); + } return returnValue; }; diff --git a/server/models/Collection.test.js b/server/models/Collection.test.js index 65d8e68ce..da81c4808 100644 --- a/server/models/Collection.test.js +++ b/server/models/Collection.test.js @@ -156,8 +156,6 @@ describe('#moveDocument', () => { test('should move a document with children', async () => { const { collection, document } = await seed(); - - // Add a child for testing const newDocument = await Document.create({ parentDocumentId: document.id, collectionId: collection.id, @@ -182,14 +180,14 @@ describe('#removeDocument', () => { const { collection, document } = await seed(); jest.spyOn(collection, 'save'); - await collection.removeDocument(document); + await collection.deleteDocument(document); expect(collection.save).toBeCalled(); }); test('should remove documents from root', async () => { const { collection, document } = await seed(); - await collection.removeDocument(document); + await collection.deleteDocument(document); expect(collection.documentStructure.length).toBe(1); // Verify that the document was removed @@ -219,7 +217,7 @@ describe('#removeDocument', () => { expect(collection.documentStructure[1].children.length).toBe(1); // Remove the document - await collection.removeDocument(document); + await collection.deleteDocument(document); expect(collection.documentStructure.length).toBe(1); const collectionDocuments = await Document.findAndCountAll({ where: { @@ -249,7 +247,7 @@ describe('#removeDocument', () => { expect(collection.documentStructure[1].children.length).toBe(1); // Remove the document - await collection.removeDocument(newDocument); + await collection.deleteDocument(newDocument); expect(collection.documentStructure.length).toBe(2); expect(collection.documentStructure[0].children.length).toBe(0); @@ -268,9 +266,7 @@ describe('#removeDocument', () => { const { collection, document } = await seed(); jest.spyOn(collection, 'save'); - const removedNode = await collection.removeDocument(document, { - deleteDocument: false, - }); + const removedNode = await collection.removeDocumentInStructure(document); expect(collection.documentStructure.length).toBe(1); expect(destroyMock).not.toBeCalled(); expect(collection.save).not.toBeCalled(); diff --git a/server/models/Document.js b/server/models/Document.js index d1f723276..dfba75a06 100644 --- a/server/models/Document.js +++ b/server/models/Document.js @@ -4,7 +4,7 @@ import { map, find, compact, uniq } from 'lodash'; import randomstring from 'randomstring'; import MarkdownSerializer from 'slate-md-serializer'; import Plain from 'slate-plain-serializer'; -import Sequelize from 'sequelize'; +import Sequelize, { type Transaction } from 'sequelize'; import removeMarkdown from '@tommoor/remove-markdown'; import isUUID from 'validator/lib/isUUID'; @@ -91,6 +91,7 @@ const Document = sequelize.define( }, text: DataTypes.TEXT, revisionCount: { type: DataTypes.INTEGER, defaultValue: 0 }, + archivedAt: DataTypes.DATE, publishedAt: DataTypes.DATE, parentDocumentId: DataTypes.UUID, collaboratorIds: DataTypes.ARRAY(DataTypes.UUID), @@ -183,18 +184,20 @@ Document.associate = models => { })); }; -Document.findById = async id => { +Document.findById = async (id, options) => { const scope = Document.scope('withUnpublished'); if (isUUID(id)) { return scope.findOne({ where: { id }, + ...options, }); } else if (id.match(URL_REGEX)) { return scope.findOne({ where: { urlId: id.match(URL_REGEX)[1], }, + ...options, }); } }; @@ -222,6 +225,7 @@ Document.searchForUser = async ( FROM documents WHERE "searchVector" @@ to_tsquery('english', :query) AND "collectionId" IN(:collectionIds) AND + "archivedAt" IS NULL AND "deletedAt" IS NULL AND ("publishedAt" IS NOT NULL OR "createdById" = '${user.id}') ORDER BY @@ -271,7 +275,7 @@ Document.addHook('beforeSave', async model => { if (!model.publishedAt) return; const collection = await Collection.findById(model.collectionId); - if (collection.type !== 'atlas') return; + if (!collection || collection.type !== 'atlas') return; await collection.updateDocument(model); model.collection = collection; @@ -281,7 +285,7 @@ Document.addHook('afterCreate', async model => { if (!model.publishedAt) return; const collection = await Collection.findById(model.collectionId); - if (collection.type !== 'atlas') return; + if (!collection || collection.type !== 'atlas') return; await collection.addDocumentToStructure(model); model.collection = collection; @@ -296,6 +300,48 @@ Document.addHook('afterDestroy', model => // Instance methods +// Note: This method marks the document and it's children as deleted +// in the database, it does not permanantly delete them OR remove +// from the collection structure. +Document.prototype.deleteWithChildren = async function(options) { + // Helper to destroy all child documents for a document + const loopChildren = async (documentId, opts) => { + const childDocuments = await Document.findAll({ + where: { parentDocumentId: documentId }, + }); + childDocuments.forEach(async child => { + await loopChildren(child.id, opts); + await child.destroy(opts); + }); + }; + + await loopChildren(this.id, options); + await this.destroy(options); +}; + +Document.prototype.archiveWithChildren = async function(userId, options) { + const archivedAt = new Date(); + + // Helper to archive all child documents for a document + const archiveChildren = async parentDocumentId => { + const childDocuments = await Document.findAll({ + where: { parentDocumentId }, + }); + childDocuments.forEach(async child => { + await archiveChildren(child.id); + + child.archivedAt = archivedAt; + child.lastModifiedById = userId; + await child.save(options); + }); + }; + + await archiveChildren(this.id); + this.archivedAt = archivedAt; + this.lastModifiedById = userId; + return this.save(options); +}; + Document.prototype.publish = async function() { if (this.publishedAt) return this.save(); @@ -312,6 +358,74 @@ Document.prototype.publish = async function() { return this; }; +// Moves a document from being visible to the team within a collection +// to the archived area, where it can be subsequently restored. +Document.prototype.archive = async function(userId) { + // archive any children and remove from the document structure + const collection = await this.getCollection(); + await collection.removeDocumentInStructure(this, { save: true }); + this.collection = collection; + + this.archivedAt = new Date(); + this.lastModifiedById = userId; + await this.save(); + await this.archiveWithChildren(userId); + + events.add({ name: 'documents.archive', model: this }); + return this; +}; + +// Restore an archived document back to being visible to the team +Document.prototype.unarchive = async function(userId) { + const collection = await this.getCollection(); + + // check to see if the documents parent hasn't been archived also + // If it has then restore the document to the collection root. + if (this.parentDocumentId) { + const parent = await Document.findOne({ + where: { + id: this.parentDocumentId, + archivedAt: { + // $FlowFixMe + [Op.eq]: null, + }, + }, + }); + if (!parent) this.parentDocumentId = undefined; + } + + await collection.addDocumentToStructure(this); + this.collection = collection; + + this.archivedAt = null; + this.lastModifiedById = userId; + await this.save(); + + events.add({ name: 'documents.unarchive', model: this }); + return this; +}; + +// Delete a document, archived or otherwise. +Document.prototype.delete = function(options) { + return sequelize.transaction(async (transaction: Transaction): Promise<*> => { + if (!this.archivedAt) { + // delete any children and remove from the document structure + const collection = await this.getCollection(); + if (collection) await collection.deleteDocument(this, { transaction }); + } + + await Revision.destroy({ + where: { documentId: this.id }, + transaction, + }); + + await this.destroy({ transaction, ...options }); + + events.add({ name: 'documents.delete', model: this }); + return this; + }); +}; + Document.prototype.getTimestamp = function() { return Math.round(new Date(this.updatedAt).getTime() / 1000); }; diff --git a/server/pages/developers/Api.js b/server/pages/developers/Api.js index c611bc671..01c7e097b 100644 --- a/server/pages/developers/Api.js +++ b/server/pages/developers/Api.js @@ -370,9 +370,23 @@ export default function Pricing() { + + + Archive a document and all of its child documents, if any. + + + + + + - Delete a document and all of its child documents if any. + Permanantly delete a document and all of its child documents, if + any. Restores a document to a previous revision by creating a new - revision with the contents of the given revisionId. + revision with the contents of the given revisionId or restores an + archived document if no revisionId is passed. diff --git a/server/policies/document.js b/server/policies/document.js index 17b5d4da7..eb0e3b0b6 100644 --- a/server/policies/document.js +++ b/server/policies/document.js @@ -6,18 +6,40 @@ const { allow, cannot } = policy; allow(User, 'create', Document); -allow( - User, - ['read', 'update', 'delete', 'share'], - Document, - (user, document) => { - if (document.collection) { - if (cannot(user, 'read', document.collection)) return false; - } - - return user.teamId === document.teamId; +allow(User, ['read', 'delete'], Document, (user, document) => { + if (document.collection) { + if (cannot(user, 'read', document.collection)) return false; } -); + + return user.teamId === document.teamId; +}); + +allow(User, ['update', 'share'], Document, (user, document) => { + if (document.collection) { + if (cannot(user, 'read', document.collection)) return false; + } + if (document.archivedAt) return false; + + return user.teamId === document.teamId; +}); + +allow(User, 'archive', Document, (user, document) => { + if (document.collection) { + if (cannot(user, 'read', document.collection)) return false; + } + if (!document.publishedAt) return false; + + return user.teamId === document.teamId; +}); + +allow(User, 'unarchive', Document, (user, document) => { + if (document.collection) { + if (cannot(user, 'read', document.collection)) return false; + } + if (!document.archivedAt) return false; + + return user.teamId === document.teamId; +}); allow( Document, diff --git a/server/presenters/document.js b/server/presenters/document.js index a0cc240db..266e01b66 100644 --- a/server/presenters/document.js +++ b/server/presenters/document.js @@ -32,6 +32,8 @@ async function present(ctx: Object, document: Document, options: ?Options) { updatedAt: document.updatedAt, updatedBy: undefined, publishedAt: document.publishedAt, + archivedAt: document.archivedAt, + deletedAt: document.deletedAt, team: document.teamId, collaborators: [], starred: !!(document.starred && document.starred.length), diff --git a/server/presenters/user.js b/server/presenters/user.js index 850a4c49e..295071eeb 100644 --- a/server/presenters/user.js +++ b/server/presenters/user.js @@ -18,7 +18,7 @@ export default ( ctx: Object, user: User, options: Options = {} -): UserPresentation => { +): ?UserPresentation => { const userData = {}; userData.id = user.id; userData.createdAt = user.createdAt; diff --git a/shared/components/Notice.js b/shared/components/Notice.js index 02179f9cd..1a33554c0 100644 --- a/shared/components/Notice.js +++ b/shared/components/Notice.js @@ -2,9 +2,11 @@ import styled from 'styled-components'; const Notice = styled.p` - background: #ffd95c; - color: hsla(46, 100%, 20%, 1); - padding: 10px; + background: ${props => + props.muted ? props.theme.sidebarBackground : props.theme.yellow}; + color: ${props => + props.muted ? props.theme.sidebarText : 'hsla(46, 100%, 20%, 1)'}; + padding: 10px 12px; border-radius: 4px; `; diff --git a/shared/utils/routeHelpers.js b/shared/utils/routeHelpers.js index 97d5db95d..b647f0eeb 100644 --- a/shared/utils/routeHelpers.js +++ b/shared/utils/routeHelpers.js @@ -84,3 +84,7 @@ export function integrations(): string { export function privacy(): string { return `${process.env.URL}/privacy`; } + +export function settings(): string { + return `${process.env.URL}/settings`; +} diff --git a/yarn.lock b/yarn.lock index 953bdc50b..0916e0fb8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6332,9 +6332,9 @@ outline-icons@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/outline-icons/-/outline-icons-1.6.0.tgz#6c7897d354e6bd77ca5498cd3a989b8cb9482574" -outline-icons@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/outline-icons/-/outline-icons-1.7.0.tgz#093f2f18c80bf5577bc31a6ff41460f2feb76fb7" +outline-icons@^1.8.0-0: + version "1.8.0-0" + resolved "https://registry.yarnpkg.com/outline-icons/-/outline-icons-1.8.0-0.tgz#a3499cc0837626541e6bc00c2bfed7279d1c8bb3" oy-vey@^0.10.0: version "0.10.0" From bf685c77030961cfdd6bac8a7441cd6dfe9b8458 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 6 Apr 2019 16:29:23 -0700 Subject: [PATCH 089/237] Update routeHelpers.js --- shared/utils/routeHelpers.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shared/utils/routeHelpers.js b/shared/utils/routeHelpers.js index b647f0eeb..bb364666a 100644 --- a/shared/utils/routeHelpers.js +++ b/shared/utils/routeHelpers.js @@ -86,5 +86,5 @@ export function privacy(): string { } export function settings(): string { - return `${process.env.URL}/settings`; + return `/settings`; } From e33d447a0d8a76bfd186250df9b95c30949899da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Glatzl?= Date: Sun, 7 Apr 2019 01:45:08 +0200 Subject: [PATCH 090/237] Issue #919 : Show DocumentPath in Breadcrumbs at Publishing Info, instead of only showing collection's name (#920) closes https://github.com/outline/outline/issues/919 --- .../components/PublishingInfo.js | 6 ++++- app/scenes/Document/components/Header.js | 2 +- .../components/Breadcrumb.js | 24 ++++++++++++++++++- 3 files changed, 29 insertions(+), 3 deletions(-) rename {app/scenes/Document => shared}/components/Breadcrumb.js (80%) diff --git a/app/components/DocumentPreview/components/PublishingInfo.js b/app/components/DocumentPreview/components/PublishingInfo.js index b8a553216..0b233b0e0 100644 --- a/app/components/DocumentPreview/components/PublishingInfo.js +++ b/app/components/DocumentPreview/components/PublishingInfo.js @@ -5,6 +5,7 @@ import Collection from 'models/Collection'; import Document from 'models/Document'; import Flex from 'shared/components/Flex'; import Time from 'shared/components/Time'; +import Breadcrumb from 'shared/components/Breadcrumb'; const Container = styled(Flex)` color: ${props => props.theme.textTertiary}; @@ -75,7 +76,10 @@ function PublishingInfo({ collection, showPublished, document }: Props) { {content} {collection && ( -  in {isDraft ? 'Drafts' : collection.name} +  in  + + {isDraft ? 'Drafts' : } + )} diff --git a/app/scenes/Document/components/Header.js b/app/scenes/Document/components/Header.js index a81dc6cde..c69aec185 100644 --- a/app/scenes/Document/components/Header.js +++ b/app/scenes/Document/components/Header.js @@ -14,7 +14,7 @@ import { documentEditUrl } from 'utils/routeHelpers'; import { meta } from 'utils/keyboard'; import Flex from 'shared/components/Flex'; -import Breadcrumb from './Breadcrumb'; +import Breadcrumb from 'shared/components/Breadcrumb'; import DocumentMenu from 'menus/DocumentMenu'; import NewChildDocumentMenu from 'menus/NewChildDocumentMenu'; import DocumentShare from 'scenes/DocumentShare'; diff --git a/app/scenes/Document/components/Breadcrumb.js b/shared/components/Breadcrumb.js similarity index 80% rename from app/scenes/Document/components/Breadcrumb.js rename to shared/components/Breadcrumb.js index 61496c260..9f094436b 100644 --- a/app/scenes/Document/components/Breadcrumb.js +++ b/shared/components/Breadcrumb.js @@ -14,15 +14,30 @@ import Flex from 'shared/components/Flex'; type Props = { document: Document, collections: CollectionsStore, + onlyText: boolean, }; -const Breadcrumb = observer(({ document, collections }: Props) => { +const Breadcrumb = observer(({ document, collections, onlyText }: Props) => { const path = document.pathToDocument.slice(0, -1); if (!document.collection) return null; const collection = collections.data.get(document.collection.id) || document.collection; + if (onlyText === true) { + return ( + + {collection.name} + {path.map(n => ( + + + {n.title} + + ))} + + ); + } + return ( @@ -54,6 +69,13 @@ const Wrapper = styled(Flex)` `}; `; +const SmallSlash = styled(GoToIcon)` + width: 15px; + height: 10px; + flex-shrink: 0; + opacity: 0.25; +`; + const Slash = styled(GoToIcon)` flex-shrink: 0; opacity: 0.25; From 1fc55783492afb2434d4c43db407488143c1dba7 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 6 Apr 2019 16:46:20 -0700 Subject: [PATCH 091/237] Fixes: Ensure publishing info does not wrap --- app/components/DocumentPreview/components/PublishingInfo.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/components/DocumentPreview/components/PublishingInfo.js b/app/components/DocumentPreview/components/PublishingInfo.js index 0b233b0e0..faa7c5f83 100644 --- a/app/components/DocumentPreview/components/PublishingInfo.js +++ b/app/components/DocumentPreview/components/PublishingInfo.js @@ -10,6 +10,8 @@ import Breadcrumb from 'shared/components/Breadcrumb'; const Container = styled(Flex)` color: ${props => props.theme.textTertiary}; font-size: 13px; + white-space: nowrap; + overflow: hidden; `; const Modified = styled.span` From ea3e81acc4881bc8c3abd89146223e3b5026901a Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 6 Apr 2019 17:07:14 -0700 Subject: [PATCH 092/237] Closes #922 - Dark mode fixes --- app/components/Collaborators.js | 2 +- shared/styles/theme.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/components/Collaborators.js b/app/components/Collaborators.js index 2905ce8a0..b53740876 100644 --- a/app/components/Collaborators.js +++ b/app/components/Collaborators.js @@ -145,7 +145,7 @@ const More = styled.div` border-radius: 12px; background: ${props => props.theme.slate}; color: ${props => props.theme.text}; - border: 2px solid #fff; + border: 2px solid ${props => props.theme.background}; text-align: center; line-height: 20px; font-size: 11px; diff --git a/shared/styles/theme.js b/shared/styles/theme.js index 540255b39..bed1cda60 100644 --- a/shared/styles/theme.js +++ b/shared/styles/theme.js @@ -138,7 +138,7 @@ export const dark = { codeBackground: colors.almostBlack, codeBorder: colors.black50, embedBorder: colors.black50, - horizontalRule: colors.almostWhite, + horizontalRule: darken(0.2, colors.slate), }; export default light; From 135d035eb580ee44573df585e731f305c253d698 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sat, 6 Apr 2019 17:59:15 -0700 Subject: [PATCH 093/237] Fixes: Unneccessary refresh navigating to settings --- app/menus/AccountMenu.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/menus/AccountMenu.js b/app/menus/AccountMenu.js index 84d01bb9f..ddfff338a 100644 --- a/app/menus/AccountMenu.js +++ b/app/menus/AccountMenu.js @@ -1,5 +1,6 @@ // @flow import * as React from 'react'; +import { Link } from 'react-router-dom'; import { inject, observer } from 'mobx-react'; import { MoonIcon } from 'outline-icons'; import styled, { withTheme } from 'styled-components'; @@ -42,7 +43,9 @@ class AccountMenu extends React.Component { style={{ marginRight: 10, marginTop: -10 }} label={this.props.label} > - Settings + + Settings + Keyboard shortcuts From d668bd564644c13fdc344978b55271a655a3832b Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sun, 7 Apr 2019 09:56:09 -0700 Subject: [PATCH 094/237] Remove duplicate save in archive Improve documents.archive test --- server/api/documents.test.js | 4 ++++ server/models/Document.js | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/server/api/documents.test.js b/server/api/documents.test.js index 1feac2f43..1dac998d3 100644 --- a/server/api/documents.test.js +++ b/server/api/documents.test.js @@ -1130,7 +1130,11 @@ describe('#documents.archive', async () => { const res = await server.post('/api/documents.archive', { body: { token: user.getJwtToken(), id: document.id }, }); + const body = await res.json(); + expect(res.status).toEqual(200); + expect(body.data.updatedBy.id).toEqual(user.id); + expect(body.data.archivedAt).toBeTruthy(); }); it('should require authentication', async () => { diff --git a/server/models/Document.js b/server/models/Document.js index dfba75a06..b043b7975 100644 --- a/server/models/Document.js +++ b/server/models/Document.js @@ -20,7 +20,6 @@ const Markdown = new MarkdownSerializer(); const URL_REGEX = /^[a-zA-Z0-9-]*-([a-zA-Z0-9]{10,15})$/; const DEFAULT_TITLE = 'Untitled document'; -// $FlowIssue invalid flow-typed slug.defaults.mode = 'rfc3986'; const slugify = text => slug(text, { @@ -366,9 +365,6 @@ Document.prototype.archive = async function(userId) { await collection.removeDocumentInStructure(this, { save: true }); this.collection = collection; - this.archivedAt = new Date(); - this.lastModifiedById = userId; - await this.save(); await this.archiveWithChildren(userId); events.add({ name: 'documents.archive', model: this }); From 705938e62226dc160aeeab93b1e0440f5a3ee037 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sun, 7 Apr 2019 15:57:05 -0700 Subject: [PATCH 095/237] Bump RME, fix tab to indent lists --- package.json | 2 +- yarn.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 5a8c8e285..33645a296 100644 --- a/package.json +++ b/package.json @@ -142,7 +142,7 @@ "react-waypoint": "^7.3.1", "redis": "^2.6.2", "redis-lock": "^0.1.0", - "rich-markdown-editor": "^9.1.1", + "rich-markdown-editor": "^9.1.2", "safestart": "1.1.0", "sequelize": "4.28.6", "sequelize-cli": "^5.4.0", diff --git a/yarn.lock b/yarn.lock index 0916e0fb8..eeb5b6ef9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7735,9 +7735,9 @@ retry-axios@0.3.2, retry-axios@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/retry-axios/-/retry-axios-0.3.2.tgz#5757c80f585b4cc4c4986aa2ffd47a60c6d35e13" -rich-markdown-editor@^9.1.1: - version "9.1.1" - resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-9.1.1.tgz#3fd0f2b2ed8e3e2690d29f7cefefa4bdf8fc7bef" +rich-markdown-editor@^9.1.2: + version "9.1.2" + resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-9.1.2.tgz#869d2a66d93b84ae6878ad3917dd3a012cffb721" dependencies: "@tommoor/slate-edit-list" "0.19.0-0" "@wikifactory/slate-edit-blockquote" "^0.7.1" From 16066c0b2489cbf46efdca3170f95b8e3726313c Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Sun, 7 Apr 2019 17:05:05 -0700 Subject: [PATCH 096/237] Add websocket reserved domains --- shared/utils/domains.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/shared/utils/domains.js b/shared/utils/domains.js index c7914482c..7e47ed59b 100644 --- a/shared/utils/domains.js +++ b/shared/utils/domains.js @@ -106,6 +106,9 @@ export const RESERVED_SUBDOMAINS = [ 'test', 'update', 'updates', + 'ws', + 'wss', + 'websockets', 'www', 'www1', 'www2', From 763f57a3dc6129c35eef0d970c21cf29ef16b6a4 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Mon, 8 Apr 2019 21:25:13 -0700 Subject: [PATCH 097/237] Move document improvements (#927) * Show all collections in UI * Introduce command pattern * Actually remove from previous collection * Stash * Fixes: Promises resolved outside of response lifecycle * :green_heart: * :green_heart: * documentMover tests * Transaction * Perf. More in transactions --- README.md | 1 + app/components/PathToDocument.js | 29 ++++--- app/models/Collection.js | 5 ++ app/models/Document.js | 4 +- .../Document/components/DocumentMove.js | 44 +++++----- app/stores/BaseStore.js | 4 + app/stores/CollectionsStore.js | 19 +++-- app/stores/DocumentsStore.js | 15 ++-- server/api/documents.js | 70 +++++++++------ server/commands/documentMover.js | 83 ++++++++++++++++++ server/commands/documentMover.test.js | 85 +++++++++++++++++++ server/models/Collection.js | 40 ++++----- server/models/Collection.test.js | 44 ---------- server/models/Document.js | 2 +- server/pages/developers/Api.js | 12 ++- server/policies/document.js | 2 +- 16 files changed, 313 insertions(+), 146 deletions(-) create mode 100644 server/commands/documentMover.js create mode 100644 server/commands/documentMover.test.js diff --git a/README.md b/README.md index cff4ae5aa..631a849cf 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,7 @@ Backend is driven by [Koa](http://koajs.com/) (API, web server), [Sequelize](htt - `server/models` - Database models (Sequelize) - `server/pages` - Server-side rendered public pages (React) - `server/presenters` - API responses for database models +- `server/commands` - Domain logic, currently being refactored from /models - `shared` - Code shared between frontend and backend applications ## Tests diff --git a/app/components/PathToDocument.js b/app/components/PathToDocument.js index 8ac9d8c4c..7f8c3cf50 100644 --- a/app/components/PathToDocument.js +++ b/app/components/PathToDocument.js @@ -2,16 +2,18 @@ import * as React from 'react'; import { observer } from 'mobx-react'; import styled from 'styled-components'; -import { GoToIcon } from 'outline-icons'; +import { GoToIcon, CollectionIcon, PrivateCollectionIcon } from 'outline-icons'; import Flex from 'shared/components/Flex'; import Document from 'models/Document'; +import Collection from 'models/Collection'; import type { DocumentPath } from 'stores/CollectionsStore'; type Props = { result: DocumentPath, - document?: Document, - onSuccess?: *, + document?: ?Document, + collection: ?Collection, + onSuccess?: () => void, ref?: *, }; @@ -23,27 +25,28 @@ class PathToDocument extends React.Component { if (!document) return; if (result.type === 'document') { - await document.move(result.id); - } else if ( - result.type === 'collection' && - result.id === document.collection.id - ) { - await document.move(null); + await document.move(result.collectionId, result.id); } else { - throw new Error('Not implemented yet'); + await document.move(result.collectionId, null); } if (onSuccess) onSuccess(); }; render() { - const { result, document, ref } = this.props; + const { result, collection, document, ref } = this.props; const Component = document ? ResultWrapperLink : ResultWrapper; if (!result) return
    ; return ( + {collection && + (collection.private ? ( + + ) : ( + + ))} {result.path .map(doc => {doc.title}) .reduce((prev, curr) => [prev, , curr])} @@ -64,7 +67,9 @@ const Title = styled.span` text-overflow: ellipsis; `; -const StyledGoToIcon = styled(GoToIcon)``; +const StyledGoToIcon = styled(GoToIcon)` + opacity: 0.25; +`; const ResultWrapper = styled.div` display: flex; diff --git a/app/models/Collection.js b/app/models/Collection.js index fecc37d14..96df4648a 100644 --- a/app/models/Collection.js +++ b/app/models/Collection.js @@ -24,6 +24,11 @@ export default class Collection extends BaseModel { updatedAt: ?string; url: string; + @computed + get isPrivate(): boolean { + return this.private; + } + @computed get isEmpty(): boolean { return this.documents.length === 0; diff --git a/app/models/Document.js b/app/models/Document.js index 743958394..554362c94 100644 --- a/app/models/Document.js +++ b/app/models/Document.js @@ -234,8 +234,8 @@ export default class Document extends BaseModel { } }; - move = (parentDocumentId: ?string) => { - return this.store.move(this, parentDocumentId); + move = (collectionId: string, parentDocumentId: ?string) => { + return this.store.move(this, collectionId, parentDocumentId); }; duplicate = () => { diff --git a/app/scenes/Document/components/DocumentMove.js b/app/scenes/Document/components/DocumentMove.js index 309a3d445..ebd737125 100644 --- a/app/scenes/Document/components/DocumentMove.js +++ b/app/scenes/Document/components/DocumentMove.js @@ -4,7 +4,7 @@ import ReactDOM from 'react-dom'; import { observable, computed } from 'mobx'; import { observer, inject } from 'mobx-react'; import { Search } from 'js-search'; -import { first, last } from 'lodash'; +import { last } from 'lodash'; import ArrowKeyNavigation from 'boundless-arrow-key-navigation'; import styled from 'styled-components'; @@ -33,19 +33,14 @@ class DocumentMove extends React.Component { @computed get searchIndex() { - const { document, collections } = this.props; + const { collections } = this.props; const paths = collections.pathsToDocuments; const index = new Search('id'); index.addIndex('title'); // Build index const indexeableDocuments = []; - paths.forEach(path => { - // TMP: For now, exclude paths to other collections - if (first(path.path).id !== document.collection.id) return; - - indexeableDocuments.push(path); - }); + paths.forEach(path => indexeableDocuments.push(path)); index.addDocuments(indexeableDocuments); return index; @@ -63,23 +58,22 @@ class DocumentMove extends React.Component { } else { // Default results, root of the current collection results = []; - document.collection.documents.forEach(doc => { - const path = collections.getPathForDocument(doc.id); - if (doc && path) { - results.push(path); + collections.orderedData.forEach(collection => { + collection.documents.forEach(doc => { + const path = collections.getPathForDocument(doc.id); + if (doc && path) { + results.push(path); + } + }); + + const rootPath = collections.getPathForDocument(collection.id); + if (rootPath) { + results = [rootPath, ...results]; } }); } } - if (document && document.parentDocumentId) { - // Add root if document does have a parent document - const rootPath = collections.getPathForDocument(document.collection.id); - if (rootPath) { - results = [rootPath, ...results]; - } - } - // Exclude root from search results if document is already at the root if (!document.parentDocumentId) { results = results.filter(result => result.id !== document.collection.id); @@ -119,7 +113,12 @@ class DocumentMove extends React.Component { const result = collections.getPathForDocument(document.id); if (result) { - return ; + return ( + + ); } } @@ -141,7 +140,7 @@ class DocumentMove extends React.Component { { key={result.id} result={result} document={document} + collection={collections.get(result.collectionId)} ref={ref => index === 0 && this.setFirstDocumentRef(ref) } diff --git a/app/stores/BaseStore.js b/app/stores/BaseStore.js index 950448428..dd2173973 100644 --- a/app/stores/BaseStore.js +++ b/app/stores/BaseStore.js @@ -65,6 +65,10 @@ export default class BaseStore { return this.create(params); } + get(id: string): ?T { + return this.data.get(id); + } + @action async create(params: Object) { if (!this.actions.includes('create')) { diff --git a/app/stores/CollectionsStore.js b/app/stores/CollectionsStore.js index ebd047bf9..0c893b13d 100644 --- a/app/stores/CollectionsStore.js +++ b/app/stores/CollectionsStore.js @@ -10,9 +10,10 @@ import naturalSort from 'shared/utils/naturalSort'; export type DocumentPathItem = { id: string, + collectionId: string, title: string, url: string, - type: 'document' | 'collection', + type: 'collection' | 'document', }; export type DocumentPath = DocumentPathItem & { @@ -52,20 +53,26 @@ export default class CollectionsStore extends BaseStore { @computed get pathsToDocuments(): DocumentPath[] { let results = []; - const travelDocuments = (documentList, path) => + const travelDocuments = (documentList, collectionId, path) => documentList.forEach(document => { const { id, title, url } = document; - const node = { id, title, url, type: 'document' }; + const node = { id, collectionId, title, url, type: 'document' }; results.push(concat(path, node)); - travelDocuments(document.children, concat(path, [node])); + travelDocuments(document.children, collectionId, concat(path, [node])); }); if (this.isLoaded) { this.data.forEach(collection => { const { id, name, url } = collection; - const node = { id, title: name, url, type: 'collection' }; + const node = { + id, + collectionId: id, + title: name, + url, + type: 'collection', + }; results.push([node]); - travelDocuments(collection.documents, [node]); + travelDocuments(collection.documents, id, [node]); }); } diff --git a/app/stores/DocumentsStore.js b/app/stores/DocumentsStore.js index 59ca18670..bcddcafad 100644 --- a/app/stores/DocumentsStore.js +++ b/app/stores/DocumentsStore.js @@ -294,17 +294,20 @@ export default class DocumentsStore extends BaseStore { }; @action - move = async (document: Document, parentDocumentId: ?string) => { + move = async ( + document: Document, + collectionId: string, + parentDocumentId: ?string + ) => { const res = await client.post('/documents.move', { id: document.id, - parentDocument: parentDocumentId, + collectionId, + parentDocumentId, }); invariant(res && res.data, 'Data not available'); - const collection = this.getCollectionForDocument(document); - if (collection) collection.refresh(); - - return this.add(res.data); + res.data.documents.forEach(this.add); + res.data.collections.forEach(this.rootStore.collections.add); }; @action diff --git a/server/api/documents.js b/server/api/documents.js index 40863e81e..0643d984a 100644 --- a/server/api/documents.js +++ b/server/api/documents.js @@ -3,7 +3,12 @@ import Router from 'koa-router'; import Sequelize from 'sequelize'; import auth from '../middlewares/authentication'; import pagination from './middlewares/pagination'; -import { presentDocument, presentRevision } from '../presenters'; +import documentMover from '../commands/documentMover'; +import { + presentDocument, + presentCollection, + presentRevision, +} from '../presenters'; import { Document, Collection, Share, Star, View, Revision } from '../models'; import { InvalidRequestError } from '../errors'; import events from '../events'; @@ -537,39 +542,56 @@ router.post('documents.update', auth(), async ctx => { }); router.post('documents.move', auth(), async ctx => { - const { id, parentDocument, index } = ctx.body; - ctx.assertPresent(id, 'id is required'); - if (parentDocument) - ctx.assertUuid(parentDocument, 'parentDocument must be a uuid'); - if (index) ctx.assertPositiveInteger(index, 'index must be an integer (>=0)'); + const { id, collectionId, parentDocumentId, index } = ctx.body; + ctx.assertUuid(id, 'id must be a uuid'); + ctx.assertUuid(collectionId, 'collectionId must be a uuid'); + + if (parentDocumentId) { + ctx.assertUuid(parentDocumentId, 'parentDocumentId must be a uuid'); + } + if (index) { + ctx.assertPositiveInteger(index, 'index must be a positive integer'); + } + if (parentDocumentId === id) { + throw new InvalidRequestError( + 'Infinite loop detected, cannot nest a document inside itself' + ); + } const user = ctx.state.user; const document = await Document.findById(id); - authorize(user, 'update', document); + authorize(user, 'move', document); - const collection = document.collection; - if (collection.type !== 'atlas') - throw new InvalidRequestError('This document can’t be moved'); + const collection = await Collection.findById(collectionId); + authorize(user, 'update', collection); - // Set parent document - if (parentDocument) { - const parent = await Document.findById(parentDocument); + if (collection.type !== 'atlas' && parentDocumentId) { + throw new InvalidRequestError( + 'Document cannot be nested in this collection type' + ); + } + + if (parentDocumentId) { + const parent = await Document.findById(parentDocumentId); authorize(user, 'update', parent); } - if (parentDocument === id) - throw new InvalidRequestError('Infinite loop detected and prevented!'); - - // If no parent document is provided, set it as null (move to root level) - document.parentDocumentId = parentDocument; - await document.save(); - - await collection.moveDocument(document, index); - // Update collection - document.collection = collection; + const { documents, collections } = await documentMover({ + document, + collectionId, + parentDocumentId, + index, + }); ctx.body = { - data: await presentDocument(ctx, document), + data: { + documents: await Promise.all( + documents.map(document => presentDocument(ctx, document)) + ), + collections: await Promise.all( + collections.map(collection => presentCollection(ctx, collection)) + ), + }, }; }); diff --git a/server/commands/documentMover.js b/server/commands/documentMover.js new file mode 100644 index 000000000..ebfa39ea6 --- /dev/null +++ b/server/commands/documentMover.js @@ -0,0 +1,83 @@ +// @flow +import { Document, Collection } from '../models'; +import { sequelize } from '../sequelize'; + +export default async function documentMover({ + document, + collectionId, + parentDocumentId, + index, +}: { + document: Document, + collectionId: string, + parentDocumentId: string, + index?: number, +}) { + let transaction; + const result = { collections: [], documents: [] }; + const collectionChanged = collectionId !== document.collectionId; + + try { + transaction = await sequelize.transaction(); + + // remove from original collection + const collection = await document.getCollection({ transaction }); + const documentJson = await collection.removeDocumentInStructure(document, { + save: false, + }); + + // if the collection is the same then it will get saved below, this + // line prevents a pointless intermediate save from occurring. + if (collectionChanged) await collection.save({ transaction }); + + // add to new collection (may be the same) + document.collectionId = collectionId; + document.parentDocumentId = parentDocumentId; + + const newCollection: Collection = collectionChanged + ? await Collection.findById(collectionId, { transaction }) + : collection; + await newCollection.addDocumentToStructure(document, index, { + documentJson, + }); + result.collections.push(collection); + + // if collection does not remain the same loop through children and change their + // collectionId too. This includes archived children, otherwise their collection + // would be wrong once restored. + if (collectionChanged) { + result.collections.push(newCollection); + + const loopChildren = async documentId => { + const childDocuments = await Document.findAll({ + where: { parentDocumentId: documentId }, + }); + + await Promise.all( + childDocuments.map(async child => { + await loopChildren(child.id); + await child.update({ collectionId }, { transaction }); + child.collection = newCollection; + result.documents.push(child); + }) + ); + }; + + await loopChildren(document.id); + } + + await document.save({ transaction }); + document.collection = newCollection; + result.documents.push(document); + + await transaction.commit(); + } catch (err) { + if (transaction) { + await transaction.rollback(); + } + throw err; + } + + // we need to send all updated models back to the client + return result; +} diff --git a/server/commands/documentMover.test.js b/server/commands/documentMover.test.js new file mode 100644 index 000000000..0134c6e0c --- /dev/null +++ b/server/commands/documentMover.test.js @@ -0,0 +1,85 @@ +/* eslint-disable flowtype/require-valid-file-annotation */ +import documentMover from '../commands/documentMover'; +import { flushdb, seed } from '../test/support'; +import { buildDocument, buildCollection } from '../test/factories'; + +beforeEach(flushdb); + +describe('documentMover', async () => { + it('should move within a collection', async () => { + const { document, collection } = await seed(); + + const response = await documentMover({ + document, + collectionId: collection.id, + }); + + expect(response.collections.length).toEqual(1); + expect(response.documents.length).toEqual(1); + }); + + it('should move with children', async () => { + const { document, collection } = await seed(); + const newDocument = await buildDocument({ + parentDocumentId: document.id, + collectionId: collection.id, + teamId: collection.teamId, + userId: collection.creatorId, + title: 'Child document', + text: 'content', + }); + await collection.addDocumentToStructure(newDocument); + + const response = await documentMover({ + document, + collectionId: collection.id, + parentDocumentId: undefined, + index: 0, + }); + + expect(response.collections[0].documentStructure[0].children[0].id).toBe( + newDocument.id + ); + expect(response.collections.length).toEqual(1); + expect(response.documents.length).toEqual(1); + }); + + it('should move with children to another collection', async () => { + const { document, collection } = await seed(); + const newCollection = await buildCollection({ + teamId: collection.teamId, + }); + const newDocument = await buildDocument({ + parentDocumentId: document.id, + collectionId: collection.id, + teamId: collection.teamId, + userId: collection.creatorId, + title: 'Child document', + text: 'content', + }); + await collection.addDocumentToStructure(newDocument); + + const response = await documentMover({ + document, + collectionId: newCollection.id, + parentDocumentId: undefined, + index: 0, + }); + + // check document ids where updated + await newDocument.reload(); + expect(newDocument.collectionId).toBe(newCollection.id); + + await document.reload(); + expect(document.collectionId).toBe(newCollection.id); + + // check collection structure updated + expect(response.collections[0].id).toBe(collection.id); + expect(response.collections[1].id).toBe(newCollection.id); + expect(response.collections[1].documentStructure[0].children[0].id).toBe( + newDocument.id + ); + expect(response.collections.length).toEqual(2); + expect(response.documents.length).toEqual(2); + }); +}); diff --git a/server/models/Collection.js b/server/models/Collection.js index 0cbef17fb..01bc33e7c 100644 --- a/server/models/Collection.js +++ b/server/models/Collection.js @@ -156,8 +156,12 @@ Collection.prototype.addDocumentToStructure = async function( ) { if (!this.documentStructure) return; + let unlock; + // documentStructure can only be updated by one request at a time - const unlock = await asyncLock(`collection-${this.id}`); + if (options.save !== false) { + unlock = await asyncLock(`collection-${this.id}`); + } // If moving existing document with children, use existing structure const documentJson = { @@ -195,8 +199,11 @@ Collection.prototype.addDocumentToStructure = async function( // Sequelize doesn't seem to set the value with splice on JSONB field this.documentStructure = this.documentStructure; - await this.save(options); - unlock(); + + if (options.save !== false) { + await this.save(options); + if (unlock) unlock(); + } return this; }; @@ -234,34 +241,21 @@ Collection.prototype.updateDocument = async function( return this; }; -/** - * moveDocument is combination of removing the document from the structure - * and placing it back the the new location with the existing children. - */ -Collection.prototype.moveDocument = async function(document, index) { - if (!this.documentStructure) return; - - const documentJson = await this.removeDocumentInStructure(document); - await this.addDocumentToStructure(document, index, { documentJson }); -}; - Collection.prototype.deleteDocument = async function(document) { - await this.removeDocumentInStructure(document, { save: true }); + await this.removeDocumentInStructure(document); await document.deleteWithChildren(); }; Collection.prototype.removeDocumentInStructure = async function( document, - options?: { save?: boolean } + options ) { if (!this.documentStructure) return; let returnValue; let unlock; - if (options && options.save) { - // documentStructure can only be updated by one request at the time - unlock = await asyncLock(`collection-${this.id}`); - } + // documentStructure can only be updated by one request at the time + unlock = await asyncLock(`collection-${this.id}`); const removeFromChildren = async (children, id) => { children = await Promise.all( @@ -287,10 +281,8 @@ Collection.prototype.removeDocumentInStructure = async function( document.id ); - if (options && options.save) { - await this.save(options); - if (unlock) await unlock(); - } + await this.save(options); + if (unlock) await unlock(); return returnValue; }; diff --git a/server/models/Collection.test.js b/server/models/Collection.test.js index da81c4808..c7121d2e3 100644 --- a/server/models/Collection.test.js +++ b/server/models/Collection.test.js @@ -145,37 +145,7 @@ describe('#updateDocument', () => { }); }); -describe('#moveDocument', () => { - test('should move a document without children', async () => { - const { collection, document } = await seed(); - - expect(collection.documentStructure[1].id).toBe(document.id); - await collection.moveDocument(document, 0); - expect(collection.documentStructure[0].id).toBe(document.id); - }); - - test('should move a document with children', async () => { - const { collection, document } = await seed(); - const newDocument = await Document.create({ - parentDocumentId: document.id, - collectionId: collection.id, - teamId: collection.teamId, - userId: collection.creatorId, - lastModifiedById: collection.creatorId, - createdById: collection.creatorId, - title: 'Child document', - text: 'content', - }); - await collection.addDocumentToStructure(newDocument); - - await collection.moveDocument(document, 0); - expect(collection.documentStructure[0].children[0].id).toBe(newDocument.id); - }); -}); - describe('#removeDocument', () => { - const destroyMock = jest.fn(); - test('should save if removing', async () => { const { collection, document } = await seed(); jest.spyOn(collection, 'save'); @@ -260,18 +230,4 @@ describe('#removeDocument', () => { }); expect(collectionDocuments.count).toBe(2); }); - - describe('options: deleteDocument = false', () => { - test('should remove documents from the structure but not destroy them from the DB', async () => { - const { collection, document } = await seed(); - jest.spyOn(collection, 'save'); - - const removedNode = await collection.removeDocumentInStructure(document); - expect(collection.documentStructure.length).toBe(1); - expect(destroyMock).not.toBeCalled(); - expect(collection.save).not.toBeCalled(); - expect(removedNode.id).toBe(document.id); - expect(removedNode.children).toEqual([]); - }); - }); }); diff --git a/server/models/Document.js b/server/models/Document.js index b043b7975..8ee1e1cc3 100644 --- a/server/models/Document.js +++ b/server/models/Document.js @@ -362,7 +362,7 @@ Document.prototype.publish = async function() { Document.prototype.archive = async function(userId) { // archive any children and remove from the document structure const collection = await this.getCollection(); - await collection.removeDocumentInStructure(this, { save: true }); + await collection.removeDocumentInStructure(this); this.collection = collection; await this.archiveWithChildren(userId); diff --git a/server/pages/developers/Api.js b/server/pages/developers/Api.js index 01c7e097b..5717a4367 100644 --- a/server/pages/developers/Api.js +++ b/server/pages/developers/Api.js @@ -352,8 +352,7 @@ export default function Pricing() { - Move a document into a new location inside the collection. This is - easily done by defining the parent document ID. If no parent + Move a document to a new location or collection. If no parent document is provided, the document will be moved to the collection root. @@ -364,8 +363,13 @@ export default function Pricing() { required /> + diff --git a/server/policies/document.js b/server/policies/document.js index eb0e3b0b6..12f324d0c 100644 --- a/server/policies/document.js +++ b/server/policies/document.js @@ -14,7 +14,7 @@ allow(User, ['read', 'delete'], Document, (user, document) => { return user.teamId === document.teamId; }); -allow(User, ['update', 'share'], Document, (user, document) => { +allow(User, ['update', 'move', 'share'], Document, (user, document) => { if (document.collection) { if (cannot(user, 'read', document.collection)) return false; } From a3ca3447d158ca35addc94b32e3c60d4376f6abb Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Mon, 8 Apr 2019 21:47:27 -0700 Subject: [PATCH 098/237] =?UTF-8?q?Closes=20#929=20=E2=80=93=20Clarify=20p?= =?UTF-8?q?in=20feature?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DocumentPreview/DocumentPreview.js | 4 +++- app/menus/DocumentMenu.js | 20 +++++++++++-------- app/scenes/Collection.js | 6 +++++- yarn.lock | 1 + 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/app/components/DocumentPreview/DocumentPreview.js b/app/components/DocumentPreview/DocumentPreview.js index e41806fc3..1f8e10fe1 100644 --- a/app/components/DocumentPreview/DocumentPreview.js +++ b/app/components/DocumentPreview/DocumentPreview.js @@ -17,6 +17,7 @@ type Props = { context?: ?string, showCollection?: boolean, showPublished?: boolean, + showPin?: boolean, link?: boolean, ref?: *, }; @@ -137,6 +138,7 @@ class DocumentPreview extends React.Component { document, showCollection, showPublished, + showPin, highlight, context, link, @@ -172,7 +174,7 @@ class DocumentPreview extends React.Component { )} )} - + {!queryIsInTitle && ( { render() { if (this.redirectTo) return ; - const { document, label, className, showPrint, auth } = this.props; + const { document, label, className, showPrint, showPin, auth } = this.props; const canShareDocuments = auth.team && auth.team.sharing; if (document.isArchived) { @@ -117,13 +118,16 @@ class DocumentMenu extends React.Component { } className={className}> {!document.isDraft ? ( - {document.pinned ? ( - - Unpin - - ) : ( - Pin - )} + {showPin && + (document.pinned ? ( + + Unpin + + ) : ( + + Pin to collection + + ))} {document.starred ? ( Unstar diff --git a/app/scenes/Collection.js b/app/scenes/Collection.js index 1200c35b4..00c871198 100644 --- a/app/scenes/Collection.js +++ b/app/scenes/Collection.js @@ -195,7 +195,7 @@ class CollectionScene extends React.Component { Pinned - + )} @@ -222,6 +222,7 @@ class CollectionScene extends React.Component { )} fetch={documents.fetchAlphabetical} options={{ collection: collection.id }} + showPin /> @@ -232,6 +233,7 @@ class CollectionScene extends React.Component { )} fetch={documents.fetchLeastRecentlyUpdated} options={{ collection: collection.id }} + showPin /> @@ -243,6 +245,7 @@ class CollectionScene extends React.Component { fetch={documents.fetchRecentlyPublished} options={{ collection: collection.id }} showPublished + showPin /> @@ -252,6 +255,7 @@ class CollectionScene extends React.Component { )} fetch={documents.fetchRecentlyUpdated} options={{ collection: collection.id }} + showPin /> diff --git a/yarn.lock b/yarn.lock index eeb5b6ef9..cf92919b6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7738,6 +7738,7 @@ retry-axios@0.3.2, retry-axios@^0.3.2: rich-markdown-editor@^9.1.2: version "9.1.2" resolved "https://registry.yarnpkg.com/rich-markdown-editor/-/rich-markdown-editor-9.1.2.tgz#869d2a66d93b84ae6878ad3917dd3a012cffb721" + integrity sha512-Sv9svBpH+rVktpNjD/73IpVTVE3atKVLt+Kdcx+o/DRkvJPdXwJkMYXM2jE8IIBRafgdGS/X6JZImVlsX5uHxQ== dependencies: "@tommoor/slate-edit-list" "0.19.0-0" "@wikifactory/slate-edit-blockquote" "^0.7.1" From 57e051d62bc8278458c385550cfc5d1d79987b70 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Mon, 8 Apr 2019 22:27:10 -0700 Subject: [PATCH 099/237] Clarify available options in document move closes #852 --- app/components/PathToDocument.js | 23 ++++---- .../Document/components/DocumentMove.js | 56 +++++++++---------- 2 files changed, 38 insertions(+), 41 deletions(-) diff --git a/app/components/PathToDocument.js b/app/components/PathToDocument.js index 7f8c3cf50..e67cd5adb 100644 --- a/app/components/PathToDocument.js +++ b/app/components/PathToDocument.js @@ -1,6 +1,7 @@ // @flow import * as React from 'react'; import { observer } from 'mobx-react'; +import { darken } from 'polished'; import styled from 'styled-components'; import { GoToIcon, CollectionIcon, PrivateCollectionIcon } from 'outline-icons'; import Flex from 'shared/components/Flex'; @@ -74,29 +75,29 @@ const StyledGoToIcon = styled(GoToIcon)` const ResultWrapper = styled.div` display: flex; margin-bottom: 10px; + margin-left: -4px; + user-select: none; color: ${props => props.theme.text}; cursor: default; `; const ResultWrapperLink = styled(ResultWrapper.withComponent('a'))` - height: 32px; - padding-top: 3px; - padding-left: 5px; + margin: 0 -10px; + padding: 8px 4px; + border-radius: 8px; + border: 2px solid transparent; &:hover, &:active, &:focus { - margin-left: 0px; - border-radius: 2px; - background: ${props => props.theme.black}; - color: ${props => props.theme.smokeLight}; + background: ${props => props.theme.listItemHoverBackground}; + border: 2px solid ${props => props.theme.listItemHoverBorder}; outline: none; - cursor: pointer; + } - ${StyledGoToIcon} { - fill: ${props => props.theme.white}; - } + &:focus { + border: 2px solid ${props => darken(0.5, props.theme.listItemHoverBorder)}; } `; diff --git a/app/scenes/Document/components/DocumentMove.js b/app/scenes/Document/components/DocumentMove.js index ebd737125..d33002b37 100644 --- a/app/scenes/Document/components/DocumentMove.js +++ b/app/scenes/Document/components/DocumentMove.js @@ -16,12 +16,16 @@ import Flex from 'shared/components/Flex'; import Document from 'models/Document'; import DocumentsStore from 'stores/DocumentsStore'; +import UiStore from 'stores/UiStore'; import CollectionsStore, { type DocumentPath } from 'stores/CollectionsStore'; +const MAX_RESULTS = 8; + type Props = { document: Document, documents: DocumentsStore, collections: CollectionsStore, + ui: UiStore, onRequestClose: *, }; @@ -53,24 +57,9 @@ class DocumentMove extends React.Component { let results = []; if (collections.isLoaded) { if (this.searchTerm) { - // Search by the keyword results = this.searchIndex.search(this.searchTerm); } else { - // Default results, root of the current collection - results = []; - collections.orderedData.forEach(collection => { - collection.documents.forEach(doc => { - const path = collections.getPathForDocument(doc.id); - if (doc && path) { - results.push(path); - } - }); - - const rootPath = collections.getPathForDocument(collection.id); - if (rootPath) { - results = [rootPath, ...results]; - } - }); + results = this.searchIndex._documents; } } @@ -100,6 +89,11 @@ class DocumentMove extends React.Component { } }; + handleSuccess = () => { + this.props.ui.showToast('Document moved'); + this.props.onRequestClose(); + }; + handleFilter = (ev: SyntheticInputEvent<*>) => { this.searchTerm = ev.target.value; }; @@ -140,7 +134,7 @@ class DocumentMove extends React.Component { { mode={ArrowKeyNavigation.mode.VERTICAL} defaultActiveChildIndex={0} > - {this.results.map((result, index) => ( - - index === 0 && this.setFirstDocumentRef(ref) - } - onSuccess={onRequestClose} - /> - ))} + {this.results + .slice(0, MAX_RESULTS) + .map((result, index) => ( + + index === 0 && this.setFirstDocumentRef(ref) + } + onSuccess={this.handleSuccess} + /> + ))} @@ -184,4 +180,4 @@ const StyledArrowKeyNavigation = styled(ArrowKeyNavigation)` flex: 1; `; -export default inject('documents', 'collections')(DocumentMove); +export default inject('documents', 'collections', 'ui')(DocumentMove); From c1256c61aa4e4d44f6a5a631ba2809f8922d8687 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Tue, 9 Apr 2019 09:20:30 -0700 Subject: [PATCH 100/237] Search archived documents (#932) * POC * Improved styling * Test --- app/components/Checkbox.js | 10 +++-- app/scenes/Search/Search.js | 79 ++++++++++++++++++++++------------ server/api/documents.js | 3 +- server/api/documents.test.js | 23 ++++++++++ server/models/Document.js | 2 +- server/pages/developers/Api.js | 6 ++- 6 files changed, 89 insertions(+), 34 deletions(-) diff --git a/app/components/Checkbox.js b/app/components/Checkbox.js index 6f17e645e..33536cf83 100644 --- a/app/components/Checkbox.js +++ b/app/components/Checkbox.js @@ -8,15 +8,18 @@ export type Props = { label?: string, className?: string, note?: string, + small?: boolean, }; const LabelText = styled.span` font-weight: 500; - margin-left: 10px; + margin-left: ${props => (props.small ? '6px' : '10px')}; + ${props => (props.small ? `color: ${props.theme.textSecondary}` : '')}; `; const Wrapper = styled.div` padding-bottom: 8px; + ${props => (props.small ? 'font-size: 14px' : '')}; `; const Label = styled.label` @@ -28,15 +31,16 @@ export default function Checkbox({ label, note, className, + small, short, ...rest }: Props) { return ( - + {note && {note}} diff --git a/app/scenes/Search/Search.js b/app/scenes/Search/Search.js index 6bff9f7e6..63e1c2770 100644 --- a/app/scenes/Search/Search.js +++ b/app/scenes/Search/Search.js @@ -18,6 +18,8 @@ import { meta } from 'utils/keyboard'; import Flex from 'shared/components/Flex'; import Empty from 'components/Empty'; import Fade from 'components/Fade'; +import Checkbox from 'components/Checkbox'; + import HelpText from 'components/HelpText'; import CenteredContent from 'components/CenteredContent'; import LoadingIndicator from 'components/LoadingIndicator'; @@ -33,33 +35,6 @@ type Props = { notFound: ?boolean, }; -const Container = styled(CenteredContent)` - > div { - position: relative; - height: 100%; - } -`; - -const ResultsWrapper = styled(Flex)` - position: absolute; - transition: all 300ms cubic-bezier(0.65, 0.05, 0.36, 1); - top: ${props => (props.pinToTop ? '0%' : '50%')}; - margin-top: ${props => (props.pinToTop ? '40px' : '-75px')}; - width: 100%; -`; - -const ResultList = styled(Flex)` - margin-bottom: 150px; - opacity: ${props => (props.visible ? '1' : '0')}; - transition: all 400ms cubic-bezier(0.65, 0.05, 0.36, 1); -`; - -const StyledArrowKeyNavigation = styled(ArrowKeyNavigation)` - display: flex; - flex-direction: column; - flex: 1; -`; - @observer class Search extends React.Component { firstDocument: ?DocumentPreview; @@ -68,6 +43,7 @@ class Search extends React.Component { @observable offset: number = 0; @observable allowLoadMore: boolean = true; @observable isFetching: boolean = false; + @observable includeArchived: boolean = false; @observable pinToTop: boolean = !!this.props.match.params.query; componentDidMount() { @@ -114,6 +90,11 @@ class Search extends React.Component { this.fetchResultsDebounced(); }; + handleFilterChange = ev => { + this.includeArchived = ev.target.checked; + this.fetchResultsDebounced(); + }; + @action loadMoreResults = async () => { // Don't paginate if there aren't more results or we’re in the middle of fetching @@ -132,6 +113,7 @@ class Search extends React.Component { const results = await this.props.documents.search(this.query, { offset: this.offset, limit: DEFAULT_PAGINATION_LIMIT, + includeArchived: this.includeArchived, }); if (results.length > 0) this.pinToTop = true; @@ -199,6 +181,17 @@ class Search extends React.Component { )} + {this.pinToTop && ( + + + + )} {showEmpty && No matching documents.} { } } +const Container = styled(CenteredContent)` + > div { + position: relative; + height: 100%; + } +`; + +const ResultsWrapper = styled(Flex)` + position: absolute; + transition: all 300ms cubic-bezier(0.65, 0.05, 0.36, 1); + top: ${props => (props.pinToTop ? '0%' : '50%')}; + margin-top: ${props => (props.pinToTop ? '40px' : '-75px')}; + width: 100%; +`; + +const ResultList = styled(Flex)` + margin-bottom: 150px; + opacity: ${props => (props.visible ? '1' : '0')}; + transition: all 400ms cubic-bezier(0.65, 0.05, 0.36, 1); +`; + +const StyledArrowKeyNavigation = styled(ArrowKeyNavigation)` + display: flex; + flex-direction: column; + flex: 1; +`; + +const Filters = styled(Flex)` + border-bottom: 1px solid ${props => props.theme.divider}; + margin-bottom: 10px; +`; + export default withRouter(inject('documents')(Search)); diff --git a/server/api/documents.js b/server/api/documents.js index 0643d984a..883484cf0 100644 --- a/server/api/documents.js +++ b/server/api/documents.js @@ -367,12 +367,13 @@ router.post('documents.restore', auth(), async ctx => { }); router.post('documents.search', auth(), pagination(), async ctx => { - const { query } = ctx.body; + const { query, includeArchived } = ctx.body; const { offset, limit } = ctx.state.pagination; ctx.assertPresent(query, 'query is required'); const user = ctx.state.user; const results = await Document.searchForUser(user, query, { + includeArchived: includeArchived === 'true', offset, limit, }); diff --git a/server/api/documents.test.js b/server/api/documents.test.js index 1dac998d3..392a24bce 100644 --- a/server/api/documents.test.js +++ b/server/api/documents.test.js @@ -464,6 +464,29 @@ describe('#documents.search', async () => { expect(body.data.length).toEqual(0); }); + it('should return archived documents if chosen', async () => { + const { user } = await seed(); + const document = await buildDocument({ + title: 'search term', + text: 'search term', + teamId: user.teamId, + }); + await document.archive(user.id); + + const res = await server.post('/api/documents.search', { + body: { + token: user.getJwtToken(), + query: 'search term', + includeArchived: 'true', + }, + }); + const body = await res.json(); + + expect(res.status).toEqual(200); + expect(body.data.length).toEqual(1); + expect(body.data[0].document.text).toEqual('search term'); + }); + it('should not return documents in private collections not a member of', async () => { const { user } = await seed(); const collection = await buildCollection({ private: true }); diff --git a/server/models/Document.js b/server/models/Document.js index 8ee1e1cc3..7b8a11fdc 100644 --- a/server/models/Document.js +++ b/server/models/Document.js @@ -224,7 +224,7 @@ Document.searchForUser = async ( FROM documents WHERE "searchVector" @@ to_tsquery('english', :query) AND "collectionId" IN(:collectionIds) AND - "archivedAt" IS NULL AND + ${options.includeArchived ? '' : '"archivedAt" IS NULL AND'} "deletedAt" IS NULL AND ("publishedAt" IS NOT NULL OR "createdById" = '${user.id}') ORDER BY diff --git a/server/pages/developers/Api.js b/server/pages/developers/Api.js index 5717a4367..5c88c7ee5 100644 --- a/server/pages/developers/Api.js +++ b/server/pages/developers/Api.js @@ -250,11 +250,13 @@ export default function Pricing() { - This methods allows you to search all of your documents with - keywords. + This methods allows you to search your teams documents with + keywords. Search results will be restricted to those accessible by + the current access token. + From 0c1bf1586dc3e5276c68af387b649aa471968d32 Mon Sep 17 00:00:00 2001 From: Tom Moor Date: Wed, 10 Apr 2019 21:06:53 -0700 Subject: [PATCH 101/237] Closes outline/issues#926 Closes outline/issues#888 Added native lazy loading in prep for Chrome release --- app/embeds/components/Frame.js | 9 ++- package.json | 8 +-- yarn.lock | 120 ++++++++++++++++----------------- 3 files changed, 71 insertions(+), 66 deletions(-) diff --git a/app/embeds/components/Frame.js b/app/embeds/components/Frame.js index 1b0e3387a..26b579783 100644 --- a/app/embeds/components/Frame.js +++ b/app/embeds/components/Frame.js @@ -39,7 +39,7 @@ class Frame extends React.Component { forwardedRef, ...rest } = this.props; - const Component = border ? Iframe : 'iframe'; + const Component = border ? StyledIframe : 'iframe'; return ( @@ -52,6 +52,7 @@ class Frame extends React.Component { type="text/html" frameBorder="0" title="embed" + loading="lazy" allowFullScreen {...rest} /> @@ -68,7 +69,11 @@ const Rounded = styled.div` height: ${props => props.height}; `; -const Iframe = styled.iframe` +// This wrapper allows us to pass non-standard HTML attributes through to the DOM element +// https://www.styled-components.com/docs/basics#passed-props +const Iframe = props =>