diff --git a/.editorconfig b/.editorconfig
index 1addde2..5fdb115 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -8,11 +8,11 @@ trim_trailing_whitespace = true
insert_final_newline = true
[*.{json,js,jsx,html,css}]
-indent_style = space
+indent_style = tab
indent_size = 2
[.eslintrc]
-indent_style = space
+indent_style = tab
indent_size = 2
[*.md]
diff --git a/.eslintrc b/.eslintrc
index 49f1729..f791f70 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -1,43 +1,71 @@
{
- "parser": "babel-eslint",
- "extends": "airbnb",
- "env": {
- "browser": true,
- "node": true
- },
- "rules": {
- "arrow-parens": ["off"],
- "compat/compat": "error",
- "consistent-return": "off",
- "comma-dangle": "off",
- "generator-star-spacing": "off",
- "import/no-unresolved": "error",
- "import/no-extraneous-dependencies": "off",
- "no-console": "off",
- "no-use-before-define": "off",
- "no-multi-assign": "off",
- "promise/param-names": "error",
- "promise/always-return": "error",
- "promise/catch-or-return": "error",
- "promise/no-native": "off",
- "react/sort-comp": ["error", {
- "order": ["type-annotations", "static-methods", "lifecycle", "everything-else", "render"]
- }],
- "react/prop-types": "off",
- "react/jsx-filename-extension": ["error", { "extensions": [".js", ".jsx"] }],
- "react/prefer-stateless-function": "off"
- },
- "plugins": [
- "import",
- "promise",
- "compat",
- "react"
- ],
- "settings": {
- "import/resolver": {
- "webpack": {
- "config": "webpack.config.eslint.js"
- }
- }
- }
+ "parser": "babel-eslint",
+ "extends": "airbnb",
+ "env": {
+ "browser": true,
+ "node": true
+ },
+ "rules": {
+ "arrow-parens": [
+ "off"
+ ],
+ "compat/compat": "error",
+ "consistent-return": "off",
+ "comma-dangle": "off",
+ "generator-star-spacing": "off",
+ "import/no-unresolved": "error",
+ "import/no-extraneous-dependencies": "off",
+ "indent": [
+ "error",
+ "tab"
+ ],
+ "no-console": "off",
+ "no-tabs": "off",
+ "no-use-before-define": "off",
+ "no-multi-assign": "off",
+ "promise/param-names": "error",
+ "promise/always-return": "error",
+ "promise/catch-or-return": "error",
+ "promise/no-native": "off",
+ "react/sort-comp": [
+ "error",
+ {
+ "order": [
+ "type-annotations",
+ "static-methods",
+ "lifecycle",
+ "everything-else",
+ "render"
+ ]
+ }
+ ],
+ "react/prop-types": "off",
+ "react/jsx-indent": [
+ 2,
+ 'tab'
+ ],
+ "react/jsx-filename-extension": [
+ "error",
+ {
+ "extensions": [
+ ".js",
+ ".jsx"
+ ]
+ }
+ ],
+ "react/prefer-stateless-function": "off"
+ },
+ "plugins": [
+ "import",
+ "promise",
+ "compat",
+ "react"
+ ],
+ "settings": {
+ "import/resolver": {
+ "webpack": {
+ "config": "webpack.config.eslint.js"
+ }
+ }
+ }
}
diff --git a/app/.eslintrc b/app/.eslintrc
deleted file mode 100644
index 531712e..0000000
--- a/app/.eslintrc
+++ /dev/null
@@ -1,4 +0,0 @@
-{
- "rules": {
- }
-}
diff --git a/app/components/Home.js b/app/components/Home.js
index bad84f0..4a9cfcc 100644
--- a/app/components/Home.js
+++ b/app/components/Home.js
@@ -1,12 +1,12 @@
import React, { Component } from 'react';
export default class Home extends Component {
- render() {
- return (
-
-
Home
- ...is where the heart is
-
- );
- }
+ render() {
+ return (
+
+
Home
+ ...is where the heart is
+
+ );
+ }
}
diff --git a/app/containers/App.js b/app/containers/App.js
index 0824d64..70037c2 100644
--- a/app/containers/App.js
+++ b/app/containers/App.js
@@ -1,19 +1,19 @@
import React, { PureComponent } from 'react';
export default class App extends PureComponent {
- render() {
- return (
-
-
-
- {this.props.children}
-
-
-
- );
- }
+ render() {
+ return (
+
+
+
+ {this.props.children}
+
+
+
+ );
+ }
}
diff --git a/app/containers/HomePage.js b/app/containers/HomePage.js
index b938e37..ffd157b 100644
--- a/app/containers/HomePage.js
+++ b/app/containers/HomePage.js
@@ -2,9 +2,9 @@ import React, { Component } from 'react';
import Home from '../components/Home';
export default class HomePage extends Component {
- render() {
- return (
-
- );
- }
+ render() {
+ return (
+
+ );
+ }
}
diff --git a/app/containers/Root.js b/app/containers/Root.js
index 29d8fe7..54c1de9 100644
--- a/app/containers/Root.js
+++ b/app/containers/Root.js
@@ -4,9 +4,9 @@ import { Router } from 'react-router';
import routes from '../routes';
export default function Root({ store, history }) {
- return (
-
-
-
- );
+ return (
+
+
+
+ );
}
diff --git a/app/index.js b/app/index.js
index 247c128..e28c79c 100644
--- a/app/index.js
+++ b/app/index.js
@@ -11,20 +11,20 @@ const store = configureStore();
const history = syncHistoryWithStore(hashHistory, store);
render(
-
-
- ,
+
+
+ ,
document.getElementById('root')
);
if (module.hot) {
- module.hot.accept('./containers/Root', () => {
- const NextRoot = require('./containers/Root'); // eslint-disable-line global-require
- render(
-
-
- ,
+ module.hot.accept('./containers/Root', () => {
+ const NextRoot = require('./containers/Root'); // eslint-disable-line global-require
+ render(
+
+
+ ,
document.getElementById('root')
);
- });
+ });
}
diff --git a/app/main.development.js b/app/main.development.js
index 2cd8df0..3693221 100644
--- a/app/main.development.js
+++ b/app/main.development.js
@@ -5,26 +5,26 @@ import MenuBuilder from './menu';
let mainWindow = null;
if (process.env.NODE_ENV === 'production') {
- const sourceMapSupport = require('source-map-support');
- sourceMapSupport.install();
+ const sourceMapSupport = require('source-map-support');
+ sourceMapSupport.install();
}
if (process.env.NODE_ENV === 'development') {
- require('electron-debug')();
- const path = require('path');
- const p = path.join(__dirname, '..', 'app', 'node_modules');
- require('module').globalPaths.push(p);
+ require('electron-debug')();
+ const path = require('path');
+ const p = path.join(__dirname, '..', 'app', 'node_modules');
+ require('module').globalPaths.push(p);
}
const installExtensions = async () => {
- const installer = require('electron-devtools-installer');
- const forceDownload = !!process.env.UPGRADE_EXTENSIONS;
- const extensions = [
- 'REACT_DEVELOPER_TOOLS',
- 'REDUX_DEVTOOLS'
- ];
+ const installer = require('electron-devtools-installer');
+ const forceDownload = !!process.env.UPGRADE_EXTENSIONS;
+ const extensions = [
+ 'REACT_DEVELOPER_TOOLS',
+ 'REDUX_DEVTOOLS'
+ ];
- return Promise
+ return Promise
.all(extensions.map(name => installer.default(installer[name], forceDownload)))
.catch(console.log);
};
@@ -33,39 +33,39 @@ const installExtensions = async () => {
app.on('window-all-closed', () => {
// Respect the OSX convention of having the application in memory even
// after all windows have been closed
- if (process.platform !== 'darwin') {
- app.quit();
- }
+ if (process.platform !== 'darwin') {
+ app.quit();
+ }
});
app.on('ready', async () => {
- if (process.env.NODE_ENV === 'development') {
- await installExtensions();
- }
+ if (process.env.NODE_ENV === 'development') {
+ await installExtensions();
+ }
- mainWindow = new BrowserWindow({
- show: false,
- width: 1024,
- height: 728
- });
+ mainWindow = new BrowserWindow({
+ show: false,
+ width: 1024,
+ height: 728
+ });
- mainWindow.loadURL(`file://${__dirname}/app.html`);
+ mainWindow.loadURL(`file://${__dirname}/app.html`);
// @TODO: Use 'ready-to-show' event
// https://github.com/electron/electron/blob/master/docs/api/browser-window.md#using-ready-to-show-event
- mainWindow.webContents.on('did-finish-load', () => {
- if (!mainWindow) {
- throw new Error('"mainWindow" is not defined');
- }
- mainWindow.show();
- mainWindow.focus();
- });
+ mainWindow.webContents.on('did-finish-load', () => {
+ if (!mainWindow) {
+ throw new Error('"mainWindow" is not defined');
+ }
+ mainWindow.show();
+ mainWindow.focus();
+ });
- mainWindow.on('closed', () => {
- mainWindow = null;
- });
+ mainWindow.on('closed', () => {
+ mainWindow = null;
+ });
- const menuBuilder = new MenuBuilder(mainWindow);
- menuBuilder.buildMenu();
+ const menuBuilder = new MenuBuilder(mainWindow);
+ menuBuilder.buildMenu();
});
diff --git a/app/menu.js b/app/menu.js
index 7c77bc6..b617771 100644
--- a/app/menu.js
+++ b/app/menu.js
@@ -1,51 +1,51 @@
import { app, Menu, shell, BrowserWindow } from 'electron';
export default class MenuBuilder {
- mainWindow: BrowserWindow;
+ mainWindow: BrowserWindow;
- constructor(mainWindow: BrowserWindow) {
- this.mainWindow = mainWindow;
- }
+ constructor(mainWindow: BrowserWindow) {
+ this.mainWindow = mainWindow;
+ }
- buildMenu() {
- if (process.env.NODE_ENV === 'development') {
- this.setupDevelopmentEnvironment();
- }
+ buildMenu() {
+ if (process.env.NODE_ENV === 'development') {
+ this.setupDevelopmentEnvironment();
+ }
- let template;
+ let template;
- if (process.platform === 'darwin') {
- template = this.buildDarwinTemplate();
- } else {
- template = this.buildDefaultTemplate();
- }
+ if (process.platform === 'darwin') {
+ template = this.buildDarwinTemplate();
+ } else {
+ template = this.buildDefaultTemplate();
+ }
- const menu = Menu.buildFromTemplate(template);
- Menu.setApplicationMenu(menu);
+ const menu = Menu.buildFromTemplate(template);
+ Menu.setApplicationMenu(menu);
- return menu;
- }
+ return menu;
+ }
- setupDevelopmentEnvironment() {
- this.mainWindow.openDevTools();
- this.mainWindow.webContents.on('context-menu', (e, props) => {
- const { x, y } = props;
+ setupDevelopmentEnvironment() {
+ this.mainWindow.openDevTools();
+ this.mainWindow.webContents.on('context-menu', (e, props) => {
+ const { x, y } = props;
- Menu
+ Menu
.buildFromTemplate([{
- label: 'Inspect element',
- click: () => {
- this.mainWindow.inspectElement(x, y);
- }
- }])
+ label: 'Inspect element',
+ click: () => {
+ this.mainWindow.inspectElement(x, y);
+ }
+}])
.popup(this.mainWindow);
- });
- }
+ });
+ }
- buildDarwinTemplate() {
- const subMenuAbout = {
- label: 'Electron',
- submenu: [
+ buildDarwinTemplate() {
+ const subMenuAbout = {
+ label: 'Electron',
+ submenu: [
{ label: 'About ElectronReact', selector: 'orderFrontStandardAboutPanel:' },
{ type: 'separator' },
{ label: 'Services', submenu: [] },
@@ -55,11 +55,11 @@ export default class MenuBuilder {
{ label: 'Show All', selector: 'unhideAllApplications:' },
{ type: 'separator' },
{ label: 'Quit', accelerator: 'Command+Q', click: () => { app.quit(); } }
- ]
- };
- const subMenuEdit = {
- label: 'Edit',
- submenu: [
+ ]
+ };
+ const subMenuEdit = {
+ label: 'Edit',
+ submenu: [
{ label: 'Undo', accelerator: 'Command+Z', selector: 'undo:' },
{ label: 'Redo', accelerator: 'Shift+Command+Z', selector: 'redo:' },
{ type: 'separator' },
@@ -67,119 +67,119 @@ export default class MenuBuilder {
{ label: 'Copy', accelerator: 'Command+C', selector: 'copy:' },
{ label: 'Paste', accelerator: 'Command+V', selector: 'paste:' },
{ label: 'Select All', accelerator: 'Command+A', selector: 'selectAll:' }
- ]
- };
- const subMenuViewDev = {
- label: 'View',
- submenu: [
+ ]
+ };
+ const subMenuViewDev = {
+ label: 'View',
+ submenu: [
{ label: 'Reload', accelerator: 'Command+R', click: () => { this.mainWindow.webContents.reload(); } },
{ label: 'Toggle Full Screen', accelerator: 'Ctrl+Command+F', click: () => { this.mainWindow.setFullScreen(!this.mainWindow.isFullScreen()); } },
{ label: 'Toggle Developer Tools', accelerator: 'Alt+Command+I', click: () => { this.mainWindow.toggleDevTools(); } }
- ]
- };
- const subMenuViewProd = {
- label: 'View',
- submenu: [
+ ]
+ };
+ const subMenuViewProd = {
+ label: 'View',
+ submenu: [
{ label: 'Toggle Full Screen', accelerator: 'Ctrl+Command+F', click: () => { this.mainWindow.setFullScreen(!this.mainWindow.isFullScreen()); } }
- ]
- };
- const subMenuWindow = {
- label: 'Window',
- submenu: [
+ ]
+ };
+ const subMenuWindow = {
+ label: 'Window',
+ submenu: [
{ label: 'Minimize', accelerator: 'Command+M', selector: 'performMiniaturize:' },
{ label: 'Close', accelerator: 'Command+W', selector: 'performClose:' },
{ type: 'separator' },
{ label: 'Bring All to Front', selector: 'arrangeInFront:' }
- ]
- };
- const subMenuHelp = {
- label: 'Help',
- submenu: [
+ ]
+ };
+ const subMenuHelp = {
+ label: 'Help',
+ submenu: [
{ label: 'Learn More', click() { shell.openExternal('http://electron.atom.io'); } },
{ label: 'Documentation', click() { shell.openExternal('https://github.com/atom/electron/tree/master/docs#readme'); } },
{ label: 'Community Discussions', click() { shell.openExternal('https://discuss.atom.io/c/electron'); } },
{ label: 'Search Issues', click() { shell.openExternal('https://github.com/atom/electron/issues'); } }
- ]
- };
+ ]
+ };
- const subMenuView = process.env.NODE_ENV === 'development'
+ const subMenuView = process.env.NODE_ENV === 'development'
? subMenuViewDev
: subMenuViewProd;
- return [
- subMenuAbout,
- subMenuEdit,
- subMenuView,
- subMenuWindow,
- subMenuHelp
- ];
- }
+ return [
+ subMenuAbout,
+ subMenuEdit,
+ subMenuView,
+ subMenuWindow,
+ subMenuHelp
+ ];
+ }
- buildDefaultTemplate() {
- const templateDefault = [{
- label: '&File',
- submenu: [{
- label: '&Open',
- accelerator: 'Ctrl+O'
- }, {
- label: '&Close',
- accelerator: 'Ctrl+W',
- click: () => {
- this.mainWindow.close();
- }
- }]
- }, {
- label: '&View',
- submenu: (process.env.NODE_ENV === 'development') ? [{
- label: '&Reload',
- accelerator: 'Ctrl+R',
- click: () => {
- this.mainWindow.webContents.reload();
- }
- }, {
- label: 'Toggle &Full Screen',
- accelerator: 'F11',
- click: () => {
- this.mainWindow.setFullScreen(!this.mainWindow.isFullScreen());
- }
- }, {
- label: 'Toggle &Developer Tools',
- accelerator: 'Alt+Ctrl+I',
- click: () => {
- this.mainWindow.toggleDevTools();
- }
- }] : [{
- label: 'Toggle &Full Screen',
- accelerator: 'F11',
- click: () => {
- this.mainWindow.setFullScreen(!this.mainWindow.isFullScreen());
- }
- }]
- }, {
- label: 'Help',
- submenu: [{
- label: 'Learn More',
- click() {
- shell.openExternal('http://electron.atom.io');
- }
- }, {
- label: 'Documentation',
- click() {
- shell.openExternal('https://github.com/atom/electron/tree/master/docs#readme');
- }
- }, {
- label: 'Community Discussions',
- click() {
- shell.openExternal('https://discuss.atom.io/c/electron');
- }
- }, {
- label: 'Search Issues',
- click() {
- shell.openExternal('https://github.com/atom/electron/issues');
- }
- }]
- }];
+ buildDefaultTemplate() {
+ const templateDefault = [{
+ label: '&File',
+ submenu: [{
+ label: '&Open',
+ accelerator: 'Ctrl+O'
+ }, {
+ label: '&Close',
+ accelerator: 'Ctrl+W',
+ click: () => {
+ this.mainWindow.close();
+ }
+ }]
+ }, {
+ label: '&View',
+ submenu: (process.env.NODE_ENV === 'development') ? [{
+ label: '&Reload',
+ accelerator: 'Ctrl+R',
+ click: () => {
+ this.mainWindow.webContents.reload();
+ }
+ }, {
+ label: 'Toggle &Full Screen',
+ accelerator: 'F11',
+ click: () => {
+ this.mainWindow.setFullScreen(!this.mainWindow.isFullScreen());
+ }
+ }, {
+ label: 'Toggle &Developer Tools',
+ accelerator: 'Alt+Ctrl+I',
+ click: () => {
+ this.mainWindow.toggleDevTools();
+ }
+ }] : [{
+ label: 'Toggle &Full Screen',
+ accelerator: 'F11',
+ click: () => {
+ this.mainWindow.setFullScreen(!this.mainWindow.isFullScreen());
+ }
+ }]
+ }, {
+ label: 'Help',
+ submenu: [{
+ label: 'Learn More',
+ click() {
+ shell.openExternal('http://electron.atom.io');
+ }
+ }, {
+ label: 'Documentation',
+ click() {
+ shell.openExternal('https://github.com/atom/electron/tree/master/docs#readme');
+ }
+ }, {
+ label: 'Community Discussions',
+ click() {
+ shell.openExternal('https://discuss.atom.io/c/electron');
+ }
+ }, {
+ label: 'Search Issues',
+ click() {
+ shell.openExternal('https://github.com/atom/electron/issues');
+ }
+ }]
+ }];
- return templateDefault;
- }
+ return templateDefault;
+ }
}
diff --git a/app/reducers/index.js b/app/reducers/index.js
index 7ce1cd0..30064ba 100644
--- a/app/reducers/index.js
+++ b/app/reducers/index.js
@@ -2,7 +2,7 @@ import { combineReducers } from 'redux';
import { routerReducer as routing } from 'react-router-redux';
const rootReducer = combineReducers({
- routing
+ routing
});
export default rootReducer;
diff --git a/app/routes.js b/app/routes.js
index a5ae039..a826533 100644
--- a/app/routes.js
+++ b/app/routes.js
@@ -5,7 +5,7 @@ import HomePage from './containers/HomePage';
export default (
-
-
-
+
+
+
);
diff --git a/app/store/configureStore.development.js b/app/store/configureStore.development.js
index 7491ed4..3d62b06 100644
--- a/app/store/configureStore.development.js
+++ b/app/store/configureStore.development.js
@@ -7,50 +7,50 @@ import rootReducer from '../reducers';
export default (initialState = {}) => {
// Redux Configuration
- const middleware = [];
- const enhancers = [];
+ const middleware = [];
+ const enhancers = [];
// Thunk Middleware
- middleware.push(thunk);
+ middleware.push(thunk);
// Logging Middleware
- const logger = createLogger({
- level: 'info',
- collapsed: true
- });
- middleware.push(logger);
+ const logger = createLogger({
+ level: 'info',
+ collapsed: true
+ });
+ middleware.push(logger);
// Router Middleware
- const router = routerMiddleware(hashHistory);
- middleware.push(router);
+ const router = routerMiddleware(hashHistory);
+ middleware.push(router);
// Redux DevTools Configuration
- const actionCreators = {
+ const actionCreators = {
- push,
- };
+ push,
+ };
// If Redux DevTools Extension is installed use it, otherwise use Redux compose
/* eslint-disable no-underscore-dangle */
- const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
+ const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__
? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({
// Options: http://zalmoxisus.github.io/redux-devtools-extension/API/Arguments.html
- actionCreators,
- })
+ actionCreators,
+})
: compose;
/* eslint-enable no-underscore-dangle */
// Apply Middleware & Compose Enhancers
- enhancers.push(applyMiddleware(...middleware));
- const enhancer = composeEnhancers(...enhancers);
+ enhancers.push(applyMiddleware(...middleware));
+ const enhancer = composeEnhancers(...enhancers);
// Create Store
- const store = createStore(rootReducer, initialState, enhancer);
+ const store = createStore(rootReducer, initialState, enhancer);
- if (module.hot) {
- module.hot.accept('../reducers', () =>
+ if (module.hot) {
+ module.hot.accept('../reducers', () =>
store.replaceReducer(require('../reducers')) // eslint-disable-line global-require
);
- }
+ }
- return store;
+ return store;
};
diff --git a/app/store/configureStore.js b/app/store/configureStore.js
index eca511f..a56feae 100644
--- a/app/store/configureStore.js
+++ b/app/store/configureStore.js
@@ -1,5 +1,5 @@
if (process.env.NODE_ENV === 'production') {
- module.exports = require('./configureStore.production'); // eslint-disable-line global-require
+ module.exports = require('./configureStore.production'); // eslint-disable-line global-require
} else {
- module.exports = require('./configureStore.development'); // eslint-disable-line global-require
+ module.exports = require('./configureStore.development'); // eslint-disable-line global-require
}
diff --git a/package.json b/package.json
index 1994039..e509549 100644
--- a/package.json
+++ b/package.json
@@ -150,6 +150,7 @@
"html-webpack-plugin": "^2.28.0",
"identity-obj-proxy": "^3.0.0",
"jest": "^19.0.2",
+ "jimp": "^0.2.27",
"jsdom": "^9.12.0",
"minimist": "^1.2.0",
"node-sass": "^4.5.2",
diff --git a/setup.js b/setup.js
index cfffc85..8601ccf 100644
--- a/setup.js
+++ b/setup.js
@@ -12,7 +12,7 @@
module.exports = {
// remove the following files as they are mostly
// related to the sample counter page and functionality
- remove: [
+ remove: [
{ file: 'app/actions/counter.js' },
{ file: 'app/components/Counter.css' },
{ file: 'app/components/Counter.js' },
@@ -25,55 +25,55 @@ module.exports = {
{ file: 'test/reducers/counter.spec.js' },
{ file: 'CHANGELOG.md' },
{ file: 'erb-logo.png' }
- ],
+ ],
// clean the following files by either clearing them
// (by specifying {clear: true}) or by removing lines
// that match a regex pattern
- clean: [
- {
- file: 'app/reducers/index.js',
- pattern: /counter/
- },
- {
- file: 'app/store/configureStore.development.js',
- replace: [
+ clean: [
+ {
+ file: 'app/reducers/index.js',
+ pattern: /counter/
+ },
+ {
+ file: 'app/store/configureStore.development.js',
+ replace: [
{ pattern: /\?: counterStateType/, substitute: '' },
{ pattern: /^.*import type.*$/, substitute: '' },
{ pattern: /^.*counterActions.*$/, substitute: '' }
- ]
- },
- {
- file: 'app/store/configureStore.production.js',
- replace: [
+ ]
+ },
+ {
+ file: 'app/store/configureStore.production.js',
+ replace: [
{ pattern: /\?: counterStateType/, substitute: '' },
{ pattern: /^.*import type.*$/, substitute: '' },
- ]
- },
- {
- file: 'app/app.global.css',
- clear: true
- },
- {
- file: 'app/routes.js',
- pattern: /CounterPage/
- },
- {
- file: 'README.md',
- clear: true
- },
- {
- file: 'app/components/Home.js',
- pattern: /(h2|Link to)/
- }
- ],
+ ]
+ },
+ {
+ file: 'app/app.global.css',
+ clear: true
+ },
+ {
+ file: 'app/routes.js',
+ pattern: /CounterPage/
+ },
+ {
+ file: 'README.md',
+ clear: true
+ },
+ {
+ file: 'app/components/Home.js',
+ pattern: /(h2|Link to)/
+ }
+ ],
// add the following files to the project, mostly
// related to .gitkeep for version control
- add: [
+ add: [
{ file: 'app/actions/.gitkeep' },
{ file: 'test/actions/.gitkeep' },
{ file: 'test/components/.gitkeep' },
{ file: 'test/containers/.gitkeep' },
{ file: 'test/reducers/.gitkeep' },
{ file: 'test/e2e/.gitkeep' }
- ]
+ ]
};
diff --git a/test/example.js b/test/example.js
index f71bd77..3b6e147 100644
--- a/test/example.js
+++ b/test/example.js
@@ -1,7 +1,7 @@
/* eslint-disable func-names */
describe('description', () => {
- it('should have description', () => {
- expect(1 + 2).toBe(3);
- });
+ it('should have description', () => {
+ expect(1 + 2).toBe(3);
+ });
});
diff --git a/test/setup.js b/test/setup.js
index efc3e13..2982c1c 100644
--- a/test/setup.js
+++ b/test/setup.js
@@ -4,13 +4,13 @@ global.document = jsdom('');
global.window = document.defaultView;
global.navigator = global.window.navigator;
window.localStorage = window.sessionStorage = {
- getItem(key) {
- return this[key];
- },
- setItem(key, value) {
- this[key] = value;
- },
- removeItem(key) {
- this[key] = undefined;
- },
+ getItem(key) {
+ return this[key];
+ },
+ setItem(key, value) {
+ this[key] = value;
+ },
+ removeItem(key) {
+ this[key] = undefined;
+ },
};
diff --git a/webpack.config.base.js b/webpack.config.base.js
index 7e5b79b..82c5dc4 100644
--- a/webpack.config.base.js
+++ b/webpack.config.base.js
@@ -7,40 +7,40 @@ import webpack from 'webpack';
import { dependencies as externals } from './app/package.json';
export default {
- externals: Object.keys(externals || {}),
+ externals: Object.keys(externals || {}),
- module: {
- rules: [{
- test: /\.jsx?$/,
- exclude: /node_modules/,
- use: {
- loader: 'babel-loader',
- options: {
- cacheDirectory: true
- }
- }
- }]
- },
+ module: {
+ rules: [{
+ test: /\.jsx?$/,
+ exclude: /node_modules/,
+ use: {
+ loader: 'babel-loader',
+ options: {
+ cacheDirectory: true
+ }
+ }
+ }]
+ },
- output: {
- path: path.join(__dirname, 'app'),
- filename: 'bundle.js',
+ output: {
+ path: path.join(__dirname, 'app'),
+ filename: 'bundle.js',
// https://github.com/webpack/webpack/issues/1114
- libraryTarget: 'commonjs2'
- },
+ libraryTarget: 'commonjs2'
+ },
/**
* Determine the array of extensions that should be used to resolve modules.
*/
- resolve: {
- extensions: ['.js', '.jsx', '.json'],
- modules: [
- path.join(__dirname, 'app'),
- 'node_modules',
- ],
- },
+ resolve: {
+ extensions: ['.js', '.jsx', '.json'],
+ modules: [
+ path.join(__dirname, 'app'),
+ 'node_modules',
+ ],
+ },
- plugins: [
- new webpack.NamedModulesPlugin(),
- ],
+ plugins: [
+ new webpack.NamedModulesPlugin(),
+ ],
};
diff --git a/webpack.config.main.prod.js b/webpack.config.main.prod.js
index 0567da2..929c4cf 100644
--- a/webpack.config.main.prod.js
+++ b/webpack.config.main.prod.js
@@ -8,23 +8,23 @@ import BabiliPlugin from 'babili-webpack-plugin';
import baseConfig from './webpack.config.base';
export default merge.smart(baseConfig, {
- devtool: 'source-map',
+ devtool: 'source-map',
- target: 'electron-main',
+ target: 'electron-main',
- entry: ['babel-polyfill', './app/main.development'],
+ entry: ['babel-polyfill', './app/main.development'],
// 'main.js' in root
- output: {
- path: __dirname,
- filename: './app/main.js'
- },
+ output: {
+ path: __dirname,
+ filename: './app/main.js'
+ },
- plugins: [
+ plugins: [
/**
* Babli is an ES6+ aware minifier based on the Babel toolchain (beta)
*/
- new BabiliPlugin(),
+ new BabiliPlugin(),
/**
* Create global constants which can be configured at compile time.
@@ -35,18 +35,18 @@ export default merge.smart(baseConfig, {
* NODE_ENV should be production so that modules do not perform certain
* development checks
*/
- new webpack.DefinePlugin({
- 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'production')
- })
- ],
+ new webpack.DefinePlugin({
+ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'production')
+ })
+ ],
/**
* Disables webpack processing of __dirname and __filename.
* If you run the bundle in node.js it falls back to these values of node.js.
* https://github.com/webpack/webpack/issues/2010
*/
- node: {
- __dirname: false,
- __filename: false
- },
+ node: {
+ __dirname: false,
+ __filename: false
+ },
});
diff --git a/webpack.config.renderer.dev.dll.js b/webpack.config.renderer.dev.dll.js
index 8faa7c0..d1e039f 100644
--- a/webpack.config.renderer.dev.dll.js
+++ b/webpack.config.renderer.dev.dll.js
@@ -11,174 +11,174 @@ import { dependencies } from './package.json';
const dist = path.resolve(process.cwd(), 'dll');
export default merge.smart(baseConfig, {
- context: process.cwd(),
+ context: process.cwd(),
- devtool: 'eval',
+ devtool: 'eval',
- target: 'electron-renderer',
+ target: 'electron-renderer',
- externals: ['fsevents', 'crypto-browserify'],
+ externals: ['fsevents', 'crypto-browserify'],
/**
* @HACK: Copy and pasted from renderer dev config. Consider merging these
* rules into the base config. May cause breaking changes.
*/
- module: {
- rules: [
- {
- test: /\.global\.css$/,
- use: [
- {
- loader: 'style-loader'
- },
- {
- loader: 'css-loader',
- options: {
- sourceMap: true,
- },
- }
- ]
- },
- {
- test: /^((?!\.global).)*\.css$/,
- use: [
- {
- loader: 'style-loader'
- },
- {
- loader: 'css-loader',
- options: {
- modules: true,
- sourceMap: true,
- importLoaders: 1,
- localIdentName: '[name]__[local]__[hash:base64:5]',
- }
- },
- ]
- },
+ module: {
+ rules: [
+ {
+ test: /\.global\.css$/,
+ use: [
+ {
+ loader: 'style-loader'
+ },
+ {
+ loader: 'css-loader',
+ options: {
+ sourceMap: true,
+ },
+ }
+ ]
+ },
+ {
+ test: /^((?!\.global).)*\.css$/,
+ use: [
+ {
+ loader: 'style-loader'
+ },
+ {
+ loader: 'css-loader',
+ options: {
+ modules: true,
+ sourceMap: true,
+ importLoaders: 1,
+ localIdentName: '[name]__[local]__[hash:base64:5]',
+ }
+ },
+ ]
+ },
// Add SASS support - compile all .global.scss files and pipe it to style.css
- {
- test: /\.global\.scss$/,
- use: [
- {
- loader: 'style-loader'
- },
- {
- loader: 'css-loader',
- options: {
- sourceMap: true,
- },
- },
- {
- loader: 'sass-loader'
- }
- ]
- },
+ {
+ test: /\.global\.scss$/,
+ use: [
+ {
+ loader: 'style-loader'
+ },
+ {
+ loader: 'css-loader',
+ options: {
+ sourceMap: true,
+ },
+ },
+ {
+ loader: 'sass-loader'
+ }
+ ]
+ },
// Add SASS support - compile all other .scss files and pipe it to style.css
- {
- test: /^((?!\.global).)*\.scss$/,
- use: [
- {
- loader: 'style-loader'
- },
- {
- loader: 'css-loader',
- options: {
- modules: true,
- sourceMap: true,
- importLoaders: 1,
- localIdentName: '[name]__[local]__[hash:base64:5]',
- }
- },
- {
- loader: 'sass-loader'
- }
- ]
- },
+ {
+ test: /^((?!\.global).)*\.scss$/,
+ use: [
+ {
+ loader: 'style-loader'
+ },
+ {
+ loader: 'css-loader',
+ options: {
+ modules: true,
+ sourceMap: true,
+ importLoaders: 1,
+ localIdentName: '[name]__[local]__[hash:base64:5]',
+ }
+ },
+ {
+ loader: 'sass-loader'
+ }
+ ]
+ },
// WOFF Font
- {
- test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
- use: {
- loader: 'url-loader',
- options: {
- limit: 10000,
- mimetype: 'application/font-woff',
- }
- },
- },
+ {
+ test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
+ use: {
+ loader: 'url-loader',
+ options: {
+ limit: 10000,
+ mimetype: 'application/font-woff',
+ }
+ },
+ },
// WOFF2 Font
- {
- test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
- use: {
- loader: 'url-loader',
- options: {
- limit: 10000,
- mimetype: 'application/font-woff',
- }
- }
- },
+ {
+ test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
+ use: {
+ loader: 'url-loader',
+ options: {
+ limit: 10000,
+ mimetype: 'application/font-woff',
+ }
+ }
+ },
// TTF Font
- {
- test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
- use: {
- loader: 'url-loader',
- options: {
- limit: 10000,
- mimetype: 'application/octet-stream'
- }
- }
- },
+ {
+ test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
+ use: {
+ loader: 'url-loader',
+ options: {
+ limit: 10000,
+ mimetype: 'application/octet-stream'
+ }
+ }
+ },
// EOT Font
- {
- test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
- use: 'file-loader',
- },
+ {
+ test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
+ use: 'file-loader',
+ },
// SVG Font
- {
- test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
- use: {
- loader: 'url-loader',
- options: {
- limit: 10000,
- mimetype: 'image/svg+xml',
- }
- }
- },
+ {
+ test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
+ use: {
+ loader: 'url-loader',
+ options: {
+ limit: 10000,
+ mimetype: 'image/svg+xml',
+ }
+ }
+ },
// Common Image Formats
- {
- test: /\.(?:ico|gif|png|jpg|jpeg|webp)$/,
- use: 'url-loader',
- }
- ]
- },
+ {
+ test: /\.(?:ico|gif|png|jpg|jpeg|webp)$/,
+ use: 'url-loader',
+ }
+ ]
+ },
- resolve: {
- modules: [
- 'app',
- 'node_modules',
- ],
- },
+ resolve: {
+ modules: [
+ 'app',
+ 'node_modules',
+ ],
+ },
- entry: {
- vendor: [
- 'babel-polyfill',
- ...Object.keys(dependencies)
- ]
+ entry: {
+ vendor: [
+ 'babel-polyfill',
+ ...Object.keys(dependencies)
+ ]
.filter(dependency => dependency !== 'font-awesome'),
- },
+ },
- output: {
- library: 'vendor',
- path: dist,
- filename: '[name].dll.js',
- libraryTarget: 'var'
- },
+ output: {
+ library: 'vendor',
+ path: dist,
+ filename: '[name].dll.js',
+ libraryTarget: 'var'
+ },
- plugins: [
- new webpack.DllPlugin({
- path: path.join(dist, '[name].json'),
- name: '[name]',
- }),
+ plugins: [
+ new webpack.DllPlugin({
+ path: path.join(dist, '[name].json'),
+ name: '[name]',
+ }),
/**
* Create global constants which can be configured at compile time.
@@ -189,18 +189,18 @@ export default merge.smart(baseConfig, {
* NODE_ENV should be production so that modules do not perform certain
* development checks
*/
- new webpack.DefinePlugin({
- 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development')
- }),
+ new webpack.DefinePlugin({
+ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development')
+ }),
- new webpack.LoaderOptionsPlugin({
- debug: true,
- options: {
- context: path.resolve(process.cwd(), 'app'),
- output: {
- path: path.resolve(process.cwd(), 'dll'),
- },
- },
- })
- ],
+ new webpack.LoaderOptionsPlugin({
+ debug: true,
+ options: {
+ context: path.resolve(process.cwd(), 'app'),
+ output: {
+ path: path.resolve(process.cwd(), 'dll'),
+ },
+ },
+ })
+ ],
});
diff --git a/webpack.config.renderer.dev.js b/webpack.config.renderer.dev.js
index 4b20996..0611040 100644
--- a/webpack.config.renderer.dev.js
+++ b/webpack.config.renderer.dev.js
@@ -25,172 +25,172 @@ const manifest = path.resolve(dll, 'vendor.json');
* Warn if the DLL is not built
*/
if (!(fs.existsSync(dll) && fs.existsSync(manifest))) {
- console.log(chalk.black.bgYellow.bold(
+ console.log(chalk.black.bgYellow.bold(
'The DLL files are missing. Sit back while we build them for you with "npm run build-dll"'
));
- execSync('npm run build-dll');
+ execSync('npm run build-dll');
}
export default merge.smart(baseConfig, {
- devtool: 'inline-source-map',
+ devtool: 'inline-source-map',
- target: 'electron-renderer',
+ target: 'electron-renderer',
- entry: [
- 'react-hot-loader/patch',
- `webpack-dev-server/client?http://localhost:${port}/`,
- 'webpack/hot/only-dev-server',
- path.join(__dirname, 'app/index.js'),
- ],
+ entry: [
+ 'react-hot-loader/patch',
+ `webpack-dev-server/client?http://localhost:${port}/`,
+ 'webpack/hot/only-dev-server',
+ path.join(__dirname, 'app/index.js'),
+ ],
- output: {
- publicPath: `http://localhost:${port}/dist/`
- },
+ output: {
+ publicPath: `http://localhost:${port}/dist/`
+ },
- module: {
- rules: [
- {
- test: /\.global\.css$/,
- use: [
- {
- loader: 'style-loader'
- },
- {
- loader: 'css-loader',
- options: {
- sourceMap: true,
- },
- }
- ]
- },
- {
- test: /^((?!\.global).)*\.css$/,
- use: [
- {
- loader: 'style-loader'
- },
- {
- loader: 'css-loader',
- options: {
- modules: true,
- sourceMap: true,
- importLoaders: 1,
- localIdentName: '[name]__[local]__[hash:base64:5]',
- }
- },
- ]
- },
+ module: {
+ rules: [
+ {
+ test: /\.global\.css$/,
+ use: [
+ {
+ loader: 'style-loader'
+ },
+ {
+ loader: 'css-loader',
+ options: {
+ sourceMap: true,
+ },
+ }
+ ]
+ },
+ {
+ test: /^((?!\.global).)*\.css$/,
+ use: [
+ {
+ loader: 'style-loader'
+ },
+ {
+ loader: 'css-loader',
+ options: {
+ modules: true,
+ sourceMap: true,
+ importLoaders: 1,
+ localIdentName: '[name]__[local]__[hash:base64:5]',
+ }
+ },
+ ]
+ },
// Add SASS support - compile all .global.scss files and pipe it to style.css
- {
- test: /\.global\.scss$/,
- use: [
- {
- loader: 'style-loader'
- },
- {
- loader: 'css-loader',
- options: {
- sourceMap: true,
- },
- },
- {
- loader: 'sass-loader'
- }
- ]
- },
+ {
+ test: /\.global\.scss$/,
+ use: [
+ {
+ loader: 'style-loader'
+ },
+ {
+ loader: 'css-loader',
+ options: {
+ sourceMap: true,
+ },
+ },
+ {
+ loader: 'sass-loader'
+ }
+ ]
+ },
// Add SASS support - compile all other .scss files and pipe it to style.css
- {
- test: /^((?!\.global).)*\.scss$/,
- use: [
- {
- loader: 'style-loader'
- },
- {
- loader: 'css-loader',
- options: {
- modules: true,
- sourceMap: true,
- importLoaders: 1,
- localIdentName: '[name]__[local]__[hash:base64:5]',
- }
- },
- {
- loader: 'sass-loader'
- }
- ]
- },
+ {
+ test: /^((?!\.global).)*\.scss$/,
+ use: [
+ {
+ loader: 'style-loader'
+ },
+ {
+ loader: 'css-loader',
+ options: {
+ modules: true,
+ sourceMap: true,
+ importLoaders: 1,
+ localIdentName: '[name]__[local]__[hash:base64:5]',
+ }
+ },
+ {
+ loader: 'sass-loader'
+ }
+ ]
+ },
// WOFF Font
- {
- test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
- use: {
- loader: 'url-loader',
- options: {
- limit: 10000,
- mimetype: 'application/font-woff',
- }
- },
- },
+ {
+ test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
+ use: {
+ loader: 'url-loader',
+ options: {
+ limit: 10000,
+ mimetype: 'application/font-woff',
+ }
+ },
+ },
// WOFF2 Font
- {
- test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
- use: {
- loader: 'url-loader',
- options: {
- limit: 10000,
- mimetype: 'application/font-woff',
- }
- }
- },
+ {
+ test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
+ use: {
+ loader: 'url-loader',
+ options: {
+ limit: 10000,
+ mimetype: 'application/font-woff',
+ }
+ }
+ },
// TTF Font
- {
- test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
- use: {
- loader: 'url-loader',
- options: {
- limit: 10000,
- mimetype: 'application/octet-stream'
- }
- }
- },
+ {
+ test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
+ use: {
+ loader: 'url-loader',
+ options: {
+ limit: 10000,
+ mimetype: 'application/octet-stream'
+ }
+ }
+ },
// EOT Font
- {
- test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
- use: 'file-loader',
- },
+ {
+ test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
+ use: 'file-loader',
+ },
// SVG Font
- {
- test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
- use: {
- loader: 'url-loader',
- options: {
- limit: 10000,
- mimetype: 'image/svg+xml',
- }
- }
- },
+ {
+ test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
+ use: {
+ loader: 'url-loader',
+ options: {
+ limit: 10000,
+ mimetype: 'image/svg+xml',
+ }
+ }
+ },
// Common Image Formats
- {
- test: /\.(?:ico|gif|png|jpg|jpeg|webp)$/,
- use: 'url-loader',
- }
- ]
- },
+ {
+ test: /\.(?:ico|gif|png|jpg|jpeg|webp)$/,
+ use: 'url-loader',
+ }
+ ]
+ },
- plugins: [
- new webpack.DllReferencePlugin({
- context: process.cwd(),
- manifest: require(manifest),
- sourceType: 'var',
- }),
+ plugins: [
+ new webpack.DllReferencePlugin({
+ context: process.cwd(),
+ manifest: require(manifest),
+ sourceType: 'var',
+ }),
/**
* https://webpack.js.org/concepts/hot-module-replacement/
*/
- new webpack.HotModuleReplacementPlugin({
- multiStep: true
- }),
+ new webpack.HotModuleReplacementPlugin({
+ multiStep: true
+ }),
- new webpack.NoEmitOnErrorsPlugin(),
+ new webpack.NoEmitOnErrorsPlugin(),
/**
* Create global constants which can be configured at compile time.
@@ -204,48 +204,48 @@ export default merge.smart(baseConfig, {
* By default, use 'development' as NODE_ENV. This can be overriden with
* 'staging', for example, by changing the ENV variables in the npm scripts
*/
- new webpack.DefinePlugin({
- 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development')
- }),
+ new webpack.DefinePlugin({
+ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'development')
+ }),
- new webpack.LoaderOptionsPlugin({
- debug: true
- }),
+ new webpack.LoaderOptionsPlugin({
+ debug: true
+ }),
- new ExtractTextPlugin({
- filename: '[name].css'
- })
- ],
+ new ExtractTextPlugin({
+ filename: '[name].css'
+ })
+ ],
- devServer: {
- port,
- publicPath,
- compress: true,
- noInfo: true,
- stats: 'errors-only',
- inline: true,
- lazy: false,
- hot: true,
- headers: { 'Access-Control-Allow-Origin': '*' },
- contentBase: path.join(__dirname, 'dist'),
- watchOptions: {
- aggregateTimeout: 300,
- poll: 100
- },
- historyApiFallback: {
- verbose: true,
- disableDotRule: false,
- },
- setup() {
- if (process.env.START_HOT) {
- spawn(
+ devServer: {
+ port,
+ publicPath,
+ compress: true,
+ noInfo: true,
+ stats: 'errors-only',
+ inline: true,
+ lazy: false,
+ hot: true,
+ headers: { 'Access-Control-Allow-Origin': '*' },
+ contentBase: path.join(__dirname, 'dist'),
+ watchOptions: {
+ aggregateTimeout: 300,
+ poll: 100
+ },
+ historyApiFallback: {
+ verbose: true,
+ disableDotRule: false,
+ },
+ setup() {
+ if (process.env.START_HOT) {
+ spawn(
'npm',
['run', 'start-hot-renderer'],
{ shell: true, env: process.env, stdio: 'inherit' }
)
.on('close', code => process.exit(code))
.on('error', spawnError => console.error(spawnError));
- }
- }
- },
+ }
+ }
+ },
});
diff --git a/webpack.config.renderer.prod.js b/webpack.config.renderer.prod.js
index 02fc001..20672da 100644
--- a/webpack.config.renderer.prod.js
+++ b/webpack.config.renderer.prod.js
@@ -11,131 +11,131 @@ import BabiliPlugin from 'babili-webpack-plugin';
import baseConfig from './webpack.config.base';
export default merge.smart(baseConfig, {
- devtool: 'source-map',
+ devtool: 'source-map',
- target: 'electron-renderer',
+ target: 'electron-renderer',
- entry: ['babel-polyfill', './app/index'],
+ entry: ['babel-polyfill', './app/index'],
- output: {
- path: path.join(__dirname, 'app/dist'),
- publicPath: '../dist/'
- },
+ output: {
+ path: path.join(__dirname, 'app/dist'),
+ publicPath: '../dist/'
+ },
- module: {
- rules: [
+ module: {
+ rules: [
// Extract all .global.css to style.css as is
- {
- test: /\.global\.css$/,
- use: ExtractTextPlugin.extract({
- use: 'css-loader',
- fallback: 'style-loader',
- })
- },
+ {
+ test: /\.global\.css$/,
+ use: ExtractTextPlugin.extract({
+ use: 'css-loader',
+ fallback: 'style-loader',
+ })
+ },
// Pipe other styles through css modules and append to style.css
- {
- test: /^((?!\.global).)*\.css$/,
- use: ExtractTextPlugin.extract({
- use: {
- loader: 'css-loader',
- options: {
- modules: true,
- importLoaders: 1,
- localIdentName: '[name]__[local]__[hash:base64:5]',
- }
- }
- }),
- },
+ {
+ test: /^((?!\.global).)*\.css$/,
+ use: ExtractTextPlugin.extract({
+ use: {
+ loader: 'css-loader',
+ options: {
+ modules: true,
+ importLoaders: 1,
+ localIdentName: '[name]__[local]__[hash:base64:5]',
+ }
+ }
+ }),
+ },
// Add SASS support - compile all .global.scss files and pipe it to style.css
- {
- test: /\.global\.scss$/,
- use: ExtractTextPlugin.extract({
- use: [
- {
- loader: 'css-loader'
- },
- {
- loader: 'sass-loader'
- }
- ],
- fallback: 'style-loader',
- })
- },
+ {
+ test: /\.global\.scss$/,
+ use: ExtractTextPlugin.extract({
+ use: [
+ {
+ loader: 'css-loader'
+ },
+ {
+ loader: 'sass-loader'
+ }
+ ],
+ fallback: 'style-loader',
+ })
+ },
// Add SASS support - compile all other .scss files and pipe it to style.css
- {
- test: /^((?!\.global).)*\.scss$/,
- use: ExtractTextPlugin.extract({
- use: [{
- loader: 'css-loader',
- options: {
- modules: true,
- importLoaders: 1,
- localIdentName: '[name]__[local]__[hash:base64:5]',
- }
- },
- {
- loader: 'sass-loader'
- }]
- }),
- },
+ {
+ test: /^((?!\.global).)*\.scss$/,
+ use: ExtractTextPlugin.extract({
+ use: [{
+ loader: 'css-loader',
+ options: {
+ modules: true,
+ importLoaders: 1,
+ localIdentName: '[name]__[local]__[hash:base64:5]',
+ }
+ },
+ {
+ loader: 'sass-loader'
+ }]
+ }),
+ },
// WOFF Font
- {
- test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
- use: {
- loader: 'url-loader',
- options: {
- limit: 10000,
- mimetype: 'application/font-woff',
- }
- },
- },
+ {
+ test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
+ use: {
+ loader: 'url-loader',
+ options: {
+ limit: 10000,
+ mimetype: 'application/font-woff',
+ }
+ },
+ },
// WOFF2 Font
- {
- test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
- use: {
- loader: 'url-loader',
- options: {
- limit: 10000,
- mimetype: 'application/font-woff',
- }
- }
- },
+ {
+ test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
+ use: {
+ loader: 'url-loader',
+ options: {
+ limit: 10000,
+ mimetype: 'application/font-woff',
+ }
+ }
+ },
// TTF Font
- {
- test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
- use: {
- loader: 'url-loader',
- options: {
- limit: 10000,
- mimetype: 'application/octet-stream'
- }
- }
- },
+ {
+ test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
+ use: {
+ loader: 'url-loader',
+ options: {
+ limit: 10000,
+ mimetype: 'application/octet-stream'
+ }
+ }
+ },
// EOT Font
- {
- test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
- use: 'file-loader',
- },
+ {
+ test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
+ use: 'file-loader',
+ },
// SVG Font
- {
- test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
- use: {
- loader: 'url-loader',
- options: {
- limit: 10000,
- mimetype: 'image/svg+xml',
- }
- }
- },
+ {
+ test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
+ use: {
+ loader: 'url-loader',
+ options: {
+ limit: 10000,
+ mimetype: 'image/svg+xml',
+ }
+ }
+ },
// Common Image Formats
- {
- test: /\.(?:ico|gif|png|jpg|jpeg|webp)$/,
- use: 'url-loader',
- }
- ]
- },
+ {
+ test: /\.(?:ico|gif|png|jpg|jpeg|webp)$/,
+ use: 'url-loader',
+ }
+ ]
+ },
- plugins: [
+ plugins: [
/**
* Create global constants which can be configured at compile time.
*
@@ -145,24 +145,24 @@ export default merge.smart(baseConfig, {
* NODE_ENV should be production so that modules do not perform certain
* development checks
*/
- new webpack.DefinePlugin({
- 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'production')
- }),
+ new webpack.DefinePlugin({
+ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || 'production')
+ }),
/**
* Babli is an ES6+ aware minifier based on the Babel toolchain (beta)
*/
- new BabiliPlugin(),
+ new BabiliPlugin(),
- new ExtractTextPlugin('style.css'),
+ new ExtractTextPlugin('style.css'),
/**
* Dynamically generate index.html page
*/
- new HtmlWebpackPlugin({
- filename: '../app.html',
- template: 'app/app.html',
- inject: false
- })
- ],
+ new HtmlWebpackPlugin({
+ filename: '../app.html',
+ template: 'app/app.html',
+ inject: false
+ })
+ ],
});
diff --git a/yarn.lock b/yarn.lock
index 6f819cd..d9d7865 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -397,7 +397,7 @@ babel-eslint@^7.2.1:
babel-types "^6.23.0"
babylon "^6.16.1"
-babel-generator@^6.18.0, babel-generator@^6.21.0, babel-generator@^6.24.0:
+babel-generator@^6.18.0, babel-generator@^6.24.0:
version "6.24.0"
resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.24.0.tgz#eba270a8cc4ce6e09a61be43465d7c62c1f87c56"
dependencies:
@@ -606,17 +606,6 @@ babel-plugin-dev-expression@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/babel-plugin-dev-expression/-/babel-plugin-dev-expression-0.2.1.tgz#d4a7beefefbb50e3f2734990a82a2486cf9eb9ee"
-babel-plugin-flow-runtime@^0.10.0:
- version "0.10.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-flow-runtime/-/babel-plugin-flow-runtime-0.10.0.tgz#de60b8c64ce0eec6b13663a129d79ec46b97cb2d"
- dependencies:
- babel-generator "^6.21.0"
- babel-traverse "^6.20.0"
- babel-types "^6.16.0"
- babylon "^6.16.1"
- camelcase "^3.0.0"
- flow-config-parser "^0.3.0"
-
babel-plugin-istanbul@^4.0.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.1.tgz#c12de0fc6fe42adfb16be56f1ad11e4a9782eca9"
@@ -1116,12 +1105,6 @@ babel-plugin-transform-remove-undefined@^0.0.5:
version "0.0.5"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.0.5.tgz#12ef11805e06e861dd2eb0c7cc041d2184b8f410"
-babel-plugin-transform-runtime@^6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee"
- dependencies:
- babel-runtime "^6.22.0"
-
babel-plugin-transform-simplify-comparison-operators@^6.8.1:
version "6.8.1"
resolved "https://registry.yarnpkg.com/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.8.1.tgz#a307088e0d1c728081777fba568f4107396ab25c"
@@ -1349,7 +1332,7 @@ babel-template@^6.16.0, babel-template@^6.22.0, babel-template@^6.23.0, babel-te
babylon "^6.11.0"
lodash "^4.2.0"
-babel-traverse@^6.18.0, babel-traverse@^6.20.0, babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1:
+babel-traverse@^6.18.0, babel-traverse@^6.22.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1:
version "6.23.1"
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.23.1.tgz#d3cb59010ecd06a97d81310065f966b699e14f48"
dependencies:
@@ -1363,7 +1346,7 @@ babel-traverse@^6.18.0, babel-traverse@^6.20.0, babel-traverse@^6.22.0, babel-tr
invariant "^2.2.0"
lodash "^4.2.0"
-babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0, babel-types@^6.23.0:
+babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0, babel-types@^6.23.0:
version "6.23.0"
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf"
dependencies:
@@ -1410,6 +1393,10 @@ big.js@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978"
+bignumber.js@^2.1.0:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-2.4.0.tgz#838a992da9f9d737e0f4b2db0be62bb09dd0c5e8"
+
binary-extensions@^1.0.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
@@ -1443,6 +1430,10 @@ bluebird@^3.1.1, bluebird@^3.4.7, bluebird@^3.5.0:
version "3.5.0"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.0.tgz#791420d7f551eea2897453a8a77653f96606d67c"
+bmp-js@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/bmp-js/-/bmp-js-0.0.1.tgz#5ad0147099d13a9f38aa7b99af1d6e78666ed37f"
+
bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0:
version "4.11.6"
resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215"
@@ -1583,6 +1574,10 @@ buffer-crc32@^0.2.1:
version "0.2.13"
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
+buffer-equal@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b"
+
buffer-shims@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
@@ -2829,6 +2824,10 @@ es6-map@^0.1.3:
es6-symbol "~3.1.1"
event-emitter "~0.3.5"
+es6-promise@^3.0.2:
+ version "3.3.1"
+ resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
+
es6-promise@^4.0.5:
version "4.1.0"
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.1.0.tgz#dda03ca8f9f89bc597e689842929de7ba8cebdf0"
@@ -2947,20 +2946,6 @@ eslint-plugin-compat@^1.0.2:
caniuse-db "1.0.30000626"
requireindex "^1.1.0"
-eslint-plugin-flowtype-errors@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype-errors/-/eslint-plugin-flowtype-errors-3.0.3.tgz#6c1d8874b91ffc65115a4744cf85020fb126725f"
- dependencies:
- babel-plugin-transform-runtime "^6.23.0"
- shelljs "^0.7.7"
- slash "^1.0.0"
-
-eslint-plugin-flowtype@^2.30.4:
- version "2.30.4"
- resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.30.4.tgz#771d6bb4578ab8598e9c58018fea2e1a22946249"
- dependencies:
- lodash "^4.15.0"
-
eslint-plugin-import@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e"
@@ -3137,6 +3122,10 @@ execa@^0.4.0:
path-key "^1.0.0"
strip-eof "^1.0.0"
+exif-parser@^0.1.9:
+ version "0.1.9"
+ resolved "https://registry.yarnpkg.com/exif-parser/-/exif-parser-0.1.9.tgz#1d087e05fd2b079e3a8eaf8ff249978cb5f6fba7"
+
exit-hook@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
@@ -3316,6 +3305,10 @@ file-loader@^0.11.0:
dependencies:
loader-utils "^1.0.2"
+file-type@^3.1.0:
+ version "3.9.0"
+ resolved "https://registry.yarnpkg.com/file-type/-/file-type-3.9.0.tgz#257a078384d1db8087bc449d107d52a52672b9e9"
+
filename-regex@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
@@ -3387,14 +3380,16 @@ flatten@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782"
-flow-config-parser@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/flow-config-parser/-/flow-config-parser-0.3.0.tgz#704916efba88cd2518ab4d8f933079571276138f"
-
font-awesome@^4.7.0:
version "4.7.0"
resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133"
+for-each@^0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.2.tgz#2c40450b9348e97f281322593ba96704b9abd4d4"
+ dependencies:
+ is-function "~1.0.0"
+
for-in@^0.1.3:
version "0.1.8"
resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
@@ -3594,7 +3589,7 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@~7.1.1:
once "^1.3.0"
path-is-absolute "^1.0.0"
-global@^4.3.0:
+global@^4.3.0, global@~4.3.0:
version "4.3.1"
resolved "https://registry.yarnpkg.com/global/-/global-4.3.1.tgz#5f757908c7cbabce54f386ae440e11e26b7916df"
dependencies:
@@ -4054,6 +4049,10 @@ invert-kv@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
+ip-regex@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-1.0.3.tgz#dc589076f659f419c222039a33316f1c7387effd"
+
ipaddr.js@1.3.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.3.0.tgz#1e03a52fdad83a8bbb2b25cbf4998b4cffcd3dec"
@@ -4145,6 +4144,10 @@ 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-function@^1.0.1, is-function@~1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5"
+
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"
@@ -4589,12 +4592,36 @@ jest@^19.0.2:
dependencies:
jest-cli "^19.0.2"
+jimp@^0.2.27:
+ version "0.2.27"
+ resolved "https://registry.yarnpkg.com/jimp/-/jimp-0.2.27.tgz#41ef5082d8b63201d54747e04fe8bcacbaf25474"
+ dependencies:
+ bignumber.js "^2.1.0"
+ bmp-js "0.0.1"
+ es6-promise "^3.0.2"
+ exif-parser "^0.1.9"
+ file-type "^3.1.0"
+ jpeg-js "^0.2.0"
+ load-bmfont "^1.2.3"
+ mime "^1.3.4"
+ pixelmatch "^4.0.0"
+ pngjs "^3.0.0"
+ read-chunk "^1.0.1"
+ request "^2.65.0"
+ stream-to-buffer "^0.1.0"
+ tinycolor2 "^1.1.2"
+ url-regex "^3.0.0"
+
jodid25519@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
dependencies:
jsbn "~0.1.0"
+jpeg-js@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.2.0.tgz#53e448ec9d263e683266467e9442d2c5a2ef5482"
+
js-base64@^2.1.9:
version "2.1.9"
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce"
@@ -4771,6 +4798,18 @@ levn@^0.3.0, levn@~0.3.0:
prelude-ls "~1.1.2"
type-check "~0.3.2"
+load-bmfont@^1.2.3:
+ version "1.3.0"
+ resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.3.0.tgz#bb7e7c710de6bcafcb13cb3b8c81e0c0131ecbc9"
+ dependencies:
+ buffer-equal "0.0.1"
+ mime "^1.3.4"
+ parse-bmfont-ascii "^1.0.3"
+ parse-bmfont-binary "^1.0.5"
+ parse-bmfont-xml "^1.1.0"
+ xhr "^2.0.1"
+ xtend "^4.0.0"
+
load-json-file@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
@@ -4997,7 +5036,7 @@ lodash.uniq@^4.3.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
-lodash@^4.0.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1, lodash@^4.8.0:
+lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0, lodash@^4.5.1, lodash@^4.6.1, lodash@^4.8.0:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
@@ -5678,6 +5717,21 @@ parse-asn1@^5.0.0:
evp_bytestokey "^1.0.0"
pbkdf2 "^3.0.3"
+parse-bmfont-ascii@^1.0.3:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz#11ac3c3ff58f7c2020ab22769079108d4dfa0285"
+
+parse-bmfont-binary@^1.0.5:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz#d038b476d3e9dd9db1e11a0b0e53a22792b69006"
+
+parse-bmfont-xml@^1.1.0:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/parse-bmfont-xml/-/parse-bmfont-xml-1.1.3.tgz#d6b66a371afd39c5007d9f0eeb262a4f2cce7b7c"
+ dependencies:
+ xml-parse-from-string "^1.0.0"
+ xml2js "^0.4.5"
+
parse-color@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/parse-color/-/parse-color-1.0.0.tgz#7b748b95a83f03f16a94f535e52d7f3d94658619"
@@ -5693,6 +5747,13 @@ parse-glob@^3.0.4:
is-extglob "^1.0.0"
is-glob "^2.0.0"
+parse-headers@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.1.tgz#6ae83a7aa25a9d9b700acc28698cd1f1ed7e9536"
+ dependencies:
+ for-each "^0.3.2"
+ trim "0.0.1"
+
parse-json@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
@@ -5783,6 +5844,12 @@ pinkie@^2.0.0:
version "2.0.4"
resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+pixelmatch@^4.0.0:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854"
+ dependencies:
+ pngjs "^3.0.0"
+
pkg-dir@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
@@ -5813,6 +5880,10 @@ pluralize@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
+pngjs@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.0.1.tgz#b15086ac1ac47298c8fd3f9cdf364fa9879c4db6"
+
portfinder@^1.0.9:
version "1.0.13"
resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9"
@@ -6309,6 +6380,10 @@ react@^15.4.2:
loose-envify "^1.1.0"
object-assign "^4.1.0"
+read-chunk@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-1.0.1.tgz#5f68cab307e663f19993527d9b589cace4661194"
+
read-pkg-up@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
@@ -6720,7 +6795,7 @@ sass-loader@^6.0.3:
lodash.tail "^4.1.1"
pify "^2.3.0"
-sax@^1.2.1, sax@~1.2.1:
+sax@>=0.6.0, sax@^1.2.1, sax@~1.2.1:
version "1.2.2"
resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828"
@@ -6822,7 +6897,7 @@ shebang-regex@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
-shelljs@^0.7.5, shelljs@^0.7.7:
+shelljs@^0.7.5:
version "0.7.7"
resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1"
dependencies:
@@ -7073,6 +7148,16 @@ stream-http@^2.3.1:
to-arraybuffer "^1.0.0"
xtend "^4.0.0"
+stream-to-buffer@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/stream-to-buffer/-/stream-to-buffer-0.1.0.tgz#26799d903ab2025c9bd550ac47171b00f8dd80a9"
+ dependencies:
+ stream-to "~0.2.0"
+
+stream-to@~0.2.0:
+ version "0.2.2"
+ resolved "https://registry.yarnpkg.com/stream-to/-/stream-to-0.2.2.tgz#84306098d85fdb990b9fa300b1b3ccf55e8ef01d"
+
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"
@@ -7320,6 +7405,10 @@ timers-browserify@^2.0.2:
dependencies:
setimmediate "^1.0.4"
+tinycolor2@^1.1.2:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/tinycolor2/-/tinycolor2-1.4.1.tgz#f4fad333447bc0b07d4dc8e9209d8f39a8ac77e8"
+
tmp@0.0.28:
version "0.0.28"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.28.tgz#172735b7f614ea7af39664fa84cf0de4e515d120"
@@ -7380,6 +7469,10 @@ trim-right@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
+trim@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd"
+
truncate-utf8-bytes@^1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b"
@@ -7534,6 +7627,12 @@ url-parse@^1.1.1:
querystringify "0.0.x"
requires-port "1.0.x"
+url-regex@^3.0.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/url-regex/-/url-regex-3.2.0.tgz#dbad1e0c9e29e105dd0b1f09f6862f7fdb482724"
+ dependencies:
+ ip-regex "^1.0.1"
+
url@^0.11.0:
version "0.11.0"
resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
@@ -7881,6 +7980,15 @@ xdg-basedir@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4"
+xhr@^2.0.1:
+ version "2.4.0"
+ resolved "https://registry.yarnpkg.com/xhr/-/xhr-2.4.0.tgz#e16e66a45f869861eeefab416d5eff722dc40993"
+ dependencies:
+ global "~4.3.0"
+ is-function "^1.0.1"
+ parse-headers "^2.0.0"
+ xtend "^4.0.0"
+
xml-char-classes@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d"
@@ -7889,10 +7997,27 @@ xml-name-validator@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635"
+xml-parse-from-string@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/xml-parse-from-string/-/xml-parse-from-string-1.0.0.tgz#feba5809f3cd2d17d2e4239fa810cd0319fc5da5"
+
+xml2js@^0.4.5:
+ version "0.4.17"
+ resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.17.tgz#17be93eaae3f3b779359c795b419705a8817e868"
+ dependencies:
+ sax ">=0.6.0"
+ xmlbuilder "^4.1.0"
+
xmlbuilder@8.2.2:
version "8.2.2"
resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-8.2.2.tgz#69248673410b4ba42e1a6136551d2922335aa773"
+xmlbuilder@^4.1.0:
+ version "4.2.1"
+ resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-4.2.1.tgz#aa58a3041a066f90eaa16c2f5389ff19f3f461a5"
+ dependencies:
+ lodash "^4.0.0"
+
xmldom@0.1.x:
version "0.1.27"
resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.27.tgz#d501f97b3bdb403af8ef9ecc20573187aadac0e9"