diff --git a/.gitignore b/.gitignore
index 4ce2e5c..7a0e4e8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
+.idea/
build/
node_modules/
config.js
diff --git a/package.json b/package.json
index 45e07bd..299fd3b 100644
--- a/package.json
+++ b/package.json
@@ -8,7 +8,8 @@
"dev": "webpack-dev-server --content-base static --mode development",
"build": "NODE_ENV=production webpack --mode production",
"test": "ava --verbose",
- "test-watch": "ava --watch"
+ "test-watch": "ava --watch",
+ "lint": "standard \"src/**/*.js\" \"test/**/*.js\""
},
"dependencies": {
"babel-polyfill": "^6.26.0",
@@ -48,6 +49,7 @@
"node-sass": "^4.9.4",
"redux-devtools": "^3.4.0",
"sass-loader": "^7.1.0",
+ "standard": "^12.0.1",
"style-loader": "^0.23.1",
"webpack": "^4.20.2",
"webpack-cli": "^3.1.2",
diff --git a/src/actions/index.js b/src/actions/index.js
index cad3fa1..b8bdce0 100644
--- a/src/actions/index.js
+++ b/src/actions/index.js
@@ -1,16 +1,15 @@
+/* global fetch, alert */
import { urlFromEnv } from '../js/utilities'
-const EVENT_DATA_URL = urlFromEnv('EVENT_EXT');
-const CATEGORY_URL = urlFromEnv('CATEGORY_EXT');
-const TAGS_URL = urlFromEnv('TAGS_EXT');
-const SOURCES_URL = urlFromEnv('SOURCES_EXT');
-const NARRATIVE_URL = urlFromEnv('NARRATIVE_EXT');
-const SITES_URL = urlFromEnv('SITES_EXT');
-const eventUrlMap = (event) => `${process.env.SERVER_ROOT}${process.env.EVENT_DESC_ROOT}/${(event.id) ? event.id : event}`;
+const EVENT_DATA_URL = urlFromEnv('EVENT_EXT')
+const CATEGORY_URL = urlFromEnv('CATEGORY_EXT')
+const TAGS_URL = urlFromEnv('TAGS_EXT')
+const SOURCES_URL = urlFromEnv('SOURCES_EXT')
+const NARRATIVE_URL = urlFromEnv('NARRATIVE_EXT')
+const SITES_URL = urlFromEnv('SITES_EXT')
const domainMsg = (domainType) => `Something went wrong fetching ${domainType}. Check the URL or try disabling them in the config file.`
-
export function fetchDomain () {
let notifications = []
@@ -24,7 +23,6 @@ export function fetchDomain () {
return dispatch => {
dispatch(toggleFetchingDomain())
- const promises = []
const eventPromise = fetch(EVENT_DATA_URL)
.then(response => response.json())
@@ -96,27 +94,26 @@ export function fetchDomain () {
// TODO: handle this appropriately in React hierarchy
alert(err.message)
})
- };
+ }
}
export const FETCH_ERROR = 'FETCH_ERROR'
-export function fetchError(message) {
+export function fetchError (message) {
return {
type: FETCH_ERROR,
- message,
+ message
}
}
export const UPDATE_DOMAIN = 'UPDATE_DOMAIN'
-export function updateDomain(domain) {
+export function updateDomain (domain) {
return {
type: UPDATE_DOMAIN,
domain
}
}
-
-export function fetchSource(source) {
+export function fetchSource (source) {
return dispatch => {
if (!SOURCES_URL) {
dispatch(fetchSourceError('No source extension specified.'))
@@ -135,14 +132,12 @@ export function fetchSource(source) {
dispatch(fetchSourceError(err.message))
dispatch(toggleFetchingSources())
})
-
}
-
}
}
export const UPDATE_HIGHLIGHTED = 'UPDATE_HIGHLIGHTED'
-export function updateHighlighted(highlighted) {
+export function updateHighlighted (highlighted) {
return {
type: UPDATE_HIGHLIGHTED,
highlighted: highlighted
@@ -150,7 +145,7 @@ export function updateHighlighted(highlighted) {
}
export const UPDATE_SELECTED = 'UPDATE_SELECTED'
-export function updateSelected(selected) {
+export function updateSelected (selected) {
return {
type: UPDATE_SELECTED,
selected: selected
@@ -158,7 +153,7 @@ export function updateSelected(selected) {
}
export const UPDATE_DISTRICT = 'UPDATE_DISTRICT'
-export function updateDistrict(district) {
+export function updateDistrict (district) {
return {
type: UPDATE_DISTRICT,
district
@@ -166,7 +161,7 @@ export function updateDistrict(district) {
}
export const UPDATE_TAGFILTERS = 'UPDATE_TAGFILTERS'
-export function updateTagFilters(tag) {
+export function updateTagFilters (tag) {
return {
type: UPDATE_TAGFILTERS,
tag
@@ -174,52 +169,52 @@ export function updateTagFilters(tag) {
}
export const UPDATE_CATEGORYFILTERS = 'UPDATE_CATEGORYFILTERS'
-export function updateCategoryFilters(category) {
+export function updateCategoryFilters (category) {
return {
type: UPDATE_CATEGORYFILTERS,
category
}
}
-export const UPDATE_TIMERANGE = 'UPDATE_TIMERANGE';
-export function updateTimeRange(timerange) {
+export const UPDATE_TIMERANGE = 'UPDATE_TIMERANGE'
+export function updateTimeRange (timerange) {
return {
type: UPDATE_TIMERANGE,
timerange
}
}
-export const UPDATE_NARRATIVE = 'UPDATE_NARRATIVE';
-export function updateNarrative(narrative) {
+export const UPDATE_NARRATIVE = 'UPDATE_NARRATIVE'
+export function updateNarrative (narrative) {
return {
type: UPDATE_NARRATIVE,
narrative
}
}
-export const INCREMENT_NARRATIVE_CURRENT = 'INCREMENT_NARRATIVE_CURRENT';
-export function incrementNarrativeCurrent() {
+export const INCREMENT_NARRATIVE_CURRENT = 'INCREMENT_NARRATIVE_CURRENT'
+export function incrementNarrativeCurrent () {
return {
type: INCREMENT_NARRATIVE_CURRENT
}
}
-export const DECREMENT_NARRATIVE_CURRENT = 'DECREMENT_NARRATIVE_CURRENT';
-export function decrementNarrativeCurrent() {
+export const DECREMENT_NARRATIVE_CURRENT = 'DECREMENT_NARRATIVE_CURRENT'
+export function decrementNarrativeCurrent () {
return {
type: DECREMENT_NARRATIVE_CURRENT
}
}
export const RESET_ALLFILTERS = 'RESET_ALLFILTERS'
-export function resetAllFilters() {
+export function resetAllFilters () {
return {
type: RESET_ALLFILTERS
}
}
-export const UPDATE_SOURCE = "UPDATE_SOURCE"
-export function updateSource(source) {
+export const UPDATE_SOURCE = 'UPDATE_SOURCE'
+export function updateSource (source) {
return {
type: UPDATE_SOURCE,
source
@@ -229,65 +224,65 @@ export function updateSource(source) {
// UI
export const TOGGLE_SITES = 'TOGGLE_SITES'
-export function toggleSites() {
+export function toggleSites () {
return {
type: TOGGLE_SITES
}
}
export const TOGGLE_FETCHING_DOMAIN = 'TOGGLE_FETCHING_DOMAIN'
-export function toggleFetchingDomain() {
+export function toggleFetchingDomain () {
return {
type: TOGGLE_FETCHING_DOMAIN
}
}
export const TOGGLE_FETCHING_SOURCES = 'TOGGLE_FETCHING_SOURCES'
-export function toggleFetchingSources() {
+export function toggleFetchingSources () {
return {
type: TOGGLE_FETCHING_SOURCES
}
}
-export const TOGGLE_LANGUAGE = 'TOGGLE_LANGUAGE';
-export function toggleLanguage(language) {
+export const TOGGLE_LANGUAGE = 'TOGGLE_LANGUAGE'
+export function toggleLanguage (language) {
return {
type: TOGGLE_LANGUAGE,
- language,
+ language
}
}
-export const CLOSE_TOOLBAR = 'CLOSE_TOOLBAR';
-export function closeToolbar() {
+export const CLOSE_TOOLBAR = 'CLOSE_TOOLBAR'
+export function closeToolbar () {
return {
type: CLOSE_TOOLBAR
}
}
-export const TOGGLE_INFOPOPUP = 'TOGGLE_INFOPOPUP';
-export function toggleInfoPopup() {
+export const TOGGLE_INFOPOPUP = 'TOGGLE_INFOPOPUP'
+export function toggleInfoPopup () {
return {
type: TOGGLE_INFOPOPUP
}
}
-export const TOGGLE_MAPVIEW = 'TOGGLE_MAPVIEW';
- export function toggleMapView(layer) {
- return {
- type: TOGGLE_MAPVIEW,
- layer
- }
- }
+export const TOGGLE_MAPVIEW = 'TOGGLE_MAPVIEW'
+export function toggleMapView (layer) {
+ return {
+ type: TOGGLE_MAPVIEW,
+ layer
+ }
+}
export const TOGGLE_NOTIFICATIONS = 'TOGGLE_NOTIFICATIONS'
-export function toggleNotifications() {
+export function toggleNotifications () {
return {
type: TOGGLE_NOTIFICATIONS
}
}
export const MARK_NOTIFICATIONS_READ = 'MARK_NOTIFICATIONS_READ'
-export function markNotificationsRead() {
+export function markNotificationsRead () {
return {
type: MARK_NOTIFICATIONS_READ
}
@@ -296,7 +291,7 @@ export function markNotificationsRead() {
// ERRORS
export const FETCH_SOURCE_ERROR = 'FETCH_SOURCE_ERROR'
-export function fetchSourceError(msg) {
+export function fetchSourceError (msg) {
return {
type: FETCH_SOURCE_ERROR,
msg
diff --git a/src/components/presentational/CardCaret.js b/src/components/presentational/CardCaret.js
index 36994b3..d3d4fc8 100644
--- a/src/components/presentational/CardCaret.js
+++ b/src/components/presentational/CardCaret.js
@@ -1,18 +1,17 @@
-import React from 'react';
+import React from 'react'
const CardCaret = ({ isHighlighted, toggle }) => {
-
let classes = (isHighlighted)
? 'arrow-down'
- : 'arrow-down folded';
+ : 'arrow-down folded'
return (
-
+
- );
+ )
}
-export default CardCaret;
+export default CardCaret
diff --git a/src/components/presentational/CardCategory.js b/src/components/presentational/CardCategory.js
index 20b396d..2d09d8d 100644
--- a/src/components/presentational/CardCategory.js
+++ b/src/components/presentational/CardCategory.js
@@ -1,15 +1,15 @@
-import React from 'react';
+import React from 'react'
-import { capitalizeFirstLetter } from '../../js/utilities.js';
+import { capitalizeFirstLetter } from '../../js/utilities.js'
const CardCategory = ({ categoryTitle, categoryLabel, color }) => (
-
+
{categoryTitle}
{capitalizeFirstLetter(categoryLabel)}
-
+
-);
+)
-export default CardCategory;
+export default CardCategory
diff --git a/src/components/presentational/CardLocation.js b/src/components/presentational/CardLocation.js
index e9598fa..92f1944 100644
--- a/src/components/presentational/CardLocation.js
+++ b/src/components/presentational/CardLocation.js
@@ -1,30 +1,29 @@
-import React from 'react';
+import React from 'react'
-import copy from '../../js/data/copy.json';
-import { isNotNullNorUndefined } from '../../js/utilities';
+import copy from '../../js/data/copy.json'
+import { isNotNullNorUndefined } from '../../js/utilities'
const CardLocation = ({ language, location }) => {
-
if (isNotNullNorUndefined(location)) {
return (
-
+
- location_on
+ location_on
{location}
- );
+ )
} else {
- const unknown = copy[language].cardstack.unknown_location;
+ const unknown = copy[language].cardstack.unknown_location
return (
-
+
- location_on
+ location_on
{unknown}
- );
+ )
}
}
-export default CardLocation;
+export default CardLocation
diff --git a/src/components/presentational/CardNarrative.js b/src/components/presentational/CardNarrative.js
index 49f590d..1f01808 100644
--- a/src/components/presentational/CardNarrative.js
+++ b/src/components/presentational/CardNarrative.js
@@ -1,15 +1,15 @@
-import React from 'react';
+import React from 'react'
-import CardNarrativeLink from './CardNarrativeLink';
+import CardNarrativeLink from './CardNarrativeLink'
const CardNarrative = (props) => (
-
+
Connected events
-
-);
+)
-export default CardNarrative;
+export default CardNarrative
diff --git a/src/components/presentational/CardNarrativeLink.js b/src/components/presentational/CardNarrativeLink.js
index 4d93316..b292e16 100644
--- a/src/components/presentational/CardNarrativeLink.js
+++ b/src/components/presentational/CardNarrativeLink.js
@@ -1,17 +1,17 @@
-import React from 'react';
+import React from 'react'
const CardNarrativeLink = ({ event, makeTimelabel, select }) => {
if (event !== null) {
- const timelabel = makeTimelabel(event.timestamp);
+ const timelabel = makeTimelabel(event.timestamp)
return (
select(event)}>
{`${timelabel} / ${event.location}`}
- );
+ )
}
- return (
None);
+ return (
None)
}
-export default CardNarrativeLink;
+export default CardNarrativeLink
diff --git a/src/components/presentational/CardSource.js b/src/components/presentational/CardSource.js
index 9b3da5b..f322a1b 100644
--- a/src/components/presentational/CardSource.js
+++ b/src/components/presentational/CardSource.js
@@ -3,11 +3,9 @@ import PropTypes from 'prop-types'
import Spinner from './Spinner'
import Img from 'react-image'
-import copy from '../../js/data/copy.json'
-
const CardSource = ({ source, isLoading, onClickHandler }) => {
- function renderIconText(type) {
- switch(type) {
+ function renderIconText (type) {
+ switch (type) {
case 'Eyewitness Testimony':
return 'visibility'
case 'Government Data':
@@ -29,7 +27,7 @@ const CardSource = ({ source, isLoading, onClickHandler }) => {
if (!source) {
return (
-
+
Error: this source was not found
)
@@ -45,30 +43,30 @@ const CardSource = ({ source, isLoading, onClickHandler }) => {
}
const fallbackIcon = (
-
+
{renderIconText(source.type)}
)
return (
-
+
{isLoading
- ?
- : (
-
onClickHandler(source)}>
- {!!thumbnail ? (
-

}
- unloader={fallbackIcon}
- width={30}
- height={30}
- />
- ) : fallbackIcon}
-
{source.id}
-
- )}
+ ?
+ : (
+
onClickHandler(source)}>
+ {thumbnail ? (
+

}
+ unloader={fallbackIcon}
+ width={30}
+ height={30}
+ />
+ ) : fallbackIcon}
+
{source.id}
+
+ )}
)
}
@@ -79,7 +77,7 @@ CardSource.propTypes = {
type: PropTypes.string
}),
isLoading: PropTypes.bool,
- onClickHandler: PropTypes.func.isRequired,
+ onClickHandler: PropTypes.func.isRequired
}
export default CardSource
diff --git a/src/components/presentational/CardSummary.js b/src/components/presentational/CardSummary.js
index 3e0cdbf..5cc2a3d 100644
--- a/src/components/presentational/CardSummary.js
+++ b/src/components/presentational/CardSummary.js
@@ -1,19 +1,18 @@
-import React from 'react';
+import React from 'react'
-import copy from '../../js/data/copy.json';
+import copy from '../../js/data/copy.json'
const CardSummary = ({ language, description, isHighlighted }) => {
-
- const summary = copy[language].cardstack.description;
+ const summary = copy[language].cardstack.description
return (
-
-
+
- );
+ )
}
-export default CardSummary;
+export default CardSummary
diff --git a/src/components/presentational/CardTags.js b/src/components/presentational/CardTags.js
index 6841cd4..711a888 100644
--- a/src/components/presentational/CardTags.js
+++ b/src/components/presentational/CardTags.js
@@ -1,37 +1,36 @@
-import React from 'react';
+import React from 'react'
-import copy from '../../js/data/copy.json';
+import copy from '../../js/data/copy.json'
const CardTags = ({ tags, language }) => {
- const tags_lang = copy[language].cardstack.tags;
- const no_tags_lang = copy[language].cardstack.notags;
+ const tagsLang = copy[language].cardstack.tags
+ const noTagsLang = copy[language].cardstack.notags
if (tags.length > 0) {
return (
-
-
{tags_lang}:
+
+
{tagsLang}:
{tags.map((tag, idx) => {
- return (
-
- {tag.name}
- {(idx < tags.length - 1)
- ? ','
- : ''}
-
- );
+ return (
+
+ {tag.name}
+ {(idx < tags.length - 1)
+ ? ','
+ : ''}
+
+ )
})}
- );
+ )
}
return (
-
-
{tags_lang}
-
{no_tags_lang}
+
+
{tagsLang}
+
{noTagsLang}
- );
-
+ )
}
-export default CardTags;
+export default CardTags
diff --git a/src/components/presentational/CardTimestamp.js b/src/components/presentational/CardTimestamp.js
index 0317896..ce8ec66 100644
--- a/src/components/presentational/CardTimestamp.js
+++ b/src/components/presentational/CardTimestamp.js
@@ -1,34 +1,31 @@
-import React from 'react';
+import React from 'react'
-import copy from '../../js/data/copy.json';
-import { isNotNullNorUndefined } from '../../js/utilities';
+import copy from '../../js/data/copy.json'
+import { isNotNullNorUndefined } from '../../js/utilities'
const CardTimestamp = ({ makeTimelabel, language, timestamp }) => {
-
- const daytime_lang = copy[language].cardstack.timestamp;
- const estimated_lang = copy[language].cardstack.estimated;
- const unknown_lang = copy[language].cardstack.unknown_time;
+ const unknownLang = copy[language].cardstack.unknown_time
if (isNotNullNorUndefined(timestamp)) {
- const timelabel = makeTimelabel(timestamp);
+ const timelabel = makeTimelabel(timestamp)
return (
-
+
- today
+ today
{timelabel}
- );
+ )
} else {
return (
-
+
- today
- {unknown_lang}
+ today
+ {unknownLang}
- );
+ )
}
}
-export default CardTimestamp;
+export default CardTimestamp
diff --git a/src/components/presentational/Checkbox.js b/src/components/presentational/Checkbox.js
index c57d409..976551c 100644
--- a/src/components/presentational/Checkbox.js
+++ b/src/components/presentational/Checkbox.js
@@ -1,10 +1,10 @@
-import React from 'react';
+import React from 'react'
export default ({ label, isActive, onClickCheckbox }) => (
onClickCheckbox()}>{label}
-);
+)
diff --git a/src/components/presentational/DatetimeDot.js b/src/components/presentational/DatetimeDot.js
index 8caf52a..24a7abd 100644
--- a/src/components/presentational/DatetimeDot.js
+++ b/src/components/presentational/DatetimeDot.js
@@ -15,14 +15,12 @@ export default ({
onClick={() => onSelect(events)}
>
-
+ />
{ extraRender ? extraRender() : null }
)
-
diff --git a/src/components/presentational/Icons/CoeventIcon.js b/src/components/presentational/Icons/CoeventIcon.js
index ffa5db7..7ddc2f9 100644
--- a/src/components/presentational/Icons/CoeventIcon.js
+++ b/src/components/presentational/Icons/CoeventIcon.js
@@ -1,24 +1,21 @@
-import React from 'react';
+import React from 'react'
const CoeventIcon = ({ isEnabled, toggleMapViews }) => {
-
- const classes = (isEnabled) ? 'action-button active disabled' : 'action-button disabled';
-
return (
- );
+ )
}
-export default CoeventIcon;
+export default CoeventIcon
diff --git a/src/components/presentational/Icons/RefreshIcon.js b/src/components/presentational/Icons/RefreshIcon.js
index 1e1eb03..b67c47a 100644
--- a/src/components/presentational/Icons/RefreshIcon.js
+++ b/src/components/presentational/Icons/RefreshIcon.js
@@ -1,14 +1,13 @@
-import React from 'react';
-
-const RefreshIcon = ({ }) => {
+import React from 'react'
+const RefreshIcon = () => {
return (
-
-
-
+
+
+
- );
+ )
}
-export default RefreshIcon;
+export default RefreshIcon
diff --git a/src/components/presentational/Icons/RouteIcon.js b/src/components/presentational/Icons/RouteIcon.js
index 4febda9..d0b9b36 100644
--- a/src/components/presentational/Icons/RouteIcon.js
+++ b/src/components/presentational/Icons/RouteIcon.js
@@ -1,20 +1,17 @@
-import React from 'react';
+import React from 'react'
const RouteIcon = ({ isEnabled, toggleMapViews }) => {
-
- const classes = (isEnabled) ? 'action-button active disabled' : 'action-button disabled';
-
return (
- );
+ )
}
-export default RouteIcon;
+export default RouteIcon
diff --git a/src/components/presentational/Icons/SitesIcon.js b/src/components/presentational/Icons/SitesIcon.js
index 226d31e..0b394cb 100644
--- a/src/components/presentational/Icons/SitesIcon.js
+++ b/src/components/presentational/Icons/SitesIcon.js
@@ -1,7 +1,7 @@
-import React from 'react';
+import React from 'react'
const SitesIcon = ({ isActive, isDisabled, onClickHandler }) => {
- let classes = (isActive) ? 'action-button enabled' : 'action-button';
+ let classes = (isActive) ? 'action-button enabled' : 'action-button'
if (isDisabled) {
classes = 'action-button disabled'
}
@@ -11,11 +11,11 @@ const SitesIcon = ({ isActive, isDisabled, onClickHandler }) => {
className={classes}
onClick={onClickHandler}
>
-
-
+
+
)
}
-export default SitesIcon;
+export default SitesIcon
diff --git a/src/components/presentational/LoadingOverlay.js b/src/components/presentational/LoadingOverlay.js
index bb1d0b7..14bc32c 100644
--- a/src/components/presentational/LoadingOverlay.js
+++ b/src/components/presentational/LoadingOverlay.js
@@ -1,21 +1,21 @@
-import React from 'react';
-import copy from '../../js/data/copy.json';
+import React from 'react'
+import copy from '../../js/data/copy.json'
const LoadingOverlay = ({ isLoading, language }) => {
- let classes = 'loading-overlay';
- classes += (!isLoading) ? ' hidden' : '';
+ let classes = 'loading-overlay'
+ classes += (!isLoading) ? ' hidden' : ''
return (
-
-
-
{copy[language].loading}
-
-
-
+
+
+
{copy[language].loading}
+
- );
-};
+ )
+}
-export default LoadingOverlay;
+export default LoadingOverlay
diff --git a/src/components/presentational/NarrativeCard.js b/src/components/presentational/NarrativeCard.js
index b47e10c..54a8b45 100644
--- a/src/components/presentational/NarrativeCard.js
+++ b/src/components/presentational/NarrativeCard.js
@@ -3,12 +3,10 @@ import { connect } from 'react-redux'
import { selectActiveNarrative } from '../../selectors'
function NarrativeCard ({ narrative }) {
- // no display if no narrative
+ // no display if no narrative
const { steps, current } = narrative
if (steps[current]) {
- const step = steps[current]
-
return (
@@ -27,14 +25,14 @@ function NarrativeCard ({ narrative }) {
-
+
)
} else {
return null
}
}
-function mapStateToProps(state) {
+function mapStateToProps (state) {
return {
narrative: selectActiveNarrative(state)
}
diff --git a/src/components/presentational/NarrativeClose.js b/src/components/presentational/NarrativeClose.js
index c514479..55a58af 100644
--- a/src/components/presentational/NarrativeClose.js
+++ b/src/components/presentational/NarrativeClose.js
@@ -9,7 +9,7 @@ export default ({ onClickHandler, closeMsg }) => {
{closeMsg}
diff --git a/src/components/presentational/NoSource.js b/src/components/presentational/NoSource.js
index d5c8701..a8b5749 100644
--- a/src/components/presentational/NoSource.js
+++ b/src/components/presentational/NoSource.js
@@ -1,16 +1,16 @@
-import React from 'react';
+import React from 'react'
-const NoSource = ({ failedUrls }) => {
+const NoSource = ({ failedUrls }) => {
return (
-
-
+
+
- error
-
+
error
+
No media found, as the original media has not yet been uploaded to the platform.
)
}
-export default NoSource;
+export default NoSource
diff --git a/src/components/presentational/Spinner.js b/src/components/presentational/Spinner.js
index f3c483c..841a8ea 100644
--- a/src/components/presentational/Spinner.js
+++ b/src/components/presentational/Spinner.js
@@ -1,12 +1,12 @@
-import React from 'react';
+import React from 'react'
const Spinner = ({ small }) => {
return (
)
}
-export default Spinner;
+export default Spinner
diff --git a/src/components/presentational/TimelineClip.js b/src/components/presentational/TimelineClip.js
index 29491da..ad1024b 100644
--- a/src/components/presentational/TimelineClip.js
+++ b/src/components/presentational/TimelineClip.js
@@ -1,15 +1,14 @@
-import React from 'react';
+import React from 'react'
const TimelineClip = ({ dims }) => (
-
+
-
+ />
-);
+)
-export default TimelineClip;
+export default TimelineClip
diff --git a/src/components/presentational/TimelineEvents.js b/src/components/presentational/TimelineEvents.js
index 8c9678f..0e59a3f 100644
--- a/src/components/presentational/TimelineEvents.js
+++ b/src/components/presentational/TimelineEvents.js
@@ -1,8 +1,8 @@
-import React from 'react';
+import React from 'react'
import DatetimeDot from './DatetimeDot'
// return a list of lists, where each list corresponds to a single category
-function getDotsToRender(events) {
+function getDotsToRender (events) {
// each datetime needs to render as many dots as there are distinct
// categories in the events contained by the datetime.
// To this end, eventsByCategory is an intermediate data structure that
@@ -32,7 +32,7 @@ const TimelineEvents = ({
transitionDuration,
styleDatetime
}) => {
- function renderDatetime(datetime) {
+ function renderDatetime (datetime) {
if (narrative) {
const { steps } = narrative
// check all events in the datetime before rendering in narrative
@@ -41,7 +41,7 @@ const TimelineEvents = ({
const event = datetime.events[i]
if (steps.map(s => s.id).includes(event.id)) {
isInNarrative = true
- break;
+ break
}
}
@@ -80,11 +80,11 @@ const TimelineEvents = ({
return (
{datetimes.map(datetime => renderDatetime(datetime))}
- );
+ )
}
-export default TimelineEvents;
+export default TimelineEvents
diff --git a/src/components/presentational/TimelineHandles.js b/src/components/presentational/TimelineHandles.js
index 3e65f9b..1e9be34 100644
--- a/src/components/presentational/TimelineHandles.js
+++ b/src/components/presentational/TimelineHandles.js
@@ -1,26 +1,24 @@
-import React from 'react';
+import React from 'react'
const TimelineHandles = ({ dims, onMoveTime }) => {
-
return (
-
+
onMoveTime('backwards')}
>
-
-
+
+
onMoveTime('forward')}
>
-
-
+
+
)
-
}
-export default TimelineHandles;
\ No newline at end of file
+export default TimelineHandles
diff --git a/src/components/presentational/TimelineHeader.js b/src/components/presentational/TimelineHeader.js
index f9ece09..a942cb7 100644
--- a/src/components/presentational/TimelineHeader.js
+++ b/src/components/presentational/TimelineHeader.js
@@ -1,15 +1,15 @@
-import React from 'react';
+import React from 'react'
const TimelineHeader = ({ title, date0, date1, onClick, hideInfo }) => (
{title}
{date0} - {date1}
-);
+)
-export default TimelineHeader;
+export default TimelineHeader
diff --git a/src/components/presentational/TimelineLabels.js b/src/components/presentational/TimelineLabels.js
index 36466ba..63a2154 100644
--- a/src/components/presentational/TimelineLabels.js
+++ b/src/components/presentational/TimelineLabels.js
@@ -1,27 +1,22 @@
-import React from 'react';
-
-import { formatterWithYear } from '../../js/utilities.js';
+import React from 'react'
const TimelineLabels = ({ dims, timelabels }) => {
-
return (
-
+ y1='10'
+ y2='20'
+ />
-
+ y1='10'
+ y2='20'
+ />
{/* {
)
}
-export default TimelineLabels;
+export default TimelineLabels
diff --git a/src/components/presentational/TimelineMarkers.js b/src/components/presentational/TimelineMarkers.js
index f780947..79166b1 100644
--- a/src/components/presentational/TimelineMarkers.js
+++ b/src/components/presentational/TimelineMarkers.js
@@ -1,10 +1,10 @@
-import React from 'react';
+import React from 'react'
const TimelineMarkers = ({ getEventX, getCategoryY, transitionDuration, selected }) => {
- function renderMarker(event) {
+ function renderMarker (event) {
return (
-
+ r='10'
+ />
)
}
return (
{selected.map(event => renderMarker(event))}
- );
+ )
}
-export default TimelineMarkers;
+export default TimelineMarkers
diff --git a/src/components/presentational/TimelineZoomControls.js b/src/components/presentational/TimelineZoomControls.js
index 3c0a564..a1b9379 100644
--- a/src/components/presentational/TimelineZoomControls.js
+++ b/src/components/presentational/TimelineZoomControls.js
@@ -1,12 +1,12 @@
-import React from 'react';
+import React from 'react'
const TimelineZoomControls = ({ extent, zoomLevels, dims, onApplyZoom }) => {
- function renderZoom(zoom, idx) {
+ function renderZoom (zoom, idx) {
const isActive = (zoom.duration === extent)
return (
onApplyZoom(zoom)}
>
@@ -19,7 +19,7 @@ const TimelineZoomControls = ({ extent, zoomLevels, dims, onApplyZoom }) => {
{zoomLevels.map((z, idx) => renderZoom(z, idx))}
- );
+ )
}
-export default TimelineZoomControls;
+export default TimelineZoomControls
diff --git a/src/js/utilities.js b/src/js/utilities.js
index dc242c3..42bc3b9 100644
--- a/src/js/utilities.js
+++ b/src/js/utilities.js
@@ -1,20 +1,21 @@
+/* global d3 */
/**
* Get URI params to start with predefined set of
* https://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript
* @param {string} name: name of paramater to search
* @param {string} url: url passed as variable, defaults to window.location.href
*/
-export function getParameterByName(name, url) {
- if (!url) url = window.location.href;
- name = name.replace(/[\[\]]/g, `\\$&`);
+export function getParameterByName (name, url) {
+ if (!url) url = window.location.href
+ name = name.replace(/[[\]]/g, `\\$&`)
- const regex = new RegExp(`[?&]${name}(=([^]*)|&|#|$)`);
- const results = regex.exec(url);
+ const regex = new RegExp(`[?&]${name}(=([^]*)|&|#|$)`)
+ const results = regex.exec(url)
- if (!results) return null;
- if (!results[2]) return '';
+ if (!results) return null
+ if (!results[2]) return ''
- return decodeURIComponent(results[2].replace(/\+/g, ' '));
+ return decodeURIComponent(results[2].replace(/\+/g, ' '))
}
/**
@@ -22,61 +23,61 @@ export function getParameterByName(name, url) {
* @param {array} arr1: array of numbers
* @param {array} arr2: array of numbers
*/
-export function areEqual(arr1, arr2) {
- return ((arr1.length === arr2.length) && arr1.every((element, index) => {
- return element === arr2[index];
- }));
+export function areEqual (arr1, arr2) {
+ return ((arr1.length === arr2.length) && arr1.every((element, index) => {
+ return element === arr2[index]
+ }))
}
/**
* Return whether the variable is neither null nor undefined
* @param {object} variable
*/
-export function isNotNullNorUndefined(variable) {
- return (typeof variable !== 'undefined' && variable !== null);
+export function isNotNullNorUndefined (variable) {
+ return (typeof variable !== 'undefined' && variable !== null)
}
/*
* Capitalizes _only_ the first letter of a string
* Taken from: https://stackoverflow.com/questions/1026069/how-do-i-make-the-first-letter-of-a-string-uppercase-in-javascript
*/
-export function capitalizeFirstLetter(string) {
- return string.charAt(0).toUpperCase() + string.slice(1);
+export function capitalizeFirstLetter (string) {
+ return string.charAt(0).toUpperCase() + string.slice(1)
}
-export function trimAndEllipse(string, stringNum) {
+export function trimAndEllipse (string, stringNum) {
if (string.length > stringNum) {
return string.substring(0, 120) + '...'
}
- return string;
+ return string
}
/**
* Return a Date object given a datetime string of the format: "2016-09-10T07:00:00"
* @param {string} datetime
*/
-export function parseDate(datetime) {
+export function parseDate (datetime) {
return new Date(datetime.slice(0, 4),
datetime.slice(5, 7) - 1,
datetime.slice(8, 10),
datetime.slice(11, 13),
datetime.slice(14, 16),
datetime.slice(17, 19)
- );
+ )
}
-export function formatterWithYear(datetime) {
- return d3.timeFormat("%d %b %Y, %H:%M")(datetime);
+export function formatterWithYear (datetime) {
+ return d3.timeFormat('%d %b %Y, %H:%M')(datetime)
}
-export function formatter(datetime) {
- return d3.timeFormat("%d %b, %H:%M")(datetime);
+export function formatter (datetime) {
+ return d3.timeFormat('%d %b, %H:%M')(datetime)
}
-export const parseTimestamp = ts => d3.timeParse("%Y-%m-%dT%H:%M:%S")(ts);
+export const parseTimestamp = ts => d3.timeParse('%Y-%m-%dT%H:%M:%S')(ts)
export function compareTimestamp (a, b) {
- return (parseTimestamp(a.timestamp) > parseTimestamp(b.timestamp));
+ return (parseTimestamp(a.timestamp) > parseTimestamp(b.timestamp))
}
/**
@@ -85,7 +86,7 @@ export function compareTimestamp (a, b) {
* source, call with two sets of parentheses:
* const src = insetSourceFrom(sources)(anEvent)
*/
-export function insetSourceFrom(allSources) {
+export function insetSourceFrom (allSources) {
return (event) => {
let sources
if (!event.sources) {
@@ -100,14 +101,13 @@ export function insetSourceFrom(allSources) {
sources
}
}
-
}
/**
* Debugging function: put in place of a mapStateToProps function to
* view that source modal by default
*/
-export function injectSource(id) {
+export function injectSource (id) {
return state => {
return {
...state,
@@ -119,7 +119,7 @@ export function injectSource(id) {
}
}
-export function urlFromEnv(ext) {
+export function urlFromEnv (ext) {
if (process.env[ext]) {
return `${process.env.SERVER_ROOT}${process.env[ext]}`
} else {
diff --git a/src/reducers/app.js b/src/reducers/app.js
index 43e39aa..cdf90f1 100644
--- a/src/reducers/app.js
+++ b/src/reducers/app.js
@@ -1,3 +1,4 @@
+/* global d3 */
import initial from '../store/initial.js'
import { parseDate } from '../js/utilities'
@@ -20,22 +21,22 @@ import {
TOGGLE_INFOPOPUP,
TOGGLE_NOTIFICATIONS,
FETCH_ERROR,
- FETCH_SOURCE_ERROR,
+ FETCH_SOURCE_ERROR
} from '../actions'
-function updateHighlighted(appState, action) {
+function updateHighlighted (appState, action) {
return Object.assign({}, appState, {
highlighted: action.highlighted
})
}
-function updateSelected(appState, action) {
+function updateSelected (appState, action) {
return Object.assign({}, appState, {
selected: action.selected
})
}
-function updateNarrative(appState, action) {
+function updateNarrative (appState, action) {
let minTime = appState.filters.timerange[0]
let maxTime = appState.filters.timerange[1]
@@ -43,7 +44,7 @@ function updateNarrative(appState, action) {
let cornerBound1 = [-180, -180]
// Compute narrative time range and map bounds
- if (!!action.narrative) {
+ if (action.narrative) {
minTime = parseDate('2100-01-01T00:00:00')
maxTime = parseDate('1900-01-01T00:00:00')
@@ -85,7 +86,7 @@ function updateNarrative(appState, action) {
...appState,
narrative: action.narrative,
narrativeState: {
- current: !!action.narrative ? 0 : null
+ current: action.narrative ? 0 : null
},
filters: {
...appState.filters,
@@ -95,29 +96,33 @@ function updateNarrative(appState, action) {
}
}
-function incrementNarrativeCurrent(appState, action) {
+function incrementNarrativeCurrent (appState, action) {
+ appState.narrativeState.current += 1
+
return {
...appState,
narrativeState: {
- current: appState.narrativeState.current += 1
+ current: appState.narrativeState.current
}
}
}
-function decrementNarrativeCurrent(appState, action) {
+function decrementNarrativeCurrent (appState, action) {
+ appState.narrativeState.current -= 1
+
return {
...appState,
narrativeState: {
- current: appState.narrativeState.current -= 1
+ current: appState.narrativeState.current
}
}
}
-function updateTagFilters(appState, action) {
+function updateTagFilters (appState, action) {
const tagFilters = appState.filters.tags.slice(0)
const nextActiveState = action.tag.active
- function traverseNode(node) {
+ function traverseNode (node) {
const tagFilter = tagFilters.find(tF => tF.key === node.key)
node.active = nextActiveState
if (!tagFilter) tagFilters.push(node)
@@ -136,7 +141,7 @@ function updateTagFilters(appState, action) {
})
}
-function updateCategoryFilters(appState, action) {
+function updateCategoryFilters (appState, action) {
const categoryFilters = appState.filters.categories.slice(0)
const catFilter = categoryFilters.find(cF => cF.category === action.category.category)
@@ -147,7 +152,6 @@ function updateCategoryFilters(appState, action) {
catFilter.active = (!!action.category.active)
}
-
return Object.assign({}, appState, {
filters: Object.assign({}, appState.filters, {
categories: categoryFilters
@@ -155,36 +159,36 @@ function updateCategoryFilters(appState, action) {
})
}
-function updateTimeRange(appState, action) { // XXX
+function updateTimeRange (appState, action) { // XXX
return Object.assign({}, appState, {
filters: Object.assign({}, appState.filters, {
timerange: action.timerange
- }),
+ })
})
}
-function resetAllFilters(appState) { // XXX
+function resetAllFilters (appState) { // XXX
return Object.assign({}, appState, {
filters: Object.assign({}, appState.filters, {
tags: [],
categories: [],
timerange: [
- d3.timeParse("%Y-%m-%dT%H:%M:%S")("2014-09-25T12:00:00"),
- d3.timeParse("%Y-%m-%dT%H:%M:%S")("2014-09-28T12:00:00")
- ],
+ d3.timeParse('%Y-%m-%dT%H:%M:%S')('2014-09-25T12:00:00'),
+ d3.timeParse('%Y-%m-%dT%H:%M:%S')('2014-09-28T12:00:00')
+ ]
}),
- selected: [],
+ selected: []
})
}
-function toggleLanguage(appState, action) {
+function toggleLanguage (appState, action) {
let otherLanguage = (appState.language === 'es-MX') ? 'en-US' : 'es-MX'
return Object.assign({}, appState, {
language: action.language || otherLanguage
})
}
-function toggleMapView(appState, action) {
+function toggleMapView (appState, action) {
const isLayerInView = !appState.views[layer]
const newViews = {}
newViews[layer] = isLayerInView
@@ -196,7 +200,7 @@ function toggleMapView(appState, action) {
})
}
-function toggleSites(appState, action) {
+function toggleSites (appState, action) {
return {
...appState,
flags: {
@@ -206,14 +210,14 @@ function toggleSites(appState, action) {
}
}
-function updateSource(appState, action) {
+function updateSource (appState, action) {
return {
...appState,
source: action.source
}
}
-function fetchError(state, action) {
+function fetchError (state, action) {
return {
...state,
error: action.message,
@@ -221,7 +225,7 @@ function fetchError(state, action) {
}
}
-function toggleFetchingDomain(appState, action) {
+function toggleFetchingDomain (appState, action) {
return Object.assign({}, appState, {
flags: Object.assign({}, appState.flags, {
isFetchingDomain: !appState.flags.isFetchingDomain
@@ -229,7 +233,7 @@ function toggleFetchingDomain(appState, action) {
})
}
-function toggleFetchingSources(appState, action) {
+function toggleFetchingSources (appState, action) {
return Object.assign({}, appState, {
flags: Object.assign({}, appState.flags, {
isFetchingSources: !appState.flags.isFetchingSources
@@ -237,7 +241,7 @@ function toggleFetchingSources(appState, action) {
})
}
-function toggleInfoPopup(appState, action) {
+function toggleInfoPopup (appState, action) {
return Object.assign({}, appState, {
flags: Object.assign({}, appState.flags, {
isInfopopup: !appState.flags.isInfopopup
@@ -245,7 +249,7 @@ function toggleInfoPopup(appState, action) {
})
}
-function toggleNotifications(appState, action) {
+function toggleNotifications (appState, action) {
return Object.assign({}, appState, {
flags: Object.assign({}, appState.flags, {
isNotification: !appState.flags.isNotification
@@ -253,7 +257,7 @@ function toggleNotifications(appState, action) {
})
}
-function fetchSourceError(appState, action) {
+function fetchSourceError (appState, action) {
return {
...appState,
errors: {
@@ -263,9 +267,7 @@ function fetchSourceError(appState, action) {
}
}
-
-
-function app(appState = initial.app, action) {
+function app (appState = initial.app, action) {
switch (action.type) {
case UPDATE_HIGHLIGHTED:
return updateHighlighted(appState, action)
diff --git a/src/reducers/index.js b/src/reducers/index.js
index 3b39f37..f7f3756 100644
--- a/src/reducers/index.js
+++ b/src/reducers/index.js
@@ -8,4 +8,4 @@ export default combineReducers({
app,
domain,
ui
-});;
+})
diff --git a/src/reducers/schema/categorySchema.js b/src/reducers/schema/categorySchema.js
index d51b561..9cc6f47 100644
--- a/src/reducers/schema/categorySchema.js
+++ b/src/reducers/schema/categorySchema.js
@@ -1,8 +1,8 @@
-import Joi from 'joi';
+import Joi from 'joi'
const categorySchema = Joi.object().keys({
- category: Joi.string().required(),
- description: Joi.string(),
-});
+ category: Joi.string().required(),
+ description: Joi.string()
+})
-export default categorySchema;
+export default categorySchema
diff --git a/src/reducers/schema/eventSchema.js b/src/reducers/schema/eventSchema.js
index fb42cf5..f351f7c 100644
--- a/src/reducers/schema/eventSchema.js
+++ b/src/reducers/schema/eventSchema.js
@@ -1,24 +1,24 @@
-import Joi from 'joi';
+import Joi from 'joi'
const eventSchema = Joi.object().keys({
- id: Joi.string().required(),
- description: Joi.string().allow('').required(),
- date: Joi.string().allow(''),
- time: Joi.string().allow(''),
- time_precision: Joi.string().allow(''),
- location: Joi.string().allow(''),
- latitude: Joi.string().allow(''),
- longitude: Joi.string().allow(''),
- type: Joi.string().allow(''),
- category: Joi.string().required(),
- narratives: Joi.array(),
- sources: Joi.array(),
- tags: Joi.array().allow(''),
- comments: Joi.string().allow(''),
- timestamp: Joi.string(),
+ id: Joi.string().required(),
+ description: Joi.string().allow('').required(),
+ date: Joi.string().allow(''),
+ time: Joi.string().allow(''),
+ time_precision: Joi.string().allow(''),
+ location: Joi.string().allow(''),
+ latitude: Joi.string().allow(''),
+ longitude: Joi.string().allow(''),
+ type: Joi.string().allow(''),
+ category: Joi.string().required(),
+ narratives: Joi.array(),
+ sources: Joi.array(),
+ tags: Joi.array().allow(''),
+ comments: Joi.string().allow(''),
+ timestamp: Joi.string(),
- // nested
- narrative___stepStyles: Joi.array(),
+ // nested
+ narrative___stepStyles: Joi.array()
})
.and('latitude', 'longitude')
.and('date', 'time', 'timestamp')
diff --git a/src/reducers/schema/narrativeSchema.js b/src/reducers/schema/narrativeSchema.js
index 373c0ac..2f4c8ff 100644
--- a/src/reducers/schema/narrativeSchema.js
+++ b/src/reducers/schema/narrativeSchema.js
@@ -1,9 +1,9 @@
-import Joi from 'joi';
+import Joi from 'joi'
const narrativeSchema = Joi.object().keys({
- id: Joi.string().required(),
- description: Joi.string().allow('').required(),
- label: Joi.string().required()
-});
+ id: Joi.string().required(),
+ description: Joi.string().allow('').required(),
+ label: Joi.string().required()
+})
-export default narrativeSchema;
+export default narrativeSchema
diff --git a/src/reducers/schema/siteSchema.js b/src/reducers/schema/siteSchema.js
index f58a71c..e054897 100644
--- a/src/reducers/schema/siteSchema.js
+++ b/src/reducers/schema/siteSchema.js
@@ -1,11 +1,11 @@
-import Joi from 'joi';
+import Joi from 'joi'
const siteSchema = Joi.object().keys({
- id: Joi.string().required(),
- description: Joi.string().allow('').required(),
- site: Joi.string().required(),
- latitude: Joi.string().required(),
- longitude: Joi.string().required()
-});
+ id: Joi.string().required(),
+ description: Joi.string().allow('').required(),
+ site: Joi.string().required(),
+ latitude: Joi.string().required(),
+ longitude: Joi.string().required()
+})
-export default siteSchema;
+export default siteSchema
diff --git a/src/reducers/schema/sourceSchema.js b/src/reducers/schema/sourceSchema.js
index 8ee91fc..eb5065d 100644
--- a/src/reducers/schema/sourceSchema.js
+++ b/src/reducers/schema/sourceSchema.js
@@ -1,18 +1,18 @@
-import Joi from 'joi';
+import Joi from 'joi'
const sourceSchema = Joi.object().keys({
- id: Joi.string().required(),
- title: Joi.string().allow(''),
- thumbnail: Joi.string().allow(''),
- paths: Joi.array().required(),
- type: Joi.string().allow(''),
- affil_s: Joi.array().allow(''),
- url: Joi.string().allow(''),
- desc: Joi.string().allow(''),
- parent: Joi.string().allow(''),
- author: Joi.string().allow(''),
- date: Joi.string().allow(''),
- notes: Joi.string().allow('')
-});
+ id: Joi.string().required(),
+ title: Joi.string().allow(''),
+ thumbnail: Joi.string().allow(''),
+ paths: Joi.array().required(),
+ type: Joi.string().allow(''),
+ affil_s: Joi.array().allow(''),
+ url: Joi.string().allow(''),
+ desc: Joi.string().allow(''),
+ parent: Joi.string().allow(''),
+ author: Joi.string().allow(''),
+ date: Joi.string().allow(''),
+ notes: Joi.string().allow('')
+})
-export default sourceSchema;
+export default sourceSchema
diff --git a/src/reducers/ui.js b/src/reducers/ui.js
index da2e018..e45dead 100644
--- a/src/reducers/ui.js
+++ b/src/reducers/ui.js
@@ -1,9 +1,9 @@
-import initial from '../store/initial.js';
+import initial from '../store/initial.js'
import {} from '../actions'
-function ui(uiState = initial.ui, action) {
- return uiState;
+function ui (uiState = initial.ui, action) {
+ return uiState
}
-export default ui;
+export default ui
diff --git a/src/reducers/utils/helpers.js b/src/reducers/utils/helpers.js
index 0a0509a..f18adaf 100644
--- a/src/reducers/utils/helpers.js
+++ b/src/reducers/utils/helpers.js
@@ -1,18 +1,19 @@
-export function parseDateTimes(arrayToParse) {
- const parsedArray = [];
+/* global d3 */
+export function parseDateTimes (arrayToParse) {
+ const parsedArray = []
arrayToParse.forEach(item => {
- let incoming_datetime = `${item.date}T00:00`;
- if (item.time) incoming_datetime = `${item.date}T${item.time}`;
- const parser = d3.timeParse(process.env.INCOMING_DATETIME_FORMAT);
- item.timestamp = d3.timeFormat("%Y-%m-%dT%H:%M:%S")(parser(incoming_datetime));
+ let incomingDateTime = `${item.date}T00:00`
+ if (item.time) incomingDateTime = `${item.date}T${item.time}`
+ const parser = d3.timeParse(process.env.incomingDateTime_FORMAT)
+ item.timestamp = d3.timeFormat('%Y-%m-%dT%H:%M:%S')(parser(incomingDateTime))
- parsedArray.push(item);
- });
+ parsedArray.push(item)
+ })
- return parsedArray;
+ return parsedArray
}
-export function capitalize(string) {
- return string.charAt(0).toUpperCase() + string.slice(1);
+export function capitalize (string) {
+ return string.charAt(0).toUpperCase() + string.slice(1)
}
diff --git a/src/reducers/utils/validators.js b/src/reducers/utils/validators.js
index 42bf3d3..97f7ed5 100644
--- a/src/reducers/utils/validators.js
+++ b/src/reducers/utils/validators.js
@@ -1,18 +1,18 @@
-import Joi from 'joi';
+import Joi from 'joi'
-import eventSchema from '../schema/eventSchema';
-import categorySchema from '../schema/categorySchema';
-import siteSchema from '../schema/siteSchema';
-import narrativeSchema from '../schema/narrativeSchema';
+import eventSchema from '../schema/eventSchema'
+import categorySchema from '../schema/categorySchema'
+import siteSchema from '../schema/siteSchema'
+import narrativeSchema from '../schema/narrativeSchema'
import sourceSchema from '../schema/sourceSchema'
-import { capitalize } from './helpers.js';
+import { capitalize } from './helpers.js'
/*
* Create an error notification object
* Types: ['error', 'warning', 'good', 'neural']
*/
-function makeError(type, id, message) {
+function makeError (type, id, message) {
return {
type: 'error',
id,
@@ -20,10 +20,8 @@ function makeError(type, id, message) {
}
}
-
-const isLeaf = node => (Object.keys(node.children).length === 0);
-const isDuplicate = (node, set) => { return (set.has(node.key)); };
-
+const isLeaf = node => (Object.keys(node.children).length === 0)
+const isDuplicate = (node, set) => { return (set.has(node.key)) }
/*
* Traverse a tag tree and check its duplicates
@@ -70,29 +68,29 @@ export function validateDomain (domain) {
categories: [],
sites: [],
narratives: [],
- sources: [],
+ sources: []
}
- function validateArrayItem(item, domainKey, schema) {
- const result = Joi.validate(item, schema);
+ function validateArrayItem (item, domainKey, schema) {
+ const result = Joi.validate(item, schema)
if (result.error !== null) {
- const id = item.id || '-';
- const domainStr = capitalize(domainKey);
- const error = makeError(domainStr, id, result.error.message);
+ const id = item.id || '-'
+ const domainStr = capitalize(domainKey)
+ const error = makeError(domainStr, id, result.error.message)
- discardedDomain[domainKey].push(Object.assign(item, { error }));
+ discardedDomain[domainKey].push(Object.assign(item, { error }))
} else {
- sanitizedDomain[domainKey].push(item);
+ sanitizedDomain[domainKey].push(item)
}
}
- function validateArray(items, domainKey, schema) {
+ function validateArray (items, domainKey, schema) {
items.forEach(item => {
validateArrayItem(item, domainKey, schema)
})
}
- function validateObject(obj, domainKey, itemSchema) {
+ function validateObject (obj, domainKey, itemSchema) {
Object.keys(obj).forEach(key => {
const vl = obj[key]
const result = Joi.validate(vl, itemSchema)
@@ -109,29 +107,28 @@ export function validateDomain (domain) {
})
}
- validateArray(domain.events, 'events', eventSchema);
- validateArray(domain.categories, 'categories', categorySchema);
- validateArray(domain.sites, 'sites', siteSchema);
- validateArray(domain.narratives, 'narratives', narrativeSchema);
- validateObject(domain.sources, 'sources', sourceSchema);
-
+ validateArray(domain.events, 'events', eventSchema)
+ validateArray(domain.categories, 'categories', categorySchema)
+ validateArray(domain.sites, 'sites', siteSchema)
+ validateArray(domain.narratives, 'narratives', narrativeSchema)
+ validateObject(domain.sources, 'sources', sourceSchema)
// Message the number of failed items in domain
Object.keys(discardedDomain).forEach(disc => {
- const len = discardedDomain[disc].length;
+ const len = discardedDomain[disc].length
if (len) {
sanitizedDomain.notifications.push({
message: `${len} invalid ${disc} not displayed.`,
items: discardedDomain[disc],
type: 'error'
- });
+ })
}
- });
+ })
// Validate uniqueness of tags
- const tagSet = new Set([]);
- const duplicateTags = [];
- validateTree(domain.tags, {}, tagSet, duplicateTags);
+ const tagSet = new Set([])
+ const duplicateTags = []
+ validateTree(domain.tags, {}, tagSet, duplicateTags)
// Duplicated tags
if (duplicateTags.length > 0) {
@@ -139,9 +136,9 @@ export function validateDomain (domain) {
message: `Tags are required to be unique. Ignoring duplicates for now.`,
items: duplicateTags,
type: 'error'
- });
+ })
}
- sanitizedDomain.tags = domain.tags;
+ sanitizedDomain.tags = domain.tags
- return sanitizedDomain;
+ return sanitizedDomain
}
diff --git a/src/selectors/index.js b/src/selectors/index.js
index 53cae3f..5af508e 100644
--- a/src/selectors/index.js
+++ b/src/selectors/index.js
@@ -1,4 +1,4 @@
-import { createSelector} from 'reselect'
+import { createSelector } from 'reselect'
import { parseTimestamp, compareTimestamp, insetSourceFrom } from '../js/utilities'
// Input selectors
@@ -23,7 +23,6 @@ export const getTagsFilter = state => state.app.filters.tags
export const getCategoriesFilter = state => state.app.filters.categories
export const getTimeRange = state => state.app.filters.timerange
-
/**
* Some handy helpers
*/
@@ -32,7 +31,7 @@ export const getTimeRange = state => state.app.filters.timerange
* Given an event and all tags,
* returns true/false if event has any tag that is active
*/
-function isTaggedIn(event, tagFilters) {
+function isTaggedIn (event, tagFilters) {
if (event.tags) {
const isTagged = event.tags.some((tag) => {
return tagFilters.find(tF => (tF.key === tag && tF.active))
@@ -47,10 +46,10 @@ function isTaggedIn(event, tagFilters) {
* Given an event and all categories,
* returns true/false if event has a category that is active
*/
-function isTaggedInWithCategory(event, categories) {
+function isTaggedInWithCategory (event, categories) {
if (event.category) {
if (categories.find(c => (c.category === event.category && c.active))) return true
- return false;
+ return false
} else {
return false
}
@@ -59,22 +58,22 @@ function isTaggedInWithCategory(event, categories) {
/*
* Returns true if no tags are selected
*/
-function isNoTags(tagFilters) {
+function isNoTags (tagFilters) {
return (
- tagFilters.length === 0
- || !process.env.features.USE_TAGS
- || tagFilters.every(t => !t.active)
+ tagFilters.length === 0 ||
+ !process.env.features.USE_TAGS ||
+ tagFilters.every(t => !t.active)
)
}
/*
* Returns true if no categories are selected
*/
-function isNoCategories(categories) {
+function isNoCategories (categories) {
return (
- categories.length === 0
- || !process.env.features.CATEGORIES_AS_TAGS
- || categories.every(c => !c.active)
+ categories.length === 0 ||
+ !process.env.features.CATEGORIES_AS_TAGS ||
+ categories.every(c => !c.active)
)
}
@@ -82,10 +81,10 @@ function isNoCategories(categories) {
* Given an event and a time range,
* returns true/false if the event falls within timeRange
*/
-function isTimeRangedIn(event, timeRange) {
+function isTimeRangedIn (event, timeRange) {
return (
- timeRange[0] < parseTimestamp(event.timestamp)
- && parseTimestamp(event.timestamp) < timeRange[1]
+ timeRange[0] < parseTimestamp(event.timestamp) &&
+ parseTimestamp(event.timestamp) < timeRange[1]
)
}
@@ -94,76 +93,73 @@ function isTimeRangedIn(event, timeRange) {
* and if TAGS are being used, select them if their tags are enabled
*/
export const selectEvents = createSelector(
- [getEvents, getTagsFilter, getCategoriesFilter, getTimeRange],
- (events, tagFilters, categories, timeRange) => {
+ [getEvents, getTagsFilter, getCategoriesFilter, getTimeRange],
+ (events, tagFilters, categories, timeRange) => {
+ return events.reduce((acc, event) => {
+ const isTagged = isTaggedIn(event, tagFilters) || isNoTags(tagFilters)
+ const isTaggedWithCategory = isTaggedInWithCategory(event, categories) || isNoCategories(categories)
+ const isTimeRanged = isTimeRangedIn(event, timeRange)
- return events.reduce((acc, event) => {
- const isTagged = isTaggedIn(event, tagFilters) || isNoTags(tagFilters)
- const isTaggedWithCategory = isTaggedInWithCategory(event, categories) || isNoCategories(categories)
- const isTimeRanged = isTimeRangedIn(event, timeRange)
+ if (isTimeRanged && isTagged && isTaggedWithCategory) {
+ const eventClone = Object.assign({}, event)
+ acc[event.id] = eventClone
+ }
- if (isTimeRanged && isTagged && isTaggedWithCategory) {
- const eventClone = Object.assign({}, event)
- acc[event.id] = eventClone
- }
-
- return acc
+ return acc
}, [])
-})
+ })
/**
* Of all available events, selects those that fall within the time range,
* and if TAGS are being used, select them if their tags are enabled
*/
export const selectNarratives = createSelector(
- [getEvents, getNarratives, getSources],
- (events, narrativesMeta, sources) => {
+ [getEvents, getNarratives, getSources],
+ (events, narrativesMeta, sources) => {
+ const narratives = {}
+ const narrativeSkeleton = id => ({ id, steps: [] })
- const narratives = {}
- const narrativeSkeleton = id => ({ id, steps: [] })
+ /* populate narratives dict with events */
+ events.forEach(evt => {
+ const isInNarrative = evt.narratives.length > 0
- /* populate narratives dict with events */
- events.forEach(evt => {
- const isInNarrative = evt.narratives.length > 0
+ evt.narratives.forEach(narrative => {
+ // initialise
+ if (!narratives[narrative]) { narratives[narrative] = narrativeSkeleton(narrative) }
- evt.narratives.forEach(narrative => {
- // initialise
- if (!narratives[narrative])
- narratives[narrative] = narrativeSkeleton(narrative)
-
- // add evt to steps
- if (isInNarrative)
- // NB: insetSourceFrom is a 'curried' function to allow with maps
- narratives[narrative].steps.push(insetSourceFrom(sources)(evt))
- })
- })
-
-
- /* sort steps by time */
- Object.keys(narratives).forEach(key => {
- const steps = narratives[key].steps
-
- steps.sort(compareTimestamp)
-
- if (narrativesMeta.find(n => n.id === key)) {
- narratives[key] = {
- ...narrativesMeta.find(n => n.id === key),
- ...narratives[key]
- }
+ // add evt to steps
+ if (isInNarrative) {
+ // NB: insetSourceFrom is a 'curried' function to allow with maps
+ narratives[narrative].steps.push(insetSourceFrom(sources)(evt))
}
})
+ })
- // Return narratives in original order
- // + filter those that are undefined
- return narrativesMeta.map(n => narratives[n.id]).filter(d => d);
-})
+ /* sort steps by time */
+ Object.keys(narratives).forEach(key => {
+ const steps = narratives[key].steps
+
+ steps.sort(compareTimestamp)
+
+ if (narrativesMeta.find(n => n.id === key)) {
+ narratives[key] = {
+ ...narrativesMeta.find(n => n.id === key),
+ ...narratives[key]
+ }
+ }
+ })
+
+ // Return narratives in original order
+ // + filter those that are undefined
+ return narrativesMeta.map(n => narratives[n.id]).filter(d => d)
+ })
/** Aggregate information about the narrative and the current step into
* a single object. If narrative is null, the whole object is null.
*/
export const selectActiveNarrative = createSelector(
[getActiveNarrative, getActiveStep],
- (narrative, current) => !!narrative
+ (narrative, current) => narrative
? { ...narrative, current }
: null
)
@@ -180,7 +176,6 @@ export const selectActiveNarrative = createSelector(
export const selectLocations = createSelector(
[selectEvents],
(events) => {
-
const selectedLocations = {}
events.forEach(event => {
const location = event.location
@@ -230,7 +225,6 @@ export const selectDatetimes = createSelector(
}
)
-
/**
* Of all the sources, select those that are relevant to the selected events.
*/
@@ -253,12 +247,11 @@ export const selectCategories = createSelector(
(categories) => {
categories.map(cat => {
cat.active = (!cat.hasOwnProperty('active')) ? false : cat.active
- });
- return categories;
+ })
+ return categories
}
)
-
/**
* Given a tree of tags, return those tags as a list
* Each node has been aware of its depth, and given an 'active' flag
@@ -268,7 +261,7 @@ export const selectTagList = createSelector(
(tags) => {
const tagList = []
let depth = 0
- function traverseNode(node, depth) {
+ function traverseNode (node, depth) {
node.active = (!node.hasOwnProperty('active')) ? false : node.active
node.depth = depth
diff --git a/src/store/index.js b/src/store/index.js
index 735a481..09508d2 100644
--- a/src/store/index.js
+++ b/src/store/index.js
@@ -1,12 +1,12 @@
-import { createStore, applyMiddleware, compose } from 'redux';
-import thunk from 'redux-thunk';
+import { createStore, applyMiddleware, compose } from 'redux'
+import thunk from 'redux-thunk'
-import rootReducer from '../reducers';
-const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
+import rootReducer from '../reducers'
+const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose
const store = createStore(
rootReducer,
composeEnhancers(applyMiddleware(thunk))
-);
+)
-export default store;
+export default store
diff --git a/src/store/initial.js b/src/store/initial.js
index 9cb4a2a..5b3cea0 100644
--- a/src/store/initial.js
+++ b/src/store/initial.js
@@ -16,7 +16,7 @@ const initial = {
sources: {},
sites: [],
tags: {},
- notifications: [],
+ notifications: []
},
/*
@@ -29,7 +29,7 @@ const initial = {
*/
app: {
errors: {
- source: null,
+ source: null
},
highlighted: null,
selected: [],
@@ -51,7 +51,7 @@ const initial = {
coevents: false,
routes: false,
sites: true
- },
+ }
},
isMobile: (/Mobi/.test(navigator.userAgent)),
language: 'en-US',
@@ -83,7 +83,7 @@ const initial = {
ui: {
style: {
categories: {
- default: '#f3de2c',
+ default: '#f3de2c'
},
narratives: {
default: {
@@ -94,16 +94,16 @@ const initial = {
}
},
dom: {
- timeline: "timeline",
- timeslider: "timeslider",
- map: "map"
- },
+ timeline: 'timeline',
+ timeslider: 'timeslider',
+ map: 'map'
+ }
}
-};
+}
-let appStore;
+let appStore
if (process.env.store) {
- appStore = mergeDeepLeft(process.env.store, initial);
+ appStore = mergeDeepLeft(process.env.store, initial)
} else {
appStore = initial
}
diff --git a/test/server_process.js b/test/server_process.js
index 350e901..5383859 100644
--- a/test/server_process.js
+++ b/test/server_process.js
@@ -1,68 +1,65 @@
-var assert = require('assert');
-var child_process = require('child_process')
-var http = require('http');
import test from 'ava'
+var childProcess = require('childProcess')
+var http = require('http')
-const SERVER_LAUNCH_WAIT_TIME = 5 * 1000;
+const SERVER_LAUNCH_WAIT_TIME = 5 * 1000
-var server_proc = null;
-var server_exited = false;
+var serverProc = null
+var serverExited = false
test.before.cb(t => {
- console.log("launching server...")
- server_proc = child_process.spawn('yarn', ['dev'], {
+ console.log('launching server...')
+ serverProc = childProcess.spawn('yarn', ['dev'], {
cwd: '.',
stdio: 'ignore'
- });
+ })
- server_proc.on('exit', function(code, signal) {
- server_exited = true;
- });
+ serverProc.on('exit', function (code, signal) {
+ serverExited = true
+ })
setTimeout(t.end, SERVER_LAUNCH_WAIT_TIME)
-});
+})
-test.after(function() {
- console.log("killing server...")
- server_proc.kill('SIGKILL');
-});
+test.after(function () {
+ console.log('killing server...')
+ serverProc.kill('SIGKILL')
+})
test('should launch', t => {
- t.false(server_exited);
-});
+ t.false(serverExited)
+})
var urls = [
'/',
'js/index.bundle.js'
-];
+]
-urls.forEach(function(url) {
+urls.forEach(function (url) {
test.cb('should respond to request for "' + url + '"', t => {
http.get({
hostname: 'localhost',
port: 8080,
path: '/',
agent: false
- }, function(res) {
- var result_data = '';
+ }, function (res) {
+ var resultData = ''
- if(res.statusCode != 200) {
- t.fail('Server response was not 200.');
+ if (res.statusCode !== 200) {
+ t.fail('Server response was not 200.')
} else {
- res.on('data', function(data) { result_data += data });
+ res.on('data', function (data) { resultData += data })
- res.on('end', function() {
- if (result_data.length > 0) {
- t.pass();
+ res.on('end', function () {
+ if (resultData.length > 0) {
+ t.pass()
} else {
- t.fail("Server returned no data.");
+ t.fail('Server returned no data.')
}
- });
+ })
}
- t.end();
+ t.end()
})
-
- });
-
-});
+ })
+})
diff --git a/yarn.lock b/yarn.lock
index 2f8e62f..9f68406 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -825,15 +825,25 @@ acorn-dynamic-import@^3.0.0:
dependencies:
acorn "^5.0.0"
+acorn-jsx@^5.0.0:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.0.1.tgz#32a064fd925429216a09b141102bfdd185fae40e"
+ integrity sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==
+
acorn@^5.0.0, acorn@^5.6.2:
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"
+ integrity sha512-i33Zgp3XWtmZBMNvCr4azvOFeWVw1Rk6p3hfi3LUDvIFraOMywb1kAtrbi+med14m4Xfpqm3zRZMT+c0FNE7kg==
+
ajv-errors@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.0.tgz#ecf021fa108fd17dfb5e6b383f2dd233e31ffc59"
-ajv-keywords@^3.1.0:
+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"
@@ -846,6 +856,16 @@ ajv@^5.3.0:
fast-json-stable-stringify "^2.0.0"
json-schema-traverse "^0.3.0"
+ajv@^6.0.1, ajv@^6.5.0:
+ version "6.7.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.7.0.tgz#e3ce7bb372d6577bb1839f1dfdfcbf5ad2948d96"
+ integrity sha512-RZXPviBTtfmtka9n9sy1N5M5b82CbxWIR6HIis4s3WQTXDJamc/0gpCWNGz6EWdWp4DOfjzJfhz/AS9zVPjjWg==
+ 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"
+
ajv@^6.1.0:
version "6.5.4"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.4.tgz#247d5274110db653706b550fcc2b797ca28cfc59"
@@ -869,7 +889,7 @@ ansi-colors@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.1.0.tgz#dcfaacc90ef9187de413ec3ef8d5eb981a98808f"
-ansi-escapes@^3.1.0:
+ansi-escapes@^3.0.0, ansi-escapes@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30"
@@ -947,6 +967,14 @@ array-flatten@^2.1.0:
version "2.1.1"
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296"
+array-includes@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d"
+ integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.7.0"
+
array-union@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
@@ -1415,6 +1443,18 @@ call-signature@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/call-signature/-/call-signature-0.0.2.tgz#a84abc825a55ef4cb2b028bd74e205a65b9a4996"
+caller-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
+ integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=
+ 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"
+ integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=
+
camel-case@3.0.x:
version "3.0.0"
resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73"
@@ -1479,6 +1519,20 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.1, chalk@^2.4.1:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
+chalk@^2.1.0:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
+ integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
+ dependencies:
+ ansi-styles "^3.2.1"
+ escape-string-regexp "^1.0.5"
+ supports-color "^5.3.0"
+
+chardet@^0.4.0:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2"
+ integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=
+
chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26"
@@ -1523,6 +1577,11 @@ 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"
+ integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==
+
class-utils@^0.3.5:
version "0.3.6"
resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463"
@@ -1571,6 +1630,11 @@ cli-truncate@^1.1.0:
slice-ansi "^1.0.0"
string-width "^2.0.0"
+cli-width@^2.0.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
+ integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=
+
cliui@^3.2.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
@@ -1741,6 +1805,11 @@ constants-browserify@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
+contains-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+ integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=
+
content-disposition@0.5.2:
version "0.5.2"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
@@ -2229,7 +2298,12 @@ date-time@^2.1.0:
dependencies:
time-zone "^1.0.0"
-debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8:
+debug-log@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f"
+ integrity sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=
+
+debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
dependencies:
@@ -2276,6 +2350,11 @@ 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"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+ integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=
+
default-gateway@^2.6.0:
version "2.7.2"
resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-2.7.2.tgz#b7ef339e5e024b045467af403d50348db4642d0f"
@@ -2314,6 +2393,18 @@ define-property@^2.0.2:
is-descriptor "^1.0.2"
isobject "^3.0.1"
+deglob@^2.1.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/deglob/-/deglob-2.1.1.tgz#d268e168727799862e8eac07042e165957c1f3be"
+ integrity sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==
+ dependencies:
+ find-root "^1.0.0"
+ glob "^7.0.5"
+ ignore "^3.0.9"
+ pkg-config "^1.1.0"
+ run-parallel "^1.1.2"
+ uniq "^1.0.1"
+
del@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5"
@@ -2392,6 +2483,21 @@ dns-txt@^2.0.2:
dependencies:
buffer-indexof "^1.0.0"
+doctrine@1.5.0:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+ integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
+doctrine@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d"
+ integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==
+ dependencies:
+ 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"
@@ -2549,7 +2655,19 @@ es-abstract@^1.5.1:
is-callable "^1.1.3"
is-regex "^1.0.4"
-es-to-primitive@^1.1.1:
+es-abstract@^1.7.0:
+ version "1.13.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9"
+ integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==
+ 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-to-primitive@^1.1.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:
@@ -2577,6 +2695,89 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+eslint-config-standard-jsx@6.0.2:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-6.0.2.tgz#90c9aa16ac2c4f8970c13fc7efc608bacd02da70"
+ integrity sha512-D+YWAoXw+2GIdbMBRAzWwr1ZtvnSf4n4yL0gKGg7ShUOGXkSOLerI17K4F6LdQMJPNMoWYqepzQD/fKY+tXNSg==
+
+eslint-config-standard@12.0.0:
+ version "12.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz#638b4c65db0bd5a41319f96bba1f15ddad2107d9"
+ integrity sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==
+
+eslint-import-resolver-node@^0.3.1:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a"
+ integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==
+ dependencies:
+ debug "^2.6.9"
+ resolve "^1.5.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"
+ integrity sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=
+ dependencies:
+ debug "^2.6.8"
+ pkg-dir "^1.0.0"
+
+eslint-plugin-es@^1.3.1:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz#475f65bb20c993fc10e8c8fe77d1d60068072da6"
+ integrity sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==
+ dependencies:
+ eslint-utils "^1.3.0"
+ regexpp "^2.0.1"
+
+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"
+ integrity sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==
+ dependencies:
+ contains-path "^0.1.0"
+ debug "^2.6.8"
+ doctrine "1.5.0"
+ eslint-import-resolver-node "^0.3.1"
+ eslint-module-utils "^2.2.0"
+ has "^1.0.1"
+ lodash "^4.17.4"
+ minimatch "^3.0.3"
+ read-pkg-up "^2.0.0"
+ resolve "^1.6.0"
+
+eslint-plugin-node@~7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-7.0.1.tgz#a6e054e50199b2edd85518b89b4e7b323c9f36db"
+ integrity sha512-lfVw3TEqThwq0j2Ba/Ckn2ABdwmL5dkOgAux1rvOk6CO7A6yGyPI2+zIxN6FyNkp1X1X/BSvKOceD6mBWSj4Yw==
+ dependencies:
+ eslint-plugin-es "^1.3.1"
+ eslint-utils "^1.3.1"
+ ignore "^4.0.2"
+ minimatch "^3.0.4"
+ resolve "^1.8.1"
+ semver "^5.5.0"
+
+eslint-plugin-promise@~4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-4.0.1.tgz#2d074b653f35a23d1ba89d8e976a985117d1c6a2"
+ integrity sha512-Si16O0+Hqz1gDHsys6RtFRrW7cCTB6P7p3OJmKp3Y3dxpQE2qwOA7d3xnV+0mBmrPoi0RBnxlCKvqu70te6wjg==
+
+eslint-plugin-react@~7.11.1:
+ version "7.11.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz#c01a7af6f17519457d6116aa94fc6d2ccad5443c"
+ integrity sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==
+ dependencies:
+ array-includes "^3.0.3"
+ doctrine "^2.1.0"
+ has "^1.0.3"
+ jsx-ast-utils "^2.0.1"
+ prop-types "^15.6.2"
+
+eslint-plugin-standard@~4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-4.0.0.tgz#f845b45109c99cd90e77796940a344546c8f6b5c"
+ integrity sha512-OwxJkR6TQiYMmt1EsNRMe5qG3GsbjlcOhbGUBY4LtavF9DsLaTcoR+j2Tdjqi23oUwKNUqX7qcn5fPStafMdlA==
+
eslint-scope@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172"
@@ -2584,6 +2785,60 @@ eslint-scope@^4.0.0:
esrecurse "^4.1.0"
estraverse "^4.1.1"
+eslint-utils@^1.3.0, eslint-utils@^1.3.1:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512"
+ integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==
+
+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"
+ integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==
+
+eslint@~5.4.0:
+ version "5.4.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.4.0.tgz#d068ec03006bb9e06b429dc85f7e46c1b69fac62"
+ integrity sha512-UIpL91XGex3qtL6qwyCQJar2j3osKxK9e3ano3OcGEIRM4oWIpCkDg9x95AXEC2wMs7PnxzOkPZ2gq+tsMS9yg==
+ dependencies:
+ ajv "^6.5.0"
+ babel-code-frame "^6.26.0"
+ chalk "^2.1.0"
+ cross-spawn "^6.0.5"
+ debug "^3.1.0"
+ doctrine "^2.1.0"
+ eslint-scope "^4.0.0"
+ eslint-utils "^1.3.1"
+ eslint-visitor-keys "^1.0.0"
+ espree "^4.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.7.0"
+ ignore "^4.0.2"
+ imurmurhash "^0.1.4"
+ inquirer "^5.2.0"
+ is-resolvable "^1.1.0"
+ js-yaml "^3.11.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.3.0"
+ 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"
+ regexpp "^2.0.0"
+ require-uncached "^1.0.3"
+ semver "^5.5.0"
+ strip-ansi "^4.0.0"
+ strip-json-comments "^2.0.1"
+ table "^4.0.3"
+ text-table "^0.2.0"
+
esm@^3.0.80:
version "3.0.84"
resolved "https://registry.yarnpkg.com/esm/-/esm-3.0.84.tgz#bb108989f4673b32d4f62406869c28eed3815a63"
@@ -2597,6 +2852,15 @@ espower-location-detector@^1.0.0:
source-map "^0.5.0"
xtend "^4.0.0"
+espree@^4.0.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-4.1.0.tgz#728d5451e0fd156c04384a7ad89ed51ff54eb25f"
+ integrity sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==
+ dependencies:
+ acorn "^6.0.2"
+ acorn-jsx "^5.0.0"
+ eslint-visitor-keys "^1.0.0"
+
esprima@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
@@ -2607,6 +2871,13 @@ espurify@^1.6.0:
dependencies:
core-js "^2.0.0"
+esquery@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708"
+ integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==
+ dependencies:
+ estraverse "^4.0.0"
+
esrecurse@^4.1.0:
version "4.2.1"
resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf"
@@ -2734,6 +3005,15 @@ extend@~3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
+external-editor@^2.1.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5"
+ integrity sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==
+ dependencies:
+ chardet "^0.4.0"
+ iconv-lite "^0.4.17"
+ tmp "^0.0.33"
+
extglob@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543"
@@ -2771,6 +3051,11 @@ fast-json-stable-stringify@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2"
+fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+ integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=
+
fastparse@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8"
@@ -2793,6 +3078,14 @@ 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"
+ integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=
+ dependencies:
+ flat-cache "^1.2.1"
+ object-assign "^4.0.1"
+
file-loader@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-2.0.0.tgz#39749c82f020b9e85901dcff98e8004e6401cfde"
@@ -2829,6 +3122,11 @@ find-cache-dir@^1.0.0:
make-dir "^1.0.0"
pkg-dir "^2.0.0"
+find-root@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
+ integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
+
find-up@^1.0.0:
version "1.1.2"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
@@ -2848,6 +3146,16 @@ find-up@^3.0.0:
dependencies:
locate-path "^3.0.0"
+flat-cache@^1.2.1:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.4.tgz#2c2ef77525cc2929007dfffa1dd314aa9c9dee6f"
+ integrity sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==
+ dependencies:
+ circular-json "^0.3.1"
+ graceful-fs "^4.1.2"
+ rimraf "~2.6.2"
+ write "^0.2.1"
+
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"
@@ -2957,6 +3265,11 @@ function-name-support@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/function-name-support/-/function-name-support-0.2.0.tgz#55d3bfaa6eafd505a50f9bc81fdf57564a0bb071"
+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"
+ integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=
+
gauge@~2.7.3:
version "2.7.4"
resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7"
@@ -2988,6 +3301,11 @@ get-stdin@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
+get-stdin@^6.0.0:
+ version "6.0.0"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b"
+ integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==
+
get-stream@^3.0.0:
version "3.0.0"
resolved "http://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
@@ -3020,7 +3338,7 @@ glob@7.1.2:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@~7.1.1:
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2, glob@^7.1.3, glob@~7.1.1:
version "7.1.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
dependencies:
@@ -3059,6 +3377,11 @@ globals@^11.1.0:
version "11.8.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.8.0.tgz#c1ef45ee9bed6badf0663c5cb90e8d1adec1321d"
+globals@^11.7.0:
+ version "11.10.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-11.10.0.tgz#1e09776dffda5e01816b3bb4077c8b59c24eaa50"
+ integrity sha512-0GZF1RiPKU97IHUO5TORo9w1PwrH/NBPl+fS7oMLdaTRiYmYbwK4NWoZWrAdd0/abG9R2BU+OiwyQpTpE6pdfQ==
+
globby@^6.1.0:
version "6.1.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c"
@@ -3172,7 +3495,7 @@ has-values@^1.0.0:
is-number "^3.0.0"
kind-of "^4.0.0"
-has@^1.0.1:
+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:
@@ -3308,7 +3631,7 @@ https-browserify@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73"
-iconv-lite@0.4, iconv-lite@^0.4.4:
+iconv-lite@0.4, iconv-lite@^0.4.17, iconv-lite@^0.4.4:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
dependencies:
@@ -3348,10 +3671,15 @@ ignore-walk@^3.0.1:
dependencies:
minimatch "^3.0.4"
-ignore@^3.3.5:
+ignore@^3.0.9, ignore@^3.3.5:
version "3.3.10"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
+ignore@^4.0.2:
+ version "4.0.6"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc"
+ integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
+
import-lazy@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43"
@@ -3415,6 +3743,25 @@ 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@^5.2.0:
+ version "5.2.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726"
+ integrity sha512-E9BmnJbAKLPGonz0HeWHtbKf+EeSP93paWO3ZYoUpq/aowXvYGjjCSuashhXPpzbArIjBbji39THkxTz9ZeEUQ==
+ dependencies:
+ ansi-escapes "^3.0.0"
+ chalk "^2.0.0"
+ cli-cursor "^2.1.0"
+ cli-width "^2.0.0"
+ external-editor "^2.1.0"
+ figures "^2.0.0"
+ lodash "^4.3.0"
+ mute-stream "0.0.7"
+ run-async "^2.2.0"
+ rxjs "^5.5.2"
+ string-width "^2.1.0"
+ strip-ansi "^4.0.0"
+ through "^2.3.6"
+
internal-ip@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-3.0.1.tgz#df5c99876e1d2eb2ea2d74f520e3f669a00ece27"
@@ -3657,6 +4004,11 @@ is-regex@^1.0.4:
dependencies:
has "^1.0.1"
+is-resolvable@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88"
+ integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==
+
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"
@@ -3758,6 +4110,14 @@ js-yaml@^3.10.0:
argparse "^1.0.7"
esprima "^4.0.0"
+js-yaml@^3.11.0:
+ version "3.12.1"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.1.tgz#295c8632a18a23e054cf5c9d3cecafe678167600"
+ integrity sha512-um46hB9wNOKlwkHgiuyEVAybXBjwFUV0Z/RaHJblRd9DXltue9FTYvzCr9ErQrK9Adz5MU4gHWVaNUfdmrC8qA==
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^4.0.0"
+
jsbn@~0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
@@ -3786,6 +4146,11 @@ json-schema@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=
+
json-stringify-safe@~5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
@@ -3807,6 +4172,13 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.10.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"
+ integrity sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=
+ dependencies:
+ array-includes "^3.0.3"
+
killable@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892"
@@ -3853,6 +4225,14 @@ leaflet@^1.0.3:
version "1.3.4"
resolved "https://registry.yarnpkg.com/leaflet/-/leaflet-1.3.4.tgz#7f006ea5832603b53d7269ef5c595fd773060a40"
+levn@^0.3.0, levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
load-json-file@^1.0.0:
version "1.1.0"
resolved "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
@@ -3863,6 +4243,16 @@ load-json-file@^1.0.0:
pinkie-promise "^2.0.0"
strip-bom "^2.0.0"
+load-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ strip-bom "^3.0.0"
+
load-json-file@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b"
@@ -3963,7 +4353,7 @@ lodash.throttle@^4.1.1:
version "4.1.1"
resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
-lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.3, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@~4.17.10:
+lodash@^4.0.0, lodash@^4.17.10, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@~4.17.10:
version "4.17.11"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
@@ -4188,7 +4578,7 @@ 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@3.0.4, minimatch@^3.0.0, minimatch@^3.0.4, minimatch@~3.0.2:
+minimatch@3.0.4, minimatch@^3.0.0, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
dependencies:
@@ -4205,7 +4595,7 @@ minimist@0.0.8:
version "0.0.8"
resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-minimist@^1.1.3, minimist@^1.2.0:
+minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0:
version "1.2.0"
resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
@@ -4312,6 +4702,11 @@ multimatch@^2.1.0:
arrify "^1.0.0"
minimatch "^3.0.0"
+mute-stream@0.0.7:
+ version "0.0.7"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
+ integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
+
nan@^2.10.0, nan@^2.9.2:
version "2.11.1"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766"
@@ -4332,6 +4727,11 @@ nanomatch@^1.2.9:
snapdragon "^0.8.1"
to-regex "^3.0.1"
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+ integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
+
needle@^2.2.1:
version "2.2.4"
resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.4.tgz#51931bff82533b1928b7d1d69e01f1b00ffd2a4e"
@@ -4602,6 +5002,18 @@ opn@^5.1.0:
dependencies:
is-wsl "^1.1.0"
+optionator@^0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+ integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.4"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ wordwrap "~1.0.0"
+
ora@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/ora/-/ora-3.0.0.tgz#8179e3525b9aafd99242d63cc206fd64732741d0"
@@ -4641,7 +5053,7 @@ os-locale@^3.0.0:
lcid "^2.0.0"
mem "^4.0.0"
-os-tmpdir@^1.0.0, os-tmpdir@^1.0.1:
+os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
@@ -4800,7 +5212,7 @@ path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-path-is-inside@^1.0.1:
+path-is-inside@^1.0.1, path-is-inside@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
@@ -4808,7 +5220,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:
+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"
@@ -4824,6 +5236,13 @@ path-type@^1.0.0:
pify "^2.0.0"
pinkie-promise "^2.0.0"
+path-type@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73"
+ integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=
+ dependencies:
+ pify "^2.0.0"
+
path-type@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f"
@@ -4862,13 +5281,29 @@ pinkie@^2.0.0:
version "2.0.4"
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
-pkg-conf@^2.1.0:
+pkg-conf@^2.0.0, pkg-conf@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058"
dependencies:
find-up "^2.0.0"
load-json-file "^4.0.0"
+pkg-config@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/pkg-config/-/pkg-config-1.1.1.tgz#557ef22d73da3c8837107766c52eadabde298fe4"
+ integrity sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=
+ dependencies:
+ debug-log "^1.0.0"
+ find-root "^1.0.0"
+ xtend "^4.0.1"
+
+pkg-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
+ integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q=
+ 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"
@@ -4887,6 +5322,11 @@ plur@^3.0.1:
dependencies:
irregular-plurals "^2.0.0"
+pluralize@^7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777"
+ integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==
+
portfinder@^1.0.9:
version "1.0.17"
resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.17.tgz#a8a1691143e46c4735edefcf4fbcccedad26456a"
@@ -4938,6 +5378,11 @@ postcss@^6.0.1, postcss@^6.0.23:
source-map "^0.6.1"
supports-color "^5.4.0"
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+ integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=
+
prepend-http@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
@@ -4971,6 +5416,11 @@ process@~0.5.1:
version "0.5.2"
resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf"
+progress@^2.0.0:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
+ integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
+
promise-inflight@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
@@ -5155,6 +5605,14 @@ read-pkg-up@^1.0.1:
find-up "^1.0.0"
read-pkg "^1.0.0"
+read-pkg-up@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be"
+ integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=
+ dependencies:
+ find-up "^2.0.0"
+ read-pkg "^2.0.0"
+
read-pkg-up@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07"
@@ -5170,6 +5628,15 @@ read-pkg@^1.0.0:
normalize-package-data "^2.3.2"
path-type "^1.0.0"
+read-pkg@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8"
+ integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=
+ dependencies:
+ load-json-file "^2.0.0"
+ normalize-package-data "^2.3.2"
+ path-type "^2.0.0"
+
read-pkg@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389"
@@ -5291,6 +5758,11 @@ regex-not@^1.0.0, regex-not@^1.0.2:
extend-shallow "^3.0.2"
safe-regex "^1.1.0"
+regexpp@^2.0.0, regexpp@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f"
+ integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==
+
regexpu-core@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b"
@@ -5418,6 +5890,14 @@ require-precompiled@^0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/require-precompiled/-/require-precompiled-0.1.0.tgz#5a1b52eb70ebed43eb982e974c85ab59571e56fa"
+require-uncached@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
+ integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=
+ dependencies:
+ caller-path "^0.1.0"
+ resolve-from "^1.0.0"
+
requires-port@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
@@ -5432,6 +5912,11 @@ resolve-cwd@^2.0.0:
dependencies:
resolve-from "^3.0.0"
+resolve-from@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+ integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=
+
resolve-from@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748"
@@ -5446,6 +5931,13 @@ resolve@^1.3.2:
dependencies:
path-parse "^1.0.5"
+resolve@^1.5.0, resolve@^1.6.0, resolve@^1.8.1:
+ version "1.9.0"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.9.0.tgz#a14c6fdfa8f92a7df1d996cb7105fa744658ea06"
+ integrity sha512-TZNye00tI67lwYvzxCxHGjwTNlUV70io54/Ed4j6PscB8xVfuBJpRenI/o6dVk0cY0PYTY27AgCoGGxRnYuItQ==
+ dependencies:
+ path-parse "^1.0.6"
+
restore-cursor@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
@@ -5463,6 +5955,13 @@ rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2:
dependencies:
glob "^7.0.5"
+rimraf@~2.6.2:
+ version "2.6.3"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
+ integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
+ dependencies:
+ glob "^7.1.3"
+
ripemd160@^2.0.0, ripemd160@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c"
@@ -5470,6 +5969,18 @@ ripemd160@^2.0.0, ripemd160@^2.0.1:
hash-base "^3.0.0"
inherits "^2.0.1"
+run-async@^2.2.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0"
+ integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA=
+ dependencies:
+ is-promise "^2.1.0"
+
+run-parallel@^1.1.2:
+ version "1.1.9"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679"
+ integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==
+
run-queue@^1.0.0, run-queue@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47"
@@ -5486,6 +5997,13 @@ rw@1:
version "1.3.3"
resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
+rxjs@^5.5.2:
+ version "5.5.12"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc"
+ integrity sha512-xx2itnL5sBbqeeiVgNPVuQQ1nC8Jp2WfNJhXWHmElW9YmrpS9UVnNzhP3EH3HFqexO5Tlp8GhYY+WEcqcVMvGw==
+ dependencies:
+ symbol-observable "1.0.1"
+
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"
@@ -5697,7 +6215,7 @@ slash@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44"
-slice-ansi@^1.0.0:
+slice-ansi@1.0.0, slice-ansi@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d"
dependencies:
@@ -5870,6 +6388,31 @@ stack-utils@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620"
+standard-engine@~9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-9.0.0.tgz#d3a3d74c4c1b91f51a1e66362465261ca7610316"
+ integrity sha512-ZfNfCWZ2Xq67VNvKMPiVMKHnMdvxYzvZkf1AH8/cw2NLDBm5LRsxMqvEJpsjLI/dUosZ3Z1d6JlHDp5rAvvk2w==
+ dependencies:
+ deglob "^2.1.0"
+ get-stdin "^6.0.0"
+ minimist "^1.1.0"
+ pkg-conf "^2.0.0"
+
+standard@^12.0.1:
+ version "12.0.1"
+ resolved "https://registry.yarnpkg.com/standard/-/standard-12.0.1.tgz#0fc5a8aa6c34c546c5562aae644242b24dae2e61"
+ integrity sha512-UqdHjh87OG2gUrNCSM4QRLF5n9h3TFPwrCNyVlkqu31Hej0L/rc8hzKqVvkb2W3x0WMq7PzZdkLfEcBhVOR6lg==
+ dependencies:
+ eslint "~5.4.0"
+ eslint-config-standard "12.0.0"
+ eslint-config-standard-jsx "6.0.2"
+ eslint-plugin-import "~2.14.0"
+ eslint-plugin-node "~7.0.1"
+ eslint-plugin-promise "~4.0.0"
+ eslint-plugin-react "~7.11.1"
+ eslint-plugin-standard "~4.0.0"
+ standard-engine "~9.0.0"
+
static-extend@^0.1.1:
version "0.1.2"
resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"
@@ -5927,7 +6470,7 @@ string-width@^1.0.1, string-width@^1.0.2:
is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0"
-"string-width@^1.0.2 || 2", string-width@^2.0.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:
@@ -5986,7 +6529,7 @@ strip-indent@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68"
-strip-json-comments@~2.0.1:
+strip-json-comments@^2.0.1, 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"
@@ -6023,6 +6566,11 @@ supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0, supports-co
dependencies:
has-flag "^3.0.0"
+symbol-observable@1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4"
+ integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ=
+
symbol-observable@^0.2.2:
version "0.2.4"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40"
@@ -6031,6 +6579,18 @@ symbol-observable@^1.0.2, symbol-observable@^1.0.3, symbol-observable@^1.0.4, sy
version "1.2.0"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804"
+table@^4.0.3:
+ version "4.0.3"
+ resolved "https://registry.yarnpkg.com/table/-/table-4.0.3.tgz#00b5e2b602f1794b9acaf9ca908a76386a7813bc"
+ integrity sha512-S7rnFITmBH1EnyKcvxBh1LjYeQMmnZtCXSEbHcH6S0NoKit24ZuFO/T1vDcLdYsLQkM188PVVhQmzKIuThNkKg==
+ dependencies:
+ ajv "^6.0.1"
+ ajv-keywords "^3.0.0"
+ chalk "^2.1.0"
+ lodash "^4.17.4"
+ slice-ansi "1.0.0"
+ string-width "^2.1.1"
+
tapable@^1.0.0, tapable@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.0.tgz#0d076a172e3d9ba088fd2272b2668fb8d194b78c"
@@ -6061,6 +6621,11 @@ term-size@^1.2.0:
dependencies:
execa "^0.7.0"
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
+
through2@^2.0.0:
version "2.0.3"
resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
@@ -6068,6 +6633,11 @@ through2@^2.0.0:
readable-stream "^2.1.5"
xtend "~4.0.1"
+through@^2.3.6:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
+
thunky@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.3.tgz#f5df732453407b09191dae73e2a8cc73f381a826"
@@ -6086,6 +6656,13 @@ timers-browserify@^2.0.4:
dependencies:
setimmediate "^1.0.4"
+tmp@^0.0.33:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ dependencies:
+ os-tmpdir "~1.0.2"
+
to-arraybuffer@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
@@ -6181,6 +6758,13 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.5"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=
+ dependencies:
+ prelude-ls "~1.1.2"
+
type-is@~1.6.16:
version "1.6.16"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194"
@@ -6251,6 +6835,11 @@ union-value@^1.0.0:
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"
+ integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=
+
unique-filename@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"
@@ -6621,6 +7210,11 @@ widest-line@^2.0.0:
dependencies:
string-width "^2.1.1"
+wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+ integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=
+
worker-farm@^1.5.2:
version "1.6.0"
resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0"
@@ -6646,6 +7240,13 @@ write-file-atomic@^2.0.0:
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"
+ integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=
+ dependencies:
+ mkdirp "^0.5.1"
+
xdg-basedir@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
@@ -6667,7 +7268,7 @@ xregexp@4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020"
-xtend@^4.0.0, 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"