@@ -190,24 +181,26 @@ function Episode(props) {
data={props.data}
addToWishlist={props.addToWishlist}
/>
- {props.data.get('episode')}
+ {props.data.get("episode")}
|
- {props.data.get('title')}
+ {props.data.get("title")}
-
- {props.data.get('torrents') && props.data.get('torrents').toList().map(function(torrent) {
- let key = `${props.data.get('season')}-${props.data.get('episode')}-${torrent.get('source')}-${torrent.get('quality')}`;
+ {props.data.get("polochon_url") !== "" &&
+
+ }
+ {props.data.get("torrents") && props.data.get("torrents").toList().map(function(torrent) {
+ let key = `${props.data.get("season")}-${props.data.get("episode")}-${torrent.get("source")}-${torrent.get("quality")}`;
return (
)
-}
+ }
-class Torrent extends React.Component {
+class Torrent extends React.PureComponent {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
@@ -245,25 +238,25 @@ class Torrent extends React.Component {
this.handleClick(e, this.props.data.get('url'))}
+ onClick={(e) => this.handleClick(e, this.props.data.get("url"))}
href={this.props.data.url} >
- {this.props.data.get('quality')}
+ {this.props.data.get("quality")}
)
}
}
-class TrackHeader extends React.Component {
+class TrackHeader extends React.PureComponent {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
}
- handleClick(e, url) {
+ handleClick(e) {
e.preventDefault();
- const trackedSeason = this.props.data.get('tracked_season');
- const trackedEpisode = this.props.data.get('tracked_episode');
- const imdbId = this.props.data.get('imdb_id');
+ const trackedSeason = this.props.data.get("tracked_season");
+ const trackedEpisode = this.props.data.get("tracked_episode");
+ const imdbId = this.props.data.get("imdb_id");
const wishlisted = (trackedSeason !== null && trackedEpisode !== null);
if (wishlisted) {
this.props.deleteFromWishlist(imdbId);
@@ -272,9 +265,8 @@ class TrackHeader extends React.Component {
}
}
render() {
- const trackedSeason = this.props.data.get('tracked_season');
- const trackedEpisode = this.props.data.get('tracked_episode');
- const imdbId = this.props.data.get('imdb_id');
+ const trackedSeason = this.props.data.get("tracked_season");
+ const trackedEpisode = this.props.data.get("tracked_episode");
const wishlisted = (trackedSeason !== null && trackedEpisode !== null);
let msg;
if (wishlisted) {
@@ -314,16 +306,16 @@ class TrackHeader extends React.Component {
}
}
-class TrackButton extends React.Component {
+class TrackButton extends React.PureComponent {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
}
- handleClick(e, url) {
+ handleClick(e) {
e.preventDefault();
- const imdbId = this.props.data.get('show_imdb_id');
- const season = this.props.data.get('season');
- const episode = this.props.data.get('episode');
+ const imdbId = this.props.data.get("show_imdb_id");
+ const season = this.props.data.get("season");
+ const episode = this.props.data.get("episode");
this.props.addToWishlist(imdbId, season, episode);
}
render() {
@@ -341,34 +333,25 @@ class TrackButton extends React.Component {
}
}
-class GetDetailsButton extends React.Component {
+class GetDetailsButton extends React.PureComponent {
constructor(props) {
super(props);
this.handleClick = this.handleClick.bind(this);
}
- handleClick(e, url) {
+ handleClick(e) {
e.preventDefault();
- if (this.props.data.get('fetching')) {
+ if (this.props.data.get("fetching")) {
return
}
- const imdbId = this.props.data.get('show_imdb_id');
- const season = this.props.data.get('season');
- const episode = this.props.data.get('episode');
+ const imdbId = this.props.data.get("show_imdb_id");
+ const season = this.props.data.get("season");
+ const episode = this.props.data.get("episode");
this.props.getEpisodeDetails(imdbId, season, episode);
}
render() {
return (
this.handleClick(e)}>
- {this.props.data.get('fetching') ||
-
- Refresh
-
- }
- {this.props.data.get('fetching') &&
-
- Refreshing
-
- }
+
);
}
diff --git a/src/public/js/components/shows/list.js b/src/public/js/components/shows/list.js
index 38c705a..e35636e 100644
--- a/src/public/js/components/shows/list.js
+++ b/src/public/js/components/shows/list.js
@@ -1,46 +1,48 @@
-import React from 'react'
-import { connect } from 'react-redux'
-import { bindActionCreators } from 'redux'
+import React from "react"
+import { connect } from "react-redux"
+import { bindActionCreators } from "redux"
import { selectShow, addShowToWishlist,
- deleteShowFromWishlist, getShowDetails } from '../../actions/shows'
+ deleteShowFromWishlist, getShowDetails, updateFilter } from "../../actions/shows"
-import ListDetails from '../list/details'
-import ListPosters from '../list/posters'
-import ShowButtons from './listButtons'
+import ListDetails from "../list/details"
+import ListPosters from "../list/posters"
+import ShowButtons from "./listButtons"
function mapStateToProps(state) {
- return { showsStore: state.showsStore };
+ return {
+ loading : state.showsStore.get("loading"),
+ shows : state.showsStore.get("shows"),
+ filter : state.showsStore.get("filter"),
+ selectedImdbId : state.showsStore.get("selectedImdbId"),
+ lastFetchUrl : state.showsStore.get("lastFetchUrl"),
+ exploreOptions : state.showsStore.get("exploreOptions"),
+ };
}
const mapDispatchToProps = (dispatch) =>
bindActionCreators({ selectShow, addShowToWishlist,
- deleteShowFromWishlist, getShowDetails }, dispatch)
+ deleteShowFromWishlist, getShowDetails, updateFilter }, dispatch)
-class ShowList extends React.Component {
+class ShowList extends React.PureComponent {
render() {
- const shows = this.props.showsStore.shows;
- const selectedShowId = this.props.showsStore.selectedImdbId;
- let index = shows.map((el) => el.imdb_id).indexOf(selectedShowId);
- if (index === -1) {
- index = 0;
+ let selectedShow;
+ if (this.props.selectedImdbId !== "") {
+ selectedShow = this.props.shows.get(this.props.selectedImdbId);
}
- const selectedShow = shows[index];
return (
{selectedShow &&
@@ -49,7 +51,7 @@ class ShowList extends React.Component {
deleteFromWishlist={this.props.deleteShowFromWishlist}
addToWishlist={this.props.addShowToWishlist}
getDetails={this.props.getShowDetails}
- fetching={this.props.showsStore.getDetails}
+ updateFilter={this.props.updateFilter}
/>
}
diff --git a/src/public/js/components/shows/listButtons.js b/src/public/js/components/shows/listButtons.js
index 34ec5ed..5ddaa80 100644
--- a/src/public/js/components/shows/listButtons.js
+++ b/src/public/js/components/shows/listButtons.js
@@ -1,12 +1,12 @@
-import React from 'react'
+import React from "react"
-import { Link } from 'react-router'
-import { DropdownButton } from 'react-bootstrap'
+import { Link } from "react-router"
+import { DropdownButton } from "react-bootstrap"
-import { WishlistButton, RefreshButton } from '../buttons/actions'
+import { WishlistButton, RefreshButton } from "../buttons/actions"
+import ImdbButton from "../buttons/imdb"
export default function ShowButtons(props) {
- const imdbLink = `http://www.imdb.com/title/${props.show.imdb_id}`;
return (
@@ -27,16 +24,16 @@ export default function ShowButtons(props) {
}
function ActionsButton(props) {
- let wishlisted = (props.show.tracked_season !== null && props.show.tracked_episode !== null);
+ let wishlisted = (props.show.get("tracked_season") !== null && props.show.get("tracked_episode") !== null);
return (
bindActionCreators({ addTorrent }, dispatch)
@@ -24,7 +24,7 @@ export default connect(mapStateToProps, mapDispatchToProps)(TorrentList);
class AddTorrent extends React.PureComponent {
constructor(props) {
super(props);
- this.state = { url: '' };
+ this.state = { url: "" };
this.handleSubmit = this.handleSubmit.bind(this);
this.handleChange = this.handleChange.bind(this);
}
@@ -35,7 +35,7 @@ class AddTorrent extends React.PureComponent {
if (this.state.url === "") {
return;
}
- this.setState({ url: '' });
+ this.setState({ url: "" });
this.props.func(this.state.url);
}
render() {
@@ -96,23 +96,23 @@ class List extends React.PureComponent {
class Torrent extends React.PureComponent {
render() {
- const done = this.props.data.get('is_finished');
- var progressStyle = 'progress-bar progress-bar-warning';
+ const done = this.props.data.get("is_finished");
+ var progressStyle = "progress-bar progress-bar-warning";
if (done) {
- progressStyle = 'progress-bar progress-bar-success';
+ progressStyle = "progress-bar progress-bar-success";
}
- var percentDone = this.props.data.get('percent_done');
+ var percentDone = this.props.data.get("percent_done");
const started = (percentDone !== 0);
if (started) {
- percentDone = Number(percentDone).toFixed(1) + '%';
+ percentDone = Number(percentDone).toFixed(1) + "%";
}
- var downloadedSize = prettySize(this.props.data.get('downloaded_size'));
- var totalSize = prettySize(this.props.data.get('total_size'));
- var downloadRate = prettySize(this.props.data.get('download_rate')) + "/s";
+ var downloadedSize = prettySize(this.props.data.get("downloaded_size"));
+ var totalSize = prettySize(this.props.data.get("total_size"));
+ var downloadRate = prettySize(this.props.data.get("download_rate")) + "/s";
return (
- {this.props.data.get('name')}
+ {this.props.data.get("name")}
{started &&
@@ -138,7 +138,7 @@ class Torrent extends React.PureComponent {
function prettySize(fileSizeInBytes) {
var i = -1;
- var byteUnits = [' kB', ' MB', ' GB', ' TB', 'PB', 'EB', 'ZB', 'YB'];
+ var byteUnits = [" kB", " MB", " GB", " TB", "PB", "EB", "ZB", "YB"];
do {
fileSizeInBytes = fileSizeInBytes / 1024;
i++;
diff --git a/src/public/js/components/users/edit.js b/src/public/js/components/users/edit.js
index 4b6af6a..758d231 100644
--- a/src/public/js/components/users/edit.js
+++ b/src/public/js/components/users/edit.js
@@ -1,29 +1,55 @@
-import React from 'react'
-import { connect } from 'react-redux'
-import { bindActionCreators } from 'redux'
+import React from "react"
+import { connect } from "react-redux"
+import { bindActionCreators } from "redux"
-import { Control, Form } from 'react-redux-form';
-import { updateUser } from '../../actions/users'
+import { updateUser } from "../../actions/users"
function mapStateToProps(state) {
- return { user: state.userStore };
+ return {
+ polochonToken: state.userStore.get("polochonToken"),
+ polochonUrl: state.userStore.get("polochonUrl"),
+ };
}
const mapDispatchToProps = (dispatch) =>
bindActionCreators({ updateUser }, dispatch)
-class UserEdit extends React.Component {
+class UserEdit extends React.PureComponent {
constructor(props) {
super(props);
+ this.state = {
+ polochonToken: props.polochonToken,
+ polochonUrl: props.polochonUrl,
+ };
this.handleSubmit = this.handleSubmit.bind(this);
+ this.handleUrlInput = this.handleUrlInput.bind(this);
+ this.handleTokenInput = this.handleTokenInput.bind(this);
}
- handleSubmit() {
+ handleSubmit(ev) {
+ ev.preventDefault();
this.props.updateUser({
- 'polochon_url': this.props.user.polochonUrl,
- 'polochon_token': this.props.user.polochonToken,
- 'password': this.refs.newPassword.value,
- 'password_confirm': this.refs.newPasswordConfirm.value,
+ "polochon_url": this.refs.polochonUrl.value,
+ "polochon_token": this.refs.polochonToken.value,
+ "password": this.refs.newPassword.value,
+ "password_confirm": this.refs.newPasswordConfirm.value,
});
}
+ handleTokenInput() {
+ this.setState({ polochonToken: this.refs.polochonToken.value });
+ }
+ handleUrlInput() {
+ this.setState({ polochonUrl: this.refs.polochonUrl.value });
+ }
+ componentWillReceiveProps(nextProps) {
+ if ((nextProps.polochonUrl !== "")
+ && (this.state.polochonUrl === "")
+ && (nextProps.polochonToken !== "")
+ && (this.state.polochonToken === "")) {
+ this.setState({
+ polochonToken: nextProps.polochonToken,
+ polochonUrl: nextProps.polochonUrl,
+ });
+ }
+ }
render() {
return (
@@ -31,35 +57,44 @@ class UserEdit extends React.Component {
+
+
+
+
+
);
diff --git a/src/public/js/components/users/login.js b/src/public/js/components/users/login.js
index be24d46..1e965bb 100644
--- a/src/public/js/components/users/login.js
+++ b/src/public/js/components/users/login.js
@@ -1,27 +1,30 @@
-import React from 'react'
-import { connect } from 'react-redux'
-import { bindActionCreators } from 'redux'
+import React from "react"
+import { connect } from "react-redux"
+import { bindActionCreators } from "redux"
-import { loginUser } from '../../actions/users'
+import { loginUser } from "../../actions/users"
function mapStateToProps(state) {
- return { user: state.userStore };
+ return {
+ isLogged: state.userStore.get("isLogged"),
+ loading: state.userStore.get("loading"),
+ };
}
const mapDispatchToProps = (dispatch) =>
bindActionCreators({ loginUser }, dispatch)
-class UserLoginForm extends React.Component {
+class UserLoginForm extends React.PureComponent {
constructor(props) {
super(props);
this.handleSubmit = this.handleSubmit.bind(this);
}
componentWillReceiveProps(nextProps) {
- if (!nextProps.user.isLogged) {
+ if (!nextProps.isLogged) {
return
}
if (!nextProps.location.query.redirect) {
// Redirect home
- nextProps.router.push('/');
+ nextProps.router.push("/");
} else {
// Redirect to the previous page
nextProps.router.push(nextProps.location.query.redirect);
@@ -29,7 +32,7 @@ class UserLoginForm extends React.Component {
}
handleSubmit(e) {
e.preventDefault();
- if (this.props.user.userLoading) {
+ if (this.props.loading) {
return;
}
const username = this.refs.username.value;
@@ -57,12 +60,12 @@ class UserLoginForm extends React.Component {
- {this.props.user.userLoading &&
+ {this.props.loading &&
}
- {this.props.user.userLoading ||
+ {this.props.loading ||
}
diff --git a/src/public/js/components/users/signup.js b/src/public/js/components/users/signup.js
index ad8b1c6..80ec06b 100644
--- a/src/public/js/components/users/signup.js
+++ b/src/public/js/components/users/signup.js
@@ -1,13 +1,13 @@
-import React from 'react'
-import { connect } from 'react-redux'
-import { bindActionCreators } from 'redux'
+import React from "react"
+import { connect } from "react-redux"
+import { bindActionCreators } from "redux"
-import { userSignUp } from '../../actions/users'
+import { userSignUp } from "../../actions/users"
const mapDispatchToProps = (dispatch) =>
bindActionCreators({ userSignUp }, dispatch)
-class UserSignUp extends React.Component {
+class UserSignUp extends React.PureComponent {
constructor(props) {
super(props);
this.handleSubmit = this.handleSubmit.bind(this);
@@ -15,9 +15,9 @@ class UserSignUp extends React.Component {
handleSubmit(e) {
e.preventDefault();
this.props.userSignUp({
- 'username': this.refs.username.value,
- 'password': this.refs.password.value,
- 'password_confirm': this.refs.passwordConfirm.value,
+ "username": this.refs.username.value,
+ "password": this.refs.password.value,
+ "password_confirm": this.refs.passwordConfirm.value,
});
}
render() {
diff --git a/src/public/js/reducers/alerts.js b/src/public/js/reducers/alerts.js
index c6a0f97..e51855d 100644
--- a/src/public/js/reducers/alerts.js
+++ b/src/public/js/reducers/alerts.js
@@ -1,30 +1,29 @@
-const defaultState = {
+import { Map } from "immutable"
+
+const defaultState = Map({
show: false,
message: "",
type: "",
-};
+});
-export default function Alert(state = defaultState, action) {
- switch (action.type) {
- case 'ADD_ALERT_ERROR':
- return Object.assign({}, state, {
- message: action.payload.message,
- show: true,
- type: "error",
- })
- case 'ADD_ALERT_OK':
- return Object.assign({}, state, {
+
+const handlers = {
+ "ADD_ALERT_ERROR": (state, action) => state.merge(Map({
+ message: action.payload.message,
+ show: true,
+ type: "error",
+ })),
+ "ADD_ALERT_OK": (state, action) => state.merge(Map({
message: action.payload.message,
show: true,
type: "success",
- })
- case 'DISMISS_ALERT':
- return Object.assign({}, state, {
+ })),
+ "DISMISS_ALERT": state => state.merge(Map({
message: "",
show: false,
type: "",
- })
- default:
- return state;
- }
+ })),
}
+
+export default (state = defaultState, action) =>
+ handlers[action.type] ? handlers[action.type](state, action) : state;
diff --git a/src/public/js/reducers/index.js b/src/public/js/reducers/index.js
index 5874a94..8896c3e 100644
--- a/src/public/js/reducers/index.js
+++ b/src/public/js/reducers/index.js
@@ -1,17 +1,14 @@
-import { combineForms } from 'react-redux-form'
-import { routerReducer } from 'react-router-redux'
+import { combineReducers } from "redux";
+import { routerReducer } from "react-router-redux"
-import movieStore from './movies'
-import showsStore from './shows'
-import showStore from './show'
-import userStore from './users'
-import alerts from './alerts'
-import torrentStore from './torrents'
+import movieStore from "./movies"
+import showsStore from "./shows"
+import showStore from "./show"
+import userStore from "./users"
+import alerts from "./alerts"
+import torrentStore from "./torrents"
-// Use combine form form react-redux-form, it's a thin wrapper arround the
-// default combinedReducers provided with React. It allows the forms to be
-// linked directly to the store.
-const rootReducer = combineForms({
+const rootReducer = combineReducers({
routing: routerReducer,
movieStore,
showsStore,
diff --git a/src/public/js/reducers/movies.js b/src/public/js/reducers/movies.js
index e669bab..2eb14e9 100644
--- a/src/public/js/reducers/movies.js
+++ b/src/public/js/reducers/movies.js
@@ -1,96 +1,52 @@
-const defaultState = {
+import { OrderedMap, Map, fromJS } from "immutable"
+
+const defaultState = Map({
loading: false,
- movies: [],
+ movies: OrderedMap(),
filter: "",
- perPage: 30,
selectedImdbId: "",
- fetchingDetails: false,
lastFetchUrl: "",
- exploreOptions: {},
-};
+ exploreOptions: Map(),
+});
-export default function movieStore(state = defaultState, action) {
- switch (action.type) {
- case 'MOVIE_LIST_FETCH_PENDING':
- return Object.assign({}, state, {
- loading: true,
- })
- case 'MOVIE_LIST_FETCH_FULFILLED':
- let selectedImdbId = "";
- // Select the first movie
- if (action.payload.response.data.length > 0) {
- // Sort by year
- action.payload.response.data.sort((a,b) => b.year - a.year);
- selectedImdbId = action.payload.response.data[0].imdb_id;
- }
- return Object.assign({}, state, {
- movies: action.payload.response.data,
- selectedImdbId: selectedImdbId,
- filter: defaultState.filter,
- perPage: defaultState.perPage,
- loading: false,
- })
- case 'MOVIE_GET_DETAILS_PENDING':
- return Object.assign({}, state, {
- fetchingDetails: true,
- })
- case 'MOVIE_GET_DETAILS_FULFILLED':
- return Object.assign({}, state, {
- movies: updateMovieDetails(state.movies.slice(), action.payload.response.data.imdb_id, action.payload.response.data),
- fetchingDetails: false,
- })
- case 'MOVIE_UPDATE_STORE_WISHLIST':
- return Object.assign({}, state, {
- movies: updateStoreWishlist(state.movies.slice(), action.payload.imdbId, action.payload.wishlisted),
- })
- case 'MOVIE_GET_EXPLORE_OPTIONS_FULFILLED':
- return Object.assign({}, state, {
- exploreOptions: action.payload.response.data,
- })
- case 'UPDATE_LAST_MOVIE_FETCH_URL':
- return Object.assign({}, state, {
- lastFetchUrl: action.payload.url,
- })
- case 'MOVIE_SUBTITLES_UPDATE_PENDING':
- return Object.assign({}, state, {
- movies: updateMovieSubtitles(state.movies.slice(), state.selectedImdbId, true),
- })
- case 'MOVIE_SUBTITLES_UPDATE_FULFILLED':
- console.log("payload :", action.payload);
- return Object.assign({}, state, {
- movies: updateMovieSubtitles(state.movies.slice(), state.selectedImdbId, false, action.payload.response.data),
- })
- case 'SELECT_MOVIE':
- // Don't select the movie if we're fetching another movie's details
- if (state.fetchingDetails) {
- return state
- }
+const handlers = {
+ "MOVIE_LIST_FETCH_PENDING": state => state.set("loading", true),
+ "MOVIE_LIST_FETCH_FULFILLED": (state, action) => {
+ let movies = Map();
+ action.payload.response.data.map(function (movie) {
+ movie.fetchingDetails = false;
+ movie.fetchingSubtitles = false;
+ movies = movies.set(movie.imdb_id, fromJS(movie));
+ })
- return Object.assign({}, state, {
- selectedImdbId: action.imdbId,
- })
- default:
- return state
- }
+ // Select the first movie if the list is not empty
+ let selectedImdbId = "";
+ if (movies.size > 0) {
+ // Sort by year
+ movies = movies.sort((a,b) => b.get("year") - a.get("year"));
+ selectedImdbId = movies.first().get("imdb_id");
+ }
+
+ return state.delete("movies").merge(Map({
+ movies: movies,
+ filter: "",
+ loading: false,
+ selectedImdbId: selectedImdbId,
+ }))
+ },
+ "MOVIE_GET_DETAILS_PENDING" : (state, action) => state.setIn(["movies", action.payload.main.imdbId, "fetchingDetails"], true),
+ "MOVIE_GET_DETAILS_FULFILLED" : (state, action) => state.setIn(["movies", action.payload.response.data.imdb_id], fromJS(action.payload.response.data))
+ .setIn(["movies", action.payload.response.data.imdb_id, "fetchingDetails"], false)
+ .setIn(["movies", action.payload.response.data.imdb_id, "fetchingSubtitles"], false),
+ "MOVIE_UPDATE_STORE_WISHLIST" : (state, action) => state.setIn(["movies", action.payload.imdbId, "wishlisted"], action.payload.wishlisted),
+ "MOVIE_GET_EXPLORE_OPTIONS_FULFILLED" : (state, action) => state.set("exploreOptions", fromJS(action.payload.response.data)),
+ "UPDATE_LAST_MOVIE_FETCH_URL" : (state, action) => state.set("lastFetchUrl", action.payload.url),
+ "MOVIE_SUBTITLES_UPDATE_PENDING" : (state, action) => state.setIn(["movies", action.payload.main.imdbId, "fetchingSubtitles"], true),
+ "MOVIE_SUBTITLES_UPDATE_FULFILLED" : (state, action) => state.setIn(["movies", action.payload.main.imdbId, "fetchingSubtitles"], false)
+ .setIn(["movies", action.payload.main.imdbId, "subtitles"], fromJS(action.payload.response.data)),
+ "SELECT_MOVIE" : (state, action) => state.set("selectedImdbId", action.payload.imdbId),
+ "MOVIE_UPDATE_FILTER" : (state, action) => state.set("filter", action.payload.filter),
}
-function updateMovieDetails(movies, imdbId, data) {
- let index = movies.map((el) => el.imdb_id).indexOf(imdbId);
- movies[index] = data;
- return movies
-}
-
-function updateStoreWishlist(movies, imdbId, wishlisted) {
- let index = movies.map((el) => el.imdb_id).indexOf(imdbId);
- movies[index].wishlisted = wishlisted;
- return movies
-}
-
-function updateMovieSubtitles(movies, imdbId, fetching, data = null) {
- let index = movies.map((el) => el.imdb_id).indexOf(imdbId);
- if (data) {
- movies[index].subtitles = data;
- }
- movies[index].fetchingSubtitles = fetching;
- return movies
-}
+export default (state = defaultState, action) =>
+ handlers[action.type] ? handlers[action.type](state, action) : state;
diff --git a/src/public/js/reducers/show.js b/src/public/js/reducers/show.js
index 178c5ef..2eef6b6 100644
--- a/src/public/js/reducers/show.js
+++ b/src/public/js/reducers/show.js
@@ -1,4 +1,4 @@
-import { OrderedMap, Map, List, fromJS } from 'immutable'
+import { OrderedMap, Map, fromJS } from "immutable"
const defaultState = Map({
loading: false,
@@ -7,88 +7,70 @@ const defaultState = Map({
}),
});
-export default function showStore(state = defaultState, action) {
- switch (action.type) {
- case 'SHOW_FETCH_DETAILS_PENDING':
- return state.set('loading', true)
- case 'SHOW_FETCH_DETAILS_FULFILLED':
- return sortEpisodes(state, action.payload.response.data);
- case 'SHOW_UPDATE_STORE_WISHLIST':
- let season = action.payload.season;
- let episode = action.payload.episode;
- if (action.payload.wishlisted && season === null) {
- season = 0;
- episode = 0;
+const handlers = {
+ "SHOW_FETCH_DETAILS_PENDING": state => state.set("loading", true),
+ "SHOW_FETCH_DETAILS_FULFILLED": (state, action) => sortEpisodes(state, action.payload.response.data),
+ "SHOW_UPDATE_STORE_WISHLIST": (state, action) => {
+ let season = action.payload.season;
+ let episode = action.payload.episode;
+ if (action.payload.wishlisted && season === null) {
+ season = 0;
+ episode = 0;
+ }
+ return state.mergeDeep(fromJS({
+ "show": {
+ "tracked_season": season,
+ "tracked_episode": episode,
}
- return state.mergeDeep(fromJS({
- 'show': {
- 'tracked_season': season,
- 'tracked_episode': episode,
- }
- }));
- case 'EPISODE_GET_DETAILS_PENDING':
- return state.setIn(['show', 'seasons', action.payload.main.season, action.payload.main.episode, 'fetching'], true);
- case 'EPISODE_GET_DETAILS_FULFILLED':
- let data = action.payload.response.data;
- if (!data) { return state }
- data.fetching = false;
- return state.setIn(['show', 'seasons', data.season, data.episode], fromJS(data));
- case 'EPISODE_SUBTITLES_UPDATE_PENDING':
- return state.setIn(['show', 'seasons', action.payload.main.season, action.payload.main.episode, 'fetchingSubtitles'], true);
- case 'EPISODE_SUBTITLES_UPDATE_FULFILLED':
- let epId = ['show', 'seasons', action.payload.main.season, action.payload.main.episode];
- let ep = state.getIn(epId);
- ep = ep.set('subtitles', fromJS(action.payload.response.data)).set('fetchingSubtitles', false);
- return state.setIn(epId, ep);
- default:
- return state
- }
+ }))},
+ "EPISODE_GET_DETAILS_PENDING": (state, action) => state.setIn(["show", "seasons", action.payload.main.season, action.payload.main.episode, "fetching"], true),
+ "EPISODE_GET_DETAILS_FULFILLED": (state, action) => {
+ let data = action.payload.response.data;
+ if (!data) { return state }
+ data.fetching = false;
+ return state.setIn(["show", "seasons", data.season, data.episode], fromJS(data));
+ },
+ "EPISODE_SUBTITLES_UPDATE_PENDING" : (state, action) =>
+ state.setIn(["show", "seasons", action.payload.main.season, action.payload.main.episode, "fetchingSubtitles"], true),
+ "EPISODE_SUBTITLES_UPDATE_FULFILLED": (state, action) =>
+ state.setIn(["show", "seasons", action.payload.main.season, action.payload.main.episode, "subtitles"], fromJS(action.payload.response.data))
+ .setIn(["show", "seasons", action.payload.main.season, action.payload.main.episode, "fetchingSubtitles"], false),
}
-function updateEpisode(state, fetching, data = null) {
- if (data === null) {
- return state;
- }
-
- if (!state.hasIn(['show', 'season', data.season, data.episode])) {
- return show;
- }
-
- data.fetching = fetching
- return show.updateIn(['show', 'seasons', data.season, data.episode], fromJS(data));
-}
-
-function sortEpisodes(state, show) {
+const sortEpisodes = (state, show) => {
let episodes = show.episodes;
delete show["episodes"];
- let ret = state.set('loading', false);
+ let ret = state.set("loading", false);
if (episodes.length == 0) {
return ret;
}
// Set the show data
- ret = ret.set('show', fromJS(show));
+ ret = ret.set("show", fromJS(show));
// Set the show episodes
for (let ep of episodes) {
ep.fetching = false;
- ret = ret.setIn(['show', 'seasons', ep.season, ep.episode], fromJS(ep));
+ ret = ret.setIn(["show", "seasons", ep.season, ep.episode], fromJS(ep));
}
// Sort the episodes
- ret = ret.updateIn(['show', 'seasons'], function(seasons) {
+ ret = ret.updateIn(["show", "seasons"], function(seasons) {
return seasons.map(function(episodes) {
- return episodes.sort((a,b) => a.get('episode') - b.get('episode'));
+ return episodes.sort((a,b) => a.get("episode") - b.get("episode"));
});
});
// Sort the seasons
- ret = ret.updateIn(['show', 'seasons'], function(seasons) {
+ ret = ret.updateIn(["show", "seasons"], function(seasons) {
return seasons.sort(function(a,b) {
- return a.first().get('season') - b.first().get('season');
+ return a.first().get("season") - b.first().get("season");
});
});
return ret
}
+
+export default (state = defaultState, action) =>
+ handlers[action.type] ? handlers[action.type](state, action) : state;
diff --git a/src/public/js/reducers/shows.js b/src/public/js/reducers/shows.js
index 83430da..9c38e80 100644
--- a/src/public/js/reducers/shows.js
+++ b/src/public/js/reducers/shows.js
@@ -1,101 +1,67 @@
-const defaultState = {
+import { OrderedMap, Map, fromJS } from "immutable"
+
+const defaultState = Map({
loading: false,
- shows: [],
+ shows: OrderedMap(),
filter: "",
- perPage: 30,
selectedImdbId: "",
- getDetails: false,
- lastShowsFetchUrl: "",
- exploreOptions: {},
-};
+ lastFetchUrl: "",
+ exploreOptions: Map(),
+});
-export default function showsStore(state = defaultState, action) {
- switch (action.type) {
- case 'SHOW_LIST_FETCH_PENDING':
- return Object.assign({}, state, {
- loading: true,
- })
- case 'SHOW_LIST_FETCH_FULFILLED':
- let selectedImdbId = "";
- // Select the first show
- console.log("Hey", action.payload);
- if (action.payload.response.data.length > 0) {
- selectedImdbId = action.payload.response.data[0].imdb_id;
- }
- return Object.assign({}, state, {
- shows: action.payload.response.data,
- selectedImdbId: selectedImdbId,
- filter: defaultState.filter,
- loading: false,
- })
- case 'SHOW_GET_DETAILS_PENDING':
- return Object.assign({}, state, {
- getDetails: true,
- })
- case 'SHOW_GET_DETAILS_FULFILLED':
- return Object.assign({}, state, {
- shows: updateShowDetails(state.shows.slice(), action.payload.response.data),
- getDetails: false,
- })
- case 'EXPLORE_SHOWS_PENDING':
- return Object.assign({}, state, {
- loading: true,
- })
- case 'EXPLORE_SHOWS_FULFILLED':
- return Object.assign({}, state, {
- shows: action.payload.response.data,
- loading: false,
- })
- case 'SHOW_GET_EXPLORE_OPTIONS_FULFILLED':
- return Object.assign({}, state, {
- exploreOptions: action.payload.response.data,
- })
- case 'SHOW_UPDATE_STORE_WISHLIST':
- return Object.assign({}, state, {
- shows: updateShowsStoreWishlist(state.shows.slice(), action.payload),
- })
- case 'UPDATE_LAST_SHOWS_FETCH_URL':
- return Object.assign({}, state, {
- lastShowsFetchUrl: action.payload.url,
- })
- case 'SELECT_SHOW':
- // Don't select the show if we're fetching another show's details
- if (state.fetchingDetails) {
- return state
- }
+const handlers = {
+ "SHOW_LIST_FETCH_PENDING": state => state.set("loading", true),
+ "SHOW_LIST_FETCH_FULFILLED": (state, action) => {
+ let shows = Map();
+ action.payload.response.data.map(function (show) {
+ show.fetchingDetails = false;
+ show.fetchingSubtitles = false;
+ shows = shows.set(show.imdb_id, fromJS(show));
+ });
- return Object.assign({}, state, {
- selectedImdbId: action.imdbId,
- })
- default:
- return state
- }
-}
-
-// Update the store containing all the shows
-function updateShowsStoreWishlist(shows, payload) {
- if (shows.length === 0) {
- return shows;
- }
-
- let index = shows.map((el) => el.imdb_id).indexOf(payload.imdbId);
- let season = payload.season;
- let episode = payload.episode;
- if (payload.wishlisted) {
- if (season === null) {
- season = 0;
+ let selectedImdbId = "";
+ if (shows.size > 0) {
+ // Sort by year
+ shows = shows.sort((a,b) => b.get("year") - a.get("year"));
+ selectedImdbId = shows.first().get("imdb_id");
}
- if (episode === null) {
- episode = 0;
+
+ return state.delete("shows").merge(Map({
+ shows: shows,
+ filter: "",
+ loading: false,
+ selectedImdbId: selectedImdbId,
+ }));
+ },
+ "SHOW_GET_DETAILS_PENDING": (state, action) => state.setIn(["shows", action.payload.main.imdbId, "fetchingDetails"], true),
+ "SHOW_GET_DETAILS_FULFILLED": (state, action) => {
+ let show = action.payload.response.data;
+ show.fetchingDetails = false;
+ show.fetchingSubtitles = false;
+ return state.setIn(["shows", show.imdb_id], fromJS(show));
+ },
+ "SHOW_GET_EXPLORE_OPTIONS_FULFILLED": (state, action) => state.set("exploreOptions", fromJS(action.payload.response.data)),
+ "SHOW_UPDATE_STORE_WISHLIST": (state, action) => {
+ let season = action.payload.season;
+ let episode = action.payload.episode;
+ if (action.payload.wishlisted) {
+ if (season === null) {
+ season = 0;
+ }
+ if (episode === null) {
+ episode = 0;
+ }
}
- }
- shows[index].tracked_season = season;
- shows[index].tracked_episode = episode;
- return shows
+
+ return state.mergeIn(["shows", action.payload.imdbId], Map({
+ "tracked_season": season,
+ "tracked_episode": episode,
+ }));
+ },
+ "UPDATE_LAST_SHOWS_FETCH_URL": (state, action) => state.set("lastFetchUrl", action.payload.url),
+ "SELECT_SHOW": (state, action) => state.set("selectedImdbId", action.payload.imdbId),
+ "SHOWS_UPDATE_FILTER": (state, action) => state.set("filter", action.payload.filter),
}
-function updateShowDetails(shows, data) {
- let index = shows.map((el) => el.imdb_id).indexOf(data.imdb_id);
- shows[index] = data;
- return shows
-}
+export default (state = defaultState, action) =>
+ handlers[action.type] ? handlers[action.type](state, action) : state;
diff --git a/src/public/js/reducers/torrents.js b/src/public/js/reducers/torrents.js
index 4b3a8b4..6e219ec 100644
--- a/src/public/js/reducers/torrents.js
+++ b/src/public/js/reducers/torrents.js
@@ -1,20 +1,17 @@
-import { Map, List, fromJS } from 'immutable'
+import { Map, List, fromJS } from "immutable"
const defaultState = Map({
- 'fetching': false,
- 'torrents': List(),
+ "fetching": false,
+ "torrents": List(),
});
-export default function torrentStore(state = defaultState, action) {
- switch (action.type) {
- case 'TORRENTS_FETCH_PENDING':
- return state.set('fetching', false);
- case 'TORRENTS_FETCH_FULFILLED':
- return state.merge(fromJS({
- fetching: false,
- torrents: action.payload.response.data,
- }));
- default:
- return state
- }
+const handlers = {
+ "TORRENTS_FETCH_PENDING": state => state.set("fetching", false),
+ "TORRENTS_FETCH_FULFILLED": (state, action) => state.merge(fromJS({
+ fetching: false,
+ torrents: action.payload.response.data,
+ })),
}
+
+export default (state = defaultState, action) =>
+ handlers[action.type] ? handlers[action.type](state, action) : state;
diff --git a/src/public/js/reducers/users.js b/src/public/js/reducers/users.js
index eac6063..572f90c 100644
--- a/src/public/js/reducers/users.js
+++ b/src/public/js/reducers/users.js
@@ -1,59 +1,54 @@
-import jwtDecode from 'jwt-decode'
-import Cookies from 'universal-cookie'
+import { Map } from "immutable"
-const defaultState = {
- userLoading: false,
+import jwtDecode from "jwt-decode"
+import Cookies from "universal-cookie"
+
+const defaultState = Map({
+ loading: false,
username: "",
isAdmin: false,
isLogged: false,
polochonToken: "",
polochonUrl: "",
-};
+});
-export default function userStore(state = defaultState, action) {
- switch (action.type) {
- case 'USER_LOGIN_PENDING':
- return Object.assign({}, state, {
- userLoading: true,
- })
- case 'USER_LOGIN_FULFILLED':
- if (action.payload.response.status === "error") {
- return logoutUser(state)
- }
- return updateFromToken(state, action.payload.response.data.token)
- case 'USER_SET_TOKEN':
- return updateFromToken(state, action.payload.token)
- case 'USER_LOGOUT':
- return logoutUser(state)
- case 'GET_USER_FULFILLED':
- return Object.assign({}, state, {
- polochonToken: action.payload.response.data.token,
- polochonUrl: action.payload.response.data.url,
- })
- default:
- return state;
- }
+const handlers = {
+ "USER_LOGIN_PENDING": state => state.set("loading", true),
+ "USER_LOGIN_FULFILLED": (state, action) => {
+ if (action.payload.response.status === "error") {
+ return logoutUser()
+ }
+ return updateFromToken(state, action.payload.response.data.token)
+ },
+ "USER_SET_TOKEN": (state, action) => updateFromToken(state, action.payload.token),
+ "USER_LOGOUT": () => logoutUser(),
+ "GET_USER_FULFILLED": (state, action) => state.merge(Map({
+ polochonToken: action.payload.response.data.token,
+ polochonUrl: action.payload.response.data.url,
+ })),
}
-function logoutUser(state) {
- localStorage.removeItem('token');
+function logoutUser() {
+ localStorage.removeItem("token");
const cookies = new Cookies();
- cookies.remove('token');
-
- return Object.assign({}, state, defaultState)
+ cookies.remove("token");
+ return defaultState
}
function updateFromToken(state, token) {
const decodedToken = jwtDecode(token);
- localStorage.setItem('token', token);
+ localStorage.setItem("token", token);
const cookies = new Cookies();
- cookies.set('token', token);
+ cookies.set("token", token);
- return Object.assign({}, state, {
+ return state.merge(Map({
userLoading: false,
isLogged: true,
isAdmin: decodedToken.isAdmin,
username: decodedToken.username,
- })
+ }))
}
+
+export default (state = defaultState, action) =>
+ handlers[action.type] ? handlers[action.type](state, action) : state;
diff --git a/src/public/js/requests.js b/src/public/js/requests.js
index a11bf8f..f264068 100644
--- a/src/public/js/requests.js
+++ b/src/public/js/requests.js
@@ -1,12 +1,12 @@
-import axios from 'axios'
+import axios from "axios"
// This functions returns an axios instance, the token is added to the
// configuration if found in the localStorage
export function configureAxios(headers = {}) {
// Get the token from the localStorate
- const token = localStorage.getItem('token');
+ const token = localStorage.getItem("token");
if (token) {
- headers = { 'Authorization': `Bearer ${token}` };
+ headers = { "Authorization": `Bearer ${token}` };
}
return axios.create({
@@ -30,15 +30,16 @@ export function request(eventPrefix, promise, callbackEvents = null, mainPayload
})
promise
.then(response => {
- if (response.data.status === 'error')
+ if (response.data.status === "error")
{
dispatch({
- type: 'ADD_ALERT_ERROR',
+ type: "ADD_ALERT_ERROR",
payload: {
message: response.data.message,
main: mainPayload,
}
- })
+ });
+ return;
}
dispatch({
type: fulfilled,
@@ -57,11 +58,11 @@ export function request(eventPrefix, promise, callbackEvents = null, mainPayload
// Unauthorized
if (error.response && error.response.status == 401) {
dispatch({
- type: 'USER_LOGOUT',
+ type: "USER_LOGOUT",
})
}
dispatch({
- type: 'ADD_ALERT_ERROR',
+ type: "ADD_ALERT_ERROR",
payload: {
message: error.response.data,
main: mainPayload,
diff --git a/src/public/js/routes.js b/src/public/js/routes.js
index 33e3d03..99ac4b7 100644
--- a/src/public/js/routes.js
+++ b/src/public/js/routes.js
@@ -1,31 +1,29 @@
-import React from 'react'
+import MovieList from "./components/movies/list"
+import ShowList from "./components/shows/list"
+import ShowDetails from "./components/shows/details"
+import UserLoginForm from "./components/users/login"
+import UserEdit from "./components/users/edit"
+import UserSignUp from "./components/users/signup"
+import TorrentList from "./components/torrents/list"
-import MovieList from './components/movies/list'
-import ShowList from './components/shows/list'
-import ShowDetails from './components/shows/details'
-import UserLoginForm from './components/users/login'
-import UserEdit from './components/users/edit'
-import UserSignUp from './components/users/signup'
-import TorrentList from './components/torrents/list'
+import { fetchTorrents } from "./actions/torrents"
+import { userLogout, getUserInfos } from "./actions/users"
+import { fetchMovies, getMovieExploreOptions } from "./actions/movies"
+import { fetchShows, fetchShowDetails, getShowExploreOptions } from "./actions/shows"
-import { fetchTorrents } from './actions/torrents'
-import { userLogout, getUserInfos } from './actions/users'
-import { fetchMovies, getMovieExploreOptions } from './actions/movies'
-import { fetchShows, fetchShowDetails, getShowExploreOptions } from './actions/shows'
-
-import store from './store'
+import store from "./store"
// This function returns true if the user is logged in, false otherwise
function isLoggedIn() {
const state = store.getState();
const isLogged = state.userStore.isLogged;
- let token = localStorage.getItem('token');
+ let token = localStorage.getItem("token");
// Let's check if the user has a token, if he does let's assume he's logged
// in. If that's not the case he will be logged out on the fisrt query
if (token && token !== "") {
store.dispatch({
- type: 'USER_SET_TOKEN',
+ type: "USER_SET_TOKEN",
payload: {
token: token,
},
@@ -43,7 +41,7 @@ var pollingTorrentsId;
const loginCheck = function(nextState, replace, next, f = null) {
const loggedIn = isLoggedIn();
if (!loggedIn) {
- replace('/users/login');
+ replace("/users/login");
} else {
if (f) {
f();
@@ -61,19 +59,19 @@ const loginCheck = function(nextState, replace, next, f = null) {
next();
}
-const defaultRoute = '/movies/explore/yts/seeds';
+const defaultRoute = "/movies/explore/yts/seeds";
export default function getRoutes(App) {
return {
- path: '/',
+ path: "/",
component: App,
indexRoute: {onEnter: ({params}, replace) => replace(defaultRoute)},
childRoutes: [
{
- path: '/users/signup',
+ path: "/users/signup",
component: UserSignUp
},
{
- path: '/users/login',
+ path: "/users/login",
component: UserLoginForm,
onEnter: function(nextState, replace, next) {
if (isLoggedIn()) {
@@ -84,7 +82,7 @@ export default function getRoutes(App) {
},
},
{
- path: '/users/edit',
+ path: "/users/edit",
component: UserEdit,
onEnter: function(nextState, replace, next) {
loginCheck(nextState, replace, next, function() {
@@ -93,7 +91,7 @@ export default function getRoutes(App) {
},
},
{
- path: '/users/logout',
+ path: "/users/logout",
onEnter: function(nextState, replace, next) {
// Stop polling
if (pollingTorrentsId !== null) {
@@ -101,12 +99,12 @@ export default function getRoutes(App) {
pollingTorrentsId = null;
}
store.dispatch(userLogout());
- replace('/users/login');
+ replace("/users/login");
next();
},
},
{
- path: '/movies/search/:search',
+ path: "/movies/search/:search",
component: MovieList,
onEnter: function(nextState, replace, next) {
loginCheck(nextState, replace, next, function() {
@@ -115,22 +113,22 @@ export default function getRoutes(App) {
},
},
{
- path: '/movies/polochon',
+ path: "/movies/polochon",
component: MovieList,
onEnter: function(nextState, replace, next) {
loginCheck(nextState, replace, next, function() {
- store.dispatch(fetchMovies('/movies/polochon'));
+ store.dispatch(fetchMovies("/movies/polochon"));
});
},
},
{
- path: '/movies/explore/:source/:category',
+ path: "/movies/explore/:source/:category",
component: MovieList,
onEnter: function(nextState, replace, next) {
loginCheck(nextState, replace, next, function() {
var state = store.getState();
// Fetch the explore options
- if (Object.keys(state.movieStore.exploreOptions).length === 0) {
+ if (state.movieStore.get("exploreOptions").size === 0) {
store.dispatch(getMovieExploreOptions());
}
store.dispatch(fetchMovies(
@@ -140,16 +138,16 @@ export default function getRoutes(App) {
},
},
{
- path: '/movies/wishlist',
+ path: "/movies/wishlist",
component: MovieList,
onEnter: function(nextState, replace, next) {
loginCheck(nextState, replace, next, function() {
- store.dispatch(fetchMovies('/wishlist/movies'));
+ store.dispatch(fetchMovies("/wishlist/movies"));
});
},
},
{
- path: '/shows/search/:search',
+ path: "/shows/search/:search",
component: ShowList,
onEnter: function(nextState, replace, next) {
loginCheck(nextState, replace, next, function() {
@@ -158,25 +156,25 @@ export default function getRoutes(App) {
},
},
{
- path: '/shows/polochon',
+ path: "/shows/polochon",
component: ShowList,
onEnter: function(nextState, replace, next) {
loginCheck(nextState, replace, next, function() {
- store.dispatch(fetchShows('/shows/polochon'));
+ store.dispatch(fetchShows("/shows/polochon"));
});
},
},
{
- path: '/shows/wishlist',
+ path: "/shows/wishlist",
component: ShowList,
onEnter: function(nextState, replace, next) {
loginCheck(nextState, replace, next, function() {
- store.dispatch(fetchShows('/wishlist/shows'));
+ store.dispatch(fetchShows("/wishlist/shows"));
});
},
},
{
- path: '/shows/details/:imdbId',
+ path: "/shows/details/:imdbId",
component: ShowDetails,
onEnter: function(nextState, replace, next) {
loginCheck(nextState, replace, next, function() {
@@ -185,13 +183,13 @@ export default function getRoutes(App) {
},
},
{
- path: '/shows/explore/:source/:category',
+ path: "/shows/explore/:source/:category",
component: ShowList,
onEnter: function(nextState, replace, next) {
loginCheck(nextState, replace, next, function() {
var state = store.getState();
// Fetch the explore options
- if (Object.keys(state.showsStore.exploreOptions).length === 0) {
+ if (state.showsStore.get("exploreOptions").size === 0) {
store.dispatch(getShowExploreOptions());
}
store.dispatch(fetchShows(
@@ -201,7 +199,7 @@ export default function getRoutes(App) {
},
},
{
- path: '/torrents',
+ path: "/torrents",
component: TorrentList,
onEnter: function(nextState, replace, next) {
loginCheck(nextState, replace, next, function() {
diff --git a/src/public/js/store.js b/src/public/js/store.js
index 861331a..e092763 100644
--- a/src/public/js/store.js
+++ b/src/public/js/store.js
@@ -1,19 +1,19 @@
-import { createStore, applyMiddleware, compose } from 'redux';
-import { syncHistoryWithStore } from 'react-router-redux'
-import { hashHistory } from 'react-router'
-import thunk from 'redux-thunk'
-import { routerMiddleware } from 'react-router-redux'
+import { createStore, applyMiddleware, compose } from "redux";
+import { syncHistoryWithStore } from "react-router-redux"
+import { hashHistory } from "react-router"
+import thunk from "redux-thunk"
+import { routerMiddleware } from "react-router-redux"
// Import the root reducer
-import rootReducer from './reducers/index'
+import rootReducer from "./reducers/index"
const routingMiddleware = routerMiddleware(hashHistory)
const middlewares = [thunk, routingMiddleware];
// Only use in development mode (set in webpack)
-if (process.env.NODE_ENV === `development`) {
- const createLogger = require(`redux-logger`);
+if (process.env.NODE_ENV === "development") {
+ const createLogger = require("redux-logger");
const logger = createLogger();
middlewares.push(logger);
}
diff --git a/yarn.lock b/yarn.lock
index a71f73c..d3d2d2e 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1,13 +1,40 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
+
+
+Base64@~0.2.0:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/Base64/-/Base64-0.2.1.tgz#ba3a4230708e186705065e66babdd4c35cf60028"
+
abbrev@1:
version "1.0.9"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135"
-acorn@^3.0.0:
+acorn-jsx@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
+ dependencies:
+ acorn "^3.0.4"
+
+acorn@^3.0.0, acorn@^3.0.4:
version "3.3.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+acorn@^5.0.1:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d"
+
+ajv-keywords@^1.0.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
+
+ajv@^4.7.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
+ dependencies:
+ co "^4.6.0"
+ json-stable-stringify "^1.0.1"
+
align-text@^0.1.1, align-text@^0.1.3:
version "0.1.4"
resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
@@ -24,6 +51,10 @@ amdefine@>=0.0.4:
version "1.0.1"
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
+ansi-escapes@^1.1.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
+
ansi-regex@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.0.0.tgz#c5061b6e0ef8a81775e50f5d66151bf6bf371107"
@@ -171,6 +202,14 @@ babel-code-frame@^6.11.0, babel-code-frame@^6.16.0:
esutils "^2.0.2"
js-tokens "^2.0.0"
+babel-code-frame@^6.22.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4"
+ dependencies:
+ chalk "^1.1.0"
+ esutils "^2.0.2"
+ js-tokens "^3.0.0"
+
babel-core, babel-core@^6.0.2, babel-core@^6.18.0:
version "6.18.2"
resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.18.2.tgz#d8bb14dd6986fa4f3566a26ceda3964fa0e04e5b"
@@ -195,6 +234,15 @@ babel-core, babel-core@^6.0.2, babel-core@^6.18.0:
slash "^1.0.0"
source-map "^0.5.0"
+babel-eslint@^7.2.3:
+ version "7.2.3"
+ resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827"
+ dependencies:
+ babel-code-frame "^6.22.0"
+ babel-traverse "^6.23.1"
+ babel-types "^6.23.0"
+ babylon "^6.17.0"
+
babel-generator@^6.18.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.18.0.tgz#e4f104cb3063996d9850556a45aae4a022060a07"
@@ -326,6 +374,12 @@ babel-loader:
mkdirp "^0.5.1"
object-assign "^4.0.1"
+babel-messages@^6.23.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
+ dependencies:
+ babel-runtime "^6.22.0"
+
babel-messages@^6.8.0:
version "6.8.0"
resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.8.0.tgz#bf504736ca967e6d65ef0adb5a2a5f947c8e0eb9"
@@ -682,6 +736,13 @@ babel-runtime@^6.0.0, babel-runtime@^6.11.6, babel-runtime@^6.9.0, babel-runtime
core-js "^2.4.0"
regenerator-runtime "^0.9.5"
+babel-runtime@^6.22.0:
+ version "6.23.0"
+ resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b"
+ dependencies:
+ core-js "^2.4.0"
+ regenerator-runtime "^0.10.0"
+
babel-template@^6.14.0, babel-template@^6.15.0, babel-template@^6.16.0, babel-template@^6.8.0:
version "6.16.0"
resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.16.0.tgz#e149dd1a9f03a35f817ddbc4d0481988e7ebc8ca"
@@ -706,6 +767,20 @@ babel-traverse@^6.16.0, babel-traverse@^6.18.0:
invariant "^2.2.0"
lodash "^4.2.0"
+babel-traverse@^6.23.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.24.1.tgz#ab36673fd356f9a0948659e7b338d5feadb31695"
+ dependencies:
+ babel-code-frame "^6.22.0"
+ babel-messages "^6.23.0"
+ babel-runtime "^6.22.0"
+ babel-types "^6.24.1"
+ babylon "^6.15.0"
+ debug "^2.2.0"
+ globals "^9.0.0"
+ invariant "^2.2.0"
+ lodash "^4.2.0"
+
babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.8.0, babel-types@^6.9.0:
version "6.18.0"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.18.0.tgz#1f7d5a73474c59eb9151b2417bbff4e4fce7c3f8"
@@ -715,6 +790,15 @@ babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.8.0, babel-types@^6.9.0
lodash "^4.2.0"
to-fast-properties "^1.0.1"
+babel-types@^6.23.0, babel-types@^6.24.1:
+ version "6.24.1"
+ resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975"
+ dependencies:
+ babel-runtime "^6.22.0"
+ esutils "^2.0.2"
+ lodash "^4.2.0"
+ to-fast-properties "^1.0.1"
+
babel@^6.5.2:
version "6.5.2"
resolved "https://registry.yarnpkg.com/babel/-/babel-6.5.2.tgz#59140607438270920047ff56f02b2d8630c2d129"
@@ -723,6 +807,10 @@ babylon@^6.11.0:
version "6.13.1"
resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.13.1.tgz#adca350e088f0467647157652bafead6ddb8dfdb"
+babylon@^6.15.0, babylon@^6.17.0:
+ version "6.17.2"
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.2.tgz#201d25ef5f892c41bae49488b08db0dd476e9f5c"
+
balanced-match@^0.4.1, balanced-match@^0.4.2:
version "0.4.2"
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
@@ -735,10 +823,6 @@ base64-js@^1.0.2:
version "1.2.0"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
-Base64@~0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/Base64/-/Base64-0.2.1.tgz#ba3a4230708e186705065e66babdd4c35cf60028"
-
bcrypt-pbkdf@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.0.tgz#3ca76b85241c7170bf7d9703e7b9aa74630040d4"
@@ -820,6 +904,16 @@ builtin-modules@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+caller-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
+ dependencies:
+ callsites "^0.2.0"
+
+callsites@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
+
camelcase-keys@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
@@ -875,6 +969,10 @@ chokidar@^1.0.0:
optionalDependencies:
fsevents "^1.0.0"
+circular-json@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d"
+
clap@^1.0.9:
version "1.1.1"
resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.1.tgz#a8a93e0bfb7581ac199c4f001a5525a724ce696d"
@@ -885,6 +983,16 @@ classnames@^2.2.5:
version "2.2.5"
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d"
+cli-cursor@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
+ dependencies:
+ restore-cursor "^1.0.1"
+
+cli-width@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a"
+
cliui@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
@@ -905,6 +1013,10 @@ clone@^1.0.0, clone@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
+co@^4.6.0:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+
coa@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.1.tgz#7f959346cfc8719e3f7233cd6852854a7c67d8a3"
@@ -971,6 +1083,14 @@ concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+concat-stream@^1.5.2:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
console-browserify@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
@@ -1110,6 +1230,12 @@ currently-unhandled@^0.4.1:
dependencies:
array-find-index "^1.0.1"
+d@1:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
+ dependencies:
+ es5-ext "^0.10.9"
+
dashdash@^1.12.0:
version "1.14.0"
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.0.tgz#29e486c5418bf0f356034a993d51686a33e84141"
@@ -1151,6 +1277,10 @@ deep-extend@~0.4.0:
version "0.4.1"
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+
defaults@^1.0.0:
version "1.0.3"
resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
@@ -1161,7 +1291,7 @@ defined@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693"
-del@^2.2.2:
+del@^2.0.2, del@^2.2.2:
version "2.2.2"
resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
dependencies:
@@ -1197,6 +1327,13 @@ detect-indent@^4.0.0:
dependencies:
repeating "^2.0.0"
+doctrine@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63"
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
dom-helpers@^2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-2.4.0.tgz#9bb4b245f637367b1fa670274272aa28fe06c367"
@@ -1253,22 +1390,170 @@ error-ex@^1.2.0:
dependencies:
is-arrayish "^0.2.1"
-escape-string-regexp@^1.0.2:
+es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14:
+ version "0.10.22"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.22.tgz#1876c51f990769c112c781ea3ebe89f84fd39071"
+ dependencies:
+ es6-iterator "2"
+ es6-symbol "~3.1"
+
+es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512"
+ dependencies:
+ d "1"
+ es5-ext "^0.10.14"
+ es6-symbol "^3.1"
+
+es6-map@^0.1.3:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+ es6-iterator "~2.0.1"
+ es6-set "~0.1.5"
+ es6-symbol "~3.1.1"
+ event-emitter "~0.3.5"
+
+es6-set@~0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+ es6-iterator "~2.0.1"
+ es6-symbol "3.1.1"
+ event-emitter "~0.3.5"
+
+es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+
+es6-weak-map@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
+ dependencies:
+ d "1"
+ es5-ext "^0.10.14"
+ es6-iterator "^2.0.1"
+ es6-symbol "^3.1.1"
+
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+escope@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
+ dependencies:
+ es6-map "^0.1.3"
+ es6-weak-map "^2.0.1"
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-plugin-react@^7.0.1:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.0.1.tgz#e78107e1e559c6e2b17786bb67c2e2a010ad0d2f"
+ dependencies:
+ doctrine "^2.0.0"
+ has "^1.0.1"
+ jsx-ast-utils "^1.3.4"
+
+eslint@^3.19.0:
+ version "3.19.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc"
+ dependencies:
+ babel-code-frame "^6.16.0"
+ chalk "^1.1.3"
+ concat-stream "^1.5.2"
+ debug "^2.1.1"
+ doctrine "^2.0.0"
+ escope "^3.6.0"
+ espree "^3.4.0"
+ esquery "^1.0.0"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ file-entry-cache "^2.0.0"
+ glob "^7.0.3"
+ globals "^9.14.0"
+ ignore "^3.2.0"
+ imurmurhash "^0.1.4"
+ inquirer "^0.12.0"
+ is-my-json-valid "^2.10.0"
+ is-resolvable "^1.0.0"
+ js-yaml "^3.5.1"
+ json-stable-stringify "^1.0.0"
+ levn "^0.3.0"
+ lodash "^4.0.0"
+ mkdirp "^0.5.0"
+ natural-compare "^1.4.0"
+ optionator "^0.8.2"
+ path-is-inside "^1.0.1"
+ pluralize "^1.2.1"
+ progress "^1.1.8"
+ require-uncached "^1.0.2"
+ shelljs "^0.7.5"
+ strip-bom "^3.0.0"
+ strip-json-comments "~2.0.1"
+ table "^3.7.8"
+ text-table "~0.2.0"
+ user-home "^2.0.0"
+
+espree@^3.4.0:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.3.tgz#2910b5ccd49ce893c2ffffaab4fd8b3a31b82374"
+ dependencies:
+ acorn "^5.0.1"
+ acorn-jsx "^3.0.0"
+
esprima@^2.6.0:
version "2.7.3"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
+esquery@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa"
+ dependencies:
+ estraverse "^4.0.0"
+
+esrecurse@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220"
+ dependencies:
+ estraverse "~4.1.0"
+ object-assign "^4.0.1"
+
+estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+
+estraverse@~4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2"
+
esutils@^2.0.0, esutils@^2.0.2:
version "2.0.2"
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+event-emitter@~0.3.5:
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+
events@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
+exit-hook@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
+
expand-brackets@^0.1.4:
version "0.1.5"
resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
@@ -1308,6 +1593,10 @@ fancy-log@^1.1.0:
chalk "^1.1.1"
time-stamp "^1.0.0"
+fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+
fastparse@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8"
@@ -1324,6 +1613,20 @@ fbjs@^0.8.4:
promise "^7.1.1"
ua-parser-js "^0.7.9"
+figures@^1.3.5:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ object-assign "^4.1.0"
+
+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"
+ dependencies:
+ flat-cache "^1.2.1"
+ object-assign "^4.0.1"
+
file-loader:
version "0.9.0"
resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.9.0.tgz#1d2daddd424ce6d1b07cfe3f79731bed3617ab42"
@@ -1392,6 +1695,15 @@ flagged-respawn@^0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-0.3.2.tgz#ff191eddcd7088a675b2610fffc976be9b8074b5"
+flat-cache@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96"
+ dependencies:
+ circular-json "^0.3.1"
+ del "^2.0.2"
+ graceful-fs "^4.1.2"
+ write "^0.2.1"
+
flatten@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
@@ -1539,6 +1851,12 @@ glob-watcher@^0.0.6:
dependencies:
gaze "^0.5.1"
+glob2base@^0.0.12:
+ version "0.0.12"
+ resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56"
+ dependencies:
+ find-index "^0.1.1"
+
glob@^4.3.1:
version "4.5.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f"
@@ -1548,7 +1866,7 @@ glob@^4.3.1:
minimatch "^2.0.1"
once "^1.3.0"
-glob@^7.0.3, glob@^7.0.5:
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.5:
version "7.1.1"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
dependencies:
@@ -1567,12 +1885,6 @@ glob@~3.1.21:
inherits "1"
minimatch "~0.2.11"
-glob2base@^0.0.12:
- version "0.0.12"
- resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56"
- dependencies:
- find-index "^0.1.1"
-
global-modules@^0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d"
@@ -1589,9 +1901,9 @@ global-prefix@^0.1.4:
osenv "^0.1.3"
which "^1.2.10"
-globals@^9.0.0:
- version "9.13.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-9.13.0.tgz#d97706b61600d8dbe94708c367d3fdcf48470b8f"
+globals@^9.0.0, globals@^9.14.0:
+ version "9.17.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286"
globby@^5.0.0:
version "5.0.0"
@@ -1803,10 +2115,6 @@ https-browserify@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.0.tgz#b3ffdfe734b2a3d4a9efd58e8654c91fce86eafd"
-icepick@^1.1.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/icepick/-/icepick-1.3.0.tgz#e4942842ed8f9ee778d7dd78f7e36627f49fdaef"
-
iconv-lite@~0.4.13:
version "0.4.13"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2"
@@ -1819,6 +2127,10 @@ ieee754@^1.1.4:
version "1.1.8"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
+ignore@^3.2.0:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d"
+
image-size@~0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.0.tgz#be7aed1c37b5ac3d9ba1d66a24b4c47ff8397651"
@@ -1827,6 +2139,10 @@ immutable, immutable@^3.7.6:
version "3.8.1"
resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.1.tgz#200807f11ab0f72710ea485542de088075f68cd2"
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+
indent-string@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
@@ -1848,14 +2164,14 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
-inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
-
inherits@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"
+inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1:
+ version "2.0.3"
+ resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+
inherits@2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
@@ -1864,6 +2180,24 @@ ini@^1.3.4, ini@~1.3.0:
version "1.3.4"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
+inquirer@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
+ dependencies:
+ ansi-escapes "^1.1.0"
+ ansi-regex "^2.0.0"
+ chalk "^1.0.0"
+ cli-cursor "^1.0.1"
+ cli-width "^2.0.0"
+ figures "^1.3.5"
+ lodash "^4.3.0"
+ readline2 "^1.0.1"
+ run-async "^0.1.0"
+ rx-lite "^3.1.2"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.0"
+ through "^2.3.6"
+
interpret@^0.6.4:
version "0.6.6"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b"
@@ -1872,7 +2206,7 @@ interpret@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c"
-invariant@^2.0.0, invariant@^2.1.0, invariant@^2.2.0, invariant@^2.2.1, invariant@~2.2.1:
+invariant@^2.0.0, invariant@^2.1.0, invariant@^2.2.0, invariant@^2.2.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.1.tgz#b097010547668c7e337028ebe816ebe36c8a8d54"
dependencies:
@@ -1939,13 +2273,17 @@ is-fullwidth-code-point@^1.0.0:
dependencies:
number-is-nan "^1.0.0"
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+
is-glob@^2.0.0, is-glob@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
dependencies:
is-extglob "^1.0.0"
-is-my-json-valid@^2.12.4:
+is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4:
version "2.15.0"
resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.15.0.tgz#936edda3ca3c211fd98f3b2d3e08da43f7b2915b"
dependencies:
@@ -2002,6 +2340,12 @@ is-relative@^0.2.1:
dependencies:
is-unc-path "^0.1.1"
+is-resolvable@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62"
+ dependencies:
+ tryit "^1.0.1"
+
is-stream@^1.0.1:
version "1.1.0"
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
@@ -2030,14 +2374,14 @@ is-windows@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c"
-isarray@^1.0.0, isarray@~1.0.0, isarray@1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-
isarray@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
+isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
+
isexe@^1.1.1:
version "1.1.2"
resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0"
@@ -2077,7 +2421,11 @@ js-tokens@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-2.0.0.tgz#79903f5563ee778cc1162e6dcf1a0027c97f9cb5"
-js-yaml@~3.6.1:
+js-tokens@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
+
+js-yaml@^3.5.1, js-yaml@~3.6.1:
version "3.6.1"
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30"
dependencies:
@@ -2100,6 +2448,12 @@ json-schema@0.2.3:
version "0.2.3"
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
+json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ dependencies:
+ jsonify "~0.0.0"
+
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"
@@ -2108,6 +2462,10 @@ json5@^0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.0.tgz#9b20715b026cbe3778fd769edccd822d8332a5b2"
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+
jsonpointer@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.0.tgz#6661e161d2fc445f19f98430231343722e1fcbd5"
@@ -2120,6 +2478,10 @@ jsprim@^1.2.2:
json-schema "0.2.3"
verror "1.3.6"
+jsx-ast-utils@^1.3.4:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1"
+
jwt-decode:
version "2.1.0"
resolved "https://registry.yarnpkg.com/jwt-decode/-/jwt-decode-2.1.0.tgz#d3079cef1689d82d56bbb7aedcfea28b12f0e36a"
@@ -2156,6 +2518,13 @@ less@^2.7.1:
promise "^7.1.1"
source-map "^0.5.3"
+levn@^0.3.0, levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
liftoff@^2.1.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.3.0.tgz#a98f2ff67183d8ba7cfaca10548bd7ff0550b385"
@@ -2180,7 +2549,7 @@ load-json-file@^1.0.0:
pinkie-promise "^2.0.0"
strip-bom "^2.0.0"
-loader-utils@^0.2.11, loader-utils@^0.2.5, loader-utils@^0.2.7, loader-utils@~0.2.2, loader-utils@~0.2.5, loader-utils@0.2.x:
+loader-utils@0.2.x, loader-utils@^0.2.11, loader-utils@^0.2.5, loader-utils@^0.2.7, loader-utils@~0.2.2, loader-utils@~0.2.5:
version "0.2.16"
resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.16.tgz#f08632066ed8282835dff88dfb52704765adee6d"
dependencies:
@@ -2316,7 +2685,7 @@ lodash.templatesettings@^3.0.0:
lodash._reinterpolate "^3.0.0"
lodash.escape "^3.0.0"
-lodash@^4.10.0, lodash@^4.2.0, lodash@^4.2.1:
+lodash@^4.0.0, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0:
version "4.16.6"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.16.6.tgz#d22c9ac660288f3843e16ba7d2b5d06cca27d777"
@@ -2417,14 +2786,14 @@ mime-types@^2.1.12, mime-types@~2.1.7:
dependencies:
mime-db "~1.24.0"
-mime@^1.2.11:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
-
mime@1.2.x:
version "1.2.11"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10"
+mime@^1.2.11:
+ version "1.3.4"
+ resolved "https://registry.yarnpkg.com/mime/-/mime-1.3.4.tgz#115f9e3b6b3daf2959983cb38f149a2d40eb5d53"
+
minimatch@^2.0.1:
version "2.0.10"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
@@ -2444,15 +2813,15 @@ minimatch@~0.2.11:
lru-cache "2"
sigmund "~1.0.0"
+minimist@0.0.8, minimist@~0.0.1:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+
minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-minimist@~0.0.1, minimist@0.0.8:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-
-mkdirp@^0.5.0, mkdirp@^0.5.1, "mkdirp@>=0.5 0", mkdirp@~0.5.0, mkdirp@~0.5.1:
+"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
dependencies:
@@ -2472,6 +2841,10 @@ multipipe@^0.1.2:
dependencies:
duplexer2 "0.0.2"
+mute-stream@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
+
nan@^2.3.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/nan/-/nan-2.4.0.tgz#fb3c59d45fe4effe215f0b890f8adf6eb32d2232"
@@ -2480,6 +2853,10 @@ natives@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31"
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+
node-fetch@^1.0.1:
version "1.6.3"
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.6.3.tgz#dc234edd6489982d58e8f0db4f695029abcd8c04"
@@ -2613,6 +2990,10 @@ once@~1.3.0, once@~1.3.3:
dependencies:
wrappy "1"
+onetime@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
+
optimist@~0.6.0:
version "0.6.1"
resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
@@ -2620,6 +3001,17 @@ optimist@~0.6.0:
minimist "~0.0.1"
wordwrap "~0.0.2"
+optionator@^0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+ 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"
+
orchestrator@^0.3.0:
version "0.3.8"
resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e"
@@ -2738,6 +3130,10 @@ pkg-dir@^1.0.0:
dependencies:
find-up "^1.0.0"
+pluralize@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
+
postcss-calc@^5.2.0:
version "5.3.1"
resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e"
@@ -2972,6 +3368,10 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0
source-map "^0.5.6"
supports-color "^3.1.2"
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+
prepend-http@^1.0.0:
version "1.0.4"
resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc"
@@ -2996,6 +3396,10 @@ process@^0.11.0, process@~0.11.0:
version "0.11.9"
resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1"
+progress@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
+
promise@^7.1.1:
version "7.1.1"
resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf"
@@ -3006,14 +3410,14 @@ prr@~0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
-punycode@^1.2.4, punycode@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
-
punycode@1.3.2:
version "1.3.2"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
+punycode@^1.2.4, punycode@^1.4.1:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
+
q@^1.1.2:
version "1.4.1"
resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e"
@@ -3109,14 +3513,6 @@ react-redux:
lodash "^4.2.0"
loose-envify "^1.1.0"
-react-redux-form:
- version "1.2.4"
- resolved "https://registry.yarnpkg.com/react-redux-form/-/react-redux-form-1.2.4.tgz#924c5ac06dd52f21efc961df6aed9c10bfe27de9"
- dependencies:
- icepick "^1.1.0"
- invariant "~2.2.1"
- lodash "^4.10.0"
-
react-router:
version "3.0.0"
resolved "https://registry.yarnpkg.com/react-router/-/react-router-3.0.0.tgz#3f313e4dbaf57048c48dd0a8c3cac24d93667dff"
@@ -3158,6 +3554,15 @@ read-pkg@^1.0.0:
normalize-package-data "^2.3.2"
path-type "^1.0.0"
+"readable-stream@>=1.0.33-1 <1.1.0-0":
+ version "1.0.34"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+ dependencies:
+ core-util-is "~1.0.0"
+ inherits "~2.0.1"
+ isarray "0.0.1"
+ string_decoder "~0.10.x"
+
readable-stream@^1.0.27-1, readable-stream@^1.1.13, readable-stream@~1.1.9:
version "1.1.14"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
@@ -3190,14 +3595,17 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@~2.0.0:
string_decoder "~0.10.x"
util-deprecate "~1.0.1"
-"readable-stream@>=1.0.33-1 <1.1.0-0":
- version "1.0.34"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
+readable-stream@^2.2.2:
+ version "2.2.10"
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.10.tgz#effe72bb7c884c0dd335e2379d526196d9d011ee"
dependencies:
core-util-is "~1.0.0"
inherits "~2.0.1"
- isarray "0.0.1"
- string_decoder "~0.10.x"
+ isarray "~1.0.0"
+ process-nextick-args "~1.0.6"
+ safe-buffer "^5.0.1"
+ string_decoder "~1.0.0"
+ util-deprecate "~1.0.1"
readdirp@^2.0.0:
version "2.1.0"
@@ -3208,6 +3616,14 @@ readdirp@^2.0.0:
readable-stream "^2.0.2"
set-immediate-shim "^1.0.1"
+readline2@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ mute-stream "0.0.5"
+
rechoir@^0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
@@ -3258,6 +3674,10 @@ regenerate@^1.2.1:
version "1.3.2"
resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260"
+regenerator-runtime@^0.10.0:
+ version "0.10.5"
+ resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658"
+
regenerator-runtime@^0.9.5:
version "0.9.6"
resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz#d33eb95d0d2001a4be39659707c51b0cb71ce029"
@@ -3338,6 +3758,13 @@ request@^2.75.0:
tough-cookie "~2.3.0"
tunnel-agent "~0.4.1"
+require-uncached@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
+ dependencies:
+ caller-path "^0.1.0"
+ resolve-from "^1.0.0"
+
resolve-dir@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e"
@@ -3345,6 +3772,10 @@ resolve-dir@^0.1.0:
expand-tilde "^1.2.2"
global-modules "^0.2.3"
+resolve-from@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+
resolve-pathname@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-2.0.2.tgz#e55c016eb2e9df1de98e85002282bfb38c630436"
@@ -3353,13 +3784,20 @@ resolve@^1.1.6, resolve@^1.1.7:
version "1.1.7"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
+restore-cursor@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
+ dependencies:
+ exit-hook "^1.0.0"
+ onetime "^1.0.0"
+
right-align@^0.1.1:
version "0.1.3"
resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
dependencies:
align-text "^0.1.1"
-rimraf@^2.2.8, rimraf@~2.5.1, rimraf@~2.5.4, rimraf@2:
+rimraf@2, rimraf@^2.2.8, rimraf@~2.5.1, rimraf@~2.5.4:
version "2.5.4"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
dependencies:
@@ -3369,11 +3807,25 @@ ripemd160@0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce"
+run-async@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
+ dependencies:
+ once "^1.3.0"
+
+rx-lite@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
+
+safe-buffer@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7"
+
sax@~1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a"
-semver@^4.1.0, "semver@2 || 3 || 4 || 5":
+"semver@2 || 3 || 4 || 5", semver@^4.1.0:
version "4.3.6"
resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
@@ -3397,6 +3849,14 @@ sha.js@2.2.6:
version "2.2.6"
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba"
+shelljs@^0.7.5:
+ version "0.7.7"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1"
+ dependencies:
+ glob "^7.0.0"
+ interpret "^1.0.0"
+ rechoir "^0.6.2"
+
sigmund@~1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
@@ -3409,6 +3869,10 @@ slash@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
+slice-ansi@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+
sntp@1.x.x:
version "1.0.9"
resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
@@ -3493,10 +3957,6 @@ strict-uri-encode@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713"
-string_decoder@~0.10.25, string_decoder@~0.10.x:
- version "0.10.31"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
-
string-width@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
@@ -3505,6 +3965,23 @@ string-width@^1.0.1:
is-fullwidth-code-point "^1.0.0"
strip-ansi "^3.0.0"
+string-width@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e"
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^3.0.0"
+
+string_decoder@~0.10.25, string_decoder@~0.10.x:
+ version "0.10.31"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
+
+string_decoder@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.1.tgz#62e200f039955a6810d8df0a33ffc0f013662d98"
+ dependencies:
+ safe-buffer "^5.0.1"
+
stringstream@~0.0.4:
version "0.0.5"
resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
@@ -3528,6 +4005,10 @@ strip-bom@^2.0.0:
dependencies:
is-utf8 "^0.2.0"
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+
strip-indent@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
@@ -3538,6 +4019,10 @@ strip-json-comments@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91"
+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"
+
style-loader:
version "0.13.1"
resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.13.1.tgz#468280efbc0473023cd3a6cd56e33b5a1d7fc3a9"
@@ -3570,6 +4055,17 @@ symbol-observable@^1.0.2:
version "1.0.4"
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d"
+table@^3.7.8:
+ version "3.8.3"
+ resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
+ dependencies:
+ ajv "^4.7.0"
+ ajv-keywords "^1.0.0"
+ chalk "^1.1.1"
+ lodash "^4.0.0"
+ slice-ansi "0.0.4"
+ string-width "^2.0.0"
+
tapable@^0.1.8, tapable@~0.1.8:
version "0.1.10"
resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4"
@@ -3595,9 +4091,9 @@ tar@~2.2.1:
fstream "^1.0.2"
inherits "2"
-through@^2.3.8:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+text-table@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
through2@^0.6.1:
version "0.6.5"
@@ -3613,6 +4109,10 @@ through2@^2.0.0:
readable-stream "~2.0.0"
xtend "~4.0.0"
+through@^2.3.6, through@^2.3.8:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+
tildify@^1.0.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a"
@@ -3643,6 +4143,10 @@ trim-newlines@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
+tryit@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
+
tty-browserify@0.0.0:
version "0.0.0"
resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
@@ -3655,6 +4159,16 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0:
version "0.14.3"
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.3.tgz#3da382f670f25ded78d7b3d1792119bca0b7132d"
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ dependencies:
+ prelude-ls "~1.1.2"
+
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+
ua-parser-js@^0.7.9:
version "0.7.11"
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.11.tgz#3741e2dd2fb09251a960f9ef076cd0cc72eaf6a0"
@@ -3730,11 +4244,17 @@ user-home@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
+user-home@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
+ dependencies:
+ os-homedir "^1.0.0"
+
util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-util@~0.10.3, util@0.10.3:
+util@0.10.3, util@~0.10.3:
version "0.10.3"
resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
dependencies:
@@ -3892,19 +4412,29 @@ window-size@0.1.0:
version "0.1.0"
resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
+wordwrap@0.0.2:
+ version "0.0.2"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+
wordwrap@~0.0.2:
version "0.0.3"
resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
-wordwrap@0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
+wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
wrappy@1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-xtend@^4.0.0, "xtend@>=4.0.0 <4.1.0-0", xtend@~4.0.0:
+write@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
+ dependencies:
+ mkdirp "^0.5.1"
+
+"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
@@ -3916,4 +4446,3 @@ yargs@~3.10.0:
cliui "^2.1.0"
decamelize "^1.0.0"
window-size "0.1.0"
-
|